summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorsatok <satok@google.com>2011-01-18 00:55:13 +0900
committersatok <satok@google.com>2011-01-18 13:28:23 +0900
commitd871343dbbde38f25ac0b41155e2f9d2dd7aadca (patch)
tree8762e7a947903d026a9bdd5752626477f553367a /services
parent38f79d01db07f7cc3d3b49d594b675adfa8959d5 (diff)
downloadframeworks_base-d871343dbbde38f25ac0b41155e2f9d2dd7aadca.zip
frameworks_base-d871343dbbde38f25ac0b41155e2f9d2dd7aadca.tar.gz
frameworks_base-d871343dbbde38f25ac0b41155e2f9d2dd7aadca.tar.bz2
Fix the algorithm to get current input method subtype considering explicitly and implicitly enabled subtypes.
Change-Id: I2e6d9ae36a1335f67b6db7659244cdfb2bfe3068
Diffstat (limited to 'services')
-rw-r--r--services/java/com/android/server/InputMethodManagerService.java28
1 files changed, 21 insertions, 7 deletions
diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java
index 7b4f246..4d40620 100644
--- a/services/java/com/android/server/InputMethodManagerService.java
+++ b/services/java/com/android/server/InputMethodManagerService.java
@@ -2049,8 +2049,9 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
for (int i = 0; i < N; ++i) {
InputMethodSubtype subtype = subtypes.get(i);
final String subtypeLocale = subtype.getLocale();
- // An applicable subtype should match "mode".
- if (subtypes.get(i).getMode().equalsIgnoreCase(mode)) {
+ // An applicable subtype should match "mode". If mode is null, mode will be ignored,
+ // and all subtypes with all modes can be candidates.
+ if (mode == null || subtypes.get(i).getMode().equalsIgnoreCase(mode)) {
if (firstMatchedModeSubtype == null) {
firstMatchedModeSubtype = subtype;
}
@@ -2175,11 +2176,24 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
InputMethodInfo imi = mMethodMap.get(lastInputMethodId);
if (imi != null) {
// If there are no selected subtypes, the framework will try to find
- // the most applicable subtype from all subtypes whose mode is
- // SUBTYPE_MODE_KEYBOARD. This is an exceptional case, so we will hardcode
- // the mode.
- mCurrentSubtype = findLastResortApplicableSubtypeLocked(
- mRes, imi.getSubtypes(), SUBTYPE_MODE_KEYBOARD, null, true);
+ // the most applicable subtype from explicitly or implicitly enabled
+ // subtypes.
+ List<InputMethodSubtype> explicitlyOrImplicitlyEnabledSubtypes =
+ getEnabledInputMethodSubtypeList(imi, true);
+ // If there is only one explicitly or implicitly enabled subtype,
+ // just returns it.
+ if (explicitlyOrImplicitlyEnabledSubtypes.size() == 1) {
+ mCurrentSubtype = explicitlyOrImplicitlyEnabledSubtypes.get(0);
+ } else if (explicitlyOrImplicitlyEnabledSubtypes.size() > 1) {
+ mCurrentSubtype = findLastResortApplicableSubtypeLocked(
+ mRes, explicitlyOrImplicitlyEnabledSubtypes,
+ SUBTYPE_MODE_KEYBOARD, null, true);
+ if (mCurrentSubtype == null) {
+ mCurrentSubtype = findLastResortApplicableSubtypeLocked(
+ mRes, explicitlyOrImplicitlyEnabledSubtypes, null, null,
+ true);
+ }
+ }
}
} else {
mCurrentSubtype =