diff options
author | satok <satok@google.com> | 2011-01-18 00:55:13 +0900 |
---|---|---|
committer | satok <satok@google.com> | 2011-01-18 13:28:23 +0900 |
commit | d871343dbbde38f25ac0b41155e2f9d2dd7aadca (patch) | |
tree | 8762e7a947903d026a9bdd5752626477f553367a /services/java/com | |
parent | 38f79d01db07f7cc3d3b49d594b675adfa8959d5 (diff) | |
download | frameworks_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/java/com')
-rw-r--r-- | services/java/com/android/server/InputMethodManagerService.java | 28 |
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 = |