Fixed sendEvent() so it can merge TYPE_VIEW_DISAPPEARED with multiple ids.
Test: atest CtsContentCaptureServiceTestCases # nothing broke
Bug: 124107816
Fixes: 124060720
Change-Id: I632d4f600eabccf7e991450ff0291c6f5721cc28
diff --git a/core/java/android/view/contentcapture/MainContentCaptureSession.java b/core/java/android/view/contentcapture/MainContentCaptureSession.java
index eb945b5..810c967 100644
--- a/core/java/android/view/contentcapture/MainContentCaptureSession.java
+++ b/core/java/android/view/contentcapture/MainContentCaptureSession.java
@@ -303,6 +303,7 @@
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 @@
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 @@
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<AutofillId> 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;