/** * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ package com.facebook.react.uimanager; import android.view.View; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; import android.widget.Button; import android.widget.RadioButton; /** * Helper class containing logic for setting accessibility View properties. */ /* package */ class AccessibilityHelper { private static final String BUTTON = "button"; private static final String RADIOBUTTON_CHECKED = "radiobutton_checked"; private static final String RADIOBUTTON_UNCHECKED = "radiobutton_unchecked"; private static final View.AccessibilityDelegate BUTTON_DELEGATE = new View.AccessibilityDelegate() { @Override public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) { super.onInitializeAccessibilityEvent(host, event); event.setClassName(Button.class.getName()); } @Override public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) { super.onInitializeAccessibilityNodeInfo(host, info); info.setClassName(Button.class.getName()); } }; private static final View.AccessibilityDelegate RADIOBUTTON_CHECKED_DELEGATE = new View.AccessibilityDelegate() { @Override public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) { super.onInitializeAccessibilityEvent(host, event); event.setClassName(RadioButton.class.getName()); event.setChecked(true); } @Override public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) { super.onInitializeAccessibilityNodeInfo(host, info); info.setClassName(RadioButton.class.getName()); info.setCheckable(true); info.setChecked(true); } }; private static final View.AccessibilityDelegate RADIOBUTTON_UNCHECKED_DELEGATE = new View.AccessibilityDelegate() { @Override public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) { super.onInitializeAccessibilityEvent(host, event); event.setClassName(RadioButton.class.getName()); event.setChecked(false); } @Override public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) { super.onInitializeAccessibilityNodeInfo(host, info); info.setClassName(RadioButton.class.getName()); info.setCheckable(true); info.setChecked(false); } }; public static void updateAccessibilityComponentType(View view, String componentType) { if (componentType == null) { view.setAccessibilityDelegate(null); return; } switch (componentType) { case BUTTON: view.setAccessibilityDelegate(BUTTON_DELEGATE); break; case RADIOBUTTON_CHECKED: view.setAccessibilityDelegate(RADIOBUTTON_CHECKED_DELEGATE); break; case RADIOBUTTON_UNCHECKED: view.setAccessibilityDelegate(RADIOBUTTON_UNCHECKED_DELEGATE); break; default: view.setAccessibilityDelegate(null); break; } } public static void sendAccessibilityEvent(View view, int eventType) { view.sendAccessibilityEvent(eventType); } }