diff options
Diffstat (limited to 'src/com/android/settings/UserDictionarySettings.java')
-rw-r--r-- | src/com/android/settings/UserDictionarySettings.java | 123 |
1 files changed, 73 insertions, 50 deletions
diff --git a/src/com/android/settings/UserDictionarySettings.java b/src/com/android/settings/UserDictionarySettings.java index 6ffcb3d..f1e74ac 100644 --- a/src/com/android/settings/UserDictionarySettings.java +++ b/src/com/android/settings/UserDictionarySettings.java @@ -16,21 +16,30 @@ package com.android.settings; +import com.android.settings.SettingsPreferenceFragment.SettingsDialogFragment; + +import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; -import android.app.ListActivity; +import android.app.ListFragment; import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.provider.UserDictionary; import android.text.InputType; +import android.util.Log; import android.view.ContextMenu; +import android.view.ContextMenu.ContextMenuInfo; +import android.view.LayoutInflater; import android.view.Menu; +import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; +import android.view.ViewGroup; import android.view.WindowManager; -import android.view.ContextMenu.ContextMenuInfo; +import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AlphabetIndexer; import android.widget.EditText; import android.widget.ListAdapter; @@ -38,11 +47,11 @@ import android.widget.ListView; import android.widget.SectionIndexer; import android.widget.SimpleCursorAdapter; import android.widget.TextView; -import android.widget.AdapterView.AdapterContextMenuInfo; import java.util.Locale; -public class UserDictionarySettings extends ListActivity { +public class UserDictionarySettings extends ListFragment implements DialogCreatable { + private static final String TAG = "UserDictionarySettings"; private static final String INSTANCE_KEY_DIALOG_EDITING_WORD = "DIALOG_EDITING_WORD"; private static final String INSTANCE_KEY_ADDED_WORD = "DIALOG_ADDED_WORD"; @@ -69,52 +78,65 @@ public class UserDictionarySettings extends ListActivity { /** The word being edited in the dialog (null means the user is adding a word). */ private String mDialogEditingWord; - + + private View mView; private Cursor mCursor; private boolean mAddedWordAlready; private boolean mAutoReturn; - + + private SettingsDialogFragment mDialogFragment; + @Override - protected void onCreate(Bundle savedInstanceState) { + public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + mView = inflater.inflate(R.layout.list_content_with_empty_view, container, false); + return mView; + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); - setContentView(R.layout.list_content_with_empty_view); - mCursor = createCursor(); - setListAdapter(createAdapter()); - - TextView emptyView = (TextView) findViewById(R.id.empty); + TextView emptyView = (TextView)mView.findViewById(R.id.empty); emptyView.setText(R.string.user_dict_settings_empty_text); - - ListView listView = getListView(); + + final ListView listView = getListView(); + listView.setAdapter(createAdapter()); listView.setFastScrollEnabled(true); listView.setEmptyView(emptyView); registerForContextMenu(listView); + setHasOptionsMenu(true); + + if (savedInstanceState != null) { + mDialogEditingWord = savedInstanceState.getString(INSTANCE_KEY_DIALOG_EDITING_WORD); + mAddedWordAlready = savedInstanceState.getBoolean(INSTANCE_KEY_ADDED_WORD, false); + } } @Override - protected void onResume() { + public void onResume() { super.onResume(); + final Intent intent = getActivity().getIntent(); if (!mAddedWordAlready - && getIntent().getAction().equals("com.android.settings.USER_DICTIONARY_INSERT")) { - String word = getIntent().getStringExtra(EXTRA_WORD); + && intent.getAction().equals("com.android.settings.USER_DICTIONARY_INSERT")) { + final String word = intent.getStringExtra(EXTRA_WORD); mAutoReturn = true; if (word != null) { showAddOrEditDialog(word); } } } - @Override - protected void onRestoreInstanceState(Bundle state) { - super.onRestoreInstanceState(state); - mDialogEditingWord = state.getString(INSTANCE_KEY_DIALOG_EDITING_WORD); - mAddedWordAlready = state.getBoolean(INSTANCE_KEY_ADDED_WORD, false); - } @Override - protected void onSaveInstanceState(Bundle outState) { + public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString(INSTANCE_KEY_DIALOG_EDITING_WORD, mDialogEditingWord); outState.putBoolean(INSTANCE_KEY_ADDED_WORD, mAddedWordAlready); @@ -123,21 +145,21 @@ public class UserDictionarySettings extends ListActivity { private Cursor createCursor() { String currentLocale = Locale.getDefault().toString(); // Case-insensitive sort - return managedQuery(UserDictionary.Words.CONTENT_URI, QUERY_PROJECTION, + return getActivity().managedQuery(UserDictionary.Words.CONTENT_URI, QUERY_PROJECTION, QUERY_SELECTION, new String[] { currentLocale }, "UPPER(" + UserDictionary.Words.WORD + ")"); } private ListAdapter createAdapter() { - return new MyAdapter(this, + return new MyAdapter(getActivity(), android.R.layout.simple_list_item_1, mCursor, new String[] { UserDictionary.Words.WORD }, new int[] { android.R.id.text1 }); } @Override - protected void onListItemClick(ListView l, View v, int position, long id) { - openContextMenu(v); + public void onListItemClick(ListView l, View v, int position, long id) { + getActivity().openContextMenu(v); } @Override @@ -175,10 +197,9 @@ public class UserDictionarySettings extends ListActivity { } @Override - public boolean onCreateOptionsMenu(Menu menu) { + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { menu.add(0, OPTIONS_MENU_ADD, 0, R.string.user_dict_settings_add_menu_title) .setIcon(R.drawable.ic_menu_add); - return true; } @Override @@ -191,7 +212,7 @@ public class UserDictionarySettings extends ListActivity { mDialogEditingWord = editingWord; showDialog(DIALOG_ADD_OR_EDIT); } - + private String getWord(int position) { mCursor.moveToPosition(position); // Handle a possible race-condition @@ -202,14 +223,16 @@ public class UserDictionarySettings extends ListActivity { } @Override - protected Dialog onCreateDialog(int id) { - View content = getLayoutInflater().inflate(R.layout.dialog_edittext, null); + public Dialog onCreateDialog(int id) { + final Activity activity = getActivity(); + final View content = activity.getLayoutInflater().inflate(R.layout.dialog_edittext, null); final EditText editText = (EditText) content.findViewById(R.id.edittext); + editText.setText(mDialogEditingWord); // No prediction in soft keyboard mode. TODO: Create a better way to disable prediction editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE); - - AlertDialog dialog = new AlertDialog.Builder(this) + + AlertDialog dialog = new AlertDialog.Builder(activity) .setTitle(mDialogEditingWord != null ? R.string.user_dict_settings_edit_dialog_title : R.string.user_dict_settings_add_dialog_title) @@ -217,11 +240,11 @@ public class UserDictionarySettings extends ListActivity { .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { onAddOrEditFinished(editText.getText().toString()); - if (mAutoReturn) finish(); + if (mAutoReturn) activity.onBackPressed(); }}) .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { - if (mAutoReturn) finish(); + if (mAutoReturn) activity.onBackPressed(); }}) .create(); dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | @@ -229,14 +252,12 @@ public class UserDictionarySettings extends ListActivity { return dialog; } - @Override - protected void onPrepareDialog(int id, Dialog d) { - AlertDialog dialog = (AlertDialog) d; - d.setTitle(mDialogEditingWord != null - ? R.string.user_dict_settings_edit_dialog_title - : R.string.user_dict_settings_add_dialog_title); - EditText editText = (EditText) dialog.findViewById(R.id.edittext); - editText.setText(mDialogEditingWord); + private void showDialog(int dialogId) { + if (mDialogFragment != null) { + Log.e(TAG, "Old dialog fragment not null!"); + } + mDialogFragment = new SettingsDialogFragment(this, dialogId); + mDialogFragment.show(getActivity().getFragmentManager(), Integer.toString(dialogId)); } private void onAddOrEditFinished(String word) { @@ -249,17 +270,19 @@ public class UserDictionarySettings extends ListActivity { deleteWord(word); // TODO: present UI for picking whether to add word to all locales, or current. - UserDictionary.Words.addWord(this, word.toString(), + UserDictionary.Words.addWord(getActivity(), word.toString(), 250, UserDictionary.Words.LOCALE_TYPE_ALL); - mCursor.requery(); + if (!mCursor.requery()) { + throw new IllegalStateException("can't requery on already-closed cursor."); + } mAddedWordAlready = true; } private void deleteWord(String word) { - getContentResolver().delete(UserDictionary.Words.CONTENT_URI, DELETE_SELECTION, - new String[] { word }); + getActivity().getContentResolver().delete( + UserDictionary.Words.CONTENT_URI, DELETE_SELECTION, new String[] { word }); } - + private static class MyAdapter extends SimpleCursorAdapter implements SectionIndexer { private AlphabetIndexer mIndexer; |