diff options
-rw-r--r-- | services/core/java/com/android/server/inputmethod/InputMethodManagerService.java | 99 | ||||
-rw-r--r-- | services/core/java/com/android/server/inputmethod/InputMethodUtils.java | 2 |
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); } |