From 46278e30e32a30b174a5d0cdcf226c7eccda14ea Mon Sep 17 00:00:00 2001 From: Pieter De Baets Date: Mon, 1 Sep 2025 08:38:27 -0700 Subject: [PATCH] Dedupe Accessibility enum string conversions (#53550) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/53550 Noticed some duplication between `getDiffProps` and `accessibilityPropsConversion` Changelog: [Internal] Reviewed By: lenaic, rshest Differential Revision: D81435037 fbshipit-source-id: b2701f1aec5e647c165a0212f6180edba90fd9f9 --- .../components/view/AccessibilityPrimitives.h | 62 +------------------ .../view/accessibilityPropsConversions.h | 56 +++++++++++++++++ .../renderer/components/view/conversions.h | 2 +- .../components/view/HostPlatformViewProps.cpp | 43 +------------ 4 files changed, 62 insertions(+), 101 deletions(-) diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h b/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h index eb5232584ac..b5d7010a28b 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h @@ -12,8 +12,6 @@ #include #include -#include - namespace facebook::react { enum class AccessibilityTraits : uint32_t { @@ -55,27 +53,6 @@ struct AccessibilityAction { std::optional label{}; }; -inline std::string toString(const AccessibilityAction& accessibilityAction) { - std::string result = accessibilityAction.name; - if (accessibilityAction.label.has_value()) { - result += ": '" + accessibilityAction.label.value() + "'"; - } - return result; -} - -inline std::string toString( - std::vector accessibilityActions) { - std::string result = "["; - for (size_t i = 0; i < accessibilityActions.size(); i++) { - result += toString(accessibilityActions[i]); - if (i < accessibilityActions.size() - 1) { - result += ", "; - } - } - result += "]"; - return result; -} - inline static bool operator==( const AccessibilityAction& lhs, const AccessibilityAction& rhs) { @@ -110,29 +87,6 @@ constexpr bool operator!=( return !(rhs == lhs); } -#if RN_DEBUG_STRING_CONVERTIBLE -inline std::string toString(AccessibilityState::CheckedState state) { - switch (state) { - case AccessibilityState::Unchecked: - return "Unchecked"; - case AccessibilityState::Checked: - return "Checked"; - case AccessibilityState::Mixed: - return "Mixed"; - case AccessibilityState::None: - return "None"; - } -} - -inline std::string toString(const AccessibilityState& accessibilityState) { - return "{disabled:" + toString(accessibilityState.disabled) + - ",selected:" + toString(accessibilityState.selected) + - ",checked:" + toString(accessibilityState.checked) + - ",busy:" + toString(accessibilityState.busy) + - ",expanded:" + toString(accessibilityState.expanded) + "}"; -} -#endif - struct AccessibilityLabelledBy { std::vector value{}; }; @@ -182,19 +136,7 @@ enum class AccessibilityLiveRegion : uint8_t { Assertive, }; -inline std::string toString( - const AccessibilityLiveRegion& accessibilityLiveRegion) { - switch (accessibilityLiveRegion) { - case AccessibilityLiveRegion::None: - return "none"; - case AccessibilityLiveRegion::Polite: - return "polite"; - case AccessibilityLiveRegion::Assertive: - return "assertive"; - } -} - -enum class AccessibilityRole { +enum class AccessibilityRole : uint8_t { None, Button, Dropdownlist, @@ -237,7 +179,7 @@ enum class AccessibilityRole { Iconmenu, }; -enum class Role { +enum class Role : uint8_t { Alert, Alertdialog, Application, diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h b/packages/react-native/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h index 7b16f62dc54..8eb786fb02a 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h @@ -14,6 +14,7 @@ #include #include #include +#include #include @@ -782,4 +783,59 @@ inline void fromRawValue( result = Role::None; } +inline std::string toString(AccessibilityLiveRegion accessibilityLiveRegion) { + switch (accessibilityLiveRegion) { + case AccessibilityLiveRegion::None: + return "none"; + case AccessibilityLiveRegion::Polite: + return "polite"; + case AccessibilityLiveRegion::Assertive: + return "assertive"; + } +} + +#if RN_DEBUG_STRING_CONVERTIBLE +inline std::string toString(AccessibilityState::CheckedState state) { + switch (state) { + case AccessibilityState::Unchecked: + return "Unchecked"; + case AccessibilityState::Checked: + return "Checked"; + case AccessibilityState::Mixed: + return "Mixed"; + case AccessibilityState::None: + return "None"; + } +} + +inline std::string toString(const AccessibilityAction& accessibilityAction) { + std::string result = accessibilityAction.name; + if (accessibilityAction.label.has_value()) { + result += ": '" + accessibilityAction.label.value() + "'"; + } + return result; +} + +inline std::string toString( + std::vector accessibilityActions) { + std::string result = "["; + for (size_t i = 0; i < accessibilityActions.size(); i++) { + result += toString(accessibilityActions[i]); + if (i < accessibilityActions.size() - 1) { + result += ", "; + } + } + result += "]"; + return result; +} + +inline std::string toString(const AccessibilityState& accessibilityState) { + return "{disabled:" + toString(accessibilityState.disabled) + + ",selected:" + toString(accessibilityState.selected) + + ",checked:" + toString(accessibilityState.checked) + + ",busy:" + toString(accessibilityState.busy) + + ",expanded:" + toString(accessibilityState.expanded) + "}"; +} +#endif + } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/conversions.h b/packages/react-native/ReactCommon/react/renderer/components/view/conversions.h index 349b1e332e0..0927a1a83bb 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/conversions.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/conversions.h @@ -848,7 +848,7 @@ inline void fromRawValue( react_native_expect(false); } -inline std::string toString(const PointerEventsMode& value) { +inline std::string toString(PointerEventsMode value) { switch (value) { case PointerEventsMode::Auto: return "auto"; diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/HostPlatformViewProps.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/HostPlatformViewProps.cpp index 395dbe5f1ae..30ae94e6b5b 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/HostPlatformViewProps.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/HostPlatformViewProps.cpp @@ -618,21 +618,7 @@ folly::dynamic HostPlatformViewProps::getDiffProps( } if (pointerEvents != oldProps->pointerEvents) { - std::string value; - switch (pointerEvents) { - case PointerEventsMode::BoxOnly: - result["pointerEvents"] = "box-only"; - break; - case PointerEventsMode::BoxNone: - result["pointerEvents"] = "box-none"; - break; - case PointerEventsMode::None: - result["pointerEvents"] = "none"; - break; - default: - result["pointerEvents"] = "auto"; - break; - } + result["pointerEvents"] = toString(pointerEvents); } if (hitSlop != oldProps->hitSlop) { @@ -917,17 +903,7 @@ folly::dynamic HostPlatformViewProps::getDiffProps( } if (accessibilityLiveRegion != oldProps->accessibilityLiveRegion) { - switch (accessibilityLiveRegion) { - case AccessibilityLiveRegion::Assertive: - result["accessibilityLiveRegion"] = "assertive"; - break; - case AccessibilityLiveRegion::Polite: - result["accessibilityLiveRegion"] = "polite"; - break; - case AccessibilityLiveRegion::None: - result["accessibilityLiveRegion"] = "none"; - break; - } + result["accessibilityLiveRegion"] = toString(accessibilityLiveRegion); } if (accessibilityHint != oldProps->accessibilityHint) { @@ -1003,20 +979,7 @@ folly::dynamic HostPlatformViewProps::getDiffProps( } if (importantForAccessibility != oldProps->importantForAccessibility) { - switch (importantForAccessibility) { - case ImportantForAccessibility::Auto: - result["importantForAccessibility"] = "auto"; - break; - case ImportantForAccessibility::Yes: - result["importantForAccessibility"] = "yes"; - break; - case ImportantForAccessibility::No: - result["importantForAccessibility"] = "no"; - break; - case ImportantForAccessibility::NoHideDescendants: - result["importantForAccessibility"] = "noHideDescendants"; - break; - } + result["importantForAccessibility"] = toString(importantForAccessibility); } return result;