diff options
-rw-r--r-- | services/autofill/java/com/android/server/autofill/Session.java | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java index c7490b3b991c..fa449ad29e53 100644 --- a/services/autofill/java/com/android/server/autofill/Session.java +++ b/services/autofill/java/com/android/server/autofill/Session.java @@ -313,18 +313,28 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState private final AssistDataReceiverImpl mAssistReceiver = new AssistDataReceiverImpl(); void onSwitchInputMethodLocked() { + // One caveat is that for the case where the focus is on a field for which regular autofill + // returns null, and augmented autofill is triggered, and then the user switches the input + // method. Tapping on the field again will not trigger a new augmented autofill request. + // This may be fixed by adding more checks such as whether mCurrentViewId is null. if (mExpiredResponse) { return; } - - if (shouldExpireResponseOnInputMethodSwitch()) { + if (shouldResetSessionStateOnInputMethodSwitch()) { // Set the old response expired, so the next action (ACTION_VIEW_ENTERED) can trigger // a new fill request. mExpiredResponse = true; + // Clear the augmented autofillable ids so augmented autofill will trigger again. + mAugmentedAutofillableIds = null; + // In case the field is augmented autofill only, we clear the current view id, so that + // we won't skip view entered due to same view entered, for the augmented autofill. + if (mForAugmentedAutofillOnly) { + mCurrentViewId = null; + } } } - private boolean shouldExpireResponseOnInputMethodSwitch() { + private boolean shouldResetSessionStateOnInputMethodSwitch() { // One of below cases will need a new fill request to update the inline spec for the new // input method. // 1. The autofill provider supports inline suggestion and the render service is available. @@ -2588,15 +2598,14 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState id)) { // Regular autofill handled the view and returned null response, but it // triggered augmented autofill - if (!isSameViewEntered || mExpiredResponse) { + if (!isSameViewEntered) { if (sDebug) Slog.d(TAG, "trigger augmented autofill."); triggerAugmentedAutofillLocked(flags); } else { if (sDebug) Slog.d(TAG, "skip augmented autofill for same view."); } return; - } else if (mForAugmentedAutofillOnly && isSameViewEntered - && !mExpiredResponse) { + } else if (mForAugmentedAutofillOnly && isSameViewEntered) { // Regular autofill is disabled. if (sDebug) Slog.d(TAG, "skip augmented autofill for same view."); return; |