aboutsummaryrefslogtreecommitdiff
path: root/src/com/google
diff options
context:
space:
mode:
authorJake Slack <jaslack@google.com>2014-02-25 11:28:05 -0800
committerJake Slack <jaslack@google.com>2014-02-25 12:59:10 -0800
commit82b6ee7292ed134982416fedb0a10ac2ff310416 (patch)
tree249e3b3a90e42a24967ff2626edbfdb42318007d /src/com/google
parenta6749c6913f014416419850a9fb5235a745fdeb8 (diff)
downloaddroiddriver-82b6ee7292ed134982416fedb0a10ac2ff310416.tar.gz
AccessibilityEventScrollStepStrategy needs to be retrieving the last
event in the queue after scrolling. Change-Id: I27e07dab6f9f004f4ce11d008f3ee973f7f8d277
Diffstat (limited to 'src/com/google')
-rw-r--r--src/com/google/android/droiddriver/scroll/AccessibilityEventScrollStepStrategy.java39
1 files changed, 28 insertions, 11 deletions
diff --git a/src/com/google/android/droiddriver/scroll/AccessibilityEventScrollStepStrategy.java b/src/com/google/android/droiddriver/scroll/AccessibilityEventScrollStepStrategy.java
index 0c96134..f945d55 100644
--- a/src/com/google/android/droiddriver/scroll/AccessibilityEventScrollStepStrategy.java
+++ b/src/com/google/android/droiddriver/scroll/AccessibilityEventScrollStepStrategy.java
@@ -66,13 +66,30 @@ public class AccessibilityEventScrollStepStrategy implements ScrollStepStrategy
}
}
- private static final AccessibilityEventFilter SCROLL_EVENT_FILTER =
- new AccessibilityEventFilter() {
- @Override
- public boolean accept(AccessibilityEvent arg0) {
- return (arg0.getEventType() & AccessibilityEvent.TYPE_VIEW_SCROLLED) != 0;
+ /**
+ * This filter allows us to grab the last accessibility event generated
+ * for a scroll up to {@code scrollEventTimeoutMillis}.
+ */
+ private static class LastScrollEventFilter implements AccessibilityEventFilter {
+ private AccessibilityEvent lastEvent;
+
+ @Override
+ public boolean accept(AccessibilityEvent event) {
+ if ((event.getEventType() & AccessibilityEvent.TYPE_VIEW_SCROLLED) != 0) {
+ // Recycle the current last event.
+ if (lastEvent != null) {
+ lastEvent.recycle();
}
- };
+ lastEvent = AccessibilityEvent.obtain(event);
+ }
+ // Return false to collect events until scrollEventTimeoutMillis has elapsed.
+ return false;
+ }
+
+ public AccessibilityEvent getLastEvent() {
+ return lastEvent;
+ }
+ }
private final UiAutomation uiAutomation;
private final long scrollEventTimeoutMillis;
@@ -150,18 +167,18 @@ public class AccessibilityEventScrollStepStrategy implements ScrollStepStrategy
protected AccessibilityEvent doScrollAndReturnEvent(final UiElement container,
final PhysicalDirection direction) {
- AccessibilityEvent event = null;
+ LastScrollEventFilter filter = new LastScrollEventFilter();
try {
- event = uiAutomation.executeAndWaitForEvent(new Runnable() {
+ uiAutomation.executeAndWaitForEvent(new Runnable() {
@Override
public void run() {
doScroll(container, direction);
}
- }, SCROLL_EVENT_FILTER, scrollEventTimeoutMillis);
+ }, filter, scrollEventTimeoutMillis);
} catch (TimeoutException e) {
- // If no TYPE_VIEW_SCROLLED event, no more scrolling is possible
+ // We expect this because LastScrollEventFilter.accept always returns false.
}
- return event;
+ return filter.getLastEvent();
}
@Override