/* * Copyright (C) 2009 Apps Organizer * * This file is part of Apps Organizer * * Apps Organizer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Apps Organizer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Apps Organizer. If not, see <http://www.gnu.org/licenses/>. */ package com.google.code.appsorganizer; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.database.Cursor; import android.database.sqlite.SQLiteCursor; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.SimpleCursorAdapter; import android.widget.ToggleButton; import com.google.code.appsorganizer.db.DatabaseHelper; import com.google.code.appsorganizer.dialogs.ChangeLogDialog; import com.google.code.appsorganizer.dialogs.FullVersionDialog; import com.google.code.appsorganizer.dialogs.GenericDialogManager; import com.google.code.appsorganizer.dialogs.ListActivityWithDialog; import com.google.code.appsorganizer.dialogs.OnOkClickListener; import com.google.code.appsorganizer.dialogs.SimpleDialog; public class SplashScreenActivity extends ListActivityWithDialog { private static final String APPS_RELOADED_FIX_RESOLUTION = "apps_reloaded_fix_resolution_3"; private static final String SHOW_START_HOW_TO = "showStartHowTo"; // private static final String SHOW_FIRST_TIME_DOWNLOAD = // "showFirstTimeDownload"; private DatabaseHelper dbHelper; private ChooseLabelDialogCreator chooseLabelDialog; private ChangeLogDialog changeLogDialog; private FullVersionDialog fullVersionDialog; private ToggleButton labelButton; private ToggleButton appButton; private OptionMenuManager optionMenuManager; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); BugReportActivity.registerExceptionHandler(this); // Debug.startMethodTracing("splash"); dbHelper = DatabaseHelper.initOrSingleton(SplashScreenActivity.this); optionMenuManager = new OptionMenuManager(SplashScreenActivity.this, dbHelper, new OnOkClickListener() { private static final long serialVersionUID = 1L; public void onClick(CharSequence charSequence, DialogInterface dialog, int which) { requeryCursor(); } }); GenericDialogManager genericDialogManager = getGenericDialogManager(); chooseLabelDialog = new ChooseLabelDialogCreator(genericDialogManager, new OnOkClickListener() { private static final long serialVersionUID = 1L; public void onClick(CharSequence charSequence, DialogInterface dialog, int which) { requeryCursor(); } }); changeLogDialog = new ChangeLogDialog(genericDialogManager); setContentView(R.layout.main); ListView listView = getListView(); listView.setClickable(true); listView.setFastScrollEnabled(true); registerForContextMenu(listView); listView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { Cursor cursor = (Cursor) getListAdapter().getItem(position); String packageName = cursor.getString(ApplicationViewBinder.PACKAGE); String name = cursor.getString(ApplicationViewBinder.NAME); applicationViewBinder.onItemClick(packageName, name); } }); labelButton = (ToggleButton) findViewById(R.id.labelButton); appButton = (ToggleButton) findViewById(R.id.appButton); labelButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { startActivity(new Intent(SplashScreenActivity.this, LabelListActivity.class)); } }); createHowToDialog(); createFirstTimeDownloadDialog(); fullVersionDialog = new FullVersionDialog(genericDialogManager); } private SimpleDialog howToDialog; private SimpleDialog firstTimeDownloadDialog; private boolean showFirstTimeDownloadDialog() { return false; // SharedPreferences settings = // getSharedPreferences("appsOrganizer_pref", 0); // boolean firstTime = settings.getBoolean(SHOW_FIRST_TIME_DOWNLOAD, // true); // // if (firstTime) { // firstTimeDownloadDialog.showDialog(); // // SharedPreferences.Editor editor = settings.edit(); // editor.putBoolean(SHOW_FIRST_TIME_DOWNLOAD, false); // editor.commit(); // } // return firstTime; } private void createFirstTimeDownloadDialog() { String msg = getString(R.string.First_time_download_message_1) + "\n" + getString(R.string.First_time_download_message_2); firstTimeDownloadDialog = new SimpleDialog(getGenericDialogManager(), getString(R.string.app_name), msg, new OnOkClickListener() { private static final long serialVersionUID = 1L; public void onClick(CharSequence charSequence, DialogInterface dialog, int which) { optionMenuManager.startDownload(); } }); firstTimeDownloadDialog.setIcon(R.drawable.icon); firstTimeDownloadDialog.setShowNegativeButton(true); } private boolean showStartHowTo() { SharedPreferences settings = getSharedPreferences("appsOrganizer_pref", 0); boolean showStartHowTo = settings.getBoolean(SHOW_START_HOW_TO, true); if (showStartHowTo) { howToDialog.showDialog(); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean(SHOW_START_HOW_TO, false); editor.commit(); } return showStartHowTo; } private void createHowToDialog() { String msg = getString(R.string.how_to_message) + "\n" + getString(R.string.how_to_message_2); howToDialog = new SimpleDialog(getGenericDialogManager(), getString(R.string.app_name), msg); howToDialog.setIcon(R.drawable.icon); howToDialog.setShowNegativeButton(false); } public static boolean firstTime = true; @Override protected void onResume() { super.onResume(); if (labelButton.isChecked()) { labelButton.setChecked(false); } if (!appButton.isChecked()) { appButton.setChecked(true); } if (firstTime) { reload(); firstTime = false; } else { initAdapter(); } BugReportActivity.showLastException(this); } private final Handler handler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.arg1 != 0) { pd.setMax(msg.arg1); } else if (msg.what == -3) { pd.setMessage(getText(R.string.preparing_apps_list)); initAdapter(); try { pd.dismiss(); } catch (IllegalArgumentException ignored) { } if (!showFirstTimeDownloadDialog()) { if (!showStartHowTo()) { if (!changeLogDialog.showDialogIfVersionChanged()) { fullVersionDialog.showDialogIfFirstTime(); } } else { changeLogDialog.saveVersion(); } } } else { pd.incrementProgressBy(1); pd.setMessage(msg.obj.toString()); } } }; private ProgressDialog pd; private ApplicationViewBinder applicationViewBinder; @Override public SimpleCursorAdapter getListAdapter() { return (SimpleCursorAdapter) super.getListAdapter(); } private void reload() { pd = new ProgressDialog(this); pd.setTitle(getText(R.string.preparing_apps_list)); pd.setMessage(getText(R.string.please_wait_loading)); pd.setIndeterminate(false); pd.setCancelable(false); pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pd.show(); Thread t = new Thread() { @Override public void run() { SharedPreferences settings = getSharedPreferences("appsOrganizer_pref", 0); boolean appsAlreadyReloaded = settings.getBoolean(APPS_RELOADED_FIX_RESOLUTION, false); if (!appsAlreadyReloaded) { SharedPreferences.Editor editor = settings.edit(); editor.putBoolean(APPS_RELOADED_FIX_RESOLUTION, true); editor.commit(); } ApplicationInfoManager.reloadAll(getPackageManager(), dbHelper, handler, !appsAlreadyReloaded, null); handler.sendEmptyMessage(-3); } }; t.start(); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; SQLiteCursor c = (SQLiteCursor) getListAdapter().getItem(info.position); ApplicationContextMenuManager.createMenu(this, menu, c.getString(1), -1); } @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); SQLiteCursor c = (SQLiteCursor) getListAdapter().getItem(info.position); ApplicationContextMenuManager.onContextItemSelected(item, c.getString(5), c.getString(2), this, chooseLabelDialog); return true; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (ApplicationContextMenuManager.onActivityResult(this, requestCode, resultCode, data)) { requeryCursor(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { return optionMenuManager.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { return optionMenuManager.onOptionsItemSelected(item); } private void requeryCursor() { SimpleCursorAdapter listAdapter = getListAdapter(); if (listAdapter != null) { Cursor cursor = listAdapter.getCursor(); if (cursor != null) { cursor.requery(); } } } private void initAdapter() { Cursor c = dbHelper.appCacheDao.getAllApps(ApplicationViewBinder.COLS); startManagingCursor(c); SimpleCursorAdapter adapter = new AppCursorAdapter(this, R.layout.app_row, c, ApplicationViewBinder.COLS, ApplicationViewBinder.VIEWS); applicationViewBinder = new ApplicationViewBinder(dbHelper, this, chooseLabelDialog); adapter.setViewBinder(applicationViewBinder); setListAdapter(adapter); } }