Update accessibilityState prop
Summary: Changelog: [Internal] - Add default value for accessibilityState "checked" and handle unhandled states. It is also work for the case that accessibilityRole = "switch" and accessibilityState is set. Reviewed By: sammy-SC Differential Revision: D22914427 fbshipit-source-id: 4767a21f3bd109019b57bc09918758a38fbdea93
This commit is contained in:
Родитель
5c9c52275f
Коммит
6fa9dbabfc
|
@ -516,6 +516,30 @@ static NSString *RCTRecursiveAccessibilityLabel(UIView *view)
|
||||||
return RCTRecursiveAccessibilityLabel(self);
|
return RCTRecursiveAccessibilityLabel(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSString *)accessibilityValue
|
||||||
|
{
|
||||||
|
auto const &props = *std::static_pointer_cast<ViewProps const>(_props);
|
||||||
|
|
||||||
|
// Handle states which haven't already been handled.
|
||||||
|
if (props.accessibilityState.checked == AccessibilityState::Checked) {
|
||||||
|
return @"checked";
|
||||||
|
}
|
||||||
|
if (props.accessibilityState.checked == AccessibilityState::Unchecked) {
|
||||||
|
return @"unchecked";
|
||||||
|
}
|
||||||
|
if (props.accessibilityState.checked == AccessibilityState::Mixed) {
|
||||||
|
return @"mixed";
|
||||||
|
}
|
||||||
|
if (props.accessibilityState.expanded) {
|
||||||
|
return @"expanded";
|
||||||
|
}
|
||||||
|
if (props.accessibilityState.busy) {
|
||||||
|
return @"busy";
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - Accessibility Events
|
#pragma mark - Accessibility Events
|
||||||
|
|
||||||
- (NSArray<UIAccessibilityCustomAction *> *)accessibilityCustomActions
|
- (NSArray<UIAccessibilityCustomAction *> *)accessibilityCustomActions
|
||||||
|
|
|
@ -47,7 +47,7 @@ constexpr enum AccessibilityTraits operator&(
|
||||||
struct AccessibilityState {
|
struct AccessibilityState {
|
||||||
bool disabled{false};
|
bool disabled{false};
|
||||||
bool selected{false};
|
bool selected{false};
|
||||||
enum { Unchecked, Checked, Mixed } checked{Unchecked};
|
enum { Unchecked, Checked, Mixed, None } checked{None};
|
||||||
bool busy{false};
|
bool busy{false};
|
||||||
bool expanded{false};
|
bool expanded{false};
|
||||||
};
|
};
|
||||||
|
|
|
@ -125,6 +125,8 @@ inline void fromRawValue(const RawValue &value, AccessibilityState &result) {
|
||||||
if (checked->second.hasType<std::string>()) {
|
if (checked->second.hasType<std::string>()) {
|
||||||
if ((std::string)checked->second == "mixed") {
|
if ((std::string)checked->second == "mixed") {
|
||||||
result.checked = AccessibilityState::Mixed;
|
result.checked = AccessibilityState::Mixed;
|
||||||
|
} else {
|
||||||
|
result.checked = AccessibilityState::None;
|
||||||
}
|
}
|
||||||
} else if (checked->second.hasType<bool>()) {
|
} else if (checked->second.hasType<bool>()) {
|
||||||
if ((bool)checked->second == true) {
|
if ((bool)checked->second == true) {
|
||||||
|
@ -132,6 +134,8 @@ inline void fromRawValue(const RawValue &value, AccessibilityState &result) {
|
||||||
} else {
|
} else {
|
||||||
result.checked = AccessibilityState::Unchecked;
|
result.checked = AccessibilityState::Unchecked;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
result.checked = AccessibilityState::None;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
auto busy = map.find("busy");
|
auto busy = map.find("busy");
|
||||||
|
|
Загрузка…
Ссылка в новой задаче