Loading services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +38 −56 Original line number Diff line number Diff line Loading @@ -491,6 +491,12 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. */ boolean mSystemReady; @GuardedBy("ImfLock.class") @NonNull InputMethodBindingController getInputMethodBindingController(@UserIdInt int userId) { return mUserDataRepository.getOrCreate(userId).mBindingController; } /** * Id obtained with {@link InputMethodInfo#getId()} for the currently selected input method. * This is to be synchronized with the secure settings keyed with Loading @@ -507,8 +513,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. @GuardedBy("ImfLock.class") @Nullable String getSelectedMethodIdLocked() { final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); return userData.mBindingController.getSelectedMethodId(); return getInputMethodBindingController(mCurrentUserId).getSelectedMethodId(); } @GuardedBy("ImfLock.class") Loading Loading @@ -594,8 +599,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. @GuardedBy("ImfLock.class") @Nullable IBinder getCurTokenLocked() { final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); return userData.mBindingController.getCurToken(); return getInputMethodBindingController(mCurrentUserId).getCurToken(); } /** Loading @@ -603,8 +607,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. */ @GuardedBy("ImfLock.class") int getCurTokenDisplayIdLocked() { final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); return userData.mBindingController.getCurTokenDisplayId(); return getInputMethodBindingController(mCurrentUserId).getCurTokenDisplayId(); } /** Loading @@ -620,8 +623,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. @GuardedBy("ImfLock.class") @Nullable IInputMethodInvoker getCurMethodLocked() { final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); return userData.mBindingController.getCurMethod(); return getInputMethodBindingController(mCurrentUserId).getCurMethod(); } /** Loading Loading @@ -1427,8 +1429,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. // Note that in b/197848765 we want to see if we can keep the binding alive for better // profile switching. final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); bindingController.unbindCurrentMethod(); unbindCurrentClientLocked(UnbindReason.SWITCH_USER); Loading Loading @@ -1648,8 +1649,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. // Check if selected IME of current user supports handwriting. if (userId == mCurrentUserId) { final var userData = mUserDataRepository.getOrCreate(userId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(userId); return bindingController.supportsStylusHandwriting() && (!connectionless || bindingController.supportsConnectionlessStylusHandwriting()); Loading Loading @@ -1849,8 +1849,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. // TODO(b/325515685): make binding controller user independent. Before this change, the // following dependencies also need to be user independent: mCurClient, mBoundToMethod, // getCurMethodLocked(), and mMenuController. final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); mCurClient.mClient.onUnbindMethod(bindingController.getSequenceNumber(), unbindClientReason); mCurClient.mSessionRequested = false; Loading Loading @@ -1930,8 +1929,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. final boolean restarting = !initial; final Binder startInputToken = new Binder(); final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); final StartInputInfo info = new StartInputInfo(mCurrentUserId, getCurTokenLocked(), getCurTokenDisplayIdLocked(), bindingController.getCurId(), startInputReason, Loading Loading @@ -2634,8 +2632,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. // When the IME switcher dialog is shown, the IME switcher button should be hidden. if (mMenuController.getSwitchingDialogLocked() != null) return false; // When we are switching IMEs, the IME switcher button should be hidden. final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); if (!Objects.equals(bindingController.getCurId(), bindingController.getSelectedMethodId())) { return false; Loading Loading @@ -2799,8 +2796,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. } else { vis &= ~InputMethodService.IME_VISIBLE_IMPERCEPTIBLE; } final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var curId = userData.mBindingController.getCurId(); final var curId = getInputMethodBindingController(mCurrentUserId).getCurId(); if (mMenuController.getSwitchingDialogLocked() != null || !Objects.equals(curId, getSelectedMethodIdLocked())) { // When the IME switcher dialog is shown, or we are switching IMEs, Loading Loading @@ -2861,8 +2857,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. id = imi.getId(); settings.putSelectedInputMethod(id); } final var userData = mUserDataRepository.getOrCreate(userId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(userId); bindingController.setSelectedMethodId(id); } Loading Loading @@ -3038,8 +3033,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. // mCurMethodId should be updated after setSelectedInputMethodAndSubtypeLocked() // because mCurMethodId is stored as a history in // setSelectedInputMethodAndSubtypeLocked(). final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); userData.mBindingController.setSelectedMethodId(id); getInputMethodBindingController(mCurrentUserId).setSelectedMethodId(id); if (mActivityManagerInternal.isSystemReady()) { Intent intent = new Intent(Intent.ACTION_INPUT_METHOD_CHANGED); Loading Loading @@ -3094,8 +3088,8 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. @Nullable String delegatorPackageName, @NonNull IConnectionlessHandwritingCallback callback) { synchronized (ImfLock.class) { final var userData = mUserDataRepository.getOrCreate(userId); if (!userData.mBindingController.supportsConnectionlessStylusHandwriting()) { final var bindingController = getInputMethodBindingController(userId); if (!bindingController.supportsConnectionlessStylusHandwriting()) { Slog.w(TAG, "Connectionless stylus handwriting mode unsupported by IME."); try { callback.onError(CONNECTIONLESS_HANDWRITING_ERROR_UNSUPPORTED); Loading Loading @@ -3178,8 +3172,8 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. } final long ident = Binder.clearCallingIdentity(); try { final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); if (!userData.mBindingController.supportsStylusHandwriting()) { final var bindingController = getInputMethodBindingController(mCurrentUserId); if (!bindingController.supportsStylusHandwriting()) { Slog.w(TAG, "Stylus HW unsupported by IME. Ignoring startStylusHandwriting()"); return false; Loading Loading @@ -3362,8 +3356,8 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. mVisibilityStateComputer.requestImeVisibility(windowToken, true); // Ensure binding the connection when IME is going to show. final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); userData.mBindingController.setCurrentMethodVisible(); final var bindingController = getInputMethodBindingController(mCurrentUserId); bindingController.setCurrentMethodVisible(); final IInputMethodInvoker curMethod = getCurMethodLocked(); ImeTracker.forLogging().onCancelled(mCurStatsToken, ImeTracker.PHASE_SERVER_WAIT_IME); final boolean readyToDispatchToIme; Loading Loading @@ -3471,8 +3465,8 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. } else { ImeTracker.forLogging().onCancelled(statsToken, ImeTracker.PHASE_SERVER_SHOULD_HIDE); } final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); userData.mBindingController.setCurrentMethodNotVisible(); final var bindingController = getInputMethodBindingController(mCurrentUserId); bindingController.setCurrentMethodNotVisible(); mVisibilityStateComputer.clearImeShowFlags(); // Cancel existing statsToken for show IME as we got a hide request. ImeTracker.forLogging().onCancelled(mCurStatsToken, ImeTracker.PHASE_SERVER_WAIT_IME); Loading Loading @@ -3540,8 +3534,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. "InputMethodManagerService#startInputOrWindowGainedFocus", mDumper); final InputBindResult result; synchronized (ImfLock.class) { final var userData = mUserDataRepository.getOrCreate(userId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(userId); // If the system is not yet ready, we shouldn't be running third party code. if (!mSystemReady) { return new InputBindResult( Loading Loading @@ -3810,8 +3803,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. if (mCurrentUserId != UserHandle.getUserId(uid)) { return false; } final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var curIntent = userData.mBindingController.getCurIntent(); final var curIntent = getInputMethodBindingController(mCurrentUserId).getCurIntent(); if (curIntent != null && InputMethodUtils.checkIfPackageBelongsToUid( mPackageManagerInternal, uid, curIntent.getComponent().getPackageName())) { return true; Loading Loading @@ -4220,8 +4212,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. mStylusIds.add(deviceId); // a new Stylus is detected. If IME supports handwriting, and we don't have // handwriting initialized, lets do it now. final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); if (!mHwController.getCurrentRequestId().isPresent() && bindingController.supportsStylusHandwriting()) { scheduleResetStylusHandwriting(); Loading Loading @@ -4402,8 +4393,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. private void dumpDebug(ProtoOutputStream proto, long fieldId) { synchronized (ImfLock.class) { final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); final long token = proto.start(fieldId); proto.write(CUR_METHOD_ID, getSelectedMethodIdLocked()); proto.write(CUR_SEQ, bindingController.getSequenceNumber()); Loading Loading @@ -4793,8 +4783,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. case MSG_RESET_HANDWRITING: { synchronized (ImfLock.class) { final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); if (bindingController.supportsStylusHandwriting() && getCurMethodLocked() != null && hasSupportedStylusLocked()) { Slog.d(TAG, "Initializing Handwriting Spy"); Loading @@ -4820,8 +4809,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. if (curMethod == null || mImeBindingState.mFocusedWindow == null) { return true; } final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); final HandwritingModeController.HandwritingSession session = mHwController.startHandwritingSession( msg.arg1 /*requestId*/, Loading Loading @@ -4877,8 +4865,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. return; } // TODO(b/325515685): user data must be retrieved by a userId parameter final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); if (mImePlatformCompatUtils.shouldUseSetInteractiveProtocol( bindingController.getCurMethodUid())) { // Handle IME visibility when interactive changed before finishing the input to Loading Loading @@ -5103,8 +5090,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. @GuardedBy("ImfLock.class") void sendOnNavButtonFlagsChangedLocked() { final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); final IInputMethodInvoker curMethod = bindingController.getCurMethod(); if (curMethod == null) { // No need to send the data if the IME is not yet bound. Loading Loading @@ -5591,8 +5577,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. public void onSessionForAccessibilityCreated(int accessibilityConnectionId, IAccessibilityInputMethodSession session, @UserIdInt int userId) { synchronized (ImfLock.class) { final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); // TODO(b/305829876): Implement user ID verification if (mCurClient != null) { clearClientSessionForAccessibilityLocked(mCurClient, accessibilityConnectionId); Loading Loading @@ -5627,8 +5612,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. public void unbindAccessibilityFromCurrentClient(int accessibilityConnectionId, @UserIdInt int userId) { synchronized (ImfLock.class) { final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); // TODO(b/305829876): Implement user ID verification if (mCurClient != null) { if (DEBUG) { Loading Loading @@ -5860,8 +5844,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. p.println(" pid=" + c.mPid); }; mClientController.forAllClients(clientControllerDump); final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); p.println(" mCurrentUserId=" + mCurrentUserId); p.println(" mCurMethodId=" + getSelectedMethodIdLocked()); client = mCurClient; Loading Loading @@ -6383,8 +6366,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. if (userId == mCurrentUserId) { hideCurrentInputLocked(mImeBindingState.mFocusedWindow, 0 /* flags */, SoftInputShowHideReason.HIDE_RESET_SHELL_COMMAND); final var userData = mUserDataRepository.getOrCreate(userId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(userId); bindingController.unbindCurrentMethod(); // Enable default IMEs, disable others Loading Loading
services/core/java/com/android/server/inputmethod/InputMethodManagerService.java +38 −56 Original line number Diff line number Diff line Loading @@ -491,6 +491,12 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. */ boolean mSystemReady; @GuardedBy("ImfLock.class") @NonNull InputMethodBindingController getInputMethodBindingController(@UserIdInt int userId) { return mUserDataRepository.getOrCreate(userId).mBindingController; } /** * Id obtained with {@link InputMethodInfo#getId()} for the currently selected input method. * This is to be synchronized with the secure settings keyed with Loading @@ -507,8 +513,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. @GuardedBy("ImfLock.class") @Nullable String getSelectedMethodIdLocked() { final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); return userData.mBindingController.getSelectedMethodId(); return getInputMethodBindingController(mCurrentUserId).getSelectedMethodId(); } @GuardedBy("ImfLock.class") Loading Loading @@ -594,8 +599,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. @GuardedBy("ImfLock.class") @Nullable IBinder getCurTokenLocked() { final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); return userData.mBindingController.getCurToken(); return getInputMethodBindingController(mCurrentUserId).getCurToken(); } /** Loading @@ -603,8 +607,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. */ @GuardedBy("ImfLock.class") int getCurTokenDisplayIdLocked() { final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); return userData.mBindingController.getCurTokenDisplayId(); return getInputMethodBindingController(mCurrentUserId).getCurTokenDisplayId(); } /** Loading @@ -620,8 +623,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. @GuardedBy("ImfLock.class") @Nullable IInputMethodInvoker getCurMethodLocked() { final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); return userData.mBindingController.getCurMethod(); return getInputMethodBindingController(mCurrentUserId).getCurMethod(); } /** Loading Loading @@ -1427,8 +1429,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. // Note that in b/197848765 we want to see if we can keep the binding alive for better // profile switching. final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); bindingController.unbindCurrentMethod(); unbindCurrentClientLocked(UnbindReason.SWITCH_USER); Loading Loading @@ -1648,8 +1649,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. // Check if selected IME of current user supports handwriting. if (userId == mCurrentUserId) { final var userData = mUserDataRepository.getOrCreate(userId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(userId); return bindingController.supportsStylusHandwriting() && (!connectionless || bindingController.supportsConnectionlessStylusHandwriting()); Loading Loading @@ -1849,8 +1849,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. // TODO(b/325515685): make binding controller user independent. Before this change, the // following dependencies also need to be user independent: mCurClient, mBoundToMethod, // getCurMethodLocked(), and mMenuController. final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); mCurClient.mClient.onUnbindMethod(bindingController.getSequenceNumber(), unbindClientReason); mCurClient.mSessionRequested = false; Loading Loading @@ -1930,8 +1929,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. final boolean restarting = !initial; final Binder startInputToken = new Binder(); final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); final StartInputInfo info = new StartInputInfo(mCurrentUserId, getCurTokenLocked(), getCurTokenDisplayIdLocked(), bindingController.getCurId(), startInputReason, Loading Loading @@ -2634,8 +2632,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. // When the IME switcher dialog is shown, the IME switcher button should be hidden. if (mMenuController.getSwitchingDialogLocked() != null) return false; // When we are switching IMEs, the IME switcher button should be hidden. final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); if (!Objects.equals(bindingController.getCurId(), bindingController.getSelectedMethodId())) { return false; Loading Loading @@ -2799,8 +2796,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. } else { vis &= ~InputMethodService.IME_VISIBLE_IMPERCEPTIBLE; } final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var curId = userData.mBindingController.getCurId(); final var curId = getInputMethodBindingController(mCurrentUserId).getCurId(); if (mMenuController.getSwitchingDialogLocked() != null || !Objects.equals(curId, getSelectedMethodIdLocked())) { // When the IME switcher dialog is shown, or we are switching IMEs, Loading Loading @@ -2861,8 +2857,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. id = imi.getId(); settings.putSelectedInputMethod(id); } final var userData = mUserDataRepository.getOrCreate(userId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(userId); bindingController.setSelectedMethodId(id); } Loading Loading @@ -3038,8 +3033,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. // mCurMethodId should be updated after setSelectedInputMethodAndSubtypeLocked() // because mCurMethodId is stored as a history in // setSelectedInputMethodAndSubtypeLocked(). final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); userData.mBindingController.setSelectedMethodId(id); getInputMethodBindingController(mCurrentUserId).setSelectedMethodId(id); if (mActivityManagerInternal.isSystemReady()) { Intent intent = new Intent(Intent.ACTION_INPUT_METHOD_CHANGED); Loading Loading @@ -3094,8 +3088,8 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. @Nullable String delegatorPackageName, @NonNull IConnectionlessHandwritingCallback callback) { synchronized (ImfLock.class) { final var userData = mUserDataRepository.getOrCreate(userId); if (!userData.mBindingController.supportsConnectionlessStylusHandwriting()) { final var bindingController = getInputMethodBindingController(userId); if (!bindingController.supportsConnectionlessStylusHandwriting()) { Slog.w(TAG, "Connectionless stylus handwriting mode unsupported by IME."); try { callback.onError(CONNECTIONLESS_HANDWRITING_ERROR_UNSUPPORTED); Loading Loading @@ -3178,8 +3172,8 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. } final long ident = Binder.clearCallingIdentity(); try { final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); if (!userData.mBindingController.supportsStylusHandwriting()) { final var bindingController = getInputMethodBindingController(mCurrentUserId); if (!bindingController.supportsStylusHandwriting()) { Slog.w(TAG, "Stylus HW unsupported by IME. Ignoring startStylusHandwriting()"); return false; Loading Loading @@ -3362,8 +3356,8 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. mVisibilityStateComputer.requestImeVisibility(windowToken, true); // Ensure binding the connection when IME is going to show. final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); userData.mBindingController.setCurrentMethodVisible(); final var bindingController = getInputMethodBindingController(mCurrentUserId); bindingController.setCurrentMethodVisible(); final IInputMethodInvoker curMethod = getCurMethodLocked(); ImeTracker.forLogging().onCancelled(mCurStatsToken, ImeTracker.PHASE_SERVER_WAIT_IME); final boolean readyToDispatchToIme; Loading Loading @@ -3471,8 +3465,8 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. } else { ImeTracker.forLogging().onCancelled(statsToken, ImeTracker.PHASE_SERVER_SHOULD_HIDE); } final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); userData.mBindingController.setCurrentMethodNotVisible(); final var bindingController = getInputMethodBindingController(mCurrentUserId); bindingController.setCurrentMethodNotVisible(); mVisibilityStateComputer.clearImeShowFlags(); // Cancel existing statsToken for show IME as we got a hide request. ImeTracker.forLogging().onCancelled(mCurStatsToken, ImeTracker.PHASE_SERVER_WAIT_IME); Loading Loading @@ -3540,8 +3534,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. "InputMethodManagerService#startInputOrWindowGainedFocus", mDumper); final InputBindResult result; synchronized (ImfLock.class) { final var userData = mUserDataRepository.getOrCreate(userId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(userId); // If the system is not yet ready, we shouldn't be running third party code. if (!mSystemReady) { return new InputBindResult( Loading Loading @@ -3810,8 +3803,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. if (mCurrentUserId != UserHandle.getUserId(uid)) { return false; } final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var curIntent = userData.mBindingController.getCurIntent(); final var curIntent = getInputMethodBindingController(mCurrentUserId).getCurIntent(); if (curIntent != null && InputMethodUtils.checkIfPackageBelongsToUid( mPackageManagerInternal, uid, curIntent.getComponent().getPackageName())) { return true; Loading Loading @@ -4220,8 +4212,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. mStylusIds.add(deviceId); // a new Stylus is detected. If IME supports handwriting, and we don't have // handwriting initialized, lets do it now. final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); if (!mHwController.getCurrentRequestId().isPresent() && bindingController.supportsStylusHandwriting()) { scheduleResetStylusHandwriting(); Loading Loading @@ -4402,8 +4393,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. private void dumpDebug(ProtoOutputStream proto, long fieldId) { synchronized (ImfLock.class) { final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); final long token = proto.start(fieldId); proto.write(CUR_METHOD_ID, getSelectedMethodIdLocked()); proto.write(CUR_SEQ, bindingController.getSequenceNumber()); Loading Loading @@ -4793,8 +4783,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. case MSG_RESET_HANDWRITING: { synchronized (ImfLock.class) { final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); if (bindingController.supportsStylusHandwriting() && getCurMethodLocked() != null && hasSupportedStylusLocked()) { Slog.d(TAG, "Initializing Handwriting Spy"); Loading @@ -4820,8 +4809,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. if (curMethod == null || mImeBindingState.mFocusedWindow == null) { return true; } final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); final HandwritingModeController.HandwritingSession session = mHwController.startHandwritingSession( msg.arg1 /*requestId*/, Loading Loading @@ -4877,8 +4865,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. return; } // TODO(b/325515685): user data must be retrieved by a userId parameter final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); if (mImePlatformCompatUtils.shouldUseSetInteractiveProtocol( bindingController.getCurMethodUid())) { // Handle IME visibility when interactive changed before finishing the input to Loading Loading @@ -5103,8 +5090,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. @GuardedBy("ImfLock.class") void sendOnNavButtonFlagsChangedLocked() { final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); final IInputMethodInvoker curMethod = bindingController.getCurMethod(); if (curMethod == null) { // No need to send the data if the IME is not yet bound. Loading Loading @@ -5591,8 +5577,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. public void onSessionForAccessibilityCreated(int accessibilityConnectionId, IAccessibilityInputMethodSession session, @UserIdInt int userId) { synchronized (ImfLock.class) { final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); // TODO(b/305829876): Implement user ID verification if (mCurClient != null) { clearClientSessionForAccessibilityLocked(mCurClient, accessibilityConnectionId); Loading Loading @@ -5627,8 +5612,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. public void unbindAccessibilityFromCurrentClient(int accessibilityConnectionId, @UserIdInt int userId) { synchronized (ImfLock.class) { final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); // TODO(b/305829876): Implement user ID verification if (mCurClient != null) { if (DEBUG) { Loading Loading @@ -5860,8 +5844,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. p.println(" pid=" + c.mPid); }; mClientController.forAllClients(clientControllerDump); final var userData = mUserDataRepository.getOrCreate(mCurrentUserId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(mCurrentUserId); p.println(" mCurrentUserId=" + mCurrentUserId); p.println(" mCurMethodId=" + getSelectedMethodIdLocked()); client = mCurClient; Loading Loading @@ -6383,8 +6366,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl. if (userId == mCurrentUserId) { hideCurrentInputLocked(mImeBindingState.mFocusedWindow, 0 /* flags */, SoftInputShowHideReason.HIDE_RESET_SHELL_COMMAND); final var userData = mUserDataRepository.getOrCreate(userId); final var bindingController = userData.mBindingController; final var bindingController = getInputMethodBindingController(userId); bindingController.unbindCurrentMethod(); // Enable default IMEs, disable others Loading