diff options
-rw-r--r-- | services/core/java/com/android/server/inputmethod/HardwareKeyboardShortcutController.java | 21 | ||||
-rw-r--r-- | services/core/java/com/android/server/inputmethod/InputMethodManagerService.java | 25 |
2 files changed, 39 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/inputmethod/HardwareKeyboardShortcutController.java b/services/core/java/com/android/server/inputmethod/HardwareKeyboardShortcutController.java index f0e4b0f59b06..898d5a5e0644 100644 --- a/services/core/java/com/android/server/inputmethod/HardwareKeyboardShortcutController.java +++ b/services/core/java/com/android/server/inputmethod/HardwareKeyboardShortcutController.java @@ -19,6 +19,8 @@ package com.android.server.inputmethod; import android.annotation.AnyThread; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UserIdInt; +import android.util.ArrayMap; import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodSubtype; @@ -33,9 +35,26 @@ final class HardwareKeyboardShortcutController { @GuardedBy("ImfLock.class") private final ArrayList<InputMethodSubtypeHandle> mSubtypeHandles = new ArrayList<>(); + @UserIdInt + private final int mUserId; + + @AnyThread + @UserIdInt + int getUserId() { + return mUserId; + } + + HardwareKeyboardShortcutController( + @NonNull ArrayMap<String, InputMethodInfo> methodMap, @UserIdInt int userId) { + mUserId = userId; + reset(methodMap); + } + @GuardedBy("ImfLock.class") - void reset(@NonNull InputMethodUtils.InputMethodSettings settings) { + void reset(@NonNull ArrayMap<String, InputMethodInfo> methodMap) { mSubtypeHandles.clear(); + final InputMethodUtils.InputMethodSettings settings = + new InputMethodUtils.InputMethodSettings(methodMap, mUserId); for (final InputMethodInfo imi : settings.getEnabledInputMethodListLocked()) { if (!imi.shouldShowInInputMethodPicker()) { continue; diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java index bcb21dda604c..94811585dc56 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java @@ -319,8 +319,9 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub // TODO: Instantiate mSwitchingController for each user. @NonNull private InputMethodSubtypeSwitchingController mSwitchingController; - final HardwareKeyboardShortcutController mHardwareKeyboardShortcutController = - new HardwareKeyboardShortcutController(); + // TODO: Instantiate mHardwareKeyboardShortcutController for each user. + @NonNull + private HardwareKeyboardShortcutController mHardwareKeyboardShortcutController; /** * Tracks how many times {@link #mMethodMap} was updated. @@ -1701,7 +1702,8 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub mSwitchingController = InputMethodSubtypeSwitchingController.createInstanceLocked(context, mMethodMap, userId); - mHardwareKeyboardShortcutController.reset(mSettings); + mHardwareKeyboardShortcutController = + new HardwareKeyboardShortcutController(mMethodMap, userId); mMenuController = new InputMethodMenuController(this); mBindingController = bindingControllerForTesting != null @@ -3215,8 +3217,13 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub mSwitchingController = InputMethodSubtypeSwitchingController.createInstanceLocked( mContext, mMethodMap, mSettings.getCurrentUserId()); } - - mHardwareKeyboardShortcutController.reset(mSettings); + // TODO: Instantiate mHardwareKeyboardShortcutController for each user. + if (mSettings.getCurrentUserId() == mHardwareKeyboardShortcutController.getUserId()) { + mHardwareKeyboardShortcutController.reset(mMethodMap); + } else { + mHardwareKeyboardShortcutController = new HardwareKeyboardShortcutController( + mMethodMap, mSettings.getCurrentUserId()); + } sendOnNavButtonFlagsChangedLocked(); } @@ -5224,7 +5231,13 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub mSwitchingController = InputMethodSubtypeSwitchingController.createInstanceLocked( mContext, mMethodMap, mSettings.getCurrentUserId()); } - mHardwareKeyboardShortcutController.reset(mSettings); + // TODO: Instantiate mHardwareKeyboardShortcutController for each user. + if (mSettings.getCurrentUserId() == mHardwareKeyboardShortcutController.getUserId()) { + mHardwareKeyboardShortcutController.reset(mMethodMap); + } else { + mHardwareKeyboardShortcutController = new HardwareKeyboardShortcutController( + mMethodMap, mSettings.getCurrentUserId()); + } sendOnNavButtonFlagsChangedLocked(); |