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:
Jiayan Zhuang 2020-08-06 12:12:45 -07:00 коммит произвёл Facebook GitHub Bot
Родитель 5c9c52275f
Коммит 6fa9dbabfc
3 изменённых файлов: 29 добавлений и 1 удалений

Просмотреть файл

@ -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");