summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Seigo Nonaka <nona@google.com> 2015-09-17 06:01:13 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2015-09-17 06:01:13 +0000
commit70125f70dc058f0a79485ef473783e1fc6adbfc9 (patch)
tree8edb05ac0fc00fc6372337769f6419cf5348feff
parentf3b53ec7957e5de83cbda7bc74a993bf8be0e2a9 (diff)
parent2a099bcd6fe974bad47363c214a7bb327484aff8 (diff)
Merge "Move buildInputMethodsAndSubtypesString to InputMethodUtils"
-rw-r--r--core/java/com/android/internal/inputmethod/InputMethodUtils.java18
-rw-r--r--core/tests/coretests/src/com/android/internal/inputmethod/InputMethodUtilsTest.java116
-rw-r--r--services/core/java/com/android/server/InputMethodManagerService.java20
3 files changed, 136 insertions, 18 deletions
diff --git a/core/java/com/android/internal/inputmethod/InputMethodUtils.java b/core/java/com/android/internal/inputmethod/InputMethodUtils.java
index a4ef00afdf02..01ac22e3c4fd 100644
--- a/core/java/com/android/internal/inputmethod/InputMethodUtils.java
+++ b/core/java/com/android/internal/inputmethod/InputMethodUtils.java
@@ -793,6 +793,24 @@ public class InputMethodUtils {
return imeMap;
}
+ @NonNull
+ public static String buildInputMethodsAndSubtypesString(
+ @NonNull final ArrayMap<String, ArraySet<String>> map) {
+ // we want to use the canonical InputMethodSettings implementation,
+ // so we convert data structures first.
+ List<Pair<String, ArrayList<String>>> imeMap = new ArrayList<>(4);
+ for (ArrayMap.Entry<String, ArraySet<String>> entry : map.entrySet()) {
+ final String imeName = entry.getKey();
+ final ArraySet<String> subtypeSet = entry.getValue();
+ final ArrayList<String> subtypes = new ArrayList<>(2);
+ if (subtypeSet != null) {
+ subtypes.addAll(subtypeSet);
+ }
+ imeMap.add(new Pair<>(imeName, subtypes));
+ }
+ return InputMethodSettings.buildInputMethodsSettingString(imeMap);
+ }
+
/**
* Utility class for putting and getting settings for InputMethod
* TODO: Move all putters and getters of settings to this class.
diff --git a/core/tests/coretests/src/com/android/internal/inputmethod/InputMethodUtilsTest.java b/core/tests/coretests/src/com/android/internal/inputmethod/InputMethodUtilsTest.java
index 5e7f127fd4a6..c279c8f24362 100644
--- a/core/tests/coretests/src/com/android/internal/inputmethod/InputMethodUtilsTest.java
+++ b/core/tests/coretests/src/com/android/internal/inputmethod/InputMethodUtilsTest.java
@@ -1075,4 +1075,120 @@ public class InputMethodUtilsTest extends InstrumentationTestCase {
assertTrue(subtypes2.isEmpty());
}
}
+
+ @SmallTest
+ public void testbuildInputMethodsAndSubtypesString() {
+ {
+ ArrayMap<String, ArraySet<String>> map = new ArrayMap<>();
+ assertEquals("", InputMethodUtils.buildInputMethodsAndSubtypesString(map));
+ }
+ {
+ ArrayMap<String, ArraySet<String>> map = new ArrayMap<>();
+ map.put("ime0", new ArraySet<String>());
+ assertEquals("ime0", InputMethodUtils.buildInputMethodsAndSubtypesString(map));
+ }
+ {
+ ArrayMap<String, ArraySet<String>> map = new ArrayMap<>();
+ ArraySet<String> subtypes1 = new ArraySet<>();
+ subtypes1.add("subtype0");
+ map.put("ime0", subtypes1);
+ assertEquals("ime0;subtype0", InputMethodUtils.buildInputMethodsAndSubtypesString(map));
+ }
+ {
+ ArrayMap<String, ArraySet<String>> map = new ArrayMap<>();
+ ArraySet<String> subtypes1 = new ArraySet<>();
+ subtypes1.add("subtype0");
+ subtypes1.add("subtype1");
+ map.put("ime0", subtypes1);
+
+ // We do not expect what order will be used to concatenate items in
+ // InputMethodUtils.buildInputMethodsAndSubtypesString() hence enumerate all possible
+ // permutations here.
+ ArraySet<String> validSequences = new ArraySet<>();
+ validSequences.add("ime0;subtype0;subtype1");
+ validSequences.add("ime0;subtype1;subtype0");
+ assertTrue(validSequences.contains(
+ InputMethodUtils.buildInputMethodsAndSubtypesString(map)));
+ }
+ {
+ ArrayMap<String, ArraySet<String>> map = new ArrayMap<>();
+ map.put("ime0", new ArraySet<String>());
+ map.put("ime1", new ArraySet<String>());
+
+ ArraySet<String> validSequences = new ArraySet<>();
+ validSequences.add("ime0:ime1");
+ validSequences.add("ime1:ime0");
+ assertTrue(validSequences.contains(
+ InputMethodUtils.buildInputMethodsAndSubtypesString(map)));
+ }
+ {
+ ArrayMap<String, ArraySet<String>> map = new ArrayMap<>();
+ ArraySet<String> subtypes1 = new ArraySet<>();
+ subtypes1.add("subtype0");
+ map.put("ime0", subtypes1);
+ map.put("ime1", new ArraySet<String>());
+
+ ArraySet<String> validSequences = new ArraySet<>();
+ validSequences.add("ime0;subtype0:ime1");
+ validSequences.add("ime1;ime0;subtype0");
+ assertTrue(validSequences.contains(
+ InputMethodUtils.buildInputMethodsAndSubtypesString(map)));
+ }
+ {
+ ArrayMap<String, ArraySet<String>> map = new ArrayMap<>();
+ ArraySet<String> subtypes1 = new ArraySet<>();
+ subtypes1.add("subtype0");
+ subtypes1.add("subtype1");
+ map.put("ime0", subtypes1);
+ map.put("ime1", new ArraySet<String>());
+
+ ArraySet<String> validSequences = new ArraySet<>();
+ validSequences.add("ime0;subtype0;subtype1:ime1");
+ validSequences.add("ime0;subtype1;subtype0:ime1");
+ validSequences.add("ime1:ime0;subtype0;subtype1");
+ validSequences.add("ime1:ime0;subtype1;subtype0");
+ assertTrue(validSequences.contains(
+ InputMethodUtils.buildInputMethodsAndSubtypesString(map)));
+ }
+ {
+ ArrayMap<String, ArraySet<String>> map = new ArrayMap<>();
+ ArraySet<String> subtypes1 = new ArraySet<>();
+ subtypes1.add("subtype0");
+ map.put("ime0", subtypes1);
+
+ ArraySet<String> subtypes2 = new ArraySet<>();
+ subtypes2.add("subtype1");
+ map.put("ime1", subtypes2);
+
+ ArraySet<String> validSequences = new ArraySet<>();
+ validSequences.add("ime0;subtype0:ime1;subtype1");
+ validSequences.add("ime1;subtype1:ime0;subtype0");
+ assertTrue(validSequences.contains(
+ InputMethodUtils.buildInputMethodsAndSubtypesString(map)));
+ }
+ {
+ ArrayMap<String, ArraySet<String>> map = new ArrayMap<>();
+ ArraySet<String> subtypes1 = new ArraySet<>();
+ subtypes1.add("subtype0");
+ subtypes1.add("subtype1");
+ map.put("ime0", subtypes1);
+
+ ArraySet<String> subtypes2 = new ArraySet<>();
+ subtypes2.add("subtype2");
+ subtypes2.add("subtype3");
+ map.put("ime1", subtypes2);
+
+ ArraySet<String> validSequences = new ArraySet<>();
+ validSequences.add("ime0;subtype0;subtype1:ime1;subtype2;subtype3");
+ validSequences.add("ime0;subtype1;subtype0:ime1;subtype2;subtype3");
+ validSequences.add("ime0;subtype0;subtype1:ime1;subtype3;subtype2");
+ validSequences.add("ime0;subtype1;subtype0:ime1;subtype3;subtype2");
+ validSequences.add("ime1;subtype2;subtype3:ime0;subtype0;subtype1");
+ validSequences.add("ime2;subtype3;subtype2:ime0;subtype0;subtype1");
+ validSequences.add("ime3;subtype2;subtype3:ime0;subtype1;subtype0");
+ validSequences.add("ime4;subtype3;subtype2:ime0;subtype1;subtype0");
+ assertTrue(validSequences.contains(
+ InputMethodUtils.buildInputMethodsAndSubtypesString(map)));
+ }
+ }
}
diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java
index 6559eb36ae28..9dad7a181a06 100644
--- a/services/core/java/com/android/server/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/InputMethodManagerService.java
@@ -541,7 +541,8 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
prevSubtypes.addAll(entry.getValue());
}
- final String mergedImesAndSubtypesString = buildInputMethodsAndSubtypesString(prevMap);
+ final String mergedImesAndSubtypesString =
+ InputMethodUtils.buildInputMethodsAndSubtypesString(prevMap);
if (DEBUG_RESTORE) {
Slog.i(TAG, "Merged IME string:");
Slog.i(TAG, " " + mergedImesAndSubtypesString);
@@ -550,23 +551,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
Settings.Secure.ENABLED_INPUT_METHODS, mergedImesAndSubtypesString);
}
- // TODO: Move this method to InputMethodUtils with adding unit tests.
- static String buildInputMethodsAndSubtypesString(ArrayMap<String, ArraySet<String>> map) {
- // we want to use the canonical InputMethodSettings implementation,
- // so we convert data structures first.
- List<Pair<String, ArrayList<String>>> imeMap = new ArrayList<>(4);
- for (ArrayMap.Entry<String, ArraySet<String>> entry : map.entrySet()) {
- final String imeName = entry.getKey();
- final ArraySet<String> subtypeSet = entry.getValue();
- final ArrayList<String> subtypes = new ArrayList<>(2);
- if (subtypeSet != null) {
- subtypes.addAll(subtypeSet);
- }
- imeMap.add(new Pair<>(imeName, subtypes));
- }
- return InputMethodSettings.buildInputMethodsSettingString(imeMap);
- }
-
class MyPackageMonitor extends PackageMonitor {
private boolean isChangingPackagesOfCurrentUser() {
final int userId = getChangingUserId();