From 11f8d9c7cd4bae0b1a5e880ea9b2da7447ad76c2 Mon Sep 17 00:00:00 2001 From: Jimmy Zhang Date: Tue, 24 Aug 2021 02:29:39 -0700 Subject: [PATCH] Add support for the UIAccessibilityTraitsTabBar Summary: Changelog: Add the capability to set tabbar accessibilityRole which maps to the iOS's UIAccessibilityTraitsTabBar Reviewed By: yungsters Differential Revision: D30490752 fbshipit-source-id: f7561a8932306e133d2f65a5ab40ba0be3899ec3 --- Libraries/Components/View/ViewAccessibility.js | 1 + React/Fabric/RCTConversions.h | 3 +++ React/Views/RCTViewManager.m | 1 + ReactCommon/react/renderer/attributedstring/conversions.h | 4 ++++ ReactCommon/react/renderer/attributedstring/primitives.h | 1 + .../react/renderer/components/view/AccessibilityPrimitives.h | 1 + .../renderer/components/view/accessibilityPropsConversions.h | 4 ++++ .../textlayoutmanager/platform/ios/RCTAttributedTextUtils.mm | 3 +++ 8 files changed, 18 insertions(+) diff --git a/Libraries/Components/View/ViewAccessibility.js b/Libraries/Components/View/ViewAccessibility.js index 47c99e27a9ae85..4debbe4da3ed6f 100644 --- a/Libraries/Components/View/ViewAccessibility.js +++ b/Libraries/Components/View/ViewAccessibility.js @@ -39,6 +39,7 @@ export type AccessibilityRole = | 'spinbutton' | 'switch' | 'tab' + | 'tabbar' | 'tablist' | 'timer' | 'list' diff --git a/React/Fabric/RCTConversions.h b/React/Fabric/RCTConversions.h index d8169ec2cffc91..495198b9709317 100644 --- a/React/Fabric/RCTConversions.h +++ b/React/Fabric/RCTConversions.h @@ -141,6 +141,9 @@ inline UIAccessibilityTraits RCTUIAccessibilityTraitsFromAccessibilityTraits( if ((accessibilityTraits & AccessibilityTraits::Switch) != AccessibilityTraits::None) { result |= AccessibilityTraitSwitch; } + if ((accessibilityTraits & AccessibilityTraits::TabBar) != AccessibilityTraits::None) { + result |= UIAccessibilityTraitTabBar; + } return result; }; diff --git a/React/Views/RCTViewManager.m b/React/Views/RCTViewManager.m index 799e60a0793747..e1218914e8d68f 100644 --- a/React/Views/RCTViewManager.m +++ b/React/Views/RCTViewManager.m @@ -58,6 +58,7 @@ @implementation RCTConvert (UIAccessibilityTraits) @"spinbutton" : @(UIAccessibilityTraitNone), @"switch" : @(SwitchAccessibilityTrait), @"tab" : @(UIAccessibilityTraitNone), + @"tabbar" : @(UIAccessibilityTraitTabBar), @"tablist" : @(UIAccessibilityTraitNone), @"timer" : @(UIAccessibilityTraitNone), @"toolbar" : @(UIAccessibilityTraitNone), diff --git a/ReactCommon/react/renderer/attributedstring/conversions.h b/ReactCommon/react/renderer/attributedstring/conversions.h index 57fa61af975eec..da688767fcd752 100644 --- a/ReactCommon/react/renderer/attributedstring/conversions.h +++ b/ReactCommon/react/renderer/attributedstring/conversions.h @@ -618,6 +618,8 @@ inline std::string toString(const AccessibilityRole &accessibilityRole) { return "switch"; case AccessibilityRole::Tab: return "tab"; + case AccessibilityRole::TabBar: + return "tabbar"; case AccessibilityRole::Tablist: return "tablist"; case AccessibilityRole::Timer: @@ -687,6 +689,8 @@ inline void fromRawValue( result = AccessibilityRole::Switch; } else if (string == "tab") { result = AccessibilityRole::Tab; + } else if (string == "tabbar") { + result = AccessibilityRole::TabBar; } else if (string == "tablist") { result = AccessibilityRole::Tablist; } else if (string == "timer") { diff --git a/ReactCommon/react/renderer/attributedstring/primitives.h b/ReactCommon/react/renderer/attributedstring/primitives.h index deeb40b11a72b3..cb080f35b83e6c 100644 --- a/ReactCommon/react/renderer/attributedstring/primitives.h +++ b/ReactCommon/react/renderer/attributedstring/primitives.h @@ -112,6 +112,7 @@ enum class AccessibilityRole { Spinbutton, Switch, Tab, + TabBar, Tablist, Timer, Toolbar, diff --git a/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h b/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h index b9306c2967d49a..21e2868a2d78e7 100644 --- a/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h +++ b/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h @@ -33,6 +33,7 @@ enum class AccessibilityTraits : uint32_t { CausesPageTurn = (1 << 14), Header = (1 << 15), Switch = (1 << 16), + TabBar = (1 << 17), }; constexpr enum AccessibilityTraits operator|( diff --git a/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h b/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h index 37b8961a0ca52f..40ff9e5e19ced2 100644 --- a/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h +++ b/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h @@ -94,6 +94,10 @@ inline void fromString(const std::string &string, AccessibilityTraits &result) { result = AccessibilityTraits::Switch; return; } + if (string == "tabbar") { + result = AccessibilityTraits::TabBar; + return; + } result = AccessibilityTraits::None; } diff --git a/ReactCommon/react/renderer/textlayoutmanager/platform/ios/RCTAttributedTextUtils.mm b/ReactCommon/react/renderer/textlayoutmanager/platform/ios/RCTAttributedTextUtils.mm index 496ae69979b4a9..5df0cd9cad7385 100644 --- a/ReactCommon/react/renderer/textlayoutmanager/platform/ios/RCTAttributedTextUtils.mm +++ b/ReactCommon/react/renderer/textlayoutmanager/platform/ios/RCTAttributedTextUtils.mm @@ -288,6 +288,9 @@ inline static CGFloat RCTEffectiveFontSizeMultiplierFromTextAttributes(const Tex case AccessibilityRole::Tab: attributes[RCTTextAttributesAccessibilityRoleAttributeName] = @("tab"); break; + case AccessibilityRole::TabBar: + attributes[RCTTextAttributesAccessibilityRoleAttributeName] = @("tabbar"); + break; case AccessibilityRole::Tablist: attributes[RCTTextAttributesAccessibilityRoleAttributeName] = @("tablist"); break;