Skip to content

Commit 121e2e5

Browse files
Ziqi Chenfacebook-github-bot
Ziqi Chen
authored andcommitted
accessibilityTraits + accessibilityComponentType >> accessibilityRole + accessibilityStates 2/3
Summary: Previously, I created two props, `accessibilityRole` and `accessibilityStates` for view. These props were intended to be a cross-platform solution to replace `accessibilityComponentType` on Android and `accessibilityTraits` on iOS. In this stack, I ran a code mod to replace instances of the two old properties used in our codebase with the new ones. For this diff, I did a search for all the remnant uses of `accessibilityComponentType` that was not caught by my script, and I manually changed them to `accessibilityRole` and `accessibilityStates`. If the same prop also set `accessibilityTraits` I also removed that here because the two new props works on both platforms. It was difficult to write a script for this, because most of them were contextual changes. Out of the contextual changes, most of them followed one of these two patterns: Before: ``` const accessibilityComponentType = 'button'; const accessibilityTraits = ['button']; if (this.props.checked) { accessibilityTraits.push('selected'); } if (this.props.disabled) { accessibilityTraits.push('disabled'); } contentView = ( <AdsManagerTouchableHighlight accessibilityComponentType={accessibilityComponentType} accessibilityTraits={accessibilityTraits} ``` After: const accessibilityRole = 'button'; const accessibilityStates = []; if (this.props.checked) { accessibilityStates.push('selected'); } if (this.props.disabled) { accessibilityStates.push('disabled'); } contentView = ( <AdsManagerTouchableHighlight accessibilityRole={accessibilityRole} accessibilityStates={accessibilityStates} Before: ``` <PressableBackground accessible={this.props.accessible} accessibilityLabel={this.props.accessibilityLabel} accessibilityTraits={this.props.accessibilityTraits} ``` After: ``` <PressableBackground accessible={this.props.accessible} accessibilityLabel={this.props.accessibilityLabel} accessibilityRole={this.props.accessibilityRole} accessibilityRole={this.props.accessibilityStates} ``` In addition to changing the props on the components, Another fix I had to do was to add props accessibilityRole and accessibilityStates to components that don't directly inherit properties from view including text input and touchables. Reviewed By: PeteTheHeat Differential Revision: D8943499 fbshipit-source-id: fbb40a5e5f5d630b0fe56a009ff24635d4c8cc93
1 parent 50e4001 commit 121e2e5

9 files changed

+24
-20
lines changed

Libraries/Components/Button.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -109,11 +109,11 @@ class Button extends React.Component<{
109109
buttonStyles.push({backgroundColor: color});
110110
}
111111
}
112-
const accessibilityTraits = ['button'];
112+
const accessibilityStates = [];
113113
if (disabled) {
114114
buttonStyles.push(styles.buttonDisabled);
115115
textStyles.push(styles.textDisabled);
116-
accessibilityTraits.push('disabled');
116+
accessibilityStates.push('disabled');
117117
}
118118
invariant(
119119
typeof title === 'string',
@@ -125,9 +125,9 @@ class Button extends React.Component<{
125125
Platform.OS === 'android' ? TouchableNativeFeedback : TouchableOpacity;
126126
return (
127127
<Touchable
128-
accessibilityComponentType="button"
129128
accessibilityLabel={accessibilityLabel}
130-
accessibilityTraits={accessibilityTraits}
129+
accessibilityRole="button"
130+
accessibilityStates={accessibilityStates}
131131
hasTVPreferredFocus={hasTVPreferredFocus}
132132
testID={testID}
133133
disabled={disabled}

Libraries/Components/TextInput/TextInput.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -971,7 +971,8 @@ const TextInput = createReactClass({
971971
rejectResponderTermination={true}
972972
accessible={props.accessible}
973973
accessibilityLabel={props.accessibilityLabel}
974-
accessibilityTraits={props.accessibilityTraits}
974+
accessibilityRole={props.accessibilityRole}
975+
accessibilityStates={props.accessibilityStates}
975976
nativeID={this.props.nativeID}
976977
testID={props.testID}>
977978
{textContainer}
@@ -1022,7 +1023,8 @@ const TextInput = createReactClass({
10221023
rejectResponderTermination={true}
10231024
accessible={props.accessible}
10241025
accessibilityLabel={props.accessibilityLabel}
1025-
accessibilityTraits={props.accessibilityTraits}
1026+
accessibilityRole={props.accessibilityRole}
1027+
accessibilityStates={props.accessibilityStates}
10261028
nativeID={this.props.nativeID}
10271029
testID={props.testID}>
10281030
{textContainer}
@@ -1082,7 +1084,8 @@ const TextInput = createReactClass({
10821084
onPress={this._onPress}
10831085
accessible={this.props.accessible}
10841086
accessibilityLabel={this.props.accessibilityLabel}
1085-
accessibilityComponentType={this.props.accessibilityComponentType}
1087+
accessibilityRole={this.props.accessibilityRole}
1088+
accessibilityStates={this.props.accessibilityStates}
10861089
nativeID={this.props.nativeID}
10871090
testID={this.props.testID}>
10881091
{textContainer}

Libraries/Components/Touchable/TouchableBounce.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,8 @@ const TouchableBounce = ((createReactClass({
161161
accessible={this.props.accessible !== false}
162162
accessibilityLabel={this.props.accessibilityLabel}
163163
accessibilityHint={this.props.accessibilityHint}
164-
accessibilityComponentType={this.props.accessibilityComponentType}
165-
accessibilityTraits={this.props.accessibilityTraits}
164+
accessibilityRole={this.props.accessibilityRole}
165+
accessibilityStates={this.props.accessibilityStates}
166166
nativeID={this.props.nativeID}
167167
testID={this.props.testID}
168168
hitSlop={this.props.hitSlop}

Libraries/Components/Touchable/TouchableHighlight.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -349,8 +349,8 @@ const TouchableHighlight = ((createReactClass({
349349
accessible={this.props.accessible !== false}
350350
accessibilityLabel={this.props.accessibilityLabel}
351351
accessibilityHint={this.props.accessibilityHint}
352-
accessibilityComponentType={this.props.accessibilityComponentType}
353-
accessibilityTraits={this.props.accessibilityTraits}
352+
accessibilityRole={this.props.accessibilityRole}
353+
accessibilityStates={this.props.accessibilityStates}
354354
style={StyleSheet.compose(
355355
this.props.style,
356356
this.state.extraUnderlayStyle,

Libraries/Components/Touchable/TouchableNativeFeedback.android.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -269,8 +269,8 @@ const TouchableNativeFeedback = createReactClass({
269269
[drawableProp]: this.props.background,
270270
accessible: this.props.accessible !== false,
271271
accessibilityLabel: this.props.accessibilityLabel,
272-
accessibilityComponentType: this.props.accessibilityComponentType,
273-
accessibilityTraits: this.props.accessibilityTraits,
272+
accessibilityRole: this.props.accessibilityRole,
273+
accessibilityStates: this.props.accessibilityStates,
274274
children,
275275
testID: this.props.testID,
276276
onLayout: this.props.onLayout,

Libraries/Components/Touchable/TouchableOpacity.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -257,8 +257,8 @@ const TouchableOpacity = ((createReactClass({
257257
accessible={this.props.accessible !== false}
258258
accessibilityLabel={this.props.accessibilityLabel}
259259
accessibilityHint={this.props.accessibilityHint}
260-
accessibilityComponentType={this.props.accessibilityComponentType}
261-
accessibilityTraits={this.props.accessibilityTraits}
260+
accessibilityRole={this.props.accessibilityRole}
261+
accessibilityStates={this.props.accessibilityStates}
262262
style={[this.props.style, {opacity: this.state.anim}]}
263263
nativeID={this.props.nativeID}
264264
testID={this.props.testID}

Libraries/Components/Touchable/TouchableWithoutFeedback.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import type {EdgeInsetsProp} from 'EdgeInsetsPropType';
3232
import type {
3333
AccessibilityComponentType,
3434
AccessibilityRole,
35-
AccessibilityState,
35+
AccessibilityStates as AccessibilityStatesFlow,
3636
AccessibilityTraits as AccessibilityTraitsFlow,
3737
} from 'ViewAccessibility';
3838

@@ -49,7 +49,7 @@ export type Props = $ReadOnly<{|
4949
| any,
5050
accessibilityHint?: string,
5151
accessibilityRole?: ?AccessibilityRole,
52-
accessibilityStates?: ?Array<AccessibilityState>,
52+
accessibilityStates?: ?AccessibilityStatesFlow,
5353
accessibilityTraits?: ?AccessibilityTraitsFlow,
5454
children?: ?React.Node,
5555
delayLongPress?: ?number,
@@ -252,6 +252,8 @@ const TouchableWithoutFeedback = ((createReactClass({
252252
accessibilityLabel: this.props.accessibilityLabel,
253253
accessibilityHint: this.props.accessibilityHint,
254254
accessibilityComponentType: this.props.accessibilityComponentType,
255+
accessibilityRole: this.props.accessibilityRole,
256+
accessibilityStates: this.props.accessibilityStates,
255257
accessibilityTraits: this.props.accessibilityTraits,
256258
nativeID: this.props.nativeID,
257259
testID: this.props.testID,

RNTester/js/AccessibilityAndroidExample.android.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ class AccessibilityAndroidExample extends React.Component {
119119
onPress={() =>
120120
ToastAndroid.show('Toasts work by default', ToastAndroid.SHORT)
121121
}
122-
accessibilityComponentType="button">
122+
accessibilityRole="button">
123123
<View style={styles.embedded}>
124124
<Text>Click me</Text>
125125
<Text>Or not</Text>

RNTester/js/TouchableExample.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,7 @@ class TouchableFeedbackEvents extends React.Component<{}, $FlowFixMeState> {
195195
style={styles.wrapper}
196196
testID="touchable_feedback_events_button"
197197
accessibilityLabel="touchable feedback events"
198-
accessibilityTraits="button"
199-
accessibilityComponentType="button"
198+
accessibilityRole="button"
200199
onPress={() => this._appendEvent('press')}
201200
onPressIn={() => this._appendEvent('pressIn')}
202201
onPressOut={() => this._appendEvent('pressOut')}

0 commit comments

Comments
 (0)