Have the add dialog maintain state across screen rotation
Change-Id: I44d61018e0ed4de32b0a8da3ecba999831987956
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 517d81d..5185f9a 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">
<intent-filter>
<action android:name="com.android.settings.USER_DICTIONARY_INSERT" />
diff --git a/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java b/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java
index 17c986a..0f89a95 100644
--- a/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java
+++ b/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java
@@ -46,6 +46,10 @@
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 @@
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 @@
// 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 @@
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 @@
.setVisibility(View.VISIBLE);
findViewById(R.id.user_dictionary_settings_add_dialog_less_options)
.setVisibility(View.GONE);
+ mIsShowingMoreOptions = false;
}
@Override