Loading src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java +2 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.settings.inputmethod; import com.android.internal.inputmethod.InputMethodUtils; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; Loading Loading @@ -145,7 +146,7 @@ public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment { InputMethodInfo imi = mInputMethodProperties.get(i); if (id.equals(imi.getId())) { selImi = imi; if (InputMethodAndSubtypeUtil.isSystemIme(imi)) { if (InputMethodUtils.isSystemIme(imi)) { InputMethodAndSubtypeUtil.setSubtypesPreferenceEnabled( this, mInputMethodProperties, id, true); // This is a built-in IME, so no need to warn. Loading src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java +4 −54 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.settings.inputmethod; import com.android.internal.inputmethod.InputMethodUtils; import com.android.settings.SettingsPreferenceFragment; import android.content.ContentResolver; Loading Loading @@ -176,8 +177,9 @@ public class InputMethodAndSubtypeUtil { ((CheckBoxPreference) pref).isChecked() : enabledIMEAndSubtypesMap.containsKey(imiId); final boolean isCurrentInputMethod = imiId.equals(currentInputMethodId); final boolean systemIme = isSystemIme(imi); if ((!hasHardKeyboard && isAlwaysCheckedIme(imi, context.getActivity(), imiCount)) final boolean systemIme = InputMethodUtils.isSystemIme(imi); if ((!hasHardKeyboard && InputMethodSettingValuesWrapper.getInstance( context.getActivity()).isAlwaysCheckedIme(imi, context.getActivity())) || isImeChecked) { if (!enabledIMEAndSubtypesMap.containsKey(imiId)) { // imiId has just been enabled Loading Loading @@ -345,56 +347,4 @@ public class InputMethodAndSubtypeUtil { } } } public static boolean isSystemIme(InputMethodInfo property) { return (property.getServiceInfo().applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0; } public static boolean isAuxiliaryIme(InputMethodInfo imi) { return imi.isAuxiliaryIme(); } public static boolean isAlwaysCheckedIme(InputMethodInfo imi, Context context, int imiCount) { if (imiCount <= 1) { return true; } if (!isSystemIme(imi)) { return false; } if (isAuxiliaryIme(imi)) { return false; } if (isValidDefaultIme(imi, context)) { return true; } return containsSubtypeOf(imi, ENGLISH_LOCALE.getLanguage()); } private static boolean isValidDefaultIme(InputMethodInfo imi, Context context) { if (imi.getIsDefaultResourceId() != 0) { try { Resources res = context.createPackageContext( imi.getPackageName(), 0).getResources(); if (res.getBoolean(imi.getIsDefaultResourceId()) && containsSubtypeOf(imi, context.getResources().getConfiguration(). locale.getLanguage())) { return true; } } catch (PackageManager.NameNotFoundException ex) { } catch (Resources.NotFoundException ex) { } } return false; } private static boolean containsSubtypeOf(InputMethodInfo imi, String language) { final int N = imi.getSubtypeCount(); for (int i = 0; i < N; ++i) { if (imi.getSubtypeAt(i).getLocale().startsWith(language)) { return true; } } return false; } } src/com/android/settings/inputmethod/InputMethodPreference.java +5 −4 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.settings.inputmethod; import com.android.internal.inputmethod.InputMethodUtils; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; Loading Loading @@ -44,7 +45,6 @@ import android.widget.TextView; import android.widget.Toast; import java.text.Collator; import java.util.Comparator; import java.util.List; public class InputMethodPreference extends CheckBoxPreference { Loading Loading @@ -91,9 +91,10 @@ public class InputMethodPreference extends CheckBoxPreference { mImm = imm; mImi = imi; updateSummary(); mAlwaysChecked = InputMethodAndSubtypeUtil.isAlwaysCheckedIme( imi, fragment.getActivity(), imiCount); mIsSystemIme = InputMethodAndSubtypeUtil.isSystemIme(imi); mAlwaysChecked = InputMethodSettingValuesWrapper.getInstance( fragment.getActivity()).isAlwaysCheckedIme( imi, fragment.getActivity()); mIsSystemIme = InputMethodUtils.isSystemIme(imi); if (mAlwaysChecked) { setEnabled(false); } Loading src/com/android/settings/inputmethod/InputMethodSettingValuesWrapper.java +25 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.view.inputmethod.InputMethodSubtype; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Locale; /** * This class is a wrapper for InputMethodSettings. You need to refresh internal states Loading @@ -39,6 +40,8 @@ import java.util.List; */ public class InputMethodSettingValuesWrapper { private static final String TAG = InputMethodSettingValuesWrapper.class.getSimpleName(); private static final Locale ENGLISH_LOCALE = new Locale("en"); private static volatile InputMethodSettingValuesWrapper sInstance; private final ArrayList<InputMethodInfo> mMethodList = new ArrayList<InputMethodInfo>(); private final HashMap<String, InputMethodInfo> mMethodMap = Loading Loading @@ -104,4 +107,26 @@ public class InputMethodSettingValuesWrapper { return InputMethodUtils.getImeAndSubtypeDisplayName(context, imi, subtype); } } public boolean isAlwaysCheckedIme(InputMethodInfo imi, Context context) { if (getInputMethodList().size() <= 1) { return true; } if (!InputMethodUtils.isSystemIme(imi)) { return false; } return isValidSystemNonAuxAsciiCapableIme(imi, context); } private static boolean isValidSystemNonAuxAsciiCapableIme( InputMethodInfo imi, Context context) { if (imi.isAuxiliaryIme()) { return false; } if (InputMethodUtils.isValidSystemDefaultIme(true /* isSystemReady */, imi, context)) { return true; } return InputMethodUtils.containsSubtypeOf( imi, ENGLISH_LOCALE.getLanguage(), null /* mode */); } } Loading
src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java +2 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.settings.inputmethod; import com.android.internal.inputmethod.InputMethodUtils; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; Loading Loading @@ -145,7 +146,7 @@ public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment { InputMethodInfo imi = mInputMethodProperties.get(i); if (id.equals(imi.getId())) { selImi = imi; if (InputMethodAndSubtypeUtil.isSystemIme(imi)) { if (InputMethodUtils.isSystemIme(imi)) { InputMethodAndSubtypeUtil.setSubtypesPreferenceEnabled( this, mInputMethodProperties, id, true); // This is a built-in IME, so no need to warn. Loading
src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java +4 −54 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.settings.inputmethod; import com.android.internal.inputmethod.InputMethodUtils; import com.android.settings.SettingsPreferenceFragment; import android.content.ContentResolver; Loading Loading @@ -176,8 +177,9 @@ public class InputMethodAndSubtypeUtil { ((CheckBoxPreference) pref).isChecked() : enabledIMEAndSubtypesMap.containsKey(imiId); final boolean isCurrentInputMethod = imiId.equals(currentInputMethodId); final boolean systemIme = isSystemIme(imi); if ((!hasHardKeyboard && isAlwaysCheckedIme(imi, context.getActivity(), imiCount)) final boolean systemIme = InputMethodUtils.isSystemIme(imi); if ((!hasHardKeyboard && InputMethodSettingValuesWrapper.getInstance( context.getActivity()).isAlwaysCheckedIme(imi, context.getActivity())) || isImeChecked) { if (!enabledIMEAndSubtypesMap.containsKey(imiId)) { // imiId has just been enabled Loading Loading @@ -345,56 +347,4 @@ public class InputMethodAndSubtypeUtil { } } } public static boolean isSystemIme(InputMethodInfo property) { return (property.getServiceInfo().applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0; } public static boolean isAuxiliaryIme(InputMethodInfo imi) { return imi.isAuxiliaryIme(); } public static boolean isAlwaysCheckedIme(InputMethodInfo imi, Context context, int imiCount) { if (imiCount <= 1) { return true; } if (!isSystemIme(imi)) { return false; } if (isAuxiliaryIme(imi)) { return false; } if (isValidDefaultIme(imi, context)) { return true; } return containsSubtypeOf(imi, ENGLISH_LOCALE.getLanguage()); } private static boolean isValidDefaultIme(InputMethodInfo imi, Context context) { if (imi.getIsDefaultResourceId() != 0) { try { Resources res = context.createPackageContext( imi.getPackageName(), 0).getResources(); if (res.getBoolean(imi.getIsDefaultResourceId()) && containsSubtypeOf(imi, context.getResources().getConfiguration(). locale.getLanguage())) { return true; } } catch (PackageManager.NameNotFoundException ex) { } catch (Resources.NotFoundException ex) { } } return false; } private static boolean containsSubtypeOf(InputMethodInfo imi, String language) { final int N = imi.getSubtypeCount(); for (int i = 0; i < N; ++i) { if (imi.getSubtypeAt(i).getLocale().startsWith(language)) { return true; } } return false; } }
src/com/android/settings/inputmethod/InputMethodPreference.java +5 −4 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.settings.inputmethod; import com.android.internal.inputmethod.InputMethodUtils; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; Loading Loading @@ -44,7 +45,6 @@ import android.widget.TextView; import android.widget.Toast; import java.text.Collator; import java.util.Comparator; import java.util.List; public class InputMethodPreference extends CheckBoxPreference { Loading Loading @@ -91,9 +91,10 @@ public class InputMethodPreference extends CheckBoxPreference { mImm = imm; mImi = imi; updateSummary(); mAlwaysChecked = InputMethodAndSubtypeUtil.isAlwaysCheckedIme( imi, fragment.getActivity(), imiCount); mIsSystemIme = InputMethodAndSubtypeUtil.isSystemIme(imi); mAlwaysChecked = InputMethodSettingValuesWrapper.getInstance( fragment.getActivity()).isAlwaysCheckedIme( imi, fragment.getActivity()); mIsSystemIme = InputMethodUtils.isSystemIme(imi); if (mAlwaysChecked) { setEnabled(false); } Loading
src/com/android/settings/inputmethod/InputMethodSettingValuesWrapper.java +25 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.view.inputmethod.InputMethodSubtype; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Locale; /** * This class is a wrapper for InputMethodSettings. You need to refresh internal states Loading @@ -39,6 +40,8 @@ import java.util.List; */ public class InputMethodSettingValuesWrapper { private static final String TAG = InputMethodSettingValuesWrapper.class.getSimpleName(); private static final Locale ENGLISH_LOCALE = new Locale("en"); private static volatile InputMethodSettingValuesWrapper sInstance; private final ArrayList<InputMethodInfo> mMethodList = new ArrayList<InputMethodInfo>(); private final HashMap<String, InputMethodInfo> mMethodMap = Loading Loading @@ -104,4 +107,26 @@ public class InputMethodSettingValuesWrapper { return InputMethodUtils.getImeAndSubtypeDisplayName(context, imi, subtype); } } public boolean isAlwaysCheckedIme(InputMethodInfo imi, Context context) { if (getInputMethodList().size() <= 1) { return true; } if (!InputMethodUtils.isSystemIme(imi)) { return false; } return isValidSystemNonAuxAsciiCapableIme(imi, context); } private static boolean isValidSystemNonAuxAsciiCapableIme( InputMethodInfo imi, Context context) { if (imi.isAuxiliaryIme()) { return false; } if (InputMethodUtils.isValidSystemDefaultIme(true /* isSystemReady */, imi, context)) { return true; } return InputMethodUtils.containsSubtypeOf( imi, ENGLISH_LOCALE.getLanguage(), null /* mode */); } }