Loading services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +6 −4 Original line number Diff line number Diff line Loading @@ -6499,10 +6499,12 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub nextEnabledImes).getId(); // Reset enabled IMEs. settings.putEnabledInputMethodsStr(""); nextEnabledImes.forEach( imi -> settings.appendAndPutEnabledInputMethodLocked( imi.getId())); final String[] nextEnabledImeIds = new String[nextEnabledImes.size()]; for (int i = 0; i < nextEnabledImeIds.length; ++i) { nextEnabledImeIds[i] = nextEnabledImes.get(i).getId(); } settings.putEnabledInputMethodsStr(InputMethodUtils.concatEnabledImeIds( settings.getEnabledInputMethodsStr(), nextEnabledImeIds)); // Reset selected IME. settings.putSelectedInputMethod(nextIme); Loading services/core/java/com/android/server/inputmethod/InputMethodUtils.java +31 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.os.UserHandle; import android.provider.Settings; import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; import android.util.IntArray; import android.util.Pair; import android.util.Printer; Loading @@ -50,6 +51,7 @@ import com.android.server.textservices.TextServicesManagerInternal; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.util.StringJoiner; import java.util.function.Consumer; import java.util.function.Predicate; Loading Loading @@ -984,6 +986,35 @@ final class InputMethodUtils { } } /** * Concat given IME IDs with an existing enabled IME * ({@link Settings.Secure#ENABLED_INPUT_METHODS}). * * @param existingEnabledImeId an existing {@link Settings.Secure#ENABLED_INPUT_METHODS} to * which {@code imeIDs} will be added. * @param imeIds an array of IME IDs to be added. For IME IDs that are already seen in * {@code existingEnabledImeId} will be skipped. * @return a new enabled IME ID string that can be stored in * {@link Settings.Secure#ENABLED_INPUT_METHODS}. */ @NonNull static String concatEnabledImeIds(@NonNull String existingEnabledImeId, @NonNull String... imeIds) { final ArraySet<String> alreadyEnabledIds = new ArraySet<>(); final StringJoiner joiner = new StringJoiner(Character.toString(INPUT_METHOD_SEPARATOR)); if (!TextUtils.isEmpty(existingEnabledImeId)) { splitEnabledImeStr(existingEnabledImeId, alreadyEnabledIds::add); joiner.add(existingEnabledImeId); } for (String id : imeIds) { if (!alreadyEnabledIds.contains(id)) { joiner.add(id); alreadyEnabledIds.add(id); } } return joiner.toString(); } /** * Convert the input method ID to a component name * Loading services/tests/servicestests/src/com/android/server/inputmethod/InputMethodUtilsTest.java +22 −0 Original line number Diff line number Diff line Loading @@ -1364,6 +1364,28 @@ public class InputMethodUtilsTest { "com.android/.ime1", "com.android/.ime2", "com.android/.ime3"); } @Test public void testConcatEnabledImeIds() { Truth.assertThat(InputMethodUtils.concatEnabledImeIds("")).isEmpty(); Truth.assertThat(InputMethodUtils.concatEnabledImeIds("", "com.android/.ime1")) .isEqualTo("com.android/.ime1"); Truth.assertThat(InputMethodUtils.concatEnabledImeIds( "com.android/.ime1", "com.android/.ime1")) .isEqualTo("com.android/.ime1"); Truth.assertThat(InputMethodUtils.concatEnabledImeIds( "com.android/.ime1", "com.android/.ime2")) .isEqualTo("com.android/.ime1:com.android/.ime2"); Truth.assertThat(InputMethodUtils.concatEnabledImeIds( "com.android/.ime1", "com.android/.ime2", "com.android/.ime3")) .isEqualTo("com.android/.ime1:com.android/.ime2:com.android/.ime3"); Truth.assertThat(InputMethodUtils.concatEnabledImeIds( "com.android/.ime1:com.android/.ime2", "com.android/.ime1")) .isEqualTo("com.android/.ime1:com.android/.ime2"); Truth.assertThat(InputMethodUtils.concatEnabledImeIds( "com.android/.ime1:com.android/.ime2", "com.android/.ime3")) .isEqualTo("com.android/.ime1:com.android/.ime2:com.android/.ime3"); } @Test public void updateEnabledImeStringTest() { // No change cases Loading Loading
services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +6 −4 Original line number Diff line number Diff line Loading @@ -6499,10 +6499,12 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub nextEnabledImes).getId(); // Reset enabled IMEs. settings.putEnabledInputMethodsStr(""); nextEnabledImes.forEach( imi -> settings.appendAndPutEnabledInputMethodLocked( imi.getId())); final String[] nextEnabledImeIds = new String[nextEnabledImes.size()]; for (int i = 0; i < nextEnabledImeIds.length; ++i) { nextEnabledImeIds[i] = nextEnabledImes.get(i).getId(); } settings.putEnabledInputMethodsStr(InputMethodUtils.concatEnabledImeIds( settings.getEnabledInputMethodsStr(), nextEnabledImeIds)); // Reset selected IME. settings.putSelectedInputMethod(nextIme); Loading
services/core/java/com/android/server/inputmethod/InputMethodUtils.java +31 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.os.UserHandle; import android.provider.Settings; import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; import android.util.IntArray; import android.util.Pair; import android.util.Printer; Loading @@ -50,6 +51,7 @@ import com.android.server.textservices.TextServicesManagerInternal; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.util.StringJoiner; import java.util.function.Consumer; import java.util.function.Predicate; Loading Loading @@ -984,6 +986,35 @@ final class InputMethodUtils { } } /** * Concat given IME IDs with an existing enabled IME * ({@link Settings.Secure#ENABLED_INPUT_METHODS}). * * @param existingEnabledImeId an existing {@link Settings.Secure#ENABLED_INPUT_METHODS} to * which {@code imeIDs} will be added. * @param imeIds an array of IME IDs to be added. For IME IDs that are already seen in * {@code existingEnabledImeId} will be skipped. * @return a new enabled IME ID string that can be stored in * {@link Settings.Secure#ENABLED_INPUT_METHODS}. */ @NonNull static String concatEnabledImeIds(@NonNull String existingEnabledImeId, @NonNull String... imeIds) { final ArraySet<String> alreadyEnabledIds = new ArraySet<>(); final StringJoiner joiner = new StringJoiner(Character.toString(INPUT_METHOD_SEPARATOR)); if (!TextUtils.isEmpty(existingEnabledImeId)) { splitEnabledImeStr(existingEnabledImeId, alreadyEnabledIds::add); joiner.add(existingEnabledImeId); } for (String id : imeIds) { if (!alreadyEnabledIds.contains(id)) { joiner.add(id); alreadyEnabledIds.add(id); } } return joiner.toString(); } /** * Convert the input method ID to a component name * Loading
services/tests/servicestests/src/com/android/server/inputmethod/InputMethodUtilsTest.java +22 −0 Original line number Diff line number Diff line Loading @@ -1364,6 +1364,28 @@ public class InputMethodUtilsTest { "com.android/.ime1", "com.android/.ime2", "com.android/.ime3"); } @Test public void testConcatEnabledImeIds() { Truth.assertThat(InputMethodUtils.concatEnabledImeIds("")).isEmpty(); Truth.assertThat(InputMethodUtils.concatEnabledImeIds("", "com.android/.ime1")) .isEqualTo("com.android/.ime1"); Truth.assertThat(InputMethodUtils.concatEnabledImeIds( "com.android/.ime1", "com.android/.ime1")) .isEqualTo("com.android/.ime1"); Truth.assertThat(InputMethodUtils.concatEnabledImeIds( "com.android/.ime1", "com.android/.ime2")) .isEqualTo("com.android/.ime1:com.android/.ime2"); Truth.assertThat(InputMethodUtils.concatEnabledImeIds( "com.android/.ime1", "com.android/.ime2", "com.android/.ime3")) .isEqualTo("com.android/.ime1:com.android/.ime2:com.android/.ime3"); Truth.assertThat(InputMethodUtils.concatEnabledImeIds( "com.android/.ime1:com.android/.ime2", "com.android/.ime1")) .isEqualTo("com.android/.ime1:com.android/.ime2"); Truth.assertThat(InputMethodUtils.concatEnabledImeIds( "com.android/.ime1:com.android/.ime2", "com.android/.ime3")) .isEqualTo("com.android/.ime1:com.android/.ime2:com.android/.ime3"); } @Test public void updateEnabledImeStringTest() { // No change cases Loading