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
This commit is contained in:
Feng Cao
2020-03-03 13:25:40 -08:00
parent c9611acb62
commit 8aee9bc74a

View File

@@ -2458,18 +2458,24 @@ 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
// triggered augmented autofill
if (sDebug) Slog.d(TAG, "updateLocked(" + id + "): augmented-autofillable");
// ...then trigger the augmented autofill UI
triggerAugmentedAutofillLocked();
return;
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 (!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)) {