From 2e1e081146546a04bc3813dde9c44babbddc0712 Mon Sep 17 00:00:00 2001 From: Alan Viverette Date: Mon, 30 Sep 2013 13:45:55 -0700 Subject: [PATCH] Add findFocus API for AccessibilityNodeProvider BUG: 9372171 Change-Id: Iea46ce5a4bf25baaabe5c07cd7d0c58bb31f23d9 --- api/current.txt | 1 + .../view/AccessibilityInteractionController.java | 10 ++++++++-- .../accessibility/AccessibilityNodeProvider.java | 15 +++++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/api/current.txt b/api/current.txt index ff72c4a6de63f..2ed9c5890a39c 100644 --- a/api/current.txt +++ b/api/current.txt @@ -29459,6 +29459,7 @@ package android.view.accessibility { ctor public AccessibilityNodeProvider(); method public android.view.accessibility.AccessibilityNodeInfo createAccessibilityNodeInfo(int); method public java.util.List findAccessibilityNodeInfosByText(java.lang.String, int); + method public android.view.accessibility.AccessibilityNodeInfo findFocus(int); method public boolean performAction(int, int, android.os.Bundle); } diff --git a/core/java/android/view/AccessibilityInteractionController.java b/core/java/android/view/AccessibilityInteractionController.java index e835a97081691..41d37001b8488 100644 --- a/core/java/android/view/AccessibilityInteractionController.java +++ b/core/java/android/view/AccessibilityInteractionController.java @@ -423,9 +423,15 @@ final class AccessibilityInteractionController { } } break; case AccessibilityNodeInfo.FOCUS_INPUT: { - // Input focus cannot go to virtual views. View target = root.findFocus(); - if (target != null && isShown(target)) { + if (target == null || !isShown(target)) { + break; + } + AccessibilityNodeProvider provider = target.getAccessibilityNodeProvider(); + if (provider != null) { + focused = provider.findFocus(focusType); + } + if (focused == null) { focused = target.createAccessibilityNodeInfo(); } } break; diff --git a/core/java/android/view/accessibility/AccessibilityNodeProvider.java b/core/java/android/view/accessibility/AccessibilityNodeProvider.java index 688cbdf3c9f7a..718c32fd8d25b 100644 --- a/core/java/android/view/accessibility/AccessibilityNodeProvider.java +++ b/core/java/android/view/accessibility/AccessibilityNodeProvider.java @@ -132,4 +132,19 @@ public abstract class AccessibilityNodeProvider { int virtualViewId) { return null; } + + /** + * Find the virtual view, i.e. a descendant of the host View, that has the + * specified focus type. + * + * @param focus The focus to find. One of + * {@link AccessibilityNodeInfo#FOCUS_INPUT} or + * {@link AccessibilityNodeInfo#FOCUS_ACCESSIBILITY}. + * @return The node info of the focused view or null. + * @see AccessibilityNodeInfo#FOCUS_INPUT + * @see AccessibilityNodeInfo#FOCUS_ACCESSIBILITY + */ + public AccessibilityNodeInfo findFocus(int focus) { + return null; + } }