1
1
import { useEffect , useState } from 'react'
2
2
import { AccessibilityInfo , AccessibilityChangeEventName } from 'react-native'
3
3
4
+ const SUPPORTS_RN60_ACCESSIBILITY_INFO_API = ! ! (
5
+ AccessibilityInfo . isGrayscaleEnabled &&
6
+ AccessibilityInfo . isInvertColorsEnabled &&
7
+ AccessibilityInfo . isReduceMotionEnabled &&
8
+ AccessibilityInfo . isReduceTransparencyEnabled
9
+ )
10
+
4
11
type AccessibilityInfoStaticInitializers =
5
12
| 'isBoldTextEnabled'
6
13
| 'isScreenReaderEnabled'
@@ -35,27 +42,36 @@ function useAccessibilityStateListener(
35
42
}
36
43
37
44
AccessibilityInfo [ initializerKey ] ( ) . then ( setIsEnabled )
38
- AccessibilityInfo . addEventListener (
39
- eventName ,
40
- setIsEnabled ,
41
- )
45
+ AccessibilityInfo . addEventListener ( eventName , setIsEnabled )
42
46
43
- return ( ) =>
44
- AccessibilityInfo . removeEventListener (
45
- eventName ,
46
- setIsEnabled ,
47
- )
47
+ return ( ) => AccessibilityInfo . removeEventListener ( eventName , setIsEnabled )
48
48
} , [ eventName ] )
49
49
50
50
return isEnabled
51
51
}
52
52
53
- export function useAccessibilityInfo ( ) {
53
+ export function useAccessibilityInfo ( ) : {
54
+ screenReaderEnabled : Boolean
55
+ boldTextEnabled : Boolean
56
+ grayscaleEnabled ?: Boolean
57
+ invertColorsEnabled ?: Boolean
58
+ reduceMotionEnabled ?: Boolean
59
+ reduceTransparencyEnabled ?: Boolean
60
+ } {
54
61
const screenReaderEnabled = useAccessibilityStateListener (
55
62
'screenReaderChanged' ,
56
63
)
57
- const grayscaleEnabled = useAccessibilityStateListener ( 'grayscaleChanged' )
58
64
const boldTextEnabled = useAccessibilityStateListener ( 'boldTextChanged' )
65
+
66
+ if ( ! SUPPORTS_RN60_ACCESSIBILITY_INFO_API ) {
67
+ return {
68
+ screenReaderEnabled,
69
+ boldTextEnabled,
70
+ }
71
+ }
72
+
73
+ /* eslint-disable react-hooks/rules-of-hooks */
74
+ const grayscaleEnabled = useAccessibilityStateListener ( 'grayscaleChanged' )
59
75
const invertColorsEnabled = useAccessibilityStateListener (
60
76
'invertColorsChanged' ,
61
77
)
@@ -65,6 +81,7 @@ export function useAccessibilityInfo() {
65
81
const reduceTransparencyEnabled = useAccessibilityStateListener (
66
82
'reduceTransparencyChanged' ,
67
83
)
84
+ /* eslint-enable react-hooks/rules-of-hooks */
68
85
69
86
return {
70
87
screenReaderEnabled,
0 commit comments