mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
5889cbebe3
Summary: Issue # https://github.com/facebook/react-native/issues/30934 .When using a screen reader disabled buttons do not announce that they are disabled. ## Changelog [Android] [Changed] - Passing accessibility state in button so it can announce disabled in talkback Pull Request resolved: https://github.com/facebook/react-native/pull/31001 Test Plan: I have added Button in Button Example with accessibiltyState prop that will announce button is disabled when testing with talkback. ## Ios test I am unable to run ios project on my machine. RNTesterPods.xcworkspace gives workspace integrity error :/ Reviewed By: kacieb Differential Revision: D26492483 Pulled By: lunaleaps fbshipit-source-id: c4bbe8ca896b0d303976591c300ccac67a96ac73
208 lines
6.5 KiB
JavaScript
208 lines
6.5 KiB
JavaScript
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @format
|
|
* @flow strict-local
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
const React = require('react');
|
|
|
|
const {Alert, Button, View, StyleSheet} = require('react-native');
|
|
const {RNTesterThemeContext} = require('../../components/RNTesterTheme');
|
|
|
|
function onButtonPress(buttonName) {
|
|
Alert.alert(`Your application has been ${buttonName}!`);
|
|
}
|
|
|
|
exports.displayName = 'ButtonExample';
|
|
exports.framework = 'React';
|
|
exports.category = 'UI';
|
|
exports.title = 'Button';
|
|
exports.documentationURL = 'https://reactnative.dev/docs/button';
|
|
exports.description = 'Simple React Native button component.';
|
|
|
|
exports.examples = [
|
|
{
|
|
title: 'Button with default styling',
|
|
render: function(): React.Node {
|
|
return (
|
|
<Button
|
|
onPress={() => onButtonPress('submitted')}
|
|
testID="button_default_styling"
|
|
title="Submit Application"
|
|
accessibilityLabel="Press to submit your application!"
|
|
/>
|
|
);
|
|
},
|
|
},
|
|
{
|
|
title: 'Button with color="red"',
|
|
description: ('Note: On iOS, the color prop controls the color of the text. On ' +
|
|
'Android, the color adjusts the background color of the button.': string),
|
|
render: function(): React.Node {
|
|
return (
|
|
<RNTesterThemeContext.Consumer>
|
|
{theme => {
|
|
return (
|
|
<Button
|
|
onPress={() => onButtonPress('cancelled')}
|
|
testID="cancel_button"
|
|
color={theme.SystemRedColor}
|
|
title="Cancel Application"
|
|
accessibilityLabel="Press to cancel your application!"
|
|
/>
|
|
);
|
|
}}
|
|
</RNTesterThemeContext.Consumer>
|
|
);
|
|
},
|
|
},
|
|
{
|
|
title: 'Two Buttons with Flexbox layout',
|
|
description: ('Two buttons wrapped inside view with justifyContent: spaceBetween,' +
|
|
'This layout strategy lets the title define the width of the button': string),
|
|
render: function(): React.Node {
|
|
return (
|
|
<RNTesterThemeContext.Consumer>
|
|
{theme => {
|
|
return (
|
|
<View style={styles.container}>
|
|
<Button
|
|
onPress={() => onButtonPress('cancelled')}
|
|
testID="two_cancel_button"
|
|
color={theme.SystemRedColor}
|
|
title="Cancel"
|
|
accessibilityLabel="Press to cancel your application!"
|
|
/>
|
|
<Button
|
|
onPress={() => onButtonPress('submitted')}
|
|
testID="two_submit_button"
|
|
color={theme.SystemGreenColor}
|
|
title="Submit"
|
|
accessibilityLabel="Press to submit your application!"
|
|
/>
|
|
</View>
|
|
);
|
|
}}
|
|
</RNTesterThemeContext.Consumer>
|
|
);
|
|
},
|
|
},
|
|
{
|
|
title: 'Three Buttons with Flexbox layout',
|
|
render: function(): React.Node {
|
|
return (
|
|
<RNTesterThemeContext.Consumer>
|
|
{theme => {
|
|
return (
|
|
<View style={styles.container}>
|
|
<Button
|
|
onPress={() => onButtonPress('cancelled')}
|
|
testID="three_cancel_button"
|
|
color={theme.SystemRedColor}
|
|
title="Cancel"
|
|
accessibilityLabel="Press to cancel your application!"
|
|
/>
|
|
<Button
|
|
onPress={() => onButtonPress('saved')}
|
|
testID="three_save_button"
|
|
color={theme.LinkColor}
|
|
title="Save For Later"
|
|
accessibilityLabel="Press to save your application!"
|
|
/>
|
|
<Button
|
|
onPress={() => onButtonPress('submitted')}
|
|
testID="three_submit_button"
|
|
color={theme.SystemGreenColor}
|
|
title="Submit"
|
|
accessibilityLabel="Press to submit your application!"
|
|
/>
|
|
</View>
|
|
);
|
|
}}
|
|
</RNTesterThemeContext.Consumer>
|
|
);
|
|
},
|
|
},
|
|
{
|
|
title: 'Button with disabled={true}',
|
|
description:
|
|
'By passing disabled={true} all interactions for the button are disabled.',
|
|
render: function(): React.Node {
|
|
return (
|
|
<RNTesterThemeContext.Consumer>
|
|
{theme => {
|
|
return (
|
|
<Button
|
|
disabled
|
|
onPress={() => onButtonPress('submitted')}
|
|
color={theme.LinkColor}
|
|
testID="disabled_button"
|
|
title="Submit Application"
|
|
accessibilityLabel="Press to submit your application!"
|
|
/>
|
|
);
|
|
}}
|
|
</RNTesterThemeContext.Consumer>
|
|
);
|
|
},
|
|
},
|
|
{
|
|
title: 'Button with accessibilityLabel="label"',
|
|
description: ('Note: This prop changes the text that a screen ' +
|
|
'reader announces (there are no visual differences).': string),
|
|
render: function(): React.Node {
|
|
return (
|
|
<RNTesterThemeContext.Consumer>
|
|
{theme => {
|
|
return (
|
|
<Button
|
|
onPress={() => onButtonPress('submitted')}
|
|
testID="accessibilityLabel_button"
|
|
color={theme.LinkColor}
|
|
title="Submit Application"
|
|
accessibilityLabel="Press to submit your application!"
|
|
/>
|
|
);
|
|
}}
|
|
</RNTesterThemeContext.Consumer>
|
|
);
|
|
},
|
|
},
|
|
{
|
|
title: 'Button with accessibilityState={{disabled: true}}',
|
|
description: ('Note: This prop will announce on TalkBack that the button is disabled. ' +
|
|
'The "disabled" prop has higher precedence on the state of the component': string),
|
|
render: function(): React.Node {
|
|
return (
|
|
<RNTesterThemeContext.Consumer>
|
|
{theme => {
|
|
return (
|
|
<Button
|
|
accessibilityState={{disabled: true}}
|
|
onPress={() => onButtonPress('submitted')}
|
|
testID="accessibilityState_button"
|
|
color={theme.LinkColor}
|
|
title="Submit Application"
|
|
accessibilityLabel="Press to submit your application!"
|
|
/>
|
|
);
|
|
}}
|
|
</RNTesterThemeContext.Consumer>
|
|
);
|
|
},
|
|
},
|
|
];
|
|
|
|
const styles = StyleSheet.create({
|
|
container: {
|
|
flexDirection: 'row',
|
|
justifyContent: 'space-between',
|
|
},
|
|
});
|