Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 91e22ae7 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Inline IMMS#getSequenceNumberLocked" into main

parents 71615844 8916586b
Loading
Loading
Loading
Loading
+32 −28
Original line number Diff line number Diff line
@@ -485,16 +485,6 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
        return userData.mBindingController.getSelectedMethodId();
    }

    /**
     * The current binding sequence number, incremented every time there is
     * a new bind performed.
     */
    @GuardedBy("ImfLock.class")
    private int getSequenceNumberLocked() {
        final var userData = mUserDataRepository.getOrCreate(mCurrentUserId);
        return userData.mBindingController.getSequenceNumber();
    }

    @GuardedBy("ImfLock.class")
    @Nullable
    InputMethodInfo queryInputMethodForCurrentUserLocked(@NonNull String imeId) {
@@ -1915,7 +1905,6 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
        return mClientController.getClient(client.asBinder());
    }

    // TODO(b/314150112): Move this to ClientController.
    @GuardedBy("ImfLock.class")
    void unbindCurrentClientLocked(@UnbindReason int unbindClientReason) {
        if (mCurClient != null) {
@@ -1935,7 +1924,13 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
            // all accessibility too. That means, when input method get disconnected (including
            // switching ime), we also unbind accessibility
            mCurClient.mClient.setActive(false /* active */, false /* fullscreen */);
            mCurClient.mClient.onUnbindMethod(getSequenceNumberLocked(), unbindClientReason);

            // 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);
            mCurClient.mClient.onUnbindMethod(userData.mBindingController.getSequenceNumber(),
                    unbindClientReason);
            mCurClient.mSessionRequested = false;
            mCurClient.mSessionRequestedForAccessibility = false;
            mCurClient = null;
@@ -2013,12 +2008,14 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.

        final boolean restarting = !initial;
        final Binder startInputToken = new Binder();
        final var userData = mUserDataRepository.getOrCreate(mCurrentUserId);
        final StartInputInfo info = new StartInputInfo(mCurrentUserId,
                getCurTokenLocked(),
                mCurTokenDisplayId, getCurIdLocked(), startInputReason, restarting,
                UserHandle.getUserId(mCurClient.mUid),
                mCurClient.mSelfReportedDisplayId, mImeBindingState.mFocusedWindow, mCurEditorInfo,
                mImeBindingState.mFocusedWindowSoftInputMode, getSequenceNumberLocked());
                mImeBindingState.mFocusedWindowSoftInputMode,
                userData.mBindingController.getSequenceNumber());
        mImeTargetWindowMap.put(startInputToken, mImeBindingState.mFocusedWindow);
        mStartInputHistory.addEntry(info);

@@ -2051,21 +2048,20 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
                    null /* resultReceiver */, SoftInputShowHideReason.ATTACH_NEW_INPUT);
        }

        String curId = getCurIdLocked();
        final var curId = getCurIdLocked();
        final InputMethodInfo curInputMethodInfo = InputMethodSettingsRepository.get(mCurrentUserId)
                .getMethodMap().get(curId);
        final boolean suppressesSpellChecker =
                curInputMethodInfo != null && curInputMethodInfo.suppressesSpellChecker();
        final SparseArray<IAccessibilityInputMethodSession> accessibilityInputMethodSessions =
                createAccessibilityInputMethodSessions(mCurClient.mAccessibilitySessions);
        final var userData = mUserDataRepository.getOrCreate(mCurrentUserId);
        if (userData.mBindingController.supportsStylusHandwriting() && hasSupportedStylusLocked()) {
            mHwController.setInkWindowInitializer(new InkWindowInitializer());
        }
        return new InputBindResult(InputBindResult.ResultCode.SUCCESS_WITH_IME_SESSION,
                session.mSession, accessibilityInputMethodSessions,
                (session.mChannel != null ? session.mChannel.dup() : null),
                curId, getSequenceNumberLocked(), suppressesSpellChecker);
                curId, userData.mBindingController.getSequenceNumber(), suppressesSpellChecker);
    }

    @GuardedBy("ImfLock.class")
@@ -2341,7 +2337,8 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
                requestClientSessionForAccessibilityLocked(cs);
                return new InputBindResult(
                        InputBindResult.ResultCode.SUCCESS_WAITING_IME_SESSION,
                        null, null, null, getCurIdLocked(), getSequenceNumberLocked(), false);
                        null, null, null, getCurIdLocked(),
                        userData.mBindingController.getSequenceNumber(), false);
            } else {
                final long lastBindTime = userData.mBindingController.getLastBindTime();
                long bindingDuration = SystemClock.uptimeMillis() - lastBindTime;
@@ -2355,7 +2352,8 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
                    // to see if we can get back in touch with the service.
                    return new InputBindResult(
                            InputBindResult.ResultCode.SUCCESS_WAITING_IME_BINDING,
                            null, null, null, getCurIdLocked(), getSequenceNumberLocked(), false);
                            null, null, null, getCurIdLocked(),
                            userData.mBindingController.getSequenceNumber(), false);
                } else {
                    EventLog.writeEvent(EventLogTags.IMF_FORCE_RECONNECT_IME,
                            getSelectedMethodIdLocked(), bindingDuration, 0);
@@ -3567,12 +3565,14 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
                    "InputMethodManagerService#startInputOrWindowGainedFocus", mDumper);
            final InputBindResult result;
            synchronized (ImfLock.class) {
                final var userData = mUserDataRepository.getOrCreate(userId);
                // If the system is not yet ready, we shouldn't be running third party code.
                if (!mSystemReady) {
                    return new InputBindResult(
                            InputBindResult.ResultCode.ERROR_SYSTEM_NOT_READY,
                            null /* method */, null /* accessibilitySessions */, null /* channel */,
                            getSelectedMethodIdLocked(), getSequenceNumberLocked(),
                            getSelectedMethodIdLocked(),
                            userData.mBindingController.getSequenceNumber(),
                            false /* isInputMethodSuppressingSpellChecker */);
                }
                final ClientState cs = mClientController.getClient(client.asBinder());
@@ -4429,7 +4429,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
            final var userData = mUserDataRepository.getOrCreate(mCurrentUserId);
            final long token = proto.start(fieldId);
            proto.write(CUR_METHOD_ID, getSelectedMethodIdLocked());
            proto.write(CUR_SEQ, getSequenceNumberLocked());
            proto.write(CUR_SEQ, userData.mBindingController.getSequenceNumber());
            proto.write(CUR_CLIENT, Objects.toString(mCurClient));
            mImeBindingState.dumpDebug(proto, mWindowManagerInternal);
            proto.write(LAST_IME_TARGET_WINDOW_NAME,
@@ -5626,6 +5626,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);
                // TODO(b/305829876): Implement user ID verification
                if (mCurClient != null) {
                    clearClientSessionForAccessibilityLocked(mCurClient, accessibilityConnectionId);
@@ -5647,8 +5648,10 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
                                    mCurClient.mAccessibilitySessions);
                    final InputBindResult res = new InputBindResult(
                            InputBindResult.ResultCode.SUCCESS_WITH_ACCESSIBILITY_SESSION,
                            imeSession, accessibilityInputMethodSessions, null, getCurIdLocked(),
                            getSequenceNumberLocked(), false);
                            imeSession, accessibilityInputMethodSessions, /* channel= */ null,
                            getCurIdLocked(),
                            userData.mBindingController.getSequenceNumber(),
                            /* isInputMethodSuppressingSpellChecker= */ false);
                    mCurClient.mClient.onBindAccessibilityService(res, accessibilityConnectionId);
                }
            }
@@ -5658,6 +5661,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
        public void unbindAccessibilityFromCurrentClient(int accessibilityConnectionId,
                @UserIdInt int userId) {
            synchronized (ImfLock.class) {
                final var userData = mUserDataRepository.getOrCreate(mCurrentUserId);
                // TODO(b/305829876): Implement user ID verification
                if (mCurClient != null) {
                    if (DEBUG) {
@@ -5667,7 +5671,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
                    // A11yManagerService unbinds the disabled accessibility service. We don't need
                    // to do it here.
                    mCurClient.mClient.onUnbindAccessibilityService(
                            getSequenceNumberLocked(),
                            userData.mBindingController.getSequenceNumber(),
                            accessibilityConnectionId);
                }
                // We only have sessions when we bound to an input method. Remove this session
@@ -5877,13 +5881,11 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
            @SuppressWarnings("GuardedBy") Consumer<ClientState> clientControllerDump = c -> {
                p.println("  " + c + ":");
                p.println("    client=" + c.mClient);

                p.println("    fallbackInputConnection="
                        + c.mFallbackInputConnection);
                p.println("    sessionRequested="
                        + c.mSessionRequested);
                p.println(
                        "    sessionRequestedForAccessibility="
                p.println("    sessionRequestedForAccessibility="
                                + c.mSessionRequestedForAccessibility);
                p.println("    curSession=" + c.mCurSession);
                p.println("    selfReportedDisplayId=" + c.mSelfReportedDisplayId);
@@ -5891,13 +5893,15 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
                p.println("    pid=" + c.mPid);
            };
            mClientController.forAllClients(clientControllerDump);
            final var userData = mUserDataRepository.getOrCreate(mCurrentUserId);
            p.println("  mCurrentUserId=" + mCurrentUserId);
            p.println("  mCurMethodId=" + getSelectedMethodIdLocked());
            client = mCurClient;
            p.println("  mCurClient=" + client + " mCurSeq=" + getSequenceNumberLocked());
            p.println("  mCurClient=" + client + " mCurSeq="
                    + userData.mBindingController.getSequenceNumber());
            p.println("  mFocusedWindowPerceptible=" + mFocusedWindowPerceptible);
            mImeBindingState.dump(/* prefix= */ "  ", p);
            final var userData = mUserDataRepository.getOrCreate(mCurrentUserId);

            p.println("  mCurId=" + getCurIdLocked()
                    + " mHaveConnection=" + userData.mBindingController.hasMainConnection()
                    + " mBoundToMethod=" + mBoundToMethod + " mVisibleBound="