From fd660fd0c50a0acca730bd1ecd427e574bbe81c7 Mon Sep 17 00:00:00 2001 From: Jiayan Zhuang Date: Tue, 14 Jul 2020 09:26:07 -0700 Subject: [PATCH] Add `importantForAccessibility` to `AccessibilityProps` and wire with `FormsStakingContext` Summary: Changelog: [iOS][Added] - Add `importantForAccessibility` to `AccessibilityProps` Reviewed By: shergin Differential Revision: D22490327 fbshipit-source-id: aec7ff64ea6ddfe29bad085b87d09906fa8ee029 --- .../fabric/components/view/ViewShadowNode.cpp | 3 +- .../accessibility/AccessibilityPrimitives.h | 7 ++++ .../view/accessibility/AccessibilityProps.cpp | 5 +++ .../view/accessibility/AccessibilityProps.h | 2 + .../accessibilityPropsConversions.h | 37 +++++++++++++++++++ 5 files changed, 53 insertions(+), 1 deletion(-) diff --git a/ReactCommon/fabric/components/view/ViewShadowNode.cpp b/ReactCommon/fabric/components/view/ViewShadowNode.cpp index 43b6b7229d4ee5..421f69c7c8bd97 100644 --- a/ReactCommon/fabric/components/view/ViewShadowNode.cpp +++ b/ReactCommon/fabric/components/view/ViewShadowNode.cpp @@ -48,7 +48,8 @@ void ViewShadowNode::initialize() noexcept { viewProps.yogaStyle.positionType() == YGPositionTypeAbsolute) || viewProps.yogaStyle.display() == YGDisplayNone || viewProps.getClipsContentToBounds() || - isColorMeaningful(viewProps.shadowColor); + isColorMeaningful(viewProps.shadowColor) || + viewProps.importantForAccessibility != ImportantForAccessibility::Auto; bool formsView = isColorMeaningful(viewProps.backgroundColor) || isColorMeaningful(viewProps.foregroundColor) || diff --git a/ReactCommon/fabric/components/view/accessibility/AccessibilityPrimitives.h b/ReactCommon/fabric/components/view/accessibility/AccessibilityPrimitives.h index a17b9aa44f7a0a..5cd1997f99868a 100644 --- a/ReactCommon/fabric/components/view/accessibility/AccessibilityPrimitives.h +++ b/ReactCommon/fabric/components/view/accessibility/AccessibilityPrimitives.h @@ -61,5 +61,12 @@ constexpr bool operator!=( return !(rhs == lhs); } +enum class ImportantForAccessibility { + Auto, + Yes, + No, + NoHideDescendants, +}; + } // namespace react } // namespace facebook diff --git a/ReactCommon/fabric/components/view/accessibility/AccessibilityProps.cpp b/ReactCommon/fabric/components/view/accessibility/AccessibilityProps.cpp index 417eccd656524b..584e599b2dfaa3 100644 --- a/ReactCommon/fabric/components/view/accessibility/AccessibilityProps.cpp +++ b/ReactCommon/fabric/components/view/accessibility/AccessibilityProps.cpp @@ -83,6 +83,11 @@ AccessibilityProps::AccessibilityProps( "onAccessibilityAction", sourceProps.onAccessibilityAction, {})), + importantForAccessibility(convertRawProp( + rawProps, + "importantForAccessibility", + sourceProps.importantForAccessibility, + ImportantForAccessibility::Auto)), testId(convertRawProp(rawProps, "testId", sourceProps.testId, "")) {} #pragma mark - DebugStringConvertible diff --git a/ReactCommon/fabric/components/view/accessibility/AccessibilityProps.h b/ReactCommon/fabric/components/view/accessibility/AccessibilityProps.h index fc6088dbf0a149..59537b1d01861d 100644 --- a/ReactCommon/fabric/components/view/accessibility/AccessibilityProps.h +++ b/ReactCommon/fabric/components/view/accessibility/AccessibilityProps.h @@ -37,6 +37,8 @@ class AccessibilityProps { bool onAccessibilityMagicTap{}; bool onAccessibilityEscape{}; bool onAccessibilityAction{}; + ImportantForAccessibility importantForAccessibility{ + ImportantForAccessibility::Auto}; std::string testId{""}; #pragma mark - DebugStringConvertible diff --git a/ReactCommon/fabric/components/view/accessibility/accessibilityPropsConversions.h b/ReactCommon/fabric/components/view/accessibility/accessibilityPropsConversions.h index c0239600a8646d..3c2fa76193ebd6 100644 --- a/ReactCommon/fabric/components/view/accessibility/accessibilityPropsConversions.h +++ b/ReactCommon/fabric/components/view/accessibility/accessibilityPropsConversions.h @@ -122,5 +122,42 @@ inline void fromRawValue(const RawValue &value, AccessibilityState &result) { } } +inline std::string toString( + const ImportantForAccessibility &importantForAccessibility) { + switch (importantForAccessibility) { + case ImportantForAccessibility::Auto: + return "auto"; + case ImportantForAccessibility::Yes: + return "yes"; + case ImportantForAccessibility::No: + return "no"; + case ImportantForAccessibility::NoHideDescendants: + return "no-hide-descendants"; + } +} + +inline void fromRawValue( + const RawValue &value, + ImportantForAccessibility &result) { + auto string = (std::string)value; + if (string == "auto") { + result = ImportantForAccessibility::Auto; + return; + } + if (string == "yes") { + result = ImportantForAccessibility::Yes; + return; + } + if (string == "no") { + result = ImportantForAccessibility::No; + return; + } + if (string == "no-hide-descendants") { + result = ImportantForAccessibility::NoHideDescendants; + return; + } + abort(); +} + } // namespace react } // namespace facebook