diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 517d81d73cd..5185f9acb8d 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -467,6 +467,7 @@ android:label="@string/user_dict_settings_titlebar" android:theme="@android:style/Theme.Holo.Dialog.NoActionBar" android:windowSoftInputMode="stateVisible" + android:noHistory="true" android:excludeFromRecents="true"> diff --git a/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java b/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java index 17c986a56de..0f89a9510b4 100644 --- a/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java +++ b/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java @@ -46,6 +46,10 @@ public class UserDictionaryAddWordActivity extends Activity public static final String EXTRA_LOCALE = "locale"; private static final int FREQUENCY_FOR_USER_DICTIONARY_ADDS = 250; + private static final String STATE_KEY_IS_OPEN = "isOpen"; + private static final String STATE_KEY_WORD = "word"; + private static final String STATE_KEY_LOCALE = "locale"; + public static final String MODE_EDIT_ACTION = "com.android.settings.USER_DICTIONARY_EDIT"; public static final String MODE_INSERT_ACTION = "com.android.settings.USER_DICTIONARY_INSERT"; private static final int MODE_EDIT = 0; @@ -56,6 +60,8 @@ public class UserDictionaryAddWordActivity extends Activity private String mOldWord; private String mLocale; // may not be null: will be converted to default locale if received null + private boolean mIsShowingMoreOptions = false; + @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -70,20 +76,49 @@ public class UserDictionaryAddWordActivity extends Activity // Can never come here because we only support these two actions in the manifest throw new RuntimeException("Unsupported action: " + action); } + + String savedWord = null; + String savedLocale = null; + if (null != savedInstanceState) { + mIsShowingMoreOptions = + savedInstanceState.getBoolean(STATE_KEY_IS_OPEN, mIsShowingMoreOptions); + savedWord = savedInstanceState.getString(STATE_KEY_WORD); + savedLocale = savedInstanceState.getString(STATE_KEY_LOCALE); + } + mOldWord = intent.getStringExtra(EXTRA_WORD); - final String locale = intent.getStringExtra(EXTRA_LOCALE); // this may be null - mLocale = null == locale ? Locale.getDefault().toString() : locale; + if (null != savedLocale) { + mLocale = savedLocale; + } else { + final String locale = intent.getStringExtra(EXTRA_LOCALE); // this may be null + mLocale = null == locale ? Locale.getDefault().toString() : locale; + } mEditText = (EditText)findViewById(R.id.user_dictionary_add_word_text); - if (null != mOldWord) { + if (null != savedWord) { + mEditText.setText(savedWord); + mEditText.setSelection(savedWord.length()); + } else if (null != mOldWord) { mEditText.setText(mOldWord); mEditText.setSelection(mOldWord.length()); } + + if (mIsShowingMoreOptions) { + onClickMoreOptions(findViewById(R.id.user_dictionary_settings_add_dialog_more_options)); + } + final ViewGroup v = (ViewGroup)findViewById(R.id.user_dict_settings_add_dialog_top); final LayoutTransition transition = new LayoutTransition(); transition.setStartDelay(LayoutTransition.APPEARING, 0); v.setLayoutTransition(transition); } + @Override + public void onSaveInstanceState(final Bundle outState) { + outState.putBoolean(STATE_KEY_IS_OPEN, mIsShowingMoreOptions); + outState.putString(STATE_KEY_WORD, mEditText.getText().toString()); + outState.putString(STATE_KEY_LOCALE, mLocale); + } + public void onClickCancel(final View v) { finish(); } @@ -184,6 +219,7 @@ public class UserDictionaryAddWordActivity extends Activity adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); localeSpinner.setAdapter(adapter); localeSpinner.setOnItemSelectedListener(this); + mIsShowingMoreOptions = true; } public void onClickLessOptions(final View v) { @@ -194,6 +230,7 @@ public class UserDictionaryAddWordActivity extends Activity .setVisibility(View.VISIBLE); findViewById(R.id.user_dictionary_settings_add_dialog_less_options) .setVisibility(View.GONE); + mIsShowingMoreOptions = false; } @Override