From dc9ddaee9a710cf6f5d7f37350650f82e706c706 Mon Sep 17 00:00:00 2001 From: satok Date: Thu, 6 Oct 2011 12:22:36 +0900 Subject: [PATCH] Fix the behavior for choosing new default IME not to choose an auxiliary IME as the default IME Bug: 5420127 Change-Id: I3649de36806fc24e1c85c2b15db5e37acad1f120 --- .../server/InputMethodManagerService.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java index 3e1fb9f7c2438..6ddbf5a5a95f6 100644 --- a/services/java/com/android/server/InputMethodManagerService.java +++ b/services/java/com/android/server/InputMethodManagerService.java @@ -574,7 +574,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } } if (defIm == null && mMethodList.size() > 0) { - defIm = mMethodList.get(0); + defIm = getMostApplicableDefaultIMELocked(); Slog.i(TAG, "No default found, using " + defIm.getId()); } if (defIm != null) { @@ -1925,19 +1925,26 @@ public class InputMethodManagerService extends IInputMethodManager.Stub return subtypes; } - private boolean chooseNewDefaultIMELocked() { + private InputMethodInfo getMostApplicableDefaultIMELocked() { List enabled = mSettings.getEnabledInputMethodListLocked(); if (enabled != null && enabled.size() > 0) { // We'd prefer to fall back on a system IME, since that is safer. int i=enabled.size(); while (i > 0) { i--; - if ((enabled.get(i).getServiceInfo().applicationInfo.flags - & ApplicationInfo.FLAG_SYSTEM) != 0) { + final InputMethodInfo imi = enabled.get(i); + if (isSystemIme(imi) && !imi.isAuxiliaryIme()) { break; } } - InputMethodInfo imi = enabled.get(i); + return enabled.get(i); + } + return null; + } + + private boolean chooseNewDefaultIMELocked() { + final InputMethodInfo imi = getMostApplicableDefaultIMELocked(); + if (imi != null) { if (DEBUG) { Slog.d(TAG, "New default IME was selected: " + imi.getId()); }