From b765db590ff824fb5827fb773b14ac4286ae2774 Mon Sep 17 00:00:00 2001 From: Svetoslav Ganov Date: Tue, 7 Feb 2012 12:05:09 -0800 Subject: Adding a method for retching the root node in UiTestAutomationBridge bug:5974791 Change-Id: I46a8b6a259ba31f27fcd6a71d06dc34efdb4de76 --- .../UiTestAutomationBridge.java | 28 +++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'core/java/android/accessibilityservice') diff --git a/core/java/android/accessibilityservice/UiTestAutomationBridge.java b/core/java/android/accessibilityservice/UiTestAutomationBridge.java index 9d48efc..616b796 100644 --- a/core/java/android/accessibilityservice/UiTestAutomationBridge.java +++ b/core/java/android/accessibilityservice/UiTestAutomationBridge.java @@ -63,6 +63,8 @@ public class UiTestAutomationBridge { private AccessibilityEvent mLastEvent; + private AccessibilityEvent mLastWindowStateChangeEvent; + private volatile boolean mWaitingForEventDelivery; private volatile boolean mUnprocessedEventAvailable; @@ -138,12 +140,22 @@ public class UiTestAutomationBridge { public void onAccessibilityEvent(AccessibilityEvent event) { synchronized (mLock) { while (true) { + mLastEvent = AccessibilityEvent.obtain(event); + + final int eventType = event.getEventType(); + if (eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED + || eventType == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED) { + if (mLastWindowStateChangeEvent != null) { + mLastWindowStateChangeEvent.recycle(); + } + mLastWindowStateChangeEvent = mLastEvent; + } + if (!mWaitingForEventDelivery) { break; } if (!mUnprocessedEventAvailable) { mUnprocessedEventAvailable = true; - mLastEvent = AccessibilityEvent.obtain(event); mLock.notifyAll(); break; } @@ -409,6 +421,20 @@ public class UiTestAutomationBridge { accessibilityWindowId, accessibilityNodeId, action); } + /** + * Gets the root {@link AccessibilityNodeInfo} in the active window. + * + * @return The root info. + */ + public AccessibilityNodeInfo getRootAccessibilityNodeInfoInActiveWindow() { + synchronized (mLock) { + if (mLastWindowStateChangeEvent != null) { + return mLastWindowStateChangeEvent.getSource(); + } + } + return null; + } + private void ensureValidConnection(int connectionId) { if (connectionId == AccessibilityInteractionClient.NO_ID) { throw new IllegalStateException("UiAutomationService not connected." -- cgit v1.1