RenderCore/View/RCAccessibilityContext.h (34 lines of code) (raw):
/*
* Copyright (c) 2014-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
*/
#import <RenderCore/CKDefines.h>
#if CK_NOT_SWIFT
#import <Foundation/Foundation.h>
typedef NSString *(^RCAccessibilityLazyTextBlock)();
/**
A text attribute used for accessibility, this attribute can be initialized in two ways :
- If some computation needs to be done like aggregation or other string manipulations you can provide a block that
will be lazily executed when the component is mounted only when voiceover is enabled, this way we don't do
unnecessary computations when VoiceOver is not enabled.
- Use an NSString directly; reserve this for when no computation is needed to get the string
*/
struct RCAccessibilityTextAttribute {
RCAccessibilityTextAttribute() {};
RCAccessibilityTextAttribute(RCAccessibilityLazyTextBlock textBlock) : accessibilityLazyTextBlock(textBlock) {};
RCAccessibilityTextAttribute(NSString *text) : accessibilityLazyTextBlock(text ? ^{ return text; } : (RCAccessibilityLazyTextBlock)nil) {};
BOOL hasText() const {
return accessibilityLazyTextBlock != nil;
}
NSString *value() const {
return accessibilityLazyTextBlock ? accessibilityLazyTextBlock() : nil;
};
private:
RCAccessibilityLazyTextBlock accessibilityLazyTextBlock;
};
/**
Holds values that are only applied to a view if VoiceOver is enabled.
The accessibility identifier is often used by end-to-end tests even
when VoiceOver is disabled, so it is not set here. To set the
accessibility identifier, pass it as a normal view attribute:
```
{@selector(setAccessibilityIdentifier:), @"accessibilityId"}
```
*/
struct RCAccessibilityContext {
NSNumber *isAccessibilityElement;
RCAccessibilityTextAttribute accessibilityLabel;
RCAccessibilityTextAttribute accessibilityHint;
RCAccessibilityTextAttribute accessibilityValue;
NSNumber *accessibilityTraits;
/**
Arbitrary extra data about accessibility. ComponentKit ignores this data,
but you may use it for accessibility-related abstractions.
*/
NSDictionary *extra;
BOOL isEmpty() const {
return isAccessibilityElement == nil
&& !accessibilityLabel.hasText()
&& !accessibilityHint.hasText()
&& !accessibilityValue.hasText()
&& accessibilityTraits == nil
&& extra == nil;
}
};
#endif