summaryrefslogtreecommitdiffstats
path: root/services/java
diff options
context:
space:
mode:
authorsatok <satok@google.com>2010-11-23 13:34:33 +0900
committersatok <satok@google.com>2010-11-24 06:32:44 +0900
commitf3db1af8d55ab247b6db67baf4fe772c18f33cab (patch)
treee0ea1f8dfdcea2ceba9f3259dc83a655c3dca67d /services/java
parentb43d7589cf6201fc05f4c9d8b4a0c44d7cdba81e (diff)
downloadframeworks_base-f3db1af8d55ab247b6db67baf4fe772c18f33cab.zip
frameworks_base-f3db1af8d55ab247b6db67baf4fe772c18f33cab.tar.gz
frameworks_base-f3db1af8d55ab247b6db67baf4fe772c18f33cab.tar.bz2
Change return type of getShortcutInputMethodsAndSubtypes to Map<InputMethodInfo, List<InputMethodSubtype>>
bug: 3201828 - Brushed up the code Change-Id: I11ad9d1d749bd8947144ca7f1676bab3cf777fd6
Diffstat (limited to 'services/java')
-rw-r--r--services/java/com/android/server/InputMethodManagerService.java48
1 files changed, 29 insertions, 19 deletions
diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java
index b2cc6bd..eca37b7 100644
--- a/services/java/com/android/server/InputMethodManagerService.java
+++ b/services/java/com/android/server/InputMethodManagerService.java
@@ -240,10 +240,9 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
private InputMethodSubtype mCurrentSubtype;
// This list contains the pairs of InputMethodInfo and InputMethodSubtype.
- private List<Pair<InputMethodInfo, InputMethodSubtype>> mShortcutInputMethodsAndSubtypes;
- // This list is used for returning the pairs of InputMethodInfo and InputMethodSubtype through
- // aidl. This list has imi1, subtype1 imi2, subtype2...
- private List mShortcutInputMethodsAndSubtypesObjectList;
+ private final HashMap<InputMethodInfo, ArrayList<InputMethodSubtype>>
+ mShortcutInputMethodsAndSubtypes =
+ new HashMap<InputMethodInfo, ArrayList<InputMethodSubtype>>();
/**
* Set to true if our ServiceConnection is currently actively bound to
@@ -992,7 +991,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
mCurMethodId = null;
unbindCurrentMethodLocked(true);
}
- mShortcutInputMethodsAndSubtypes = null;
+ mShortcutInputMethodsAndSubtypes.clear();
} else {
// There is no longer an input method set, so stop any current one.
mCurMethodId = null;
@@ -2022,7 +2021,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
+ mostApplicableIMI.getId() + "," + mostApplicableSubtypeId);
}
if (mostApplicableIMI != null && mostApplicableSubtypeId != NOT_A_SUBTYPE_ID) {
- ArrayList<Parcelable> ret = new ArrayList<Parcelable>(2);
return new Pair<InputMethodInfo, InputMethodSubtype> (mostApplicableIMI,
mostApplicableIMI.getSubtypes().get(mostApplicableSubtypeId));
} else {
@@ -2067,25 +2065,37 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
}
}
+ private void addShortcutInputMethodAndSubtypes(InputMethodInfo imi,
+ InputMethodSubtype subtype) {
+ if (mShortcutInputMethodsAndSubtypes.containsKey(imi)) {
+ mShortcutInputMethodsAndSubtypes.get(imi).add(subtype);
+ } else {
+ ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
+ subtypes.add(subtype);
+ mShortcutInputMethodsAndSubtypes.put(imi, subtypes);
+ }
+ }
+
// TODO: We should change the return type from List to List<Parcelable>
public List getShortcutInputMethodsAndSubtypes() {
synchronized (mMethodMap) {
- if (mShortcutInputMethodsAndSubtypesObjectList != null) {
+ if (mShortcutInputMethodsAndSubtypes.size() == 0) {
// If there are no selected shortcut subtypes, the framework will try to find
// the most applicable subtype from all subtypes whose mode is
// SUBTYPE_MODE_VOICE. This is an exceptional case, so we will hardcode the mode.
- mShortcutInputMethodsAndSubtypes =
- new ArrayList<Pair<InputMethodInfo, InputMethodSubtype>>();
- mShortcutInputMethodsAndSubtypes.add(
- findLastResortApplicableShortcutInputMethodAndSubtypeLocked(
- SUBTYPE_MODE_VOICE));
- mShortcutInputMethodsAndSubtypesObjectList = new ArrayList<Parcelable>();
- for (Pair ime: mShortcutInputMethodsAndSubtypes) {
- mShortcutInputMethodsAndSubtypesObjectList.add(ime.first);
- mShortcutInputMethodsAndSubtypesObjectList.add(ime.second);
- }
- }
- return mShortcutInputMethodsAndSubtypesObjectList;
+ Pair<InputMethodInfo, InputMethodSubtype> info =
+ findLastResortApplicableShortcutInputMethodAndSubtypeLocked(
+ SUBTYPE_MODE_VOICE);
+ addShortcutInputMethodAndSubtypes(info.first, info.second);
+ }
+ ArrayList ret = new ArrayList<Object>();
+ for (InputMethodInfo imi: mShortcutInputMethodsAndSubtypes.keySet()) {
+ ret.add(imi);
+ for (InputMethodSubtype subtype: mShortcutInputMethodsAndSubtypes.get(imi)) {
+ ret.add(subtype);
+ }
+ }
+ return ret;
}
}