diff options
Diffstat (limited to 'core/java/android/accessibilityservice/UiTestAutomationBridge.java')
-rw-r--r-- | core/java/android/accessibilityservice/UiTestAutomationBridge.java | 28 |
1 files changed, 27 insertions, 1 deletions
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." |