From c8875e7073d77ac1fabc43aeb9733b4704f1f824 Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Fri, 8 Feb 2019 09:45:34 -0800 Subject: [PATCH] Fixed sendEvent() so it can merge TYPE_VIEW_DISAPPEARED with multiple ids. Test: atest CtsContentCaptureServiceTestCases # nothing broke Bug: 124107816 Fixes: 124060720 Change-Id: I632d4f600eabccf7e991450ff0291c6f5721cc28 --- .../MainContentCaptureSession.java | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/core/java/android/view/contentcapture/MainContentCaptureSession.java b/core/java/android/view/contentcapture/MainContentCaptureSession.java index eb945b55bd7e6..810c967ce2c8d 100644 --- a/core/java/android/view/contentcapture/MainContentCaptureSession.java +++ b/core/java/android/view/contentcapture/MainContentCaptureSession.java @@ -303,6 +303,7 @@ public final class MainContentCaptureSession extends ContentCaptureSession { Log.v(TAG, "Buffering VIEW_TEXT_CHANGED event, updated text=" + getSanitizedString(event.getText())); } + // TODO(b/124107816): should call lastEvent.merge(event) instead lastEvent.setText(event.getText()); addEvent = false; } @@ -316,7 +317,7 @@ public final class MainContentCaptureSession extends ContentCaptureSession { Log.v(TAG, "Buffering TYPE_VIEW_DISAPPEARED events for session " + lastEvent.getSessionId()); } - lastEvent.addAutofillId(event.getId()); + mergeViewsDisappearedEvent(lastEvent, event); addEvent = false; } } @@ -364,6 +365,30 @@ public final class MainContentCaptureSession extends ContentCaptureSession { flush(flushReason); } + // TODO(b/124107816): should be ContentCaptureEvent Event.merge(event) instead (which would + // replace the addAutofillId() method - we would also need unit tests on ContentCaptureEventTest + // to check these scenarios) + private void mergeViewsDisappearedEvent(@NonNull ContentCaptureEvent lastEvent, + @NonNull ContentCaptureEvent event) { + final List ids = event.getIds(); + final AutofillId id = event.getId(); + if (ids != null) { + if (id != null) { + Log.w(TAG, "got TYPE_VIEW_DISAPPEARED event with both id and ids: " + event); + } + for (int i = 0; i < ids.size(); i++) { + lastEvent.addAutofillId(ids.get(i)); + } + return; + } + if (id != null) { + lastEvent.addAutofillId(id); + return; + } + throw new IllegalArgumentException( + "got TYPE_VIEW_DISAPPEARED event with neither id or ids: " + event); + } + @UiThread private boolean hasStarted() { return mState != UNKNOWN_STATE;