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