diff options
Diffstat (limited to 'src/com/android/settings/quicklaunch/QuickLaunchSettings.java')
-rw-r--r-- | src/com/android/settings/quicklaunch/QuickLaunchSettings.java | 347 |
1 files changed, 0 insertions, 347 deletions
diff --git a/src/com/android/settings/quicklaunch/QuickLaunchSettings.java b/src/com/android/settings/quicklaunch/QuickLaunchSettings.java deleted file mode 100644 index 4d44524..0000000 --- a/src/com/android/settings/quicklaunch/QuickLaunchSettings.java +++ /dev/null @@ -1,347 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.quicklaunch; - -import android.app.AlertDialog; -import android.app.Dialog; -import android.content.DialogInterface; -import android.content.Intent; -import android.database.ContentObserver; -import android.database.Cursor; -import android.os.Bundle; -import android.os.Handler; -import android.preference.Preference; -import android.preference.PreferenceActivity; -import android.preference.PreferenceGroup; -import android.preference.PreferenceScreen; -import android.provider.Settings.Bookmarks; -import android.util.Log; -import android.util.SparseArray; -import android.util.SparseBooleanArray; -import android.view.KeyCharacterMap; -import android.view.KeyEvent; -import android.view.View; -import android.widget.AdapterView; - -import com.android.settings.R; - -/** - * Settings activity for quick launch. - * <p> - * Shows a list of possible shortcuts, the current application each is bound to, - * and allows choosing a new bookmark for a shortcut. - */ -public class QuickLaunchSettings extends PreferenceActivity implements - AdapterView.OnItemLongClickListener, DialogInterface.OnClickListener { - - private static final String TAG = "QuickLaunchSettings"; - - private static final String KEY_SHORTCUT_CATEGORY = "shortcut_category"; - - private static final int DIALOG_CLEAR_SHORTCUT = 0; - - private static final int REQUEST_PICK_BOOKMARK = 1; - - private static final int COLUMN_SHORTCUT = 0; - private static final int COLUMN_TITLE = 1; - private static final int COLUMN_INTENT = 2; - private static final String[] sProjection = new String[] { - Bookmarks.SHORTCUT, Bookmarks.TITLE, Bookmarks.INTENT - }; - private static final String sShortcutSelection = Bookmarks.SHORTCUT + "=?"; - - private Handler mUiHandler = new Handler(); - - private static final String DEFAULT_BOOKMARK_FOLDER = "@quicklaunch"; - /** Cursor for Bookmarks provider. */ - private Cursor mBookmarksCursor; - /** Listens for changes to Bookmarks provider. */ - private BookmarksObserver mBookmarksObserver; - /** Used to keep track of which shortcuts have bookmarks. */ - private SparseBooleanArray mBookmarkedShortcuts; - - /** Preference category to hold the shortcut preferences. */ - private PreferenceGroup mShortcutGroup; - /** Mapping of a shortcut to its preference. */ - private SparseArray<ShortcutPreference> mShortcutToPreference; - - /** The bookmark title of the shortcut that is being cleared. */ - private CharSequence mClearDialogBookmarkTitle; - private static final String CLEAR_DIALOG_BOOKMARK_TITLE = "CLEAR_DIALOG_BOOKMARK_TITLE"; - /** The shortcut that is being cleared. */ - private char mClearDialogShortcut; - private static final String CLEAR_DIALOG_SHORTCUT = "CLEAR_DIALOG_SHORTCUT"; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - addPreferencesFromResource(R.xml.quick_launch_settings); - - mShortcutGroup = (PreferenceGroup) findPreference(KEY_SHORTCUT_CATEGORY); - mShortcutToPreference = new SparseArray<ShortcutPreference>(); - mBookmarksObserver = new BookmarksObserver(mUiHandler); - initShortcutPreferences(); - mBookmarksCursor = managedQuery(Bookmarks.CONTENT_URI, sProjection, null, null); - getListView().setOnItemLongClickListener(this); - } - - @Override - protected void onResume() { - super.onResume(); - getContentResolver().registerContentObserver(Bookmarks.CONTENT_URI, true, - mBookmarksObserver); - refreshShortcuts(); - } - - @Override - protected void onPause() { - super.onPause(); - getContentResolver().unregisterContentObserver(mBookmarksObserver); - } - - @Override - protected void onRestoreInstanceState(Bundle state) { - super.onRestoreInstanceState(state); - - // Restore the clear dialog's info - mClearDialogBookmarkTitle = state.getString(CLEAR_DIALOG_BOOKMARK_TITLE); - mClearDialogShortcut = (char) state.getInt(CLEAR_DIALOG_SHORTCUT, 0); - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - - // Save the clear dialog's info - outState.putCharSequence(CLEAR_DIALOG_BOOKMARK_TITLE, mClearDialogBookmarkTitle); - outState.putInt(CLEAR_DIALOG_SHORTCUT, mClearDialogShortcut); - } - - @Override - protected Dialog onCreateDialog(int id) { - switch (id) { - - case DIALOG_CLEAR_SHORTCUT: { - // Create the dialog for clearing a shortcut - return new AlertDialog.Builder(this) - .setTitle(getString(R.string.quick_launch_clear_dialog_title)) - .setIcon(android.R.drawable.ic_dialog_alert) - .setMessage(getString(R.string.quick_launch_clear_dialog_message, - mClearDialogShortcut, mClearDialogBookmarkTitle)) - .setPositiveButton(R.string.quick_launch_clear_ok_button, this) - .setNegativeButton(R.string.quick_launch_clear_cancel_button, this) - .create(); - } - } - - return super.onCreateDialog(id); - } - - @Override - protected void onPrepareDialog(int id, Dialog dialog) { - switch (id) { - - case DIALOG_CLEAR_SHORTCUT: { - AlertDialog alertDialog = (AlertDialog) dialog; - alertDialog.setMessage(getString(R.string.quick_launch_clear_dialog_message, - mClearDialogShortcut, mClearDialogBookmarkTitle)); - } - } - } - - private void showClearDialog(ShortcutPreference pref) { - - if (!pref.hasBookmark()) return; - - mClearDialogBookmarkTitle = pref.getTitle(); - mClearDialogShortcut = pref.getShortcut(); - showDialog(DIALOG_CLEAR_SHORTCUT); - } - - public void onClick(DialogInterface dialog, int which) { - if (mClearDialogShortcut > 0 && which == AlertDialog.BUTTON1) { - // Clear the shortcut - clearShortcut(mClearDialogShortcut); - } - mClearDialogBookmarkTitle = null; - mClearDialogShortcut = 0; - } - - private void clearShortcut(char shortcut) { - getContentResolver().delete(Bookmarks.CONTENT_URI, sShortcutSelection, - new String[] { String.valueOf((int) shortcut) }); - } - - @Override - public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { - if (!(preference instanceof ShortcutPreference)) return false; - - // Open the screen to pick a bookmark for this shortcut - ShortcutPreference pref = (ShortcutPreference) preference; - Intent intent = new Intent(this, BookmarkPicker.class); - intent.putExtra(BookmarkPicker.EXTRA_SHORTCUT, pref.getShortcut()); - startActivityForResult(intent, REQUEST_PICK_BOOKMARK); - - return true; - } - - public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { - - // Open the clear shortcut dialog - Preference pref = (Preference) getPreferenceScreen().getRootAdapter().getItem(position); - if (!(pref instanceof ShortcutPreference)) return false; - showClearDialog((ShortcutPreference) pref); - return true; - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - if (resultCode != RESULT_OK) { - return; - } - - if (requestCode == REQUEST_PICK_BOOKMARK) { - - // Returned from the 'pick bookmark for this shortcut' screen - if (data == null) { - Log.w(TAG, "Result from bookmark picker does not have an intent."); - return; - } - - String title = data.getStringExtra(BookmarkPicker.EXTRA_TITLE); - char shortcut = data.getCharExtra(BookmarkPicker.EXTRA_SHORTCUT, (char) 0); - updateShortcut(shortcut, data); - - } else { - super.onActivityResult(requestCode, resultCode, data); - } - } - - private void updateShortcut(char shortcut, Intent intent) { - // Update the bookmark for a shortcut - // Pass an empty title so it gets resolved each time this bookmark is - // displayed (since the locale could change after we insert into the provider). - Bookmarks.add(getContentResolver(), intent, "", DEFAULT_BOOKMARK_FOLDER, shortcut, 0); - } - - private ShortcutPreference getOrCreatePreference(char shortcut) { - ShortcutPreference pref = mShortcutToPreference.get(shortcut); - if (pref != null) { - return pref; - } else { - Log.w(TAG, "Unknown shortcut '" + shortcut + "', creating preference anyway"); - return createPreference(shortcut); - } - } - - private ShortcutPreference createPreference(char shortcut) { - ShortcutPreference pref = new ShortcutPreference(QuickLaunchSettings.this, shortcut); - mShortcutGroup.addPreference(pref); - mShortcutToPreference.put(shortcut, pref); - return pref; - } - - private void initShortcutPreferences() { - - /** Whether the shortcut has been seen already. The array index is the shortcut. */ - SparseBooleanArray shortcutSeen = new SparseBooleanArray(); - KeyCharacterMap keyMap = KeyCharacterMap.load(KeyCharacterMap.BUILT_IN_KEYBOARD); - - // Go through all the key codes and create a preference for the appropriate keys - for (int keyCode = KeyEvent.getMaxKeyCode() - 1; keyCode >= 0; keyCode--) { - // Get the label for the primary char on the key that produces this key code - char shortcut = (char) Character.toLowerCase(keyMap.getDisplayLabel(keyCode)); - if (shortcut == 0 || shortcutSeen.get(shortcut, false)) continue; - // TODO: need a to tell if the current keyboard can produce this key code, for now - // only allow the letter or digits - if (!Character.isLetterOrDigit(shortcut)) continue; - shortcutSeen.put(shortcut, true); - - createPreference(shortcut); - } - } - - private synchronized void refreshShortcuts() { - Cursor c = mBookmarksCursor; - if (c == null) { - // Haven't finished querying yet - return; - } - - if (!c.requery()) { - Log.e(TAG, "Could not requery cursor when refreshing shortcuts."); - return; - } - - /** - * We use the previous bookmarked shortcuts array to filter out those - * shortcuts that had bookmarks before this method call, and don't after - * (so we can set the preferences to be without bookmarks). - */ - SparseBooleanArray noLongerBookmarkedShortcuts = mBookmarkedShortcuts; - SparseBooleanArray newBookmarkedShortcuts = new SparseBooleanArray(); - while (c.moveToNext()) { - char shortcut = Character.toLowerCase((char) c.getInt(COLUMN_SHORTCUT)); - if (shortcut == 0) continue; - - ShortcutPreference pref = getOrCreatePreference(shortcut); - pref.setTitle(Bookmarks.getTitle(this, c)); - pref.setSummary(getString(R.string.quick_launch_shortcut, - String.valueOf(shortcut))); - pref.setHasBookmark(true); - - newBookmarkedShortcuts.put(shortcut, true); - if (noLongerBookmarkedShortcuts != null) { - // After this loop, the shortcuts with value true in this array - // will no longer have bookmarks - noLongerBookmarkedShortcuts.put(shortcut, false); - } - } - - if (noLongerBookmarkedShortcuts != null) { - for (int i = noLongerBookmarkedShortcuts.size() - 1; i >= 0; i--) { - if (noLongerBookmarkedShortcuts.valueAt(i)) { - // True, so there is no longer a bookmark for this shortcut - char shortcut = (char) noLongerBookmarkedShortcuts.keyAt(i); - ShortcutPreference pref = mShortcutToPreference.get(shortcut); - if (pref != null) { - pref.setHasBookmark(false); - } - } - } - } - - mBookmarkedShortcuts = newBookmarkedShortcuts; - - c.deactivate(); - } - - private class BookmarksObserver extends ContentObserver { - - public BookmarksObserver(Handler handler) { - super(handler); - } - - @Override - public void onChange(boolean selfChange) { - super.onChange(selfChange); - - refreshShortcuts(); - } - } -} |