Skip to content

Commit 33c5b49

Browse files
Enabling AccessibilityInfo.setAccessibilityFocus for MacOS (#450)
* Attempting to add isVoiceOverEnabled to macOS * Actually completed merge * Added Tester for SetFocus * Enabled setFocus * Clean up console.log * Cleaned up newline * merged and cleaned up comments * Added newlines back in * Added linting changes * Moved props into a single line for eslint.
1 parent 929b57c commit 33c5b49

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

Libraries/Components/AccessibilityInfo/AccessibilityInfo.macos.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,9 @@ const AccessibilityInfo = {
135135
* See http://facebook.github.io/react-native/docs/accessibilityinfo.html#setaccessibilityfocus
136136
*/
137137
setAccessibilityFocus: function(reactTag: number): void {
138-
warning(false, 'AccessibilityInfo is not supported on this platform.');
138+
if (NativeAccessibilityManager) {
139+
NativeAccessibilityManager.setAccessibilityFocus(reactTag);
140+
}
139141
},
140142

141143
/**

RNTester/js/examples/Accessibility/AccessibilityExample.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,26 @@ class AnnounceForAccessibility extends React.Component<{}> {
570570
}
571571
}
572572

573+
class SetAccessibilityFocus extends React.Component<{}> {
574+
_handleOnPress = () => {
575+
if (findNodeHandle(this.focusRef.current)) {
576+
const reactTag = findNodeHandle(this.focusRef.current);
577+
AccessibilityInfo.setAccessibilityFocus(reactTag);
578+
}
579+
};
580+
render() {
581+
this.focusRef = React.createRef();
582+
return (
583+
<View>
584+
<Button onPress={this._handleOnPress} title="Set Accessibility Focus" />
585+
<Text ref={this.focusRef} accessible={true}>
586+
Move focus here on button press.
587+
</Text>
588+
</View>
589+
);
590+
}
591+
}
592+
573593
exports.title = 'Accessibility';
574594
exports.description = 'Examples of using Accessibility APIs.';
575595
exports.examples = [
@@ -603,4 +623,10 @@ exports.examples = [
603623
return <AnnounceForAccessibility />;
604624
},
605625
},
626+
{
627+
title: 'Check if the screen reader focus sets ',
628+
render(): React.Element<typeof SetAccessibilityFocus> {
629+
return <SetAccessibilityFocus />;
630+
},
631+
},
606632
];

React/Modules/MacOS/RCTAccessibilityManager.m

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,14 @@ - (void)dealloc
5454
callback(@[ @(isVoiceOverEnabled) ]);
5555
}
5656

57+
RCT_EXPORT_METHOD(setAccessibilityFocus:(nonnull NSNumber *)reactTag)
58+
{
59+
dispatch_async(dispatch_get_main_queue(), ^{
60+
NSView *view = [self.bridge.uiManager viewForReactTag:reactTag];
61+
[[view window] makeFirstResponder:view];
62+
});
63+
}
64+
5765
- (void)observeValueForKeyPath:(NSString *)keyPath
5866
ofObject:(id)object
5967
change:(NSDictionary *)change

0 commit comments

Comments
 (0)