diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java index 35089d6f5de76..20d1b98f86477 100644 --- a/services/autofill/java/com/android/server/autofill/Session.java +++ b/services/autofill/java/com/android/server/autofill/Session.java @@ -325,7 +325,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState @GuardedBy("mLock") private CountDownLatch mCountDownLatch = new CountDownLatch(0); - @Nullable Consumer newAutofillRequestLocked( + @Nullable Consumer newAutofillRequestLocked(ViewState viewState, boolean isInlineRequest) { mCountDownLatch = new CountDownLatch(isInlineRequest ? 2 : 1); mPendingFillRequest = null; @@ -338,6 +338,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState mPendingInlineSuggestionsRequest = inlineSuggestionsRequest; mCountDownLatch.countDown(); maybeRequestFillLocked(); + viewState.resetState(ViewState.STATE_PENDING_CREATE_INLINE_REQUEST); } } : null; } @@ -716,18 +717,23 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState mService.getRemoteInlineSuggestionRenderServiceLocked(); if (isInlineSuggestionsEnabledByAutofillProviderLocked() && remoteRenderService != null) { Consumer inlineSuggestionsRequestConsumer = - mAssistReceiver.newAutofillRequestLocked(/*isInlineRequest=*/ true); + mAssistReceiver.newAutofillRequestLocked(viewState, + /*isInlineRequest=*/ true); if (inlineSuggestionsRequestConsumer != null) { final AutofillId focusedId = mCurrentViewId; remoteRenderService.getInlineSuggestionsRendererInfo( new RemoteCallback((extras) -> { - mInlineSessionController.onCreateInlineSuggestionsRequestLocked( - focusedId, inlineSuggestionsRequestConsumer, extras); - } - )); + synchronized (mLock) { + mInlineSessionController.onCreateInlineSuggestionsRequestLocked( + focusedId, inlineSuggestionsRequestConsumer, extras); + } + }, mHandler) + ); + viewState.setState(ViewState.STATE_PENDING_CREATE_INLINE_REQUEST); } } else { - mAssistReceiver.newAutofillRequestLocked(/*isInlineRequest=*/ false); + mAssistReceiver.newAutofillRequestLocked(viewState, + /*isInlineRequest=*/ false); } // Now request the assist structure data. @@ -2368,7 +2374,9 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState */ @GuardedBy("mLock") private boolean shouldStartNewPartitionLocked(@NonNull AutofillId id) { - if (mResponses == null) { + final ViewState currentView = mViewStates.get(id); + if (mResponses == null && currentView != null + && (currentView.getState() & ViewState.STATE_PENDING_CREATE_INLINE_REQUEST) == 0) { return true; } diff --git a/services/autofill/java/com/android/server/autofill/ViewState.java b/services/autofill/java/com/android/server/autofill/ViewState.java index 9114576ad3b5d..adb1e3e437318 100644 --- a/services/autofill/java/com/android/server/autofill/ViewState.java +++ b/services/autofill/java/com/android/server/autofill/ViewState.java @@ -80,6 +80,8 @@ final class ViewState { public static final int STATE_CHAR_REMOVED = 0x4000; /** Showing inline suggestions is not allowed for this View. */ public static final int STATE_INLINE_DISABLED = 0x8000; + /** The View is waiting for an inline suggestions request from IME.*/ + public static final int STATE_PENDING_CREATE_INLINE_REQUEST = 0x10000; public final AutofillId id;