Merge "Adding API for getting the root node info in the active window."
diff --git a/api/current.txt b/api/current.txt
index d8387c1..746cbaa 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -1993,6 +1993,7 @@
 
   public abstract class AccessibilityService extends android.app.Service {
     ctor public AccessibilityService();
+    method public android.view.accessibility.AccessibilityNodeInfo getRootInActiveWindow();
     method public final android.accessibilityservice.AccessibilityServiceInfo getServiceInfo();
     method public abstract void onAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
     method public final android.os.IBinder onBind(android.content.Intent);
diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java
index eed8aa6..4e340c0 100644
--- a/core/java/android/accessibilityservice/AccessibilityService.java
+++ b/core/java/android/accessibilityservice/AccessibilityService.java
@@ -426,13 +426,11 @@
             throw new IllegalStateException("AccessibilityService not connected."
                     + " Did you receive a call of onServiceConnected()?");
         }
-        AccessibilityNodeInfo root = AccessibilityInteractionClient.getInstance()
-                .findAccessibilityNodeInfoByAccessibilityId(connectionId,
-                        AccessibilityNodeInfo.ACTIVE_WINDOW_ID, AccessibilityNodeInfo.ROOT_NODE_ID,
-                        AccessibilityNodeInfo.FLAG_PREFETCH_DESCENDANTS);
+        AccessibilityNodeInfo root = getRootInActiveWindow();
         if (root == null) {
             return;
         }
+
         AccessibilityNodeInfo current = root.findFocus(AccessibilityNodeInfo.FOCUS_ACCESSIBILITY);
         if (current == null) {
             current = root;
@@ -480,6 +478,19 @@
     }
 
     /**
+     * Gets the root node in the currently active window if this service
+     * can retrieve window content.
+     *
+     * @return The root node if this service can retrieve window content.
+     */
+    public AccessibilityNodeInfo getRootInActiveWindow() {
+        return AccessibilityInteractionClient.getInstance()
+            .findAccessibilityNodeInfoByAccessibilityId(mConnectionId,
+                AccessibilityNodeInfo.ACTIVE_WINDOW_ID, AccessibilityNodeInfo.ROOT_NODE_ID,
+                AccessibilityNodeInfo.FLAG_PREFETCH_DESCENDANTS);
+    }
+
+    /**
      * Performs a global action. Such an action can be performed
      * at any moment regardless of the current application or user
      * location in that application. For example going back, going