mirror of
https://github.com/status-im/react-native.git
synced 2025-01-14 19:44:13 +00:00
Added accessibility traits support to View class
This commit is contained in:
parent
eedb880f6e
commit
6ef7eaf663
@ -24,6 +24,26 @@ var createReactNativeComponentClass = require('createReactNativeComponentClass')
|
|||||||
|
|
||||||
var stylePropType = StyleSheetPropType(ViewStylePropTypes);
|
var stylePropType = StyleSheetPropType(ViewStylePropTypes);
|
||||||
|
|
||||||
|
var AccessibilityTraits = [
|
||||||
|
'none',
|
||||||
|
'button',
|
||||||
|
'link',
|
||||||
|
'header',
|
||||||
|
'search',
|
||||||
|
'image',
|
||||||
|
'selected',
|
||||||
|
'plays',
|
||||||
|
'key',
|
||||||
|
'text',
|
||||||
|
'summary',
|
||||||
|
'disabled',
|
||||||
|
'frequentUpdates',
|
||||||
|
'startsMedia',
|
||||||
|
'adjustable',
|
||||||
|
'allowsDirectInteraction',
|
||||||
|
'pageTurn',
|
||||||
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The most fundamental component for building UI, `View` is a
|
* The most fundamental component for building UI, `View` is a
|
||||||
* container that supports layout with flexbox, style, some touch handling, and
|
* container that supports layout with flexbox, style, some touch handling, and
|
||||||
@ -70,6 +90,14 @@ var View = React.createClass({
|
|||||||
*/
|
*/
|
||||||
accessibilityLabel: PropTypes.string,
|
accessibilityLabel: PropTypes.string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides additional traits to screen reader. By default no traits are
|
||||||
|
* provided unless specified otherwise in element
|
||||||
|
*/
|
||||||
|
accessibilityTraits: PropTypes.oneOfType([
|
||||||
|
PropTypes.oneOf(AccessibilityTraits),
|
||||||
|
PropTypes.arrayOf(PropTypes.oneOf(AccessibilityTraits)),
|
||||||
|
]),
|
||||||
/**
|
/**
|
||||||
* Used to locate this view in end-to-end tests.
|
* Used to locate this view in end-to-end tests.
|
||||||
*/
|
*/
|
||||||
|
@ -19,6 +19,7 @@ ReactNativeViewAttributes.UIView = {
|
|||||||
pointerEvents: true,
|
pointerEvents: true,
|
||||||
accessible: true,
|
accessible: true,
|
||||||
accessibilityLabel: true,
|
accessibilityLabel: true,
|
||||||
|
accessibilityTraits: true,
|
||||||
testID: true,
|
testID: true,
|
||||||
onLayout: true,
|
onLayout: true,
|
||||||
};
|
};
|
||||||
|
@ -141,6 +141,7 @@ RCT_EXTERN BOOL RCTCopyProperty(id target, id source, NSString *keyPath);
|
|||||||
* Underlying implementations of RCT_XXX_CONVERTER macros. Ignore these.
|
* Underlying implementations of RCT_XXX_CONVERTER macros. Ignore these.
|
||||||
*/
|
*/
|
||||||
RCT_EXTERN NSNumber *RCTConvertEnumValue(const char *, NSDictionary *, NSNumber *, id);
|
RCT_EXTERN NSNumber *RCTConvertEnumValue(const char *, NSDictionary *, NSNumber *, id);
|
||||||
|
RCT_EXTERN NSNumber *RCTConvertMultiEnumValue(const char *, NSDictionary *, NSNumber *, id);
|
||||||
RCT_EXTERN NSArray *RCTConvertArrayValue(SEL, id);
|
RCT_EXTERN NSArray *RCTConvertArrayValue(SEL, id);
|
||||||
RCT_EXTERN void RCTLogConvertError(id, const char *);
|
RCT_EXTERN void RCTLogConvertError(id, const char *);
|
||||||
|
|
||||||
@ -194,6 +195,21 @@ RCT_CUSTOM_CONVERTER(type, type, [[self NSNumber:json] getter])
|
|||||||
return [RCTConvertEnumValue(#type, mapping, @(default), json) getter]; \
|
return [RCTConvertEnumValue(#type, mapping, @(default), json) getter]; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This macro is used for creating converters for enum types for
|
||||||
|
* multiple enum values combined with | operator
|
||||||
|
*/
|
||||||
|
#define RCT_MULTI_ENUM_CONVERTER(type, values, default, getter) \
|
||||||
|
+ (type)type:(id)json \
|
||||||
|
{ \
|
||||||
|
static NSDictionary *mapping; \
|
||||||
|
static dispatch_once_t onceToken; \
|
||||||
|
dispatch_once(&onceToken, ^{ \
|
||||||
|
mapping = values; \
|
||||||
|
}); \
|
||||||
|
return [RCTConvertMultiEnumValue(#type, mapping, @(default), json) getter]; \
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This macro is used for creating converter functions for typed arrays.
|
* This macro is used for creating converter functions for typed arrays.
|
||||||
*/
|
*/
|
||||||
|
@ -175,6 +175,22 @@ NSNumber *RCTConvertEnumValue(const char *typeName, NSDictionary *mapping, NSNum
|
|||||||
return value ?: defaultValue;
|
return value ?: defaultValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NSNumber *RCTConvertMultiEnumValue(const char *typeName, NSDictionary *mapping, NSNumber *defaultValue, id json)
|
||||||
|
{
|
||||||
|
if ([json isKindOfClass:[NSArray class]]) {
|
||||||
|
if ([json count] == 0) {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
long long result = 0;
|
||||||
|
for (id arrayElement in json) {
|
||||||
|
NSNumber *value = RCTConvertEnumValue(typeName, mapping, defaultValue, arrayElement);
|
||||||
|
result |= [value longLongValue];
|
||||||
|
}
|
||||||
|
return @(result);
|
||||||
|
}
|
||||||
|
return RCTConvertEnumValue(typeName, mapping, defaultValue, json);
|
||||||
|
}
|
||||||
|
|
||||||
RCT_ENUM_CONVERTER(NSTextAlignment, (@{
|
RCT_ENUM_CONVERTER(NSTextAlignment, (@{
|
||||||
@"auto": @(NSTextAlignmentNatural),
|
@"auto": @(NSTextAlignmentNatural),
|
||||||
@"left": @(NSTextAlignmentLeft),
|
@"left": @(NSTextAlignmentLeft),
|
||||||
|
@ -18,6 +18,30 @@
|
|||||||
#import "RCTUtils.h"
|
#import "RCTUtils.h"
|
||||||
#import "RCTView.h"
|
#import "RCTView.h"
|
||||||
|
|
||||||
|
@implementation RCTConvert(UIAccessibilityTraits)
|
||||||
|
|
||||||
|
RCT_MULTI_ENUM_CONVERTER(UIAccessibilityTraits, (@{
|
||||||
|
@"none": @(UIAccessibilityTraitNone),
|
||||||
|
@"button": @(UIAccessibilityTraitButton),
|
||||||
|
@"link": @(UIAccessibilityTraitLink),
|
||||||
|
@"header": @(UIAccessibilityTraitHeader),
|
||||||
|
@"search": @(UIAccessibilityTraitSearchField),
|
||||||
|
@"image": @(UIAccessibilityTraitImage),
|
||||||
|
@"selected": @(UIAccessibilityTraitSelected),
|
||||||
|
@"plays": @(UIAccessibilityTraitPlaysSound),
|
||||||
|
@"key": @(UIAccessibilityTraitKeyboardKey),
|
||||||
|
@"text": @(UIAccessibilityTraitStaticText),
|
||||||
|
@"summary": @(UIAccessibilityTraitSummaryElement),
|
||||||
|
@"disabled": @(UIAccessibilityTraitNotEnabled),
|
||||||
|
@"frequentUpdates": @(UIAccessibilityTraitUpdatesFrequently),
|
||||||
|
@"startsMedia": @(UIAccessibilityTraitStartsMediaSession),
|
||||||
|
@"adjustable": @(UIAccessibilityTraitAdjustable),
|
||||||
|
@"allowsDirectInteraction": @(UIAccessibilityTraitAllowsDirectInteraction),
|
||||||
|
@"pageTurn": @(UIAccessibilityTraitCausesPageTurn),
|
||||||
|
}), UIAccessibilityTraitNone, unsignedLongLongValue)
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
@implementation RCTViewManager
|
@implementation RCTViewManager
|
||||||
|
|
||||||
@synthesize bridge = _bridge;
|
@synthesize bridge = _bridge;
|
||||||
@ -67,6 +91,7 @@ RCT_EXPORT_MODULE()
|
|||||||
#pragma mark - View properties
|
#pragma mark - View properties
|
||||||
|
|
||||||
RCT_EXPORT_VIEW_PROPERTY(accessibilityLabel, NSString)
|
RCT_EXPORT_VIEW_PROPERTY(accessibilityLabel, NSString)
|
||||||
|
RCT_EXPORT_VIEW_PROPERTY(accessibilityTraits, UIAccessibilityTraits)
|
||||||
RCT_EXPORT_VIEW_PROPERTY(backgroundColor, UIColor)
|
RCT_EXPORT_VIEW_PROPERTY(backgroundColor, UIColor)
|
||||||
RCT_REMAP_VIEW_PROPERTY(accessible, isAccessibilityElement, BOOL)
|
RCT_REMAP_VIEW_PROPERTY(accessible, isAccessibilityElement, BOOL)
|
||||||
RCT_REMAP_VIEW_PROPERTY(testID, accessibilityIdentifier, NSString)
|
RCT_REMAP_VIEW_PROPERTY(testID, accessibilityIdentifier, NSString)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user