8
8
* @flow strict-local
9
9
*/
10
10
11
+ import type EventEmitter from '../../vendor/emitter/EventEmitter' ;
11
12
import RCTDeviceEventEmitter from '../../EventEmitter/RCTDeviceEventEmitter' ;
12
13
import NativeAccessibilityManager from './NativeAccessibilityManager' ;
13
14
import type { EventSubscription } from 'react-native/Libraries/vendor/emitter/EventEmitter' ;
@@ -16,15 +17,15 @@ import {sendAccessibilityEvent} from '../../Renderer/shims/ReactNative';
16
17
import legacySendAccessibilityEvent from './legacySendAccessibilityEvent' ;
17
18
import { type ElementRef } from 'react' ;
18
19
19
- const CHANGE_EVENT_NAME = {
20
- announcementFinished : 'announcementFinished' ,
21
- boldTextChanged : 'boldTextChanged' ,
22
- grayscaleChanged : 'grayscaleChanged' ,
23
- invertColorsChanged : 'invertColorsChanged' ,
24
- reduceMotionChanged : 'reduceMotionChanged' ,
25
- reduceTransparencyChanged : 'reduceTransparencyChanged' ,
26
- screenReaderChanged : 'screenReaderChanged' ,
27
- } ;
20
+ const SupportedEvents : Set < string > = new Set([
21
+ 'announcementFinished',
22
+ 'boldTextChanged',
23
+ 'grayscaleChanged',
24
+ 'invertColorsChanged',
25
+ 'reduceMotionChanged',
26
+ 'reduceTransparencyChanged',
27
+ 'screenReaderChanged',
28
+ ]) ;
28
29
29
30
type AccessibilityEventDefinitions = {
30
31
boldTextChanged : [ boolean ] ,
@@ -46,8 +47,6 @@ type AccessibilityEventDefinitions = {
46
47
// 'click' event type is not implemented in iOS. It's declared here to avoid flow type errors
47
48
type AccessibilityEventTypes = 'focus' | 'click';
48
49
49
- const _subscriptions = new Map ( ) ;
50
-
51
50
/**
52
51
* Sometimes it's useful to know whether or not the device has a screen reader
53
52
* that is currently active. The `AccessibilityInfo` API is designed for this
@@ -217,24 +216,15 @@ const AccessibilityInfo = {
217
216
eventName : K ,
218
217
handler : ( ...$ElementType < AccessibilityEventDefinitions , K > ) => void ,
219
218
) : EventSubscription {
220
- let subscription : EventSubscription ;
221
-
222
219
if ( eventName === 'change' ) {
223
- subscription = RCTDeviceEventEmitter . addListener (
224
- CHANGE_EVENT_NAME . screenReaderChanged ,
225
- handler ,
226
- ) ;
227
- } else if ( CHANGE_EVENT_NAME [ eventName ] ) {
228
- subscription = RCTDeviceEventEmitter . addListener ( eventName , handler ) ;
220
+ return RCTDeviceEventEmitter . addListener ( 'screenReaderChanged' , handler ) ;
221
+ }
222
+ if (SupportedEvents.has(eventName)) {
223
+ return RCTDeviceEventEmitter . addListener ( eventName , handler ) ;
229
224
}
230
-
231
- // $FlowFixMe[escaped-generic]
232
- _subscriptions . set ( handler , subscription ) ;
233
-
234
225
return {
235
- remove : ( ) => {
236
- // $FlowIssue[incompatible-call] flow does not recognize handler properly
237
- AccessibilityInfo . removeEventListener < K > ( eventName , handler ) ;
226
+ remove ( ) : void {
227
+ // Do nothing.
238
228
} ,
239
229
} ;
240
230
} ,
@@ -271,22 +261,28 @@ const AccessibilityInfo = {
271
261
} ,
272
262
273
263
/**
274
- * Remove an event handler.
275
- *
276
- * See https://reactnative.dev/docs/accessibilityinfo.html#removeeventlistener
264
+ * @deprecated Use `remove` on the EventSubscription from `addEventListener`.
277
265
*/
278
266
removeEventListener : function < K : $Keys < AccessibilityEventDefinitions > > (
279
267
eventName : K ,
280
268
handler : ( ...$ElementType < AccessibilityEventDefinitions , K > ) => void ,
281
269
) : void {
282
- // $FlowFixMe[escaped-generic]
283
- const listener = _subscriptions . get ( handler ) ;
284
- if ( ! listener ) {
285
- return;
270
+ // NOTE: This will report a deprecation notice via `console.error`.
271
+ if ( eventName === 'change' ) {
272
+ // $FlowIgnore[incompatible-cast]
273
+ ( RCTDeviceEventEmitter : EventEmitter < $FlowFixMe > ) . removeListener (
274
+ 'screenReaderChanged' ,
275
+ // $FlowFixMe[invalid-tuple-arity]
276
+ handler ,
277
+ ) ;
278
+ } else if (SupportedEvents.has(eventName)) {
279
+ // $FlowIgnore[incompatible-cast]
280
+ ( RCTDeviceEventEmitter : EventEmitter < $FlowFixMe > ) . removeListener (
281
+ eventName ,
282
+ // $FlowFixMe[invalid-tuple-arity]
283
+ handler ,
284
+ ) ;
286
285
}
287
- listener . remove ( ) ;
288
- // $FlowFixMe[escaped-generic]
289
- _subscriptions . delete ( handler ) ;
290
286
} ,
291
287
} ;
292
288
0 commit comments