diff --git a/Libraries/Components/View/ViewAccessibility.js b/Libraries/Components/View/ViewAccessibility.js index dd2056ae529ef1..ccdc6a6688a083 100644 --- a/Libraries/Components/View/ViewAccessibility.js +++ b/Libraries/Components/View/ViewAccessibility.js @@ -16,6 +16,7 @@ import type {SyntheticEvent} from '../../Types/CoreEventTypes'; export type AccessibilityRole = | 'none' | 'button' + | 'togglebutton' | 'link' | 'search' | 'image' diff --git a/Libraries/DeprecatedPropTypes/DeprecatedViewAccessibility.js b/Libraries/DeprecatedPropTypes/DeprecatedViewAccessibility.js index 77c4146a865f5b..ef82aa5c7dedfe 100644 --- a/Libraries/DeprecatedPropTypes/DeprecatedViewAccessibility.js +++ b/Libraries/DeprecatedPropTypes/DeprecatedViewAccessibility.js @@ -15,6 +15,7 @@ module.exports = { DeprecatedAccessibilityRoles: [ 'none', 'button', + 'togglebutton', 'link', 'search', 'image', diff --git a/React/Views/RCTViewManager.m b/React/Views/RCTViewManager.m index 48dcd0a06ce4a3..779b6559c6334b 100644 --- a/React/Views/RCTViewManager.m +++ b/React/Views/RCTViewManager.m @@ -26,6 +26,7 @@ @implementation RCTConvert (UIAccessibilityTraits) (@{ @"none" : @(UIAccessibilityTraitNone), @"button" : @(UIAccessibilityTraitButton), + @"togglebutton" : @(UIAccessibilityTraitButton), @"link" : @(UIAccessibilityTraitLink), @"header" : @(UIAccessibilityTraitHeader), @"search" : @(UIAccessibilityTraitSearchField), diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactAccessibilityDelegate.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactAccessibilityDelegate.java index afbe05610b0ff8..b87e976ef62437 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactAccessibilityDelegate.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactAccessibilityDelegate.java @@ -82,6 +82,7 @@ private void scheduleAccessibilityEventSender(View host) { public enum AccessibilityRole { NONE, BUTTON, + TOGGLEBUTTON, LINK, SEARCH, IMAGE, @@ -112,6 +113,8 @@ public static String getValue(AccessibilityRole role) { switch (role) { case BUTTON: return "android.widget.Button"; + case TOGGLEBUTTON: + return "android.widget.ToggleButton"; case SEARCH: return "android.widget.EditText"; case IMAGE: @@ -392,6 +395,10 @@ public static void setRole( } else if (role.equals(AccessibilityRole.BUTTON)) { nodeInfo.setRoleDescription(context.getString(R.string.button_description)); nodeInfo.setClickable(true); + } else if (role.equals(AccessibilityRole.TOGGLEBUTTON)) { + nodeInfo.setRoleDescription(context.getString(R.string.toggle_button_description)); + nodeInfo.setClickable(true); + nodeInfo.setCheckable(true); } else if (role.equals(AccessibilityRole.SUMMARY)) { nodeInfo.setRoleDescription(context.getString(R.string.summary_description)); } else if (role.equals(AccessibilityRole.HEADER)) { diff --git a/ReactAndroid/src/main/res/views/uimanager/values/strings_unlocalized.xml b/ReactAndroid/src/main/res/views/uimanager/values/strings_unlocalized.xml index a904f57856fb2a..2d239fdbd93def 100644 --- a/ReactAndroid/src/main/res/views/uimanager/values/strings_unlocalized.xml +++ b/ReactAndroid/src/main/res/views/uimanager/values/strings_unlocalized.xml @@ -16,6 +16,10 @@ name="button_description" translatable="false" >Button + Toggle Button