mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-12 09:19:52 +00:00
Add support for newly added a11y properties in iOS 8 / 9 and tvOS
New a11y properties: - accessibilityNavigationStyle - accessibilityHeaderElements - accessibilityActivationPoint - accessibilityPath
This commit is contained in:
parent
b284d3f606
commit
28c4fede57
@ -711,6 +711,13 @@ NS_ASSUME_NONNULL_END
|
|||||||
@property (atomic, assign) BOOL accessibilityViewIsModal;
|
@property (atomic, assign) BOOL accessibilityViewIsModal;
|
||||||
@property (atomic, assign) BOOL shouldGroupAccessibilityChildren;
|
@property (atomic, assign) BOOL shouldGroupAccessibilityChildren;
|
||||||
|
|
||||||
|
@property (nonatomic) UIAccessibilityNavigationStyle accessibilityNavigationStyle NS_AVAILABLE_IOS(8_0);
|
||||||
|
#if TARGET_OS_TV
|
||||||
|
@property(nullable, nonatomic, copy) NSArray *accessibilityHeaderElements;
|
||||||
|
#endif
|
||||||
|
@property (nonatomic) CGPoint accessibilityActivationPoint;
|
||||||
|
@property (nullable, nonatomic, copy) UIBezierPath *accessibilityPath;
|
||||||
|
|
||||||
// Accessibility identification support
|
// Accessibility identification support
|
||||||
@property (nullable, nonatomic, copy) NSString *accessibilityIdentifier;
|
@property (nullable, nonatomic, copy) NSString *accessibilityIdentifier;
|
||||||
|
|
||||||
|
|||||||
@ -865,6 +865,56 @@ nodeProperty = nodeValueExpr; _setToViewOnly(viewAndPendingViewStateProperty, vi
|
|||||||
_setAccessibilityToViewAndProperty(_accessibilityIdentifier, accessibilityIdentifier, accessibilityIdentifier, accessibilityIdentifier);
|
_setAccessibilityToViewAndProperty(_accessibilityIdentifier, accessibilityIdentifier, accessibilityIdentifier, accessibilityIdentifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)setAccessibilityNavigationStyle:(UIAccessibilityNavigationStyle)accessibilityNavigationStyle
|
||||||
|
{
|
||||||
|
_bridge_prologue_write;
|
||||||
|
_setAccessibilityToViewAndProperty(_accessibilityNavigationStyle, accessibilityNavigationStyle, accessibilityNavigationStyle, accessibilityNavigationStyle);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIAccessibilityNavigationStyle)accessibilityNavigationStyle
|
||||||
|
{
|
||||||
|
_bridge_prologue_read;
|
||||||
|
return _getAccessibilityFromViewOrProperty(_accessibilityNavigationStyle, accessibilityNavigationStyle);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if TARGET_OS_TV
|
||||||
|
- (void)setAccessibilityHeaderElements:(NSArray *)accessibilityHeaderElements
|
||||||
|
{
|
||||||
|
_bridge_prologue_write;
|
||||||
|
_setAccessibilityToViewAndProperty(_accessibilityHeaderElements, accessibilityHeaderElements, accessibilityHeaderElements, accessibilityHeaderElements);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSArray *)accessibilityHeaderElements
|
||||||
|
{
|
||||||
|
_bridge_prologue_read;
|
||||||
|
return _getAccessibilityFromViewOrProperty(_accessibilityHeaderElements, accessibilityHeaderElements);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
- (void)setAccessibilityActivationPoint:(CGPoint)accessibilityActivationPoint
|
||||||
|
{
|
||||||
|
_bridge_prologue_write;
|
||||||
|
_setAccessibilityToViewAndProperty(_accessibilityActivationPoint, accessibilityActivationPoint, accessibilityActivationPoint, accessibilityActivationPoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (CGPoint)accessibilityActivationPoint
|
||||||
|
{
|
||||||
|
_bridge_prologue_read;
|
||||||
|
return _getAccessibilityFromViewOrProperty(_accessibilityActivationPoint, accessibilityActivationPoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setAccessibilityPath:(UIBezierPath *)accessibilityPath
|
||||||
|
{
|
||||||
|
_bridge_prologue_write;
|
||||||
|
_setAccessibilityToViewAndProperty(_accessibilityPath, accessibilityPath, accessibilityPath, accessibilityPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIBezierPath *)accessibilityPath
|
||||||
|
{
|
||||||
|
_bridge_prologue_read;
|
||||||
|
return _getAccessibilityFromViewOrProperty(_accessibilityPath, accessibilityPath);
|
||||||
|
}
|
||||||
|
|
||||||
- (NSInteger)accessibilityElementCount
|
- (NSInteger)accessibilityElementCount
|
||||||
{
|
{
|
||||||
_bridge_prologue_read;
|
_bridge_prologue_read;
|
||||||
|
|||||||
@ -141,6 +141,10 @@ FOUNDATION_EXPORT NSString * const ASRenderingEngineDidDisplayNodesScheduledBefo
|
|||||||
BOOL _accessibilityViewIsModal;
|
BOOL _accessibilityViewIsModal;
|
||||||
BOOL _shouldGroupAccessibilityChildren;
|
BOOL _shouldGroupAccessibilityChildren;
|
||||||
NSString *_accessibilityIdentifier;
|
NSString *_accessibilityIdentifier;
|
||||||
|
UIAccessibilityNavigationStyle _accessibilityNavigationStyle;
|
||||||
|
NSArray *_accessibilityHeaderElements;
|
||||||
|
CGPoint _accessibilityActivationPoint;
|
||||||
|
UIBezierPath *_accessibilityPath;
|
||||||
|
|
||||||
#if TIME_DISPLAYNODE_OPS
|
#if TIME_DISPLAYNODE_OPS
|
||||||
@public
|
@public
|
||||||
|
|||||||
@ -67,6 +67,10 @@ typedef struct {
|
|||||||
int setAccessibilityViewIsModal:1;
|
int setAccessibilityViewIsModal:1;
|
||||||
int setShouldGroupAccessibilityChildren:1;
|
int setShouldGroupAccessibilityChildren:1;
|
||||||
int setAccessibilityIdentifier:1;
|
int setAccessibilityIdentifier:1;
|
||||||
|
int setAccessibilityNavigationStyle:1;
|
||||||
|
int setAccessibilityHeaderElements:1;
|
||||||
|
int setAccessibilityActivationPoint:1;
|
||||||
|
int setAccessibilityPath:1;
|
||||||
} ASPendingStateFlags;
|
} ASPendingStateFlags;
|
||||||
|
|
||||||
@implementation _ASPendingState
|
@implementation _ASPendingState
|
||||||
@ -106,6 +110,10 @@ typedef struct {
|
|||||||
BOOL accessibilityViewIsModal;
|
BOOL accessibilityViewIsModal;
|
||||||
BOOL shouldGroupAccessibilityChildren;
|
BOOL shouldGroupAccessibilityChildren;
|
||||||
NSString *accessibilityIdentifier;
|
NSString *accessibilityIdentifier;
|
||||||
|
UIAccessibilityNavigationStyle accessibilityNavigationStyle;
|
||||||
|
NSArray *accessibilityHeaderElements;
|
||||||
|
CGPoint accessibilityActivationPoint;
|
||||||
|
UIBezierPath *accessibilityPath;
|
||||||
|
|
||||||
ASPendingStateFlags _flags;
|
ASPendingStateFlags _flags;
|
||||||
}
|
}
|
||||||
@ -226,6 +234,10 @@ static UIColor *defaultTintColor = nil;
|
|||||||
accessibilityViewIsModal = NO;
|
accessibilityViewIsModal = NO;
|
||||||
shouldGroupAccessibilityChildren = NO;
|
shouldGroupAccessibilityChildren = NO;
|
||||||
accessibilityIdentifier = nil;
|
accessibilityIdentifier = nil;
|
||||||
|
accessibilityNavigationStyle = UIAccessibilityNavigationStyleAutomatic;
|
||||||
|
accessibilityHeaderElements = nil;
|
||||||
|
accessibilityActivationPoint = CGPointZero;
|
||||||
|
accessibilityPath = nil;
|
||||||
edgeAntialiasingMask = (kCALayerLeftEdge | kCALayerRightEdge | kCALayerTopEdge | kCALayerBottomEdge);
|
edgeAntialiasingMask = (kCALayerLeftEdge | kCALayerRightEdge | kCALayerTopEdge | kCALayerBottomEdge);
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
@ -594,6 +606,59 @@ static UIColor *defaultTintColor = nil;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (UIAccessibilityNavigationStyle)accessibilityNavigationStyle
|
||||||
|
{
|
||||||
|
return accessibilityNavigationStyle;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setAccessibilityNavigationStyle:(UIAccessibilityNavigationStyle)newAccessibilityNavigationStyle
|
||||||
|
{
|
||||||
|
_flags.setAccessibilityNavigationStyle = YES;
|
||||||
|
accessibilityNavigationStyle = newAccessibilityNavigationStyle;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSArray *)accessibilityHeaderElements
|
||||||
|
{
|
||||||
|
return accessibilityHeaderElements;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setAccessibilityHeaderElements:(NSArray *)newAccessibilityHeaderElements
|
||||||
|
{
|
||||||
|
_flags.setAccessibilityHeaderElements = YES;
|
||||||
|
if (accessibilityHeaderElements != newAccessibilityHeaderElements) {
|
||||||
|
accessibilityHeaderElements = [newAccessibilityHeaderElements copy];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (CGPoint)accessibilityActivationPoint
|
||||||
|
{
|
||||||
|
if (_flags.setAccessibilityActivationPoint) {
|
||||||
|
return accessibilityActivationPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Default == Mid-point of the accessibilityFrame
|
||||||
|
return CGPointMake(CGRectGetMidX(accessibilityFrame), CGRectGetMidY(accessibilityFrame));
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setAccessibilityActivationPoint:(CGPoint)newAccessibilityActivationPoint
|
||||||
|
{
|
||||||
|
_flags.setAccessibilityActivationPoint = YES;
|
||||||
|
accessibilityActivationPoint = newAccessibilityActivationPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIBezierPath *)accessibilityPath
|
||||||
|
{
|
||||||
|
return accessibilityPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setAccessibilityPath:(UIBezierPath *)newAccessibilityPath
|
||||||
|
{
|
||||||
|
_flags.setAccessibilityPath = YES;
|
||||||
|
if (accessibilityPath != newAccessibilityPath) {
|
||||||
|
accessibilityPath = newAccessibilityPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
- (void)applyToLayer:(CALayer *)layer
|
- (void)applyToLayer:(CALayer *)layer
|
||||||
{
|
{
|
||||||
ASPendingStateFlags flags = _flags;
|
ASPendingStateFlags flags = _flags;
|
||||||
@ -827,6 +892,20 @@ static UIColor *defaultTintColor = nil;
|
|||||||
|
|
||||||
if (flags.setAccessibilityIdentifier)
|
if (flags.setAccessibilityIdentifier)
|
||||||
view.accessibilityIdentifier = accessibilityIdentifier;
|
view.accessibilityIdentifier = accessibilityIdentifier;
|
||||||
|
|
||||||
|
if (flags.setAccessibilityNavigationStyle)
|
||||||
|
view.accessibilityNavigationStyle = accessibilityNavigationStyle;
|
||||||
|
|
||||||
|
#if TARGET_OS_TV
|
||||||
|
if (flags.setAccessibilityHeaderElements)
|
||||||
|
view.accessibilityHeaderElements = accessibilityHeaderElements;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (flags.setAccessibilityActivationPoint)
|
||||||
|
view.accessibilityActivationPoint = accessibilityActivationPoint;
|
||||||
|
|
||||||
|
if (flags.setAccessibilityPath)
|
||||||
|
view.accessibilityPath = accessibilityPath;
|
||||||
|
|
||||||
// For classes like ASTableNode, ASCollectionNode, ASScrollNode and similar - make sure UIView gets setFrame:
|
// For classes like ASTableNode, ASCollectionNode, ASScrollNode and similar - make sure UIView gets setFrame:
|
||||||
if (flags.setFrame && setFrameDirectly) {
|
if (flags.setFrame && setFrameDirectly) {
|
||||||
@ -926,6 +1005,12 @@ static UIColor *defaultTintColor = nil;
|
|||||||
pendingState.accessibilityViewIsModal = view.accessibilityViewIsModal;
|
pendingState.accessibilityViewIsModal = view.accessibilityViewIsModal;
|
||||||
pendingState.shouldGroupAccessibilityChildren = view.shouldGroupAccessibilityChildren;
|
pendingState.shouldGroupAccessibilityChildren = view.shouldGroupAccessibilityChildren;
|
||||||
pendingState.accessibilityIdentifier = view.accessibilityIdentifier;
|
pendingState.accessibilityIdentifier = view.accessibilityIdentifier;
|
||||||
|
pendingState.accessibilityNavigationStyle = view.accessibilityNavigationStyle;
|
||||||
|
#if TARGET_OS_TV
|
||||||
|
pendingState.accessibilityHeaderElements = view.accessibilityHeaderElements;
|
||||||
|
#endif
|
||||||
|
pendingState.accessibilityActivationPoint = view.accessibilityActivationPoint;
|
||||||
|
pendingState.accessibilityPath = view.accessibilityPath;
|
||||||
return pendingState;
|
return pendingState;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -992,7 +1077,11 @@ static UIColor *defaultTintColor = nil;
|
|||||||
|| flags.setAccessibilityElementsHidden
|
|| flags.setAccessibilityElementsHidden
|
||||||
|| flags.setAccessibilityViewIsModal
|
|| flags.setAccessibilityViewIsModal
|
||||||
|| flags.setShouldGroupAccessibilityChildren
|
|| flags.setShouldGroupAccessibilityChildren
|
||||||
|| flags.setAccessibilityIdentifier);
|
|| flags.setAccessibilityIdentifier
|
||||||
|
|| flags.setAccessibilityNavigationStyle
|
||||||
|
|| flags.setAccessibilityHeaderElements
|
||||||
|
|| flags.setAccessibilityActivationPoint
|
||||||
|
|| flags.setAccessibilityPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)dealloc
|
- (void)dealloc
|
||||||
|
|||||||
@ -415,6 +415,10 @@ for (ASDisplayNode *n in @[ nodes ]) {\
|
|||||||
XCTAssertEqual(YES, node.accessibilityElementsHidden, @"accessibilityElementsHidden broken %@", hasLoadedView);
|
XCTAssertEqual(YES, node.accessibilityElementsHidden, @"accessibilityElementsHidden broken %@", hasLoadedView);
|
||||||
XCTAssertEqual(YES, node.accessibilityViewIsModal, @"accessibilityViewIsModal broken %@", hasLoadedView);
|
XCTAssertEqual(YES, node.accessibilityViewIsModal, @"accessibilityViewIsModal broken %@", hasLoadedView);
|
||||||
XCTAssertEqual(YES, node.shouldGroupAccessibilityChildren, @"shouldGroupAccessibilityChildren broken %@", hasLoadedView);
|
XCTAssertEqual(YES, node.shouldGroupAccessibilityChildren, @"shouldGroupAccessibilityChildren broken %@", hasLoadedView);
|
||||||
|
XCTAssertEqual(UIAccessibilityNavigationStyleSeparate, node.accessibilityNavigationStyle, @"accessibilityNavigationStyle broken %@", hasLoadedView);
|
||||||
|
XCTAssertTrue(CGPointEqualToPoint(CGPointMake(1.0, 1.0), node.accessibilityActivationPoint), @"accessibilityActivationPoint broken %@", hasLoadedView);
|
||||||
|
XCTAssertNotNil(node.accessibilityPath, @"accessibilityPath broken %@", hasLoadedView);
|
||||||
|
|
||||||
|
|
||||||
if (!isLayerBacked) {
|
if (!isLayerBacked) {
|
||||||
XCTAssertEqual(UIViewAutoresizingFlexibleLeftMargin, node.autoresizingMask, @"autoresizingMask %@", hasLoadedView);
|
XCTAssertEqual(UIViewAutoresizingFlexibleLeftMargin, node.autoresizingMask, @"autoresizingMask %@", hasLoadedView);
|
||||||
@ -468,6 +472,9 @@ for (ASDisplayNode *n in @[ nodes ]) {\
|
|||||||
node.accessibilityElementsHidden = YES;
|
node.accessibilityElementsHidden = YES;
|
||||||
node.accessibilityViewIsModal = YES;
|
node.accessibilityViewIsModal = YES;
|
||||||
node.shouldGroupAccessibilityChildren = YES;
|
node.shouldGroupAccessibilityChildren = YES;
|
||||||
|
node.accessibilityNavigationStyle = UIAccessibilityNavigationStyleSeparate;
|
||||||
|
node.accessibilityActivationPoint = CGPointMake(1.0, 1.0);
|
||||||
|
node.accessibilityPath = [UIBezierPath bezierPath];
|
||||||
|
|
||||||
if (!isLayerBacked) {
|
if (!isLayerBacked) {
|
||||||
node.exclusiveTouch = YES;
|
node.exclusiveTouch = YES;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user