Merge "Use OnPreferenceChangeLister for subtype enabler" into lmp-dev
diff --git a/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java b/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java
index 4019bb4..eff1daa 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java
@@ -23,6 +23,7 @@
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
+import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceCategory;
import android.preference.PreferenceScreen;
import android.text.TextUtils;
@@ -40,7 +41,8 @@
import java.util.HashMap;
import java.util.List;
-public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment {
+public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment
+ implements OnPreferenceChangeListener {
private boolean mHaveHardKeyboard;
private final HashMap<String, List<Preference>> mInputMethodAndSubtypePrefsMap =
new HashMap<>();
@@ -119,32 +121,34 @@
mInputMethodInfoList, mHaveHardKeyboard);
}
- // TODO: Stop overriding this method. Instead start using {@link OnPreferenceChangedListener}.
@Override
- public boolean onPreferenceTreeClick(final PreferenceScreen preferenceScreen,
- final Preference preference) {
- if (!(preference instanceof CheckBoxPreference)) {
- return super.onPreferenceTreeClick(preferenceScreen, preference);
+ public boolean onPreferenceChange(final Preference pref, final Object newValue) {
+ if (!(newValue instanceof Boolean)) {
+ return true; // Invoke default behavior.
}
- final CheckBoxPreference chkPref = (CheckBoxPreference) preference;
-
+ final boolean isChecking = (Boolean) newValue;
for (final String imiId : mAutoSelectionPrefsMap.keySet()) {
- if (mAutoSelectionPrefsMap.get(imiId) == chkPref) {
- // We look for the first preference item in subtype enabler. The first item is used
- // for turning on/off subtype auto selection. We are in the subtype enabler and
- // trying selecting subtypes automatically.
- setAutoSelectionSubtypesEnabled(imiId, chkPref.isChecked());
- return super.onPreferenceTreeClick(preferenceScreen, preference);
+ // An auto select subtype preference is changing.
+ if (mAutoSelectionPrefsMap.get(imiId) == pref) {
+ final CheckBoxPreference autoSelectionPref = (CheckBoxPreference) pref;
+ autoSelectionPref.setChecked(isChecking);
+ // Enable or disable subtypes depending on the auto selection preference.
+ setAutoSelectionSubtypesEnabled(imiId, autoSelectionPref.isChecked());
+ return false;
}
}
-
- // Turns off a subtype.
- if (!chkPref.isChecked()) {
- updateAutoSelectionPreferences();
- return super.onPreferenceTreeClick(preferenceScreen, preference);
+ // A subtype preference is changing.
+ if (pref instanceof InputMethodSubtypePreference) {
+ final InputMethodSubtypePreference subtypePref = (InputMethodSubtypePreference) pref;
+ subtypePref.setChecked(isChecking);
+ if (!subtypePref.isChecked()) {
+ // It takes care of the case where no subtypes are explicitly enabled then the auto
+ // selection preference is going to be checked.
+ updateAutoSelectionPreferences();
+ }
+ return false;
}
-
- return super.onPreferenceTreeClick(preferenceScreen, preference);
+ return true; // Invoke default behavior.
}
private void addInputMethodSubtypePreferences(final InputMethodInfo imi,
@@ -166,6 +170,7 @@
final CheckBoxPreference autoSelectionPref = new CheckBoxPreference(context);
mAutoSelectionPrefsMap.put(imiId, autoSelectionPref);
keyboardSettingsCategory.addPreference(autoSelectionPref);
+ autoSelectionPref.setOnPreferenceChangeListener(this);
final PreferenceCategory activeInputMethodsCategory = new PreferenceCategory(context);
activeInputMethodsCategory.setTitle(R.string.active_input_method_subtypes);
@@ -199,6 +204,7 @@
for (int index = 0; index < prefCount; ++index) {
final Preference pref = subtypePreferences.get(index);
activeInputMethodsCategory.addPreference(pref);
+ pref.setOnPreferenceChangeListener(this);
InputMethodAndSubtypeUtil.removeUnnecessaryNonPersistentPreference(pref);
}
mInputMethodAndSubtypePrefsMap.put(imiId, subtypePreferences);