diff options
author | Feng Cao <fengcao@google.com> | 2020-06-16 21:54:13 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-06-16 21:54:13 +0000 |
commit | e710511e85d10e0e65f71291812c69e219bf8aa7 (patch) | |
tree | 81b89516e7c2bf0ef7609079ce35021ab0b77ac4 | |
parent | 80bf9c825a389557287b079cf0e39c4508631dc4 (diff) | |
parent | 14de0026850b3993037f52583a207edfedab487c (diff) |
Merge "Fix input method switch handling in autofill" into rvc-dev
-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; |