Loading core/java/android/view/accessibility/AccessibilityNodeProvider.java +114 −16 Original line number Diff line number Diff line Loading @@ -44,28 +44,126 @@ import java.util.List; * View itself. Similarly the returned instance is responsible for performing accessibility * actions on any virtual view or the root view itself. For example: * </p> * <pre> * getAccessibilityNodeProvider( * if (mAccessibilityNodeProvider == null) { * mAccessibilityNodeProvider = new AccessibilityNodeProvider() { * public boolean performAction(int action, int virtualDescendantId) { * // Implementation. * return false; * <div> * <div class="ds-selector-tabs"><section><h3 id="kotlin">Kotlin</h3> * <pre class="prettyprint lang-kotlin"> * // "view" is the View instance on which this class performs accessibility functions. * class MyCalendarViewAccessibilityDelegate( * private var view: MyCalendarView) : AccessibilityDelegate() { * override fun getAccessibilityNodeProvider(host: View): AccessibilityNodeProvider { * return object : AccessibilityNodeProvider() { * override fun createAccessibilityNodeInfo(virtualViewId: Int): * AccessibilityNodeInfo? { * when (virtualViewId) { * <var>host-view-id</var> -> { * val node = AccessibilityNodeInfo.obtain(view) * node.addChild(view, <var>child-view-id</var>) * // Set other attributes like screenReaderFocusable * // and contentDescription. * return node * } * <var>child-view-id</var> -> { * val node = AccessibilityNodeInfo * .obtain(view, virtualViewId) * node.setParent(view) * node.addAction(ACTION_SCROLL_UP) * node.addAction(ACTION_SCROLL_DOWN) * // Set other attributes like focusable and visibleToUser. * node.setBoundsInScreen( * Rect(<var>coords-of-edges-relative-to-screen</var>)) * return node * } * else -> return null * } * } * * public List<AccessibilityNodeInfo> findAccessibilityNodeInfosByText(String text, * int virtualDescendantId) { * // Implementation. * return null; * override fun performAction( * virtualViewId: Int, * action: Int, * arguments: Bundle * ): Boolean { * if (virtualViewId == <var>host-view-id</var>) { * return view.performAccessibilityAction(action, arguments) * } * when (action) { * ACTION_SCROLL_UP.id -> { * // Implement logic in a separate method. * navigateToPreviousMonth() * * public AccessibilityNodeInfo createAccessibilityNodeInfo(int virtualDescendantId) { * // Implementation. * return null; * return true * } * ACTION_SCROLL_DOWN.id -> * // Implement logic in a separate method. * navigateToNextMonth() * * return true * else -> return false * } * } * } * } * } * }); * return mAccessibilityNodeProvider; * </pre> * </section><section><h3 id="java">Java</h3> * <pre class="prettyprint lang-java"> * final class MyCalendarViewAccessibilityDelegate extends AccessibilityDelegate { * // The View instance on which this class performs accessibility functions. * private final MyCalendarView view; * * MyCalendarViewAccessibilityDelegate(MyCalendarView view) { * this.view = view; * } * * @Override * public AccessibilityNodeProvider getAccessibilityNodeProvider(View host) { * return new AccessibilityNodeProvider() { * @Override * @Nullable * public AccessibilityNodeInfo createAccessibilityNodeInfo(int virtualViewId) { * if (virtualViewId == <var>host-view-id</var>) { * AccessibilityNodeInfo node = AccessibilityNodeInfo.obtain(view); * node.addChild(view, <var>child-view-id</var>); * // Set other attributes like screenReaderFocusable and contentDescription. * return node; * } else if (virtualViewId == <var>child-view-id</var>) { * AccessibilityNodeInfo node = * AccessibilityNodeInfo.obtain(view, virtualViewId); * node.setParent(view); * node.addAction(ACTION_SCROLL_UP); * node.addAction(ACTION_SCROLL_DOWN); * // Set other attributes like focusable and visibleToUser. * node.setBoundsInScreen( * new Rect(<var>coordinates-of-edges-relative-to-screen</var>)); * return node; * } else { * return null; * } * } * * @Override * public boolean performAction(int virtualViewId, int action, Bundle arguments) { * if (virtualViewId == <var>host-view-id</var>) { * return view.performAccessibilityAction(action, arguments); * } * * if (action == ACTION_SCROLL_UP.getId()) { * // Implement logic in a separate method. * navigateToPreviousMonth(); * * return true; * } else if (action == ACTION_SCROLL_DOWN.getId()) { * // Implement logic in a separate method. * navigateToNextMonth(); * * return true; * } else { * return false; * } * } * }; * } * } * </pre></section></div></div> */ public abstract class AccessibilityNodeProvider { Loading Loading
core/java/android/view/accessibility/AccessibilityNodeProvider.java +114 −16 Original line number Diff line number Diff line Loading @@ -44,28 +44,126 @@ import java.util.List; * View itself. Similarly the returned instance is responsible for performing accessibility * actions on any virtual view or the root view itself. For example: * </p> * <pre> * getAccessibilityNodeProvider( * if (mAccessibilityNodeProvider == null) { * mAccessibilityNodeProvider = new AccessibilityNodeProvider() { * public boolean performAction(int action, int virtualDescendantId) { * // Implementation. * return false; * <div> * <div class="ds-selector-tabs"><section><h3 id="kotlin">Kotlin</h3> * <pre class="prettyprint lang-kotlin"> * // "view" is the View instance on which this class performs accessibility functions. * class MyCalendarViewAccessibilityDelegate( * private var view: MyCalendarView) : AccessibilityDelegate() { * override fun getAccessibilityNodeProvider(host: View): AccessibilityNodeProvider { * return object : AccessibilityNodeProvider() { * override fun createAccessibilityNodeInfo(virtualViewId: Int): * AccessibilityNodeInfo? { * when (virtualViewId) { * <var>host-view-id</var> -> { * val node = AccessibilityNodeInfo.obtain(view) * node.addChild(view, <var>child-view-id</var>) * // Set other attributes like screenReaderFocusable * // and contentDescription. * return node * } * <var>child-view-id</var> -> { * val node = AccessibilityNodeInfo * .obtain(view, virtualViewId) * node.setParent(view) * node.addAction(ACTION_SCROLL_UP) * node.addAction(ACTION_SCROLL_DOWN) * // Set other attributes like focusable and visibleToUser. * node.setBoundsInScreen( * Rect(<var>coords-of-edges-relative-to-screen</var>)) * return node * } * else -> return null * } * } * * public List<AccessibilityNodeInfo> findAccessibilityNodeInfosByText(String text, * int virtualDescendantId) { * // Implementation. * return null; * override fun performAction( * virtualViewId: Int, * action: Int, * arguments: Bundle * ): Boolean { * if (virtualViewId == <var>host-view-id</var>) { * return view.performAccessibilityAction(action, arguments) * } * when (action) { * ACTION_SCROLL_UP.id -> { * // Implement logic in a separate method. * navigateToPreviousMonth() * * public AccessibilityNodeInfo createAccessibilityNodeInfo(int virtualDescendantId) { * // Implementation. * return null; * return true * } * ACTION_SCROLL_DOWN.id -> * // Implement logic in a separate method. * navigateToNextMonth() * * return true * else -> return false * } * } * } * } * } * }); * return mAccessibilityNodeProvider; * </pre> * </section><section><h3 id="java">Java</h3> * <pre class="prettyprint lang-java"> * final class MyCalendarViewAccessibilityDelegate extends AccessibilityDelegate { * // The View instance on which this class performs accessibility functions. * private final MyCalendarView view; * * MyCalendarViewAccessibilityDelegate(MyCalendarView view) { * this.view = view; * } * * @Override * public AccessibilityNodeProvider getAccessibilityNodeProvider(View host) { * return new AccessibilityNodeProvider() { * @Override * @Nullable * public AccessibilityNodeInfo createAccessibilityNodeInfo(int virtualViewId) { * if (virtualViewId == <var>host-view-id</var>) { * AccessibilityNodeInfo node = AccessibilityNodeInfo.obtain(view); * node.addChild(view, <var>child-view-id</var>); * // Set other attributes like screenReaderFocusable and contentDescription. * return node; * } else if (virtualViewId == <var>child-view-id</var>) { * AccessibilityNodeInfo node = * AccessibilityNodeInfo.obtain(view, virtualViewId); * node.setParent(view); * node.addAction(ACTION_SCROLL_UP); * node.addAction(ACTION_SCROLL_DOWN); * // Set other attributes like focusable and visibleToUser. * node.setBoundsInScreen( * new Rect(<var>coordinates-of-edges-relative-to-screen</var>)); * return node; * } else { * return null; * } * } * * @Override * public boolean performAction(int virtualViewId, int action, Bundle arguments) { * if (virtualViewId == <var>host-view-id</var>) { * return view.performAccessibilityAction(action, arguments); * } * * if (action == ACTION_SCROLL_UP.getId()) { * // Implement logic in a separate method. * navigateToPreviousMonth(); * * return true; * } else if (action == ACTION_SCROLL_DOWN.getId()) { * // Implement logic in a separate method. * navigateToNextMonth(); * * return true; * } else { * return false; * } * } * }; * } * } * </pre></section></div></div> */ public abstract class AccessibilityNodeProvider { Loading