diff options
author | Satoshi Kataoka <satok@google.com> | 2013-04-17 16:41:58 +0900 |
---|---|---|
committer | Satoshi Kataoka <satok@google.com> | 2013-05-02 17:53:17 +0900 |
commit | ed1cdb24ba986231629fbfb244ed758fc2add0fc (patch) | |
tree | 1e554ace658ca782c16538d66d0a28a31ec28f2d /core | |
parent | 09f3cc2bcca62fea30dc0f22cc120088e9f54728 (diff) | |
download | frameworks_base-ed1cdb24ba986231629fbfb244ed758fc2add0fc.zip frameworks_base-ed1cdb24ba986231629fbfb244ed758fc2add0fc.tar.gz frameworks_base-ed1cdb24ba986231629fbfb244ed758fc2add0fc.tar.bz2 |
Change the initial disabled state of disabled IMEs
Bug: 8365223
This change is a supplement for I77f01c70610d82ce9070d4a
The disabled state of disabled pre-installed imes should be changed
to ENABLED_STATE_DISABLED_UNTIL_USED on boot or user switch.
Change-Id: If8ff1b2b95c36d33148def2ab87bd006aa520cc0
Diffstat (limited to 'core')
-rw-r--r-- | core/java/com/android/internal/inputmethod/InputMethodUtils.java | 78 | ||||
-rw-r--r-- | core/res/res/values/config.xml | 16 | ||||
-rw-r--r-- | core/res/res/values/symbols.xml | 1 |
3 files changed, 93 insertions, 2 deletions
diff --git a/core/java/com/android/internal/inputmethod/InputMethodUtils.java b/core/java/com/android/internal/inputmethod/InputMethodUtils.java index 655d148..4e21324 100644 --- a/core/java/com/android/internal/inputmethod/InputMethodUtils.java +++ b/core/java/com/android/internal/inputmethod/InputMethodUtils.java @@ -20,6 +20,7 @@ import android.content.ContentResolver; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; import android.provider.Settings; import android.provider.Settings.SettingNotFoundException; @@ -28,6 +29,8 @@ import android.util.Pair; import android.util.Slog; import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodSubtype; +import android.view.textservice.SpellCheckerInfo; +import android.view.textservice.TextServicesManager; import java.util.ArrayList; import java.util.HashMap; @@ -357,6 +360,78 @@ public class InputMethodUtils { return !subtype.isAuxiliary(); } + public static void setNonSelectedSystemImesDisabledUntilUsed( + PackageManager packageManager, List<InputMethodInfo> enabledImis) { + if (DEBUG) { + Slog.d(TAG, "setNonSelectedSystemImesDisabledUntilUsed"); + } + final String[] systemImesDisabledUntilUsed = Resources.getSystem().getStringArray( + com.android.internal.R.array.config_disabledUntilUsedPreinstalledImes); + if (systemImesDisabledUntilUsed == null || systemImesDisabledUntilUsed.length == 0) { + return; + } + // Only the current spell checker should be treated as an enabled one. + final SpellCheckerInfo currentSpellChecker = + TextServicesManager.getInstance().getCurrentSpellChecker(); + for (final String packageName : systemImesDisabledUntilUsed) { + if (DEBUG) { + Slog.d(TAG, "check " + packageName); + } + boolean enabledIme = false; + for (int j = 0; j < enabledImis.size(); ++j) { + final InputMethodInfo imi = enabledImis.get(j); + if (packageName.equals(imi.getPackageName())) { + enabledIme = true; + break; + } + } + if (enabledIme) { + // enabled ime. skip + continue; + } + if (currentSpellChecker != null + && packageName.equals(currentSpellChecker.getPackageName())) { + // enabled spell checker. skip + if (DEBUG) { + Slog.d(TAG, packageName + " is the current spell checker. skip"); + } + continue; + } + ApplicationInfo ai = null; + try { + ai = packageManager.getApplicationInfo(packageName, + PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS); + } catch (NameNotFoundException e) { + Slog.w(TAG, "NameNotFoundException: " + packageName, e); + } + if (ai == null) { + // No app found for packageName + continue; + } + final boolean isSystemPackage = (ai.flags & ApplicationInfo.FLAG_SYSTEM) != 0; + if (!isSystemPackage) { + continue; + } + setDisabledUntilUsed(packageManager, packageName); + } + } + + private static void setDisabledUntilUsed(PackageManager packageManager, String packageName) { + final int state = packageManager.getApplicationEnabledSetting(packageName); + if (state == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT + || state == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) { + if (DEBUG) { + Slog.d(TAG, "Update state(" + packageName + "): DISABLED_UNTIL_USED"); + } + packageManager.setApplicationEnabledSetting(packageName, + PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0); + } else { + if (DEBUG) { + Slog.d(TAG, packageName + " is already DISABLED_UNTIL_USED"); + } + } + } + /** * Utility class for putting and getting settings for InputMethod * TODO: Move all putters and getters of settings to this class. @@ -405,8 +480,7 @@ public class InputMethodUtils { public void setCurrentUserId(int userId) { if (DEBUG) { - Slog.d(TAG, "--- Swtich the current user from " + mCurrentUserId + " to " - + userId + ", new ime = " + getSelectedInputMethod()); + Slog.d(TAG, "--- Swtich the current user from " + mCurrentUserId + " to " + userId); } // IMMS settings are kept per user, so keep track of current user mCurrentUserId = userId; diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 5c772b2..0313308 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -1108,4 +1108,20 @@ stream or master volumes. --> <bool name="config_useFixedVolume">false</bool> + <!-- The list of IMEs which should be disabled until used. + This function suppresses update notifications for these pre-installed apps. + We need to set this configuration carefully that they should not have functionarities + other than "IME" or "Spell Checker". In InputMethodManagerService, + the listed IMEs are disabled until used when all of the following conditions are met. + 1. Not selected as an enabled IME in the Settings + 2. Not selected as a spell checker in the Settings + 3. Installed + 4. A pre-installed IME + 5. Not enabled + And the disabled_until_used state for an IME is released by InputMethodManagerService + when the IME is selected as an enabled IME. --> + <string-array name="config_disabledUntilUsedPreinstalledImes" translatable="false"> + <item>com.android.inputmethod.latin</item> + </string-array> + </resources> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 2158e90..6a3bdaa 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -919,6 +919,7 @@ <java-symbol type="array" name="special_locale_names" /> <java-symbol type="array" name="config_masterVolumeRamp" /> <java-symbol type="array" name="config_cdma_dun_supported_types" /> + <java-symbol type="array" name="config_disabledUntilUsedPreinstalledImes" /> <java-symbol type="drawable" name="default_wallpaper" /> <java-symbol type="drawable" name="indicator_input_error" /> |