summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yohei Yukawa <yukawa@google.com> 2019-04-10 23:23:25 -0700
committer Yohei Yukawa <yukawa@google.com> 2019-04-10 23:23:25 -0700
commit2d4b343b69a8c9d86216fea772eddaedaa474bb2 (patch)
tree6ec7143d7aeffffff5e00d7f6a76aba60774cb75
parent099f80ce9762e8b20998759fd6082bdcd6291103 (diff)
Add '-u <user id>' option to 'adb shell ime reset'
This is a preparation to add end-to-end CTS for per-profile IME mode. In order to allow CTS tests to switch IME via shell command in multi-user environment, this CL adds '-u <user id>' option to adb shell ime reset Bug: 122924287 Test: Manually tested as follows: 1. Build aosp_blueline-userdebug and flash it 2. make -j SoftKeyboard 3. adb install -r $OUT/system/app/SoftKeyboard/SoftKeyboard.apk 4. adb shell ime enable com.example.android.softkeyboard/.SoftKeyboard 5. adb shell ime set com.example.android.softkeyboard/.SoftKeyboard 6. adb shell pm create-user test 7. adb shell am switch-user 10 8. adb shell ime list -s -u 0 -> com.android.inputmethod.latin/.LatinIME com.example.android.softkeyboard/.SoftKeyboard 9. adb shell ime reset -u 0 -> Reset current and enabled IMEs for user #0 Selected: com.android.inputmethod.latin/.LatinIME Enabled: com.android.inputmethod.latin/.LatinIME 10. adb shell ime list -s -u 0 -> com.android.inputmethod.latin/.LatinIME Test: Manually tested as follows. 1. Build aosp_blueline-userdebug and flash it 2. adb shell pm create-user restricted_test 3. adb root 4. adb shell pm set-user-restriction --user 10 no_debugging_features 1 5. adb shell ime reset -u all -> Reset current and enabled IMEs for user #0 Selected: com.android.inputmethod.latin/.LatinIME Enabled: com.android.inputmethod.latin/.LatinIME User #10 is restricted with DISALLOW_DEBUGGING_FEATURES Change-Id: Ie330c6faa76f366b78c15c0161873a051a3d40e3
-rw-r--r--services/core/java/com/android/server/inputmethod/InputMethodManagerService.java99
-rw-r--r--services/core/java/com/android/server/inputmethod/InputMethodUtils.java2
2 files changed, 64 insertions, 37 deletions
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index 7f9b3bd8fe03..e88d62f58507 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -4616,10 +4616,15 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
pw.decreaseIndent();
pw.decreaseIndent();
- pw.println("reset");
+ pw.println("reset [--user <USER_ID>]");
pw.increaseIndent();
pw.println("reset currently selected/enabled IMEs to the default ones as if "
+ "the device is initially booted with the current locale.");
+ pw.increaseIndent();
+ pw.print("--user <USER_ID>: Specify which user to reset.");
+ pw.println(" Assumes the current user if not specified.");
+ pw.decreaseIndent();
+
pw.decreaseIndent();
pw.decreaseIndent();
@@ -4874,45 +4879,67 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
@BinderThread
@ShellCommandResult
private int handleShellCommandResetInputMethod(@NonNull ShellCommand shellCommand) {
+ final PrintWriter out = shellCommand.getOutPrintWriter();
+ final int userIdToBeResolved = handleOptionsForCommandsThatOnlyHaveUserOption(shellCommand);
synchronized (mMethodMap) {
- if (!userHasDebugPriv(mSettings.getCurrentUserId(), shellCommand)) {
- return ShellCommandResult.SUCCESS;
- }
- final String nextIme;
- final List<InputMethodInfo> nextEnabledImes;
- hideCurrentInputLocked(0, null);
- unbindCurrentMethodLocked();
- // Reset the current IME
- resetSelectedInputMethodAndSubtypeLocked(null);
- // Also reset the settings of the current IME
- mSettings.putSelectedInputMethod(null);
- // Disable all enabled IMEs.
- mSettings.getEnabledInputMethodListLocked().forEach(
- imi -> setInputMethodEnabledLocked(imi.getId(), false));
- // Re-enable with default enabled IMEs.
- InputMethodUtils.getDefaultEnabledImes(mContext, mMethodList).forEach(
- imi -> setInputMethodEnabledLocked(imi.getId(), true));
- updateInputMethodsFromSettingsLocked(true /* enabledMayChange */);
- InputMethodUtils.setNonSelectedSystemImesDisabledUntilUsed(mIPackageManager,
- mSettings.getEnabledInputMethodListLocked(),
- mSettings.getCurrentUserId(),
- mContext.getBasePackageName());
- nextIme = mSettings.getSelectedInputMethod();
- nextEnabledImes = mSettings.getEnabledInputMethodListLocked();
- final PrintWriter pr = shellCommand.getOutPrintWriter();
- pr.println("Reset current and enabled IMEs");
- pr.println("Newly selected IME:");
- pr.print(" "); pr.println(nextIme);
- pr.println("Newly enabled IMEs:");
- {
- final int N = nextEnabledImes.size();
- for (int i = 0; i < N; ++i) {
- pr.print(" ");
- pr.println(nextEnabledImes.get(i).getId());
+ final int[] userIds = InputMethodUtils.resolveUserId(userIdToBeResolved,
+ mSettings.getCurrentUserId(), shellCommand.getErrPrintWriter());
+ for (int userId : userIds) {
+ if (!userHasDebugPriv(userId, shellCommand)) {
+ continue;
+ }
+ final String nextIme;
+ final List<InputMethodInfo> nextEnabledImes;
+ if (userId == mSettings.getCurrentUserId()) {
+ hideCurrentInputLocked(0, null);
+ unbindCurrentMethodLocked();
+ // Reset the current IME
+ resetSelectedInputMethodAndSubtypeLocked(null);
+ // Also reset the settings of the current IME
+ mSettings.putSelectedInputMethod(null);
+ // Disable all enabled IMEs.
+ mSettings.getEnabledInputMethodListLocked().forEach(
+ imi -> setInputMethodEnabledLocked(imi.getId(), false));
+ // Re-enable with default enabled IMEs.
+ InputMethodUtils.getDefaultEnabledImes(mContext, mMethodList).forEach(
+ imi -> setInputMethodEnabledLocked(imi.getId(), true));
+ updateInputMethodsFromSettingsLocked(true /* enabledMayChange */);
+ InputMethodUtils.setNonSelectedSystemImesDisabledUntilUsed(mIPackageManager,
+ mSettings.getEnabledInputMethodListLocked(),
+ mSettings.getCurrentUserId(),
+ mContext.getBasePackageName());
+ nextIme = mSettings.getSelectedInputMethod();
+ nextEnabledImes = mSettings.getEnabledInputMethodListLocked();
+ } else {
+ final ArrayMap<String, InputMethodInfo> methodMap = new ArrayMap<>();
+ final ArrayList<InputMethodInfo> methodList = new ArrayList<>();
+ final ArrayMap<String, List<InputMethodSubtype>> additionalSubtypeMap =
+ new ArrayMap<>();
+ AdditionalSubtypeUtils.load(additionalSubtypeMap, userId);
+ queryInputMethodServicesInternal(mContext, userId, additionalSubtypeMap,
+ methodMap, methodList);
+ final InputMethodSettings settings = new InputMethodSettings(
+ mContext.getResources(), mContext.getContentResolver(), methodMap,
+ userId, false);
+
+ nextEnabledImes = InputMethodUtils.getDefaultEnabledImes(mContext, methodList);
+ nextIme = InputMethodUtils.getMostApplicableDefaultIME(nextEnabledImes).getId();
+
+ // Reset enabled IMEs.
+ settings.putEnabledInputMethodsStr("");
+ nextEnabledImes.forEach(imi -> settings.appendAndPutEnabledInputMethodLocked(
+ imi.getId(), false));
+
+ // Reset selected IME.
+ settings.putSelectedInputMethod(nextIme);
+ settings.putSelectedSubtype(NOT_A_SUBTYPE_ID);
}
+ out.println("Reset current and enabled IMEs for user #" + userId);
+ out.println(" Selected: " + nextIme);
+ nextEnabledImes.forEach(ime -> out.println(" Enabled: " + ime.getId()));
}
- return ShellCommandResult.SUCCESS;
}
+ return ShellCommandResult.SUCCESS;
}
/**
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodUtils.java b/services/core/java/com/android/server/inputmethod/InputMethodUtils.java
index 4349b4aa3603..b5e19aeed0c5 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodUtils.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodUtils.java
@@ -1003,7 +1003,7 @@ final class InputMethodUtils {
return res;
}
- private void putEnabledInputMethodsStr(@Nullable String str) {
+ void putEnabledInputMethodsStr(@Nullable String str) {
if (DEBUG) {
Slog.d(TAG, "putEnabledInputMethodStr: " + str);
}