diff --git a/Libraries/Text/Text.js b/Libraries/Text/Text.js index 1f6524721cc820..c89f69cf96c74e 100644 --- a/Libraries/Text/Text.js +++ b/Libraries/Text/Text.js @@ -224,6 +224,7 @@ const Text: React.AbstractComponent< ops = new ArrayList<>(); + Log.w( + "TESTING::TextLayoutManagerMapBuffer", + "getMapBuffer(AS_KEY_FRAGMENTS): " + (attributedString.getMapBuffer(AS_KEY_FRAGMENTS))); buildSpannableFromFragment(context, attributedString.getMapBuffer(AS_KEY_FRAGMENTS), sb, ops); // TODO T31905686: add support for inline Images diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactMapBufferPropSetter.kt b/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactMapBufferPropSetter.kt index 0f5dd3fcb03b5d..1cf9b09387966a 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactMapBufferPropSetter.kt +++ b/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactMapBufferPropSetter.kt @@ -6,7 +6,6 @@ */ package com.facebook.react.views.view -import android.util.Log; import android.graphics.Color import android.graphics.Rect import androidx.core.view.ViewCompat @@ -108,7 +107,6 @@ object ReactMapBufferPropSetter { private const val UNDEF_COLOR = Int.MAX_VALUE fun setProps(view: ReactViewGroup, viewManager: ReactViewManager, props: MapBuffer) { - Log.w("TESTING::ReactMapBufferPropSetter", "props: " + ( props )); for (entry in props) { when (entry.key) { VP_ACCESSIBILITY_ACTIONS -> { @@ -133,7 +131,7 @@ object ReactMapBufferPropSetter { viewManager.accessibilityState(view, entry.mapBufferValue) } VP_ACCESSIBILITY_UNIT -> { - // viewManager.accessibilityUnit(view, entry.mapBufferValue) + viewManager.accessibilityUnit(view, entry.mapBufferValue) } VP_ACCESSIBILITY_VALUE -> { viewManager.accessibilityValue(view, entry.stringValue) @@ -284,7 +282,6 @@ object ReactMapBufferPropSetter { } private fun ReactViewManager.accessibilityUnit(view: ReactViewGroup, value: MapBuffer) { - Log.w("TESTING::ReactMapBufferPropSetter", "accessibilityUnit"); val accessibilityUnit = JavaOnlyMap() accessibilityUnit.putString("hours", "10") diff --git a/ReactCommon/react/renderer/attributedstring/TextAttributes.cpp b/ReactCommon/react/renderer/attributedstring/TextAttributes.cpp index 24f5bbd07b8072..04d73ae810081a 100644 --- a/ReactCommon/react/renderer/attributedstring/TextAttributes.cpp +++ b/ReactCommon/react/renderer/attributedstring/TextAttributes.cpp @@ -98,6 +98,9 @@ void TextAttributes::apply(TextAttributes textAttributes) { accessibilityRole = textAttributes.accessibilityRole.has_value() ? textAttributes.accessibilityRole : accessibilityRole; + accessibilityUnit = textAttributes.accessibilityUnit.has_value() + ? textAttributes.accessibilityUnit + : accessibilityUnit; } #pragma mark - Operators @@ -122,6 +125,7 @@ bool TextAttributes::operator==(const TextAttributes &rhs) const { isHighlighted, layoutDirection, accessibilityRole, + accessibilityUnit, textTransform) == std::tie( rhs.foregroundColor, @@ -142,6 +146,7 @@ bool TextAttributes::operator==(const TextAttributes &rhs) const { rhs.isHighlighted, rhs.layoutDirection, rhs.accessibilityRole, + rhs.accessibilityUnit, rhs.textTransform) && floatEquality(opacity, rhs.opacity) && floatEquality(fontSize, rhs.fontSize) && @@ -209,6 +214,7 @@ SharedDebugStringConvertibleList TextAttributes::getDebugProps() const { debugStringConvertibleItem("isHighlighted", isHighlighted), debugStringConvertibleItem("layoutDirection", layoutDirection), debugStringConvertibleItem("accessibilityRole", accessibilityRole), + debugStringConvertibleItem("accessibilityUnit", accessibilityUnit), }; } #endif diff --git a/ReactCommon/react/renderer/attributedstring/TextAttributes.h b/ReactCommon/react/renderer/attributedstring/TextAttributes.h index 69400f2ed172f7..d0b965d2ad0f66 100644 --- a/ReactCommon/react/renderer/attributedstring/TextAttributes.h +++ b/ReactCommon/react/renderer/attributedstring/TextAttributes.h @@ -79,6 +79,7 @@ class TextAttributes : public DebugStringConvertible { // construction. std::optional layoutDirection{}; std::optional accessibilityRole{}; + std::optional accessibilityUnit{}; #pragma mark - Operations @@ -131,7 +132,8 @@ struct hash { textAttributes.textShadowColor, textAttributes.isHighlighted, textAttributes.layoutDirection, - textAttributes.accessibilityRole); + textAttributes.accessibilityRole, + textAttributes.accessibilityUnit); } }; } // namespace std diff --git a/ReactCommon/react/renderer/attributedstring/conversions.h b/ReactCommon/react/renderer/attributedstring/conversions.h index 857b37a673eb28..8193aab799c1e9 100644 --- a/ReactCommon/react/renderer/attributedstring/conversions.h +++ b/ReactCommon/react/renderer/attributedstring/conversions.h @@ -547,6 +547,55 @@ inline void fromRawValue( result = TextDecorationStyle::Solid; } +inline void fromRawValue( + const PropsParserContext &context, + const RawValue &value, + AccessibilityUnit &result) { + auto map = (butter::map)value; + auto hours = map.find("hours"); + if (hours->second.hasType()) { + result.hours = (int) hours->second; + } +} + /* + auto map = (butter::map)value; + auto selected = map.find("selected"); + if (selected != map.end()) { + fromRawValue(context, selected->second, result.selected); + } + auto disabled = map.find("disabled"); + if (disabled != map.end()) { + fromRawValue(context, disabled->second, result.disabled); + } + auto checked = map.find("checked"); + if (checked != map.end()) { + if (checked->second.hasType()) { + if ((std::string)checked->second == "mixed") { + result.checked = AccessibilityState::Mixed; + } else { + result.checked = AccessibilityState::None; + } + } else if (checked->second.hasType()) { + if ((bool)checked->second == true) { + result.checked = AccessibilityState::Checked; + } else { + result.checked = AccessibilityState::Unchecked; + } + } else { + result.checked = AccessibilityState::None; + } + } + auto busy = map.find("busy"); + if (busy != map.end()) { + fromRawValue(context, busy->second, result.busy); + } + auto expanded = map.find("expanded"); + if (expanded != map.end()) { + fromRawValue(context, expanded->second, result.expanded); + } + */ +} + inline std::string toString(const TextDecorationStyle &textDecorationStyle) { switch (textDecorationStyle) { case TextDecorationStyle::Solid: diff --git a/ReactCommon/react/renderer/attributedstring/primitives.h b/ReactCommon/react/renderer/attributedstring/primitives.h index 39e8f31e18b4a6..27e384e9c475ed 100644 --- a/ReactCommon/react/renderer/attributedstring/primitives.h +++ b/ReactCommon/react/renderer/attributedstring/primitives.h @@ -135,6 +135,24 @@ enum class AccessibilityRole { Toolbar, }; + +struct AccessibilityUnit1 { + int hours; +}; + +constexpr bool operator==( + AccessibilityUnit1 const &lhs, + AccessibilityUnit1 const &rhs) { + return lhs.hours == rhs.hours; +} + +constexpr bool operator!=( + AccessibilityUnit1 const &lhs, + AccessibilityUnit1 const &rhs) { + return !(rhs == lhs); +} + + enum class TextTransform { None, Uppercase, @@ -223,6 +241,13 @@ struct hash { } }; +template <> +struct hash { + size_t operator()(const facebook::react::AccessibilityRole &v) const { + return hash()(static_cast(v)); + } +}; + template <> struct hash { size_t operator()(const facebook::react::TextTransform &v) const { diff --git a/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h b/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h index 3fed2e90f9d168..f3cda14697a828 100644 --- a/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h +++ b/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h @@ -89,7 +89,7 @@ constexpr bool operator!=( } struct AccessibilityUnit { - std::optional hours; + int hours; }; constexpr bool operator==( @@ -104,6 +104,7 @@ constexpr bool operator!=( return !(rhs == lhs); } + struct AccessibilityLabelledBy { std::vector value{}; }; diff --git a/ReactCommon/react/renderer/components/view/AccessibilityPropsMapBuffer.cpp b/ReactCommon/react/renderer/components/view/AccessibilityPropsMapBuffer.cpp index 191dce6c7b21f9..0f33b52371b027 100644 --- a/ReactCommon/react/renderer/components/view/AccessibilityPropsMapBuffer.cpp +++ b/ReactCommon/react/renderer/components/view/AccessibilityPropsMapBuffer.cpp @@ -75,7 +75,7 @@ MapBuffer convertAccessibilityState(AccessibilityState const &state) { MapBuffer convertAccessibilityUnit(AccessibilityUnit const &state) { MapBufferBuilder builder(1); - builder.putString(ACCESSIBILITY_UNIT_HOURS, "10"); + builder.putInt(ACCESSIBILITY_UNIT_HOURS, 10); return builder.build(); } diff --git a/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h b/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h index d2ce04e9319ca2..b0b85f082beb43 100644 --- a/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h +++ b/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h @@ -176,8 +176,8 @@ inline void fromRawValue( AccessibilityUnit &result) { auto map = (butter::map)value; auto hours = map.find("hours"); - if (hours != map.end()) { - fromRawValue(context, hours->second, result.hours); + if (hours->second.hasType()) { + result.hours = (int) hours->second; } } diff --git a/packages/rn-tester/js/examples/Accessibility/AccessibilityExample.js b/packages/rn-tester/js/examples/Accessibility/AccessibilityExample.js index 46be8a69c9de4b..03354c9b6bc23c 100644 --- a/packages/rn-tester/js/examples/Accessibility/AccessibilityExample.js +++ b/packages/rn-tester/js/examples/Accessibility/AccessibilityExample.js @@ -169,9 +169,10 @@ class AccessibilityExample extends React.Component<{}> { - My number is{' '} + My number is 17:00 @@ -413,6 +414,7 @@ class SwitchExample extends React.Component< _onSwitchToggle = () => { const switchState = !this.state.switchState; + console.log('switchState:', switchState); this.setState({ switchState: switchState, }); @@ -420,14 +422,12 @@ class SwitchExample extends React.Component< render(): React.Node { return ( - - Switch example - + console.log('onPress')} + disabled + accessibilityState={{disabled: true}}> + This is a Switch example + ); } }