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);
|
||||
}
|
||||
|
||||
- (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
|
||||
|
||||
- (NSArray<UIAccessibilityCustomAction *> *)accessibilityCustomActions
|
||||
|
|
|
@ -47,7 +47,7 @@ constexpr enum AccessibilityTraits operator&(
|
|||
struct AccessibilityState {
|
||||
bool disabled{false};
|
||||
bool selected{false};
|
||||
enum { Unchecked, Checked, Mixed } checked{Unchecked};
|
||||
enum { Unchecked, Checked, Mixed, None } checked{None};
|
||||
bool busy{false};
|
||||
bool expanded{false};
|
||||
};
|
||||
|
|
|
@ -125,6 +125,8 @@ inline void fromRawValue(const RawValue &value, AccessibilityState &result) {
|
|||
if (checked->second.hasType<std::string>()) {
|
||||
if ((std::string)checked->second == "mixed") {
|
||||
result.checked = AccessibilityState::Mixed;
|
||||
} else {
|
||||
result.checked = AccessibilityState::None;
|
||||
}
|
||||
} else if (checked->second.hasType<bool>()) {
|
||||
if ((bool)checked->second == true) {
|
||||
|
@ -132,6 +134,8 @@ inline void fromRawValue(const RawValue &value, AccessibilityState &result) {
|
|||
} else {
|
||||
result.checked = AccessibilityState::Unchecked;
|
||||
}
|
||||
} else {
|
||||
result.checked = AccessibilityState::None;
|
||||
}
|
||||
}
|
||||
auto busy = map.find("busy");
|
||||
|
|
Загрузка…
Ссылка в новой задаче