From a873cd12c888b710c2d1a60247494d4e7b3d186e Mon Sep 17 00:00:00 2001 From: Feng Cao Date: Tue, 24 Mar 2020 18:19:54 -0700 Subject: [PATCH] Fix the validation for showing inline suggestion in webview Test: m -j & manual varification Test: CtsInputMethodTestCases Test: CtsAutoFillServiceTestCases Bug: 151846600 Change-Id: I350b199455e77f769915e7d457dbcab31c20134d --- .../inputmethodservice/InlineSuggestionSession.java | 9 +++++++-- .../android/server/autofill/InlineSuggestionSession.java | 5 ++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/core/java/android/inputmethodservice/InlineSuggestionSession.java b/core/java/android/inputmethodservice/InlineSuggestionSession.java index c31cb4e61b6e2..9b3e8c9c137d8 100644 --- a/core/java/android/inputmethodservice/InlineSuggestionSession.java +++ b/core/java/android/inputmethodservice/InlineSuggestionSession.java @@ -166,9 +166,14 @@ class InlineSuggestionSession { } return; } - + // The IME doesn't have information about the virtual view id for the child views in the + // web view, so we are only comparing the parent view id here. This means that for cases + // where there are two input fields in the web view, they will have the same view id + // (although different virtual child id), and we will not be able to distinguish them. + final AutofillId imeClientFieldId = mClientAutofillIdSupplier.get(); if (!mComponentName.getPackageName().equals(mClientPackageNameSupplier.get()) - || !fieldId.equalsIgnoreSession(mClientAutofillIdSupplier.get())) { + || imeClientFieldId == null + || fieldId.getViewId() != imeClientFieldId.getViewId()) { if (DEBUG) { Log.d(TAG, "handleOnInlineSuggestionsResponse() called on the wrong package/field " diff --git a/services/autofill/java/com/android/server/autofill/InlineSuggestionSession.java b/services/autofill/java/com/android/server/autofill/InlineSuggestionSession.java index 5de817101177a..4ba2c3d0a0d32 100644 --- a/services/autofill/java/com/android/server/autofill/InlineSuggestionSession.java +++ b/services/autofill/java/com/android/server/autofill/InlineSuggestionSession.java @@ -199,7 +199,10 @@ final class InlineSuggestionSession { return false; } - if (!mImeInputViewStarted || !autofillId.equalsIgnoreSession(mImeFieldId)) { + // TODO(b/151846600): IME doesn't have access to the virtual id of the webview, so we + // only compare the view id for now. + if (!mImeInputViewStarted || mImeFieldId == null + || autofillId.getViewId() != mImeFieldId.getViewId()) { if (sDebug) { Log.d(TAG, "onInlineSuggestionsResponseLocked not sent because input view is not "