diff --git a/services/autofill/java/com/android/server/autofill/AutofillInlineSessionController.java b/services/autofill/java/com/android/server/autofill/AutofillInlineSessionController.java index 3dd2433ac2bdb..23bb9d63d6fad 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillInlineSessionController.java +++ b/services/autofill/java/com/android/server/autofill/AutofillInlineSessionController.java @@ -126,6 +126,22 @@ final class AutofillInlineSessionController { return hideInlineSuggestionsUiLocked(autofillId); } + /** + * Clear the locally cached inline fill UI, but don't clear the suggestion in the IME. + * + *

This is called to invalid the locally cached inline suggestions so we don't resend them + * to the IME, while assuming that the IME will clean up suggestion on their own when the input + * connection is finished. We don't send an empty response to IME so that it doesn't cause UI + * flicker on the IME side if it arrives before the input view is finished on the IME. + */ + @GuardedBy("mLock") + void resetInlineFillUiLocked() { + mInlineFillUi = null; + if (mSession != null) { + mSession.resetInlineFillUiLocked(); + } + } + /** * Updates the inline fill UI with the filter text. It'll send updated inline suggestions to * the IME. diff --git a/services/autofill/java/com/android/server/autofill/AutofillInlineSuggestionsRequestSession.java b/services/autofill/java/com/android/server/autofill/AutofillInlineSuggestionsRequestSession.java index 1a3baba1ff193..687b75a8b9495 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillInlineSuggestionsRequestSession.java +++ b/services/autofill/java/com/android/server/autofill/AutofillInlineSuggestionsRequestSession.java @@ -190,6 +190,16 @@ final class AutofillInlineSuggestionsRequestSession { new InlineSuggestionsRequestCallbackImpl(this)); } + /** + * Clear the locally cached inline fill UI, but don't clear the suggestion in IME. + * + * See also {@link AutofillInlineSessionController#resetInlineFillUiLocked()} + */ + @GuardedBy("mLock") + void resetInlineFillUiLocked() { + mInlineFillUi = null; + } + /** * Optionally sends inline response to the IME, depending on the current state. */ diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java index 1d3ab9b7e24b3..558acfa3ed196 100644 --- a/services/autofill/java/com/android/server/autofill/Session.java +++ b/services/autofill/java/com/android/server/autofill/Session.java @@ -2581,6 +2581,9 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState if (sVerbose) Slog.v(TAG, "Exiting view " + id); mUi.hideFillUi(this); hideAugmentedAutofillLocked(viewState); + // We don't send an empty response to IME so that it doesn't cause UI flicker + // on the IME side if it arrives before the input view is finished on the IME. + mInlineSessionController.resetInlineFillUiLocked(); mCurrentViewId = null; } break;