diff options
| author | 2015-09-17 06:01:13 +0000 | |
|---|---|---|
| committer | 2015-09-17 06:01:13 +0000 | |
| commit | 70125f70dc058f0a79485ef473783e1fc6adbfc9 (patch) | |
| tree | 8edb05ac0fc00fc6372337769f6419cf5348feff | |
| parent | f3b53ec7957e5de83cbda7bc74a993bf8be0e2a9 (diff) | |
| parent | 2a099bcd6fe974bad47363c214a7bb327484aff8 (diff) | |
Merge "Move buildInputMethodsAndSubtypesString to InputMethodUtils"
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(); |