Skip to content

Commit 7b35f42

Browse files
Marc Mulcahyfacebook-github-bot
Marc Mulcahy
authored andcommitted
Remove deprecated accessibilityStates property. (#26168)
Summary: We added the accessibilityState property as a more semantically rich way for components to describe information about their state to accessibility services. This PR removes the old accessibilityStates property. <!-- Explain the **motivation** for making this change. What existing problem does the pull request solve? --> ## Changelog [General] [Change] - Remove accessibilityStates property. Pull Request resolved: #26168 Test Plan: Ensure that RNTester accessibility examples function properly on both iOS and Android. Differential Revision: D17152891 Pulled By: cpojer fbshipit-source-id: d71d3cf0f2e0846979d2ba104b6c69e4e5725252
1 parent 0165489 commit 7b35f42

25 files changed

+19
-208
lines changed

Libraries/Components/Button.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,11 @@ class Button extends React.Component<ButtonProps> {
153153
buttonStyles.push({backgroundColor: color});
154154
}
155155
}
156-
const accessibilityStates = [];
156+
const accessibilityState = {};
157157
if (disabled) {
158158
buttonStyles.push(styles.buttonDisabled);
159159
textStyles.push(styles.textDisabled);
160-
accessibilityStates.push('disabled');
160+
accessibilityState.disabled = true;
161161
}
162162
invariant(
163163
typeof title === 'string',
@@ -171,7 +171,7 @@ class Button extends React.Component<ButtonProps> {
171171
<Touchable
172172
accessibilityLabel={accessibilityLabel}
173173
accessibilityRole="button"
174-
accessibilityStates={accessibilityStates}
174+
accessibilityState={accessibilityState}
175175
hasTVPreferredFocus={hasTVPreferredFocus}
176176
nextFocusDown={nextFocusDown}
177177
nextFocusForward={nextFocusForward}

Libraries/Components/TextInput/TextInput.js

-3
Original file line numberDiff line numberDiff line change
@@ -991,7 +991,6 @@ const TextInput = createReactClass({
991991
accessible={props.accessible}
992992
accessibilityLabel={props.accessibilityLabel}
993993
accessibilityRole={props.accessibilityRole}
994-
accessibilityStates={props.accessibilityStates}
995994
accessibilityState={props.accessibilityState}
996995
nativeID={this.props.nativeID}
997996
testID={props.testID}>
@@ -1044,7 +1043,6 @@ const TextInput = createReactClass({
10441043
accessible={props.accessible}
10451044
accessibilityLabel={props.accessibilityLabel}
10461045
accessibilityRole={props.accessibilityRole}
1047-
accessibilityStates={props.accessibilityStates}
10481046
accessibilityState={props.accessibilityState}
10491047
nativeID={this.props.nativeID}
10501048
testID={props.testID}>
@@ -1100,7 +1098,6 @@ const TextInput = createReactClass({
11001098
accessible={this.props.accessible}
11011099
accessibilityLabel={this.props.accessibilityLabel}
11021100
accessibilityRole={this.props.accessibilityRole}
1103-
accessibilityStates={this.props.accessibilityStates}
11041101
accessibilityState={this.props.accessibilityState}
11051102
nativeID={this.props.nativeID}
11061103
testID={this.props.testID}>

Libraries/Components/Touchable/TouchableBounce.js

-1
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,6 @@ const TouchableBounce = ((createReactClass({
180180
accessibilityLabel={this.props.accessibilityLabel}
181181
accessibilityHint={this.props.accessibilityHint}
182182
accessibilityRole={this.props.accessibilityRole}
183-
accessibilityStates={this.props.accessibilityStates}
184183
accessibilityState={this.props.accessibilityState}
185184
accessibilityActions={this.props.accessibilityActions}
186185
onAccessibilityAction={this.props.onAccessibilityAction}

Libraries/Components/Touchable/TouchableHighlight.js

-1
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,6 @@ const TouchableHighlight = ((createReactClass({
407407
accessibilityLabel={this.props.accessibilityLabel}
408408
accessibilityHint={this.props.accessibilityHint}
409409
accessibilityRole={this.props.accessibilityRole}
410-
accessibilityStates={this.props.accessibilityStates}
411410
accessibilityState={this.props.accessibilityState}
412411
accessibilityActions={this.props.accessibilityActions}
413412
onAccessibilityAction={this.props.onAccessibilityAction}

Libraries/Components/Touchable/TouchableNativeFeedback.android.js

-1
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,6 @@ const TouchableNativeFeedback = createReactClass({
313313
accessible: this.props.accessible !== false,
314314
accessibilityLabel: this.props.accessibilityLabel,
315315
accessibilityRole: this.props.accessibilityRole,
316-
accessibilityStates: this.props.accessibilityStates,
317316
accessibilityState: this.props.accessibilityState,
318317
accessibilityActions: this.props.accessibilityActions,
319318
onAccessibilityAction: this.props.onAccessibilityAction,

Libraries/Components/Touchable/TouchableOpacity.js

-1
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,6 @@ const TouchableOpacity = ((createReactClass({
310310
accessibilityLabel={this.props.accessibilityLabel}
311311
accessibilityHint={this.props.accessibilityHint}
312312
accessibilityRole={this.props.accessibilityRole}
313-
accessibilityStates={this.props.accessibilityStates}
314313
accessibilityState={this.props.accessibilityState}
315314
accessibilityActions={this.props.accessibilityActions}
316315
onAccessibilityAction={this.props.onAccessibilityAction}

Libraries/Components/Touchable/TouchableWithoutFeedback.js

-4
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import type {
3131
import type {EdgeInsetsProp} from '../../StyleSheet/EdgeInsetsPropType';
3232
import type {
3333
AccessibilityRole,
34-
AccessibilityStates,
3534
AccessibilityState,
3635
AccessibilityActionInfo,
3736
AccessibilityActionEvent,
@@ -53,7 +52,6 @@ const OVERRIDE_PROPS = [
5352
'accessibilityHint',
5453
'accessibilityIgnoresInvertColors',
5554
'accessibilityRole',
56-
'accessibilityStates',
5755
'accessibilityState',
5856
'accessibilityActions',
5957
'onAccessibilityAction',
@@ -71,7 +69,6 @@ export type Props = $ReadOnly<{|
7169
accessibilityHint?: ?Stringish,
7270
accessibilityIgnoresInvertColors?: ?boolean,
7371
accessibilityRole?: ?AccessibilityRole,
74-
accessibilityStates?: ?AccessibilityStates,
7572
accessibilityState?: ?AccessibilityState,
7673
accessibilityActions?: ?$ReadOnlyArray<AccessibilityActionInfo>,
7774
children?: ?React.Node,
@@ -112,7 +109,6 @@ const TouchableWithoutFeedback = ((createReactClass({
112109
accessibilityHint: PropTypes.string,
113110
accessibilityIgnoresInvertColors: PropTypes.bool,
114111
accessibilityRole: PropTypes.oneOf(DeprecatedAccessibilityRoles),
115-
accessibilityStates: PropTypes.array,
116112
accessibilityState: PropTypes.object,
117113
accessibilityActions: PropTypes.array,
118114
onAccessibilityAction: PropTypes.func,

Libraries/Components/View/ReactNativeViewAttributes.js

-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ const UIView = {
1919
accessibilityLabel: true,
2020
accessibilityLiveRegion: true,
2121
accessibilityRole: true,
22-
accessibilityStates: true,
2322
accessibilityState: true,
2423
accessibilityHint: true,
2524
importantForAccessibility: true,

Libraries/Components/View/ReactNativeViewViewConfig.js

-1
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,6 @@ const ReactNativeViewConfig = {
121121
accessibilityLabel: true,
122122
accessibilityLiveRegion: true,
123123
accessibilityRole: true,
124-
accessibilityStates: true,
125124
accessibilityState: true,
126125
accessibilityViewIsModal: true,
127126
accessible: true,

Libraries/Components/View/ViewAccessibility.js

-12
Original file line numberDiff line numberDiff line change
@@ -42,18 +42,6 @@ export type AccessibilityRole =
4242
| 'timer'
4343
| 'toolbar';
4444

45-
// This must be kept in sync with the AccessibilityStatesMask in RCTViewManager.m
46-
export type AccessibilityStates = $ReadOnlyArray<
47-
| 'disabled'
48-
| 'selected'
49-
| 'checked'
50-
| 'unchecked'
51-
| 'busy'
52-
| 'expanded'
53-
| 'collapsed'
54-
| 'hasPopup',
55-
>;
56-
5745
// the info associated with an accessibility action
5846
export type AccessibilityActionInfo = $ReadOnly<{
5947
name: string,

Libraries/Components/View/ViewPropTypes.js

-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import type {ViewStyleProp} from '../../StyleSheet/StyleSheet';
1717
import type {TVViewProps} from '../AppleTV/TVViewPropTypes';
1818
import type {
1919
AccessibilityRole,
20-
AccessibilityStates,
2120
AccessibilityState,
2221
AccessibilityActionEvent,
2322
AccessibilityActionInfo,
@@ -413,7 +412,6 @@ export type ViewProps = $ReadOnly<{|
413412
/**
414413
* Indicates to accessibility services that UI Component is in a specific State.
415414
*/
416-
accessibilityStates?: ?AccessibilityStates,
417415
accessibilityState?: ?AccessibilityState,
418416

419417
/**

Libraries/DeprecatedPropTypes/DeprecatedViewAccessibility.js

-11
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,4 @@ module.exports = {
4141
'timer',
4242
'toolbar',
4343
],
44-
// This must be kept in sync with the AccessibilityStatesMask in RCTViewManager.m
45-
DeprecatedAccessibilityStates: [
46-
'selected',
47-
'disabled',
48-
'checked',
49-
'unchecked',
50-
'busy',
51-
'expanded',
52-
'collapsed',
53-
'hasPopup',
54-
],
5544
};

Libraries/DeprecatedPropTypes/DeprecatedViewPropTypes.js

+1-21
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@ const DeprecatedViewStylePropTypes = require('./DeprecatedViewStylePropTypes');
1616
const PlatformViewPropTypes = require('../Components/View/PlatformViewPropTypes');
1717
const PropTypes = require('prop-types');
1818

19-
const {
20-
DeprecatedAccessibilityRoles,
21-
DeprecatedAccessibilityStates,
22-
} = require('./DeprecatedViewAccessibility');
19+
const {DeprecatedAccessibilityRoles} = require('./DeprecatedViewAccessibility');
2320

2421
const stylePropType: ReactPropsCheckType = DeprecatedStyleSheetPropType(
2522
DeprecatedViewStylePropTypes,
@@ -104,23 +101,6 @@ module.exports = {
104101
| 'toolbar',
105102
>),
106103

107-
/**
108-
* Indicates to accessibility services that UI Component is in a specific State.
109-
*/
110-
accessibilityStates: (PropTypes.arrayOf(
111-
PropTypes.oneOf(DeprecatedAccessibilityStates),
112-
): React$PropType$Primitive<
113-
Array<
114-
| 'selected'
115-
| 'disabled'
116-
| 'checked'
117-
| 'unchecked'
118-
| 'busy'
119-
| 'expanded'
120-
| 'collapsed'
121-
| 'hasPopup',
122-
>,
123-
>),
124104
accessibilityState: PropTypes.object,
125105
/**
126106
* Indicates to accessibility services whether the user should be notified

Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec-generated.mm

+6-6
Original file line numberDiff line numberDiff line change
@@ -487,12 +487,6 @@ + (RCTManagedPointer *)JS_NativeAppState_SpecGetCurrentAppStateSuccessAppState:(
487487

488488
} // namespace react
489489
} // namespace facebook
490-
@implementation RCTCxxConvert (NativeAppearance_AppearancePreferences)
491-
+ (RCTManagedPointer *)JS_NativeAppearance_AppearancePreferences:(id)json
492-
{
493-
return facebook::react::managedPointer<JS::NativeAppearance::AppearancePreferences>(json);
494-
}
495-
@end
496490
folly::Optional<NativeAppearanceColorSchemeName> NSStringToNativeAppearanceColorSchemeName(NSString *value) {
497491
static NSDictionary *dict = nil;
498492
static dispatch_once_t onceToken;
@@ -516,6 +510,12 @@ + (RCTManagedPointer *)JS_NativeAppearance_AppearancePreferences:(id)json
516510
});
517511
return value.hasValue() ? dict[@(value.value())] : nil;
518512
}
513+
@implementation RCTCxxConvert (NativeAppearance_AppearancePreferences)
514+
+ (RCTManagedPointer *)JS_NativeAppearance_AppearancePreferences:(id)json
515+
{
516+
return facebook::react::managedPointer<JS::NativeAppearance::AppearancePreferences>(json);
517+
}
518+
@end
519519
@implementation RCTCxxConvert (NativeAsyncStorage_SpecMultiGetCallbackErrorsElement)
520520
+ (RCTManagedPointer *)JS_NativeAsyncStorage_SpecMultiGetCallbackErrorsElement:(id)json
521521
{

Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec.h

+7-7
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,13 @@ namespace facebook {
452452
};
453453
} // namespace react
454454
} // namespace facebook
455+
typedef NS_ENUM(NSInteger, NativeAppearanceColorSchemeName) {
456+
NativeAppearanceColorSchemeNameLight = 0,
457+
NativeAppearanceColorSchemeNameDark,
458+
};
459+
460+
folly::Optional<NativeAppearanceColorSchemeName> NSStringToNativeAppearanceColorSchemeName(NSString *value);
461+
NSString *NativeAppearanceColorSchemeNameToNSString(folly::Optional<NativeAppearanceColorSchemeName> value);
455462

456463
namespace JS {
457464
namespace NativeAppearance {
@@ -468,13 +475,6 @@ namespace JS {
468475
@interface RCTCxxConvert (NativeAppearance_AppearancePreferences)
469476
+ (RCTManagedPointer *)JS_NativeAppearance_AppearancePreferences:(id)json;
470477
@end
471-
typedef NS_ENUM(NSInteger, NativeAppearanceColorSchemeName) {
472-
NativeAppearanceColorSchemeNameLight = 0,
473-
NativeAppearanceColorSchemeNameDark,
474-
};
475-
476-
folly::Optional<NativeAppearanceColorSchemeName> NSStringToNativeAppearanceColorSchemeName(NSString *value);
477-
NSString *NativeAppearanceColorSchemeNameToNSString(folly::Optional<NativeAppearanceColorSchemeName> value);
478478

479479
namespace JS {
480480
namespace NativeAsyncStorage {

Libraries/Text/TextProps.js

-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import type {Node} from 'react';
1919
import type {TextStyleProp} from '../StyleSheet/StyleSheet';
2020
import type {
2121
AccessibilityRole,
22-
AccessibilityStates,
2322
AccessibilityState,
2423
} from '../Components/View/ViewAccessibility';
2524

@@ -43,7 +42,6 @@ export type TextProps = $ReadOnly<{|
4342
accessibilityHint?: ?Stringish,
4443
accessibilityLabel?: ?Stringish,
4544
accessibilityRole?: ?AccessibilityRole,
46-
accessibilityStates?: ?AccessibilityStates,
4745
accessibilityState?: ?AccessibilityState,
4846

4947
/**

React/Views/RCTView.m

-13
Original file line numberDiff line numberDiff line change
@@ -203,13 +203,6 @@ - (BOOL)didActivateAccessibilityCustomAction:(UIAccessibilityCustomAction *)acti
203203
- (NSString *)accessibilityValue
204204
{
205205
if ((self.accessibilityTraits & SwitchAccessibilityTrait) == SwitchAccessibilityTrait) {
206-
for (NSString *state in self.accessibilityStates) {
207-
if ([state isEqualToString:@"checked"]) {
208-
return @"1";
209-
} else if ([state isEqualToString:@"unchecked"]) {
210-
return @"0";
211-
}
212-
}
213206
for (NSString *state in self.accessibilityState) {
214207
id val = self.accessibilityState[state];
215208
if (!val) {
@@ -259,12 +252,6 @@ - (NSString *)accessibilityValue
259252
if (roleDescription) {
260253
[valueComponents addObject:roleDescription];
261254
}
262-
for (NSString *state in self.accessibilityStates) {
263-
NSString *stateDescription = state ? stateDescriptions[state] : nil;
264-
if (stateDescription) {
265-
[valueComponents addObject:stateDescription];
266-
}
267-
}
268255
for (NSString *state in self.accessibilityState) {
269256
id val = self.accessibilityState[state];
270257
if (!val) {

React/Views/RCTViewManager.m

-28
Original file line numberDiff line numberDiff line change
@@ -178,34 +178,6 @@ - (RCTShadowView *)shadowView
178178
}
179179
}
180180

181-
RCT_CUSTOM_VIEW_PROPERTY(accessibilityStates, NSArray<NSString *>, RCTView)
182-
{
183-
NSArray<NSString *> *states = json ? [RCTConvert NSStringArray:json] : nil;
184-
NSMutableArray *newStates = [NSMutableArray new];
185-
186-
if (!states) {
187-
return;
188-
}
189-
190-
const UIAccessibilityTraits AccessibilityStatesMask = UIAccessibilityTraitNotEnabled | UIAccessibilityTraitSelected;
191-
view.reactAccessibilityElement.accessibilityTraits = view.reactAccessibilityElement.accessibilityTraits & ~AccessibilityStatesMask;
192-
193-
for (NSString *state in states) {
194-
if ([state isEqualToString:@"selected"]) {
195-
view.reactAccessibilityElement.accessibilityTraits |= UIAccessibilityTraitSelected;
196-
} else if ([state isEqualToString:@"disabled"]) {
197-
view.reactAccessibilityElement.accessibilityTraits |= UIAccessibilityTraitNotEnabled;
198-
} else {
199-
[newStates addObject:state];
200-
}
201-
}
202-
if (newStates.count > 0) {
203-
view.reactAccessibilityElement.accessibilityStates = newStates;
204-
} else {
205-
view.reactAccessibilityElement.accessibilityStates = nil;
206-
}
207-
}
208-
209181
RCT_CUSTOM_VIEW_PROPERTY(accessibilityState, NSDictionary, RCTView)
210182
{
211183
NSDictionary<NSString *, id> *state = json ? [RCTConvert NSDictionary:json] : nil;

React/Views/UIView+React.h

-1
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,6 @@
117117
* Accessibility properties
118118
*/
119119
@property (nonatomic, copy) NSString *accessibilityRole;
120-
@property (nonatomic, copy) NSArray <NSString *> *accessibilityStates;
121120
@property (nonatomic, copy) NSDictionary<NSString *, id> *accessibilityState;
122121
@property (nonatomic, copy) NSArray <NSDictionary *> *accessibilityActions;
123122

React/Views/UIView+React.m

-10
Original file line numberDiff line numberDiff line change
@@ -317,16 +317,6 @@ - (void)setAccessibilityRole:(NSString *)accessibilityRole
317317
objc_setAssociatedObject(self, @selector(accessibilityRole), accessibilityRole, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
318318
}
319319

320-
- (NSArray<NSString *> *)accessibilityStates
321-
{
322-
return objc_getAssociatedObject(self, _cmd);
323-
}
324-
325-
- (void)setAccessibilityStates:(NSArray<NSString *> *)accessibilityStates
326-
{
327-
objc_setAssociatedObject(self, @selector(accessibilityStates), accessibilityStates, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
328-
}
329-
330320
- (NSDictionary<NSString *, id> *)accessibilityState
331321
{
332322
return objc_getAssociatedObject(self, _cmd);

0 commit comments

Comments
 (0)