From a75333c876af9d90fdc58dcf18e927fca5f8ca0d Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Tue, 22 Jan 2019 15:45:32 -0800 Subject: [PATCH] Changed the virtual ids on ContentCapture to be long. WebView will use the node addresses as the id, and these address are 64 bits. Fixes: 123234726 Test: atest ContentCaptureSessionTest ViewNodeTest ContentCaptureSessionTest \ CtsContentCaptureServiceTestCases \ CtsAutoFillServiceTestCases:VirtualContainerActivityTest \ CtsAutoFillServiceTestCases:VirtualContainerActivityCompatModeTest Test: m update-api Test: manual verification with Webview, as CtsAutoFillServiceTestCases:WebViewActivityTest is broken Change-Id: Iaf3008ed2dd530e596489cb144da678a4dac48ca --- api/current.txt | 6 +- core/java/android/app/Activity.java | 4 +- .../android/app/assist/AssistStructure.java | 5 +- core/java/android/view/View.java | 6 +- .../android/view/autofill/AutofillId.java | 113 ++++++++++++++---- .../view/autofill/AutofillManager.java | 16 +-- .../contentcapture/ContentCaptureSession.java | 12 +- .../android/view/contentcapture/ViewNode.java | 2 +- .../android/view/autofill/AutofillIdTest.java | 78 ++++++++---- .../ContentCaptureSessionTest.java | 23 ++-- 10 files changed, 184 insertions(+), 81 deletions(-) diff --git a/api/current.txt b/api/current.txt index c22937907e7c9..e5b107086caf2 100644 --- a/api/current.txt +++ b/api/current.txt @@ -52561,12 +52561,12 @@ package android.view.contentcapture { method @NonNull public final android.view.contentcapture.ContentCaptureSession createContentCaptureSession(@NonNull android.view.contentcapture.ContentCaptureContext); method public final void destroy(); method public final android.view.contentcapture.ContentCaptureSessionId getContentCaptureSessionId(); - method @NonNull public android.view.autofill.AutofillId newAutofillId(@NonNull android.view.autofill.AutofillId, int); - method @NonNull public final android.view.ViewStructure newVirtualViewStructure(@NonNull android.view.autofill.AutofillId, int); + method @NonNull public android.view.autofill.AutofillId newAutofillId(@NonNull android.view.autofill.AutofillId, long); + method @NonNull public final android.view.ViewStructure newVirtualViewStructure(@NonNull android.view.autofill.AutofillId, long); method public final void notifyViewAppeared(@NonNull android.view.ViewStructure); method public final void notifyViewDisappeared(@NonNull android.view.autofill.AutofillId); method public final void notifyViewTextChanged(@NonNull android.view.autofill.AutofillId, @Nullable CharSequence, int); - method public final void notifyViewsDisappeared(@NonNull android.view.autofill.AutofillId, @NonNull int[]); + method public final void notifyViewsDisappeared(@NonNull android.view.autofill.AutofillId, @NonNull long[]); } public final class ContentCaptureSessionId implements android.os.Parcelable { diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 836627efb3795..6568bbb2ebed4 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -8194,10 +8194,10 @@ public class Activity extends ContextThemeWrapper final AutofillId autofillId = autofillIds[i]; final View view = autofillClientFindViewByAutofillIdTraversal(autofillId); if (view != null) { - if (!autofillId.isVirtual()) { + if (!autofillId.isVirtualInt()) { visible[i] = view.isVisibleToUser(); } else { - visible[i] = view.isVisibleToUserForAutofill(autofillId.getVirtualChildId()); + visible[i] = view.isVisibleToUserForAutofill(autofillId.getVirtualChildIntId()); } } } diff --git a/core/java/android/app/assist/AssistStructure.java b/core/java/android/app/assist/AssistStructure.java index 7d03f00611d4d..6006ad2f5ed3b 100644 --- a/core/java/android/app/assist/AssistStructure.java +++ b/core/java/android/app/assist/AssistStructure.java @@ -894,7 +894,7 @@ public class AssistStructure implements Parcelable { } if (mAutofillId != null) { autofillFlags |= AUTOFILL_FLAGS_HAS_AUTOFILL_VIEW_ID; - if (mAutofillId.isVirtual()) { + if (mAutofillId.isVirtualInt()) { autofillFlags |= AUTOFILL_FLAGS_HAS_AUTOFILL_VIRTUAL_VIEW_ID; } } @@ -961,8 +961,9 @@ public class AssistStructure implements Parcelable { if ((autofillFlags & AUTOFILL_FLAGS_HAS_AUTOFILL_VIEW_ID) != 0) { out.writeInt(mAutofillId.getViewId()); if ((autofillFlags & AUTOFILL_FLAGS_HAS_AUTOFILL_VIRTUAL_VIEW_ID) != 0) { - out.writeInt(mAutofillId.getVirtualChildId()); + out.writeInt(mAutofillId.getVirtualChildIntId()); } + // TODO(b/113593220): write session id as well } if ((autofillFlags & AUTOFILL_FLAGS_HAS_AUTOFILL_TYPE) != 0) { out.writeInt(mAutofillType); diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 2131e6d7a5288..87c7535dcd732 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -8203,10 +8203,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * {@link ContentCaptureSession#notifyViewDisappeared(AutofillId)}, and * {@link ContentCaptureSession#notifyViewTextChanged(AutofillId, CharSequence, int)} * respectively. The structure for the a child must be created using - * {@link ContentCaptureSession#newVirtualViewStructure(AutofillId, int)}, and the + * {@link ContentCaptureSession#newVirtualViewStructure(AutofillId, long)}, and the * {@code autofillId} for a child can be obtained either through * {@code childStructure.getAutofillId()} or - * {@link ContentCaptureSession#newAutofillId(AutofillId, int)}. + * {@link ContentCaptureSession#newAutofillId(AutofillId, long)}. * *

Note: the following methods of the {@code structure} will be ignored: *