From b182995d3b6f4c33a5fc467d293d4fa25a2ea21d Mon Sep 17 00:00:00 2001 From: Adrian Roos Date: Thu, 2 Mar 2023 13:57:55 +0000 Subject: [PATCH] IMF: Avoid config changes when resetting IMEs in IMMS Fixes an issue where "cmd input_method ime reset" triggers a configuration change through Configuration.keyboardHidden. Bug: 266708619 Test: atest CtsInputMethodTestCases Change-Id: I4347c77d78593c9e1a1c2f5172ab7874aa4ba4d5 --- .../InputMethodManagerService.java | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java index 8ef4e4afae9bc..0210348b033ab 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java @@ -6394,19 +6394,21 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub 0 /* flags */, null /* resultReceiver */, SoftInputShowHideReason.HIDE_RESET_SHELL_COMMAND); mBindingController.unbindCurrentMethod(); - // Reset the current IME - resetSelectedInputMethodAndSubtypeLocked(null); - // Also reset the settings of the current IME - mSettings.putSelectedInputMethod(null); - // Disable all enabled IMEs. - for (InputMethodInfo inputMethodInfo : - mSettings.getEnabledInputMethodListLocked()) { - setInputMethodEnabledLocked(inputMethodInfo.getId(), false); + + // Enable default IMEs, disable others + var toDisable = mSettings.getEnabledInputMethodListLocked(); + var defaultEnabled = InputMethodInfoUtils.getDefaultEnabledImes( + mContext, mMethodList); + toDisable.removeAll(defaultEnabled); + for (InputMethodInfo info : toDisable) { + setInputMethodEnabledLocked(info.getId(), false); } - // Re-enable with default enabled IMEs. - for (InputMethodInfo imi : InputMethodInfoUtils.getDefaultEnabledImes( - mContext, mMethodList)) { - setInputMethodEnabledLocked(imi.getId(), true); + for (InputMethodInfo info : defaultEnabled) { + setInputMethodEnabledLocked(info.getId(), true); + } + // Choose new default IME, reset to none if no IME available. + if (!chooseNewDefaultIMELocked()) { + resetSelectedInputMethodAndSubtypeLocked(null); } updateInputMethodsFromSettingsLocked(true /* enabledMayChange */); InputMethodUtils.setNonSelectedSystemImesDisabledUntilUsed(