Moved buffer for VIEW_TEXT_CHANGED events to MainContentCaptureSession.
Bug: 121042846
Test: atest android.contentcaptureservice.cts.LoginActivityTest#testTextChangeBuffer
Test: atest CtsContentCaptureServiceTestCases
Change-Id: Ia0128c1c868d44da954e67b38dfb2bde6461b883
diff --git a/core/java/android/view/contentcapture/MainContentCaptureSession.java b/core/java/android/view/contentcapture/MainContentCaptureSession.java
index ea6f2fe..92e0187 100644
--- a/core/java/android/view/contentcapture/MainContentCaptureSession.java
+++ b/core/java/android/view/contentcapture/MainContentCaptureSession.java
@@ -258,14 +258,27 @@
}
mEvents = new ArrayList<>(MAX_BUFFER_SIZE);
}
- mEvents.add(event);
+
+ if (!mEvents.isEmpty() && event.getType() == TYPE_VIEW_TEXT_CHANGED) {
+ final ContentCaptureEvent lastEvent = mEvents.get(mEvents.size() - 1);
+
+ // TODO(b/121045053): check if flags match
+ if (lastEvent.getType() == TYPE_VIEW_TEXT_CHANGED
+ && lastEvent.getId().equals(event.getId())) {
+ if (VERBOSE) {
+ Log.v(mTag, "Buffering VIEW_TEXT_CHANGED event, updated text = "
+ + event.getText());
+ }
+ lastEvent.setText(event.getText());
+ } else {
+ mEvents.add(event);
+ }
+ } else {
+ mEvents.add(event);
+ }
final int numberEvents = mEvents.size();
- // TODO(b/120784831): need to optimize it so we buffer changes until a number of X are
- // buffered (either total or per autofillid). For
- // example, if the user typed "a", "b", "c" and the threshold is 3, we should buffer
- // "a" and "b" then send "abc".
final boolean bufferEvent = numberEvents < MAX_BUFFER_SIZE;
if (bufferEvent && !forceFlush) {