summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorBrandon Ballinger <brandonb@google.com>2009-10-22 10:48:49 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2009-10-22 10:48:49 -0700
commit9f9f56212610ddd69c8af8ddeeed39265c0e58e1 (patch)
treeeac6a9dd01cae217f5e0d895687318cd854bf002 /services
parent585449b084ebeaaad4b9d2bc1912490e952c5a01 (diff)
parent0737b1643071694cf8767e3609ad628f1679d63a (diff)
downloadframeworks_base-9f9f56212610ddd69c8af8ddeeed39265c0e58e1.zip
frameworks_base-9f9f56212610ddd69c8af8ddeeed39265c0e58e1.tar.gz
frameworks_base-9f9f56212610ddd69c8af8ddeeed39265c0e58e1.tar.bz2
am 0737b164: Merge change I959a6f46 into eclair
Merge commit '0737b1643071694cf8767e3609ad628f1679d63a' into eclair-mr2 * commit '0737b1643071694cf8767e3609ad628f1679d63a': Fix bug 2194213: Non-default system IMEs are enabled, but not initially shown in input method switcher.
Diffstat (limited to 'services')
-rw-r--r--services/java/com/android/server/InputMethodManagerService.java53
1 files changed, 33 insertions, 20 deletions
diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java
index 1da2b47..e2e0ba9 100644
--- a/services/java/com/android/server/InputMethodManagerService.java
+++ b/services/java/com/android/server/InputMethodManagerService.java
@@ -41,6 +41,7 @@ import android.content.IntentFilter;
import android.content.DialogInterface.OnCancelListener;
import android.content.Intent;
import android.content.ServiceConnection;
+import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
@@ -366,16 +367,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
// Uh oh, current input method is no longer around!
// Pick another one...
Log.i(TAG, "Current input method removed: " + curInputMethodId);
- List<InputMethodInfo> enabled = getEnabledInputMethodListLocked();
- if (enabled != null && enabled.size() > 0) {
- changed = true;
- curIm = enabled.get(0);
- curInputMethodId = curIm.getId();
- Log.i(TAG, "Switching to: " + curInputMethodId);
- Settings.Secure.putString(mContext.getContentResolver(),
- Settings.Secure.DEFAULT_INPUT_METHOD,
- curInputMethodId);
- } else if (curIm != null) {
+ if (!chooseNewDefaultIME()) {
changed = true;
curIm = null;
curInputMethodId = "";
@@ -389,16 +381,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
} else if (curIm == null) {
// We currently don't have a default input method... is
// one now available?
- List<InputMethodInfo> enabled = getEnabledInputMethodListLocked();
- if (enabled != null && enabled.size() > 0) {
- changed = true;
- curIm = enabled.get(0);
- curInputMethodId = curIm.getId();
- Log.i(TAG, "New default input method: " + curInputMethodId);
- Settings.Secure.putString(mContext.getContentResolver(),
- Settings.Secure.DEFAULT_INPUT_METHOD,
- curInputMethodId);
- }
+ changed = chooseNewDefaultIME();
}
if (changed) {
@@ -1369,6 +1352,23 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
return false;
}
+ private boolean isSystemIme(InputMethodInfo inputMethod) {
+ return (inputMethod.getServiceInfo().applicationInfo.flags
+ & ApplicationInfo.FLAG_SYSTEM) != 0;
+ }
+
+ private boolean chooseNewDefaultIME() {
+ List<InputMethodInfo> enabled = getEnabledInputMethodListLocked();
+ if (enabled != null && enabled.size() > 0) {
+ Settings.Secure.putString(mContext.getContentResolver(),
+ Settings.Secure.DEFAULT_INPUT_METHOD,
+ enabled.get(0).getId());
+ return true;
+ }
+
+ return false;
+ }
+
void buildInputMethodListLocked(ArrayList<InputMethodInfo> list,
HashMap<String, InputMethodInfo> map) {
list.clear();
@@ -1399,6 +1399,11 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
list.add(p);
map.put(p.getId(), p);
+ // System IMEs are enabled by default
+ if (isSystemIme(p)) {
+ setInputMethodEnabled(p.getId(), true);
+ }
+
if (DEBUG) {
Log.d(TAG, "Found a third-party input method " + p);
}
@@ -1409,6 +1414,14 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
Log.w(TAG, "Unable to load input method " + compName, e);
}
}
+
+ String defaultIme = Settings.Secure.getString(mContext
+ .getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD);
+ if (!map.containsKey(defaultIme)) {
+ if (chooseNewDefaultIME()) {
+ updateFromSettingsLocked();
+ }
+ }
}
// ----------------------------------------------------------------------