Skip to content

Commit 0846e29

Browse files
committed
Adding API for getting the root node info in the active window.
1. This APIs is useful for accessibility services since very often they want to get access to the root node in the current window to determine where accessibility focus is and subsequently find a next view to take accessibility focus. Change-Id: Ide5231f832d9ce2e9b14dc411dfd675f753a4edb
1 parent 005b83b commit 0846e29

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

api/current.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1994,6 +1994,7 @@ package android.accessibilityservice {
19941994

19951995
public abstract class AccessibilityService extends android.app.Service {
19961996
ctor public AccessibilityService();
1997+
method public android.view.accessibility.AccessibilityNodeInfo getRootInActiveWindow();
19971998
method public final android.accessibilityservice.AccessibilityServiceInfo getServiceInfo();
19981999
method public abstract void onAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
19992000
method public final android.os.IBinder onBind(android.content.Intent);

core/java/android/accessibilityservice/AccessibilityService.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -426,13 +426,11 @@ protected void onGesture(int gestureId) {
426426
throw new IllegalStateException("AccessibilityService not connected."
427427
+ " Did you receive a call of onServiceConnected()?");
428428
}
429-
AccessibilityNodeInfo root = AccessibilityInteractionClient.getInstance()
430-
.findAccessibilityNodeInfoByAccessibilityId(connectionId,
431-
AccessibilityNodeInfo.ACTIVE_WINDOW_ID, AccessibilityNodeInfo.ROOT_NODE_ID,
432-
AccessibilityNodeInfo.FLAG_PREFETCH_DESCENDANTS);
429+
AccessibilityNodeInfo root = getRootInActiveWindow();
433430
if (root == null) {
434431
return;
435432
}
433+
436434
AccessibilityNodeInfo current = root.findFocus(AccessibilityNodeInfo.FOCUS_ACCESSIBILITY);
437435
if (current == null) {
438436
current = root;
@@ -479,6 +477,19 @@ protected void onGesture(int gestureId) {
479477
}
480478
}
481479

480+
/**
481+
* Gets the root node in the currently active window if this service
482+
* can retrieve window content.
483+
*
484+
* @return The root node if this service can retrieve window content.
485+
*/
486+
public AccessibilityNodeInfo getRootInActiveWindow() {
487+
return AccessibilityInteractionClient.getInstance()
488+
.findAccessibilityNodeInfoByAccessibilityId(mConnectionId,
489+
AccessibilityNodeInfo.ACTIVE_WINDOW_ID, AccessibilityNodeInfo.ROOT_NODE_ID,
490+
AccessibilityNodeInfo.FLAG_PREFETCH_DESCENDANTS);
491+
}
492+
482493
/**
483494
* Performs a global action. Such an action can be performed
484495
* at any moment regardless of the current application or user

0 commit comments

Comments
 (0)