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

Commit 1e0e1238 authored by Feng Cao's avatar Feng Cao
Browse files

Send empty inline response to IME if augmented autofill returns no suggestion

* The augmented autofill may dynamically request an autofill request
  which will "invalidate" the old suggestions. In case the new request
  doesn't return any suggestions, we need to make sure the old
  suggestions are removed from the IME.
* See the scenario in https://b.corp.google.com/issues/158038231#comment14

Test: manual
Test: atest android.autofillservice.cts.inline
Bug: 157515522
Bug: 158038231

Change-Id: If85592395ad918197566a5ca556fba8ccc971071
parent 8083336a
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -62,9 +62,10 @@ public final class FillCallback {

        List<Dataset> inlineSuggestions = response.getInlineSuggestions();
        Bundle clientState = response.getClientState();
        // We need to report result regardless of whether inline suggestions are returned or not.
        mProxy.reportResult(inlineSuggestions, clientState);
        if (inlineSuggestions != null && !inlineSuggestions.isEmpty()) {
            mProxy.logEvent(AutofillProxy.REPORT_EVENT_INLINE_RESPONSE);
            mProxy.reportResult(inlineSuggestions, clientState);
            return;
        }

+2 −2
Original line number Diff line number Diff line
@@ -93,7 +93,7 @@ final class AutofillInlineSuggestionsRequestSession {
    @Nullable
    private InlineFillUi mInlineFillUi;
    @GuardedBy("mLock")
    private boolean mPreviousResponseIsNotEmpty;
    private Boolean mPreviousResponseIsNotEmpty = null;

    @GuardedBy("mLock")
    private boolean mDestroyed = false;
@@ -213,7 +213,7 @@ final class AutofillInlineSuggestionsRequestSession {
            // if IME is visible, and response is not null, send the response
            InlineSuggestionsResponse response = mInlineFillUi.getInlineSuggestionsResponse();
            boolean isEmptyResponse = response.getInlineSuggestions().isEmpty();
            if (isEmptyResponse && !mPreviousResponseIsNotEmpty) {
            if (isEmptyResponse && Boolean.FALSE.equals(mPreviousResponseIsNotEmpty)) {
                // No-op if both the previous response and current response are empty.
                return;
            }
+5 −0
Original line number Diff line number Diff line
@@ -245,6 +245,11 @@ final class RemoteAugmentedAutofillService
        if (inlineSuggestionsData == null || inlineSuggestionsData.isEmpty()
                || inlineSuggestionsCallback == null || request == null
                || remoteRenderService == null) {
            // If it was an inline request and the response doesn't have any inline suggestions,
            // we will send an empty response to IME.
            if (inlineSuggestionsCallback != null && request != null) {
                inlineSuggestionsCallback.apply(InlineFillUi.emptyUi(focusedId));
            }
            return;
        }
        mCallbacks.setLastResponse(sessionId);