diff options
author | Jake Slack <jaslack@google.com> | 2014-02-25 11:28:05 -0800 |
---|---|---|
committer | Jake Slack <jaslack@google.com> | 2014-02-25 12:59:10 -0800 |
commit | 82b6ee7292ed134982416fedb0a10ac2ff310416 (patch) | |
tree | 249e3b3a90e42a24967ff2626edbfdb42318007d /src/com/google | |
parent | a6749c6913f014416419850a9fb5235a745fdeb8 (diff) | |
download | droiddriver-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.java | 39 |
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 |