mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Add incomplete support for accessibility state prop
Summary:
Changelog: [internal]
Minimal implementation of `accessibilityState` that supports `disabled` and `selected` props.
Complete implementation will need to support following props
```
export type AccessibilityState = {
disabled?: boolean,
selected?: boolean,
checked?: ?boolean | 'mixed',
busy?: boolean,
expanded?: boolean,
...
};
```
Reviewed By: mdvacca
Differential Revision: D22016743
fbshipit-source-id: 1748acc4279f60ec8a92c93d5d13b136f57eb8d3
This commit is contained in:
committed by
Facebook GitHub Bot
parent
fb2a7765ac
commit
8dce59cee8
@@ -228,11 +228,23 @@ using namespace facebook::react;
|
||||
self.accessibilityElement.accessibilityElementsHidden = newViewProps.accessibilityElementsHidden;
|
||||
}
|
||||
|
||||
// `accessibilityTraits`
|
||||
if (oldViewProps.accessibilityTraits != newViewProps.accessibilityTraits) {
|
||||
self.accessibilityElement.accessibilityTraits =
|
||||
RCTUIAccessibilityTraitsFromAccessibilityTraits(newViewProps.accessibilityTraits);
|
||||
}
|
||||
|
||||
// `accessibilityState`
|
||||
if (oldViewProps.accessibilityState != newViewProps.accessibilityState) {
|
||||
self.accessibilityTraits &= ~(UIAccessibilityTraitNotEnabled | UIAccessibilityTraitSelected);
|
||||
if (newViewProps.accessibilityState.selected) {
|
||||
self.accessibilityTraits |= UIAccessibilityTraitSelected;
|
||||
}
|
||||
if (newViewProps.accessibilityState.disabled) {
|
||||
self.accessibilityTraits |= UIAccessibilityTraitNotEnabled;
|
||||
}
|
||||
}
|
||||
|
||||
// `accessibilityIgnoresInvertColors`
|
||||
if (oldViewProps.accessibilityIgnoresInvertColors != newViewProps.accessibilityIgnoresInvertColors) {
|
||||
#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000 /* __IPHONE_11_0 */
|
||||
|
||||
@@ -44,5 +44,22 @@ constexpr enum AccessibilityTraits operator&(
|
||||
return (enum AccessibilityTraits)((uint32_t)lhs & (uint32_t)rhs);
|
||||
}
|
||||
|
||||
struct AccessibilityState {
|
||||
bool disabled{false};
|
||||
bool selected{false};
|
||||
};
|
||||
|
||||
constexpr bool operator==(
|
||||
AccessibilityState const &lhs,
|
||||
AccessibilityState const &rhs) {
|
||||
return lhs.disabled == rhs.disabled && lhs.selected == rhs.selected;
|
||||
}
|
||||
|
||||
constexpr bool operator!=(
|
||||
AccessibilityState const &lhs,
|
||||
AccessibilityState const &rhs) {
|
||||
return !(rhs == lhs);
|
||||
}
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
||||
|
||||
@@ -28,6 +28,11 @@ AccessibilityProps::AccessibilityProps(
|
||||
"accessibilityRole",
|
||||
sourceProps.accessibilityTraits,
|
||||
AccessibilityTraits::None)),
|
||||
accessibilityState(convertRawProp(
|
||||
rawProps,
|
||||
"accessibilityState",
|
||||
sourceProps.accessibilityState,
|
||||
{})),
|
||||
accessibilityLabel(convertRawProp(
|
||||
rawProps,
|
||||
"accessibilityLabel",
|
||||
|
||||
@@ -26,6 +26,7 @@ class AccessibilityProps {
|
||||
|
||||
bool accessible{false};
|
||||
AccessibilityTraits accessibilityTraits{AccessibilityTraits::None};
|
||||
AccessibilityState accessibilityState;
|
||||
std::string accessibilityLabel{""};
|
||||
std::string accessibilityHint{""};
|
||||
std::vector<std::string> accessibilityActions{};
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
#include <folly/dynamic.h>
|
||||
#include <react/components/view/AccessibilityPrimitives.h>
|
||||
#include <react/core/propsConversions.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
@@ -109,5 +110,17 @@ inline void fromRawValue(const RawValue &value, AccessibilityTraits &result) {
|
||||
abort();
|
||||
}
|
||||
|
||||
inline void fromRawValue(const RawValue &value, AccessibilityState &result) {
|
||||
auto map = (better::map<std::string, RawValue>)value;
|
||||
auto selected = map.find("selected");
|
||||
if (selected != map.end()) {
|
||||
fromRawValue(selected->second, result.selected);
|
||||
}
|
||||
auto disabled = map.find("disabled");
|
||||
if (disabled != map.end()) {
|
||||
fromRawValue(disabled->second, result.disabled);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
||||
|
||||
Reference in New Issue
Block a user