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

Commit 8aee9bc7 authored by Feng Cao's avatar Feng Cao
Browse files

Fix augmented autofill to not send multiple request on the same field

* Don't send multiple request when focused view doesn't change
* The difference is *when to return*. In the old code, we are returning
  only when all four conditions are met, otherwise we will go to the
  next lines requestNewFillResponseOnViewEnteredIfNecessaryLocked()
  which will indeed trigger a new augmented autofill request. In the
  new code, we will return if the three conditions are met, or if the
  other three conditions are met...

Test: manual verification
Test: atest android.autofillservice.cts.inline
Test: atest android.autofillservice.cts.augmented
Bug: 145949573

Change-Id: I9ff3873e3aec8c1366d4aa16c9ef7662cfde45e2
parent c9611acb
Loading
Loading
Loading
Loading
+18 −12
Original line number Diff line number Diff line
@@ -2458,19 +2458,25 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
                    return;
                }

                if (!isSameViewEntered
                        && (flags & FLAG_MANUAL_REQUEST) == 0
                        && mAugmentedAutofillableIds != null
                        && mAugmentedAutofillableIds.contains(id)) {
                    // View was already reported when server could not handle a response, but it
                if ((flags & FLAG_MANUAL_REQUEST) == 0) {
                    // Not a manual request
                    if (mAugmentedAutofillableIds != null && mAugmentedAutofillableIds.contains(
                            id)) {
                        // Regular autofill handled the view and returned null response, but it
                        // triggered augmented autofill

                    if (sDebug) Slog.d(TAG, "updateLocked(" + id + "): augmented-autofillable");

                    // ...then trigger the augmented autofill UI
                        if (!isSameViewEntered) {
                            if (sDebug) Slog.d(TAG, "trigger augmented autofill.");
                            triggerAugmentedAutofillLocked();
                        } else {
                            if (sDebug) Slog.d(TAG, "skip augmented autofill for same view.");
                        }
                        return;
                    } else if (mForAugmentedAutofillOnly && isSameViewEntered) {
                        // Regular autofill is disabled.
                        if (sDebug) Slog.d(TAG, "skip augmented autofill for same view.");
                        return;
                    }
                }

                if (requestNewFillResponseOnViewEnteredIfNecessaryLocked(id, viewState, flags)) {
                    return;