-
Notifications
You must be signed in to change notification settings - Fork 491
/
Accessibility.ts
63 lines (52 loc) · 1.91 KB
/
Accessibility.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/**
* Accessibility.ts
*
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT license.
*
* Native wrapper for accessibility helper.
*/
import * as RN from 'react-native';
import { Accessibility as CommonAccessibility } from '../common/Accessibility';
import AppConfig from '../common/AppConfig';
import { Types } from '../common/Interfaces';
export interface MacComponentAccessibilityProps {
onClick?: (e: Types.SyntheticEvent) => void;
acceptsKeyboardFocus?: true;
enableFocusRing?: true;
}
export class Accessibility extends CommonAccessibility {
protected _isScreenReaderEnabled = false;
constructor() {
super();
let initialStateChanged = false;
// Some versions of RN don't support this interface.
if (RN.AccessibilityInfo) {
// Subscribe to an event to get notified when screen reader is enabled or disabled.
RN.AccessibilityInfo.addEventListener('change', (isEnabled: boolean) => {
initialStateChanged = true;
this._updateScreenReaderStatus(isEnabled);
});
// Fetch initial state.
RN.AccessibilityInfo.fetch().then(isEnabled => {
if (!initialStateChanged) {
this._updateScreenReaderStatus(isEnabled);
}
}).catch(err => {
if (AppConfig.isDevelopmentMode()) {
console.error('Accessibility: RN.AccessibilityInfo.fetch failed');
}
});
}
}
protected _updateScreenReaderStatus(isEnabled: boolean): void {
if (this._isScreenReaderEnabled !== isEnabled) {
this._isScreenReaderEnabled = isEnabled;
this.screenReaderChangedEvent.fire(isEnabled);
}
}
isScreenReaderEnabled(): boolean {
return this._isScreenReaderEnabled;
}
}
export default new Accessibility();