diff --git a/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java b/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java index 9be614e0554..fc0e8db3545 100644 --- a/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java +++ b/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java @@ -16,10 +16,6 @@ package com.android.settings.inputmethod; -import com.android.internal.inputmethod.InputMethodUtils; -import com.android.settings.R; -import com.android.settings.SettingsPreferenceFragment; - import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; @@ -37,12 +33,16 @@ import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodSubtype; +import com.android.internal.inputmethod.InputMethodUtils; +import com.android.settings.R; +import com.android.settings.SettingsPreferenceFragment; + import java.text.Collator; import java.util.ArrayList; import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.List; -import java.util.Locale; public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment { private static final String TAG = InputMethodAndSubtypeEnabler.class.getSimpleName(); @@ -52,11 +52,10 @@ public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment { new HashMap<>(); final private HashMap mSubtypeAutoSelectionCBMap = new HashMap<>(); private InputMethodManager mImm; + // TODO: Change mInputMethodProperties to Map private List mInputMethodProperties; private String mInputMethodId; private String mTitle; - private String mSystemLocale = ""; - private Collator mCollator = Collator.getInstance(); @Override public void onCreate(Bundle icicle) { @@ -87,10 +86,7 @@ public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment { } } - final Locale locale = config.locale; - mSystemLocale = locale.toString(); - mCollator = Collator.getInstance(locale); - onCreateIMM(); + mInputMethodProperties = mImm.getInputMethodList(); setPreferenceScreen(createPreferenceHierarchy()); } @@ -211,21 +207,13 @@ public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment { } } - private void onCreateIMM() { - InputMethodManager imm = (InputMethodManager) getSystemService( - Context.INPUT_METHOD_SERVICE); - - // TODO: Change mInputMethodProperties to Map - mInputMethodProperties = imm.getInputMethodList(); - } - private PreferenceScreen createPreferenceHierarchy() { // Root final PreferenceScreen root = getPreferenceManager().createPreferenceScreen(getActivity()); final Context context = getActivity(); - int N = (mInputMethodProperties == null ? 0 : mInputMethodProperties.size()); - + final Collator collator = Collator.getInstance(); + final int N = (mInputMethodProperties == null ? 0 : mInputMethodProperties.size()); for (int i = 0; i < N; ++i) { final InputMethodInfo imi = mInputMethodProperties.get(i); final int subtypeCount = imi.getSubtypeCount(); @@ -267,13 +255,21 @@ public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment { } } else { final CheckBoxPreference chkbxPref = new InputMethodSubtypePreference( - context, subtype, imi, mCollator); + context, subtype, imi); chkbxPref.setKey(imiId + subtype.hashCode()); chkbxPref.setTitle(subtypeLabel); subtypePreferences.add(chkbxPref); } } - Collections.sort(subtypePreferences); + Collections.sort(subtypePreferences, new Comparator() { + @Override + public int compare(Preference lhs, Preference rhs) { + if (lhs instanceof InputMethodSubtypePreference) { + return ((InputMethodSubtypePreference)lhs).compareTo(rhs, collator); + } + return lhs.compareTo(rhs); + } + }); for (int j = 0; j < subtypePreferences.size(); ++j) { activeInputMethodsCategory.addPreference(subtypePreferences.get(j)); } diff --git a/src/com/android/settings/inputmethod/InputMethodPreference.java b/src/com/android/settings/inputmethod/InputMethodPreference.java index 084da193359..a65e5e50823 100755 --- a/src/com/android/settings/inputmethod/InputMethodPreference.java +++ b/src/com/android/settings/inputmethod/InputMethodPreference.java @@ -231,6 +231,9 @@ class InputMethodPreference extends SwitchPreference implements OnPreferenceClic } int compareTo(final InputMethodPreference rhs, final Collator collator) { + if (this == rhs) { + return 0; + } if (mHasPriorityInSorting == rhs.mHasPriorityInSorting) { final CharSequence t0 = getTitle(); final CharSequence t1 = rhs.getTitle(); diff --git a/src/com/android/settings/inputmethod/InputMethodSubtypePreference.java b/src/com/android/settings/inputmethod/InputMethodSubtypePreference.java index 7c67f4c57c9..6ac202af7ea 100644 --- a/src/com/android/settings/inputmethod/InputMethodSubtypePreference.java +++ b/src/com/android/settings/inputmethod/InputMethodSubtypePreference.java @@ -20,7 +20,6 @@ import android.content.Context; import android.preference.CheckBoxPreference; import android.preference.Preference; import android.text.TextUtils; -import android.util.Log; import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodSubtype; @@ -36,14 +35,11 @@ import java.util.Locale; */ //TODO: Make this non-persistent. class InputMethodSubtypePreference extends CheckBoxPreference { - private static final String TAG = InputMethodSubtypePreference.class.getSimpleName(); - private final boolean mIsSystemLocale; private final boolean mIsSystemLanguage; - private final Collator mCollator; - public InputMethodSubtypePreference(final Context context, final InputMethodSubtype subtype, - final InputMethodInfo imi, final Collator collator) { + InputMethodSubtypePreference(final Context context, final InputMethodSubtype subtype, + final InputMethodInfo imi) { super(context); setKey(imi.getId() + subtype.hashCode()); final CharSequence subtypeLabel = subtype.getDisplayName(context, @@ -60,15 +56,16 @@ class InputMethodSubtypePreference extends CheckBoxPreference { || InputMethodUtils.getLanguageFromLocaleString(subtypeLocaleString) .equals(systemLocale.getLanguage()); } - mCollator = collator; } - @Override - public int compareTo(Preference p) { - if (p instanceof InputMethodSubtypePreference) { - final InputMethodSubtypePreference pref = ((InputMethodSubtypePreference)p); + int compareTo(final Preference rhs, final Collator collator) { + if (this == rhs) { + return 0; + } + if (rhs instanceof InputMethodSubtypePreference) { + final InputMethodSubtypePreference pref = (InputMethodSubtypePreference) rhs; final CharSequence t0 = getTitle(); - final CharSequence t1 = pref.getTitle(); + final CharSequence t1 = rhs.getTitle(); if (TextUtils.equals(t0, t1)) { return 0; } @@ -90,9 +87,8 @@ class InputMethodSubtypePreference extends CheckBoxPreference { if (TextUtils.isEmpty(t1)) { return -1; } - return mCollator.compare(t0.toString(), t1.toString()); + return collator.compare(t0.toString(), t1.toString()); } - Log.w(TAG, "Illegal preference type."); - return super.compareTo(p); + return super.compareTo(rhs); } }