summaryrefslogtreecommitdiff
path: root/services/autofill
diff options
context:
space:
mode:
authorFeng Cao <fengcao@google.com>2020-06-10 11:22:54 -0700
committerFeng Cao <fengcao@google.com>2020-06-10 11:37:09 -0700
commit89825acce149cd1dfdad8c62283ff1952645e45a (patch)
tree420c57b42a4d4ea728c6430a589db6bdf12abae7 /services/autofill
parentcd4338c6772e50ffa90cba21426632f62ed26c04 (diff)
Send empty response to IME when autofill session is destroyed
* Note that usually the session is destroyed when the focus is already on a new input field in a different activity, so this action will be no-op most of the cases * But in case of augmented autofill service dynamically requesting a new autofill flow, this works well on clearing the existing suggestions on the current input field Test: manual Test: atest android.autofillservice.cts.inline Bug: 157515522 Bug: 158038231 Change-Id: I6cedb33737d822c3c3eb4ee127984c24c4307f7a
Diffstat (limited to 'services/autofill')
-rw-r--r--services/autofill/java/com/android/server/autofill/AutofillInlineSessionController.java18
-rw-r--r--services/autofill/java/com/android/server/autofill/Session.java3
2 files changed, 20 insertions, 1 deletions
diff --git a/services/autofill/java/com/android/server/autofill/AutofillInlineSessionController.java b/services/autofill/java/com/android/server/autofill/AutofillInlineSessionController.java
index 0ec8654f2a20..398ece4c1836 100644
--- a/services/autofill/java/com/android/server/autofill/AutofillInlineSessionController.java
+++ b/services/autofill/java/com/android/server/autofill/AutofillInlineSessionController.java
@@ -77,8 +77,8 @@ final class AutofillInlineSessionController {
if (mSession != null) {
// Destroy the existing session.
mSession.destroySessionLocked();
- mInlineFillUi = null;
}
+ mInlineFillUi = null;
// TODO(b/151123764): consider reusing the same AutofillInlineSession object for the
// same field.
mSession = new AutofillInlineSuggestionsRequestSession(mInputMethodManagerInternal, mUserId,
@@ -87,6 +87,22 @@ final class AutofillInlineSessionController {
}
/**
+ * Destroys the current session. May send an empty response to IME to clear the suggestions if
+ * the focus didn't change to a different field.
+ *
+ * @param autofillId the currently focused view from the autofill session
+ */
+ @GuardedBy("mLock")
+ void destroyLocked(@NonNull AutofillId autofillId) {
+ if (mSession != null) {
+ mSession.onInlineSuggestionsResponseLocked(InlineFillUi.emptyUi(autofillId));
+ mSession.destroySessionLocked();
+ mSession = null;
+ }
+ mInlineFillUi = null;
+ }
+
+ /**
* Returns the {@link InlineSuggestionsRequest} provided by IME for the last request.
*
* <p> The caller is responsible for making sure Autofill hears back from IME before calling
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index a9a0ab69f633..c7490b3b991c 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -3702,6 +3702,9 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
unlinkClientVultureLocked();
mUi.destroyAll(mPendingSaveUi, this, true);
mUi.clearCallback(this);
+ if (mCurrentViewId != null) {
+ mInlineSessionController.destroyLocked(mCurrentViewId);
+ }
mDestroyed = true;
// Log metrics