Move #mDeviceIdToShowIme to binding controller
This CL mechanically moves #mDeviceIdToShowIme from IMMS to
InputMethodBindingController without changing the semantics.
Bug: 305849394
Test: presubmit
Flag: EXEMPT refactor
Change-Id: Ifeb454c4852da342e6850cebe404340b5d06cd6c
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java b/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java
index 3d75c48..9e8bf0e 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java
@@ -17,6 +17,7 @@
package com.android.server.inputmethod;
import static android.app.ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_DENIED;
+import static android.content.Context.DEVICE_ID_DEFAULT;
import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER;
import static android.view.Display.INVALID_DISPLAY;
@@ -91,6 +92,7 @@
/** The display id for which the latest startInput was called. */
@GuardedBy("ImfLock.class") private int mDisplayIdToShowIme = INVALID_DISPLAY;
+ @GuardedBy("ImfLock.class") private int mDeviceIdToShowIme = DEVICE_ID_DEFAULT;
@Nullable private CountDownLatch mLatchForTesting;
@@ -609,4 +611,14 @@
int getDisplayIdToShowIme() {
return mDisplayIdToShowIme;
}
+
+ @GuardedBy("ImfLock.class")
+ void setDeviceIdToShowIme(int deviceId) {
+ mDeviceIdToShowIme = deviceId;
+ }
+
+ @GuardedBy("ImfLock.class")
+ int getDeviceIdToShowIme() {
+ return mDeviceIdToShowIme;
+ }
}
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index d236d7a..7f39232 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -382,10 +382,6 @@
@MultiUserUnawareField
private HardwareKeyboardShortcutController mHardwareKeyboardShortcutController;
- @GuardedBy("ImfLock.class")
- @MultiUserUnawareField
- private int mDeviceIdToShowIme = DEVICE_ID_DEFAULT;
-
@Nullable
private StatusBarManagerInternal mStatusBarManagerInternal;
@SharedByAllUsersField
@@ -2143,7 +2139,8 @@
if (deviceMethodId == null) {
mVisibilityStateComputer.getImePolicy().setImeHiddenByDisplayPolicy(true);
} else if (!Objects.equals(deviceMethodId, selectedMethodId)) {
- setInputMethodLocked(deviceMethodId, NOT_A_SUBTYPE_ID, mDeviceIdToShowIme);
+ setInputMethodLocked(deviceMethodId, NOT_A_SUBTYPE_ID,
+ bindingController.getDeviceIdToShowIme());
selectedMethodId = deviceMethodId;
}
@@ -2256,11 +2253,12 @@
}
final InputMethodSettings settings = InputMethodSettingsRepository.get(userId);
- final int oldDeviceId = mDeviceIdToShowIme;
final var bindingController = getInputMethodBindingController(userId);
+ final int oldDeviceId = bindingController.getDeviceIdToShowIme();
final int displayIdToShowIme = bindingController.getDisplayIdToShowIme();
- mDeviceIdToShowIme = mVdmInternal.getDeviceIdForDisplayId(displayIdToShowIme);
- if (mDeviceIdToShowIme == DEVICE_ID_DEFAULT) {
+ final int newDeviceId = mVdmInternal.getDeviceIdForDisplayId(displayIdToShowIme);
+ bindingController.setDeviceIdToShowIme(newDeviceId);
+ if (newDeviceId == DEVICE_ID_DEFAULT) {
if (oldDeviceId == DEVICE_ID_DEFAULT) {
return currentMethodId;
}
@@ -2272,13 +2270,12 @@
return defaultDeviceMethodId;
}
- final String deviceMethodId =
- mVirtualDeviceMethodMap.get(mDeviceIdToShowIme, currentMethodId);
+ final String deviceMethodId = mVirtualDeviceMethodMap.get(newDeviceId, currentMethodId);
if (Objects.equals(deviceMethodId, currentMethodId)) {
return currentMethodId;
} else if (!settings.getMethodMap().containsKey(deviceMethodId)) {
if (DEBUG) {
- Slog.v(TAG, "Disabling IME on virtual device with id " + mDeviceIdToShowIme
+ Slog.v(TAG, "Disabling IME on virtual device with id " + newDeviceId
+ " because its custom input method is not available: " + deviceMethodId);
}
return null;
@@ -2293,7 +2290,7 @@
if (DEBUG) {
Slog.v(TAG, "Switching current input method from " + currentMethodId
+ " to device-specific one " + deviceMethodId + " because the current display "
- + displayIdToShowIme + " belongs to device with id " + mDeviceIdToShowIme);
+ + displayIdToShowIme + " belongs to device with id " + newDeviceId);
}
return deviceMethodId;
}
@@ -2934,7 +2931,7 @@
* <li>
* {@link PackageManager#COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED} is not updated.
* </li>
- * <li>{@link #mDeviceIdToShowIme} is ignored.</li>
+ * <li>{@link InputMethodBindingController#getDeviceIdToShowIme()} is ignored.</li>
* <li>{@link #mSwitchingController} is ignored.</li>
* <li>{@link #mHardwareKeyboardShortcutController} is ignored.</li>
* <li>{@link #mPreventImeStartupUnlessTextEditor} is ignored.</li>
@@ -3004,7 +3001,8 @@
}
}
- if (mDeviceIdToShowIme == DEVICE_ID_DEFAULT) {
+ final var bindingController = getInputMethodBindingController(mCurrentUserId);
+ if (bindingController.getDeviceIdToShowIme() == DEVICE_ID_DEFAULT) {
String ime = SecureSettingsWrapper.getString(
Settings.Secure.DEFAULT_INPUT_METHOD, null, userId);
String defaultDeviceIme = SecureSettingsWrapper.getString(
@@ -3122,8 +3120,10 @@
return;
}
+ final var bindingController = getInputMethodBindingController(userId);
// Changing to a different IME.
- if (mDeviceIdToShowIme != DEVICE_ID_DEFAULT && deviceId == DEVICE_ID_DEFAULT) {
+ if (bindingController.getDeviceIdToShowIme() != DEVICE_ID_DEFAULT
+ && deviceId == DEVICE_ID_DEFAULT) {
// This change should only be applicable to the default device but the current input
// method is a custom one specific to a virtual device. So only update the settings
// entry used to restore the default device input method once we want to show the IME
@@ -5381,7 +5381,8 @@
*/
@GuardedBy("ImfLock.class")
private boolean setInputMethodEnabledLocked(String id, boolean enabled) {
- final InputMethodSettings settings = InputMethodSettingsRepository.get(mCurrentUserId);
+ final int userId = mCurrentUserId;
+ final InputMethodSettings settings = InputMethodSettingsRepository.get(userId);
if (enabled) {
final String enabledImeIdsStr = settings.getEnabledInputMethodsStr();
final String newEnabledImeIdsStr = InputMethodUtils.concatEnabledImeIds(
@@ -5400,7 +5401,8 @@
StringBuilder builder = new StringBuilder();
if (settings.buildAndPutEnabledInputMethodsStrRemovingId(
builder, enabledInputMethodsList, id)) {
- if (mDeviceIdToShowIme == DEVICE_ID_DEFAULT) {
+ final var bindingController = getInputMethodBindingController(userId);
+ if (bindingController.getDeviceIdToShowIme() == DEVICE_ID_DEFAULT) {
// Disabled input method is currently selected, switch to another one.
final String selId = settings.getSelectedInputMethod();
if (id.equals(selId) && !chooseNewDefaultIMELocked()) {
@@ -5458,9 +5460,9 @@
@GuardedBy("ImfLock.class")
private void resetSelectedInputMethodAndSubtypeLocked(String newDefaultIme) {
- mDeviceIdToShowIme = DEVICE_ID_DEFAULT;
final var bindingController = getInputMethodBindingController(mCurrentUserId);
bindingController.setDisplayIdToShowIme(INVALID_DISPLAY);
+ bindingController.setDeviceIdToShowIme(DEVICE_ID_DEFAULT);
final InputMethodSettings settings = InputMethodSettingsRepository.get(mCurrentUserId);
settings.putSelectedDefaultDeviceInputMethod(null);