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

Commit 79c5fed2 authored by Nikolas Havrikov's avatar Nikolas Havrikov Committed by Cherrypicker Worker
Browse files

Invalidate autofill session on IME disconnect

Remember the latest InlineSuggestionsRequestCallback coming from the
autofill service, so that its autofill session can be invalidated
when the IME process is unbound or stopped.

Test: atest InlineWebViewActivityTest#testAutofillOneDataset
Bug: 226240255
Change-Id: I49cf295b95cec33b7eb404eab62b900014d09e26
(cherry picked from commit 33dc7f89)
Merged-In: I49cf295b95cec33b7eb404eab62b900014d09e26
parent edfc3fa2
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -247,6 +247,7 @@ final class InputMethodBindingController {
    private final ServiceConnection mVisibleConnection = new ServiceConnection() {
        @Override public void onBindingDied(ComponentName name) {
            synchronized (ImfLock.class) {
                mService.invalidateAutofillSessionLocked();
                if (mVisibleBound) {
                    unbindVisibleConnection();
                }
@@ -257,6 +258,9 @@ final class InputMethodBindingController {
        }

        @Override public void onServiceDisconnected(ComponentName name) {
            synchronized (ImfLock.class) {
                mService.invalidateAutofillSessionLocked();
            }
        }
    };

+22 −0
Original line number Diff line number Diff line
@@ -313,6 +313,15 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub
    @Nullable
    private CreateInlineSuggestionsRequest mPendingInlineSuggestionsRequest;

    /**
     * A callback into the autofill service obtained from the latest call to
     * {@link #onCreateInlineSuggestionsRequestLocked}, which can be used to invalidate an
     * autofill session in case the IME process dies.
     */
    @GuardedBy("ImfLock.class")
    @Nullable
    private IInlineSuggestionsRequestCallback mInlineSuggestionsRequestCallback;

    @UserIdInt
    private int mLastSwitchUserId;

@@ -2176,6 +2185,7 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub
            InlineSuggestionsRequestInfo requestInfo, IInlineSuggestionsRequestCallback callback,
            boolean touchExplorationEnabled) {
        clearPendingInlineSuggestionsRequestLocked();
        mInlineSuggestionsRequestCallback = callback;
        final InputMethodInfo imi = mMethodMap.get(getSelectedMethodIdLocked());
        try {
            if (userId == mSettings.getCurrentUserId()
@@ -2797,6 +2807,7 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub
            if (DEBUG) {
                Slog.d(TAG, "Avoiding IME startup and unbinding current input method.");
            }
            invalidateAutofillSessionLocked();
            mBindingController.unbindCurrentMethod();
            return InputBindResult.NO_EDITOR;
        }
@@ -2834,6 +2845,17 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub
        return mBindingController.bindCurrentMethod();
    }

    @GuardedBy("ImfLock.class")
    void invalidateAutofillSessionLocked() {
        if (mInlineSuggestionsRequestCallback != null) {
            try {
                mInlineSuggestionsRequestCallback.onInlineSuggestionsSessionInvalidated();
            } catch (RemoteException e) {
                Slog.e(TAG, "Cannot invalidate autofill session.", e);
            }
        }
    }

    @GuardedBy("ImfLock.class")
    private boolean shouldPreventImeStartupLocked(
            @NonNull String selectedMethodId,