@@ -20,19 +20,17 @@ type BackPressEventName = $Enum<{
20
20
backPress : string ;
21
21
} > ;
22
22
23
- var _backPressSubscriptions = [ ] ;
23
+ var _backPressSubscriptions = new Set ( ) ;
24
24
25
25
RCTDeviceEventEmitter . addListener ( DEVICE_BACK_EVENT , function ( ) {
26
- var propagate = true ;
27
- for ( var i = _backPressSubscriptions . length - 1 ; i >= 0 ; i -- ) {
28
- var subscription = _backPressSubscriptions [ i ] ;
26
+ var backPressSubscriptions = new Set ( _backPressSubscriptions ) ;
27
+ var invokeDefault = true ;
28
+ backPressSubscriptions . forEach ( ( subscription ) => {
29
29
if ( subscription ( ) ) {
30
- propagate = false ;
31
- break ;
30
+ invokeDefault = false ;
32
31
}
33
- }
34
-
35
- if ( propagate ) {
32
+ } ) ;
33
+ if ( invokeDefault ) {
36
34
BackAndroid . exitApp ( ) ;
37
35
}
38
36
} ) ;
@@ -62,18 +60,18 @@ var BackAndroid = {
62
60
addEventListener : function (
63
61
eventName : BackPressEventName ,
64
62
handler : Function
65
- ) : void {
66
- _backPressSubscriptions. push ( handler ) ;
63
+ ) : { remove : ( ) => void } {
64
+ _backPressSubscriptions .add ( handler ) ;
65
+ return {
66
+ remove : ( ) => BackAndroid . removeEventListener ( eventName , handler ) ,
67
+ } ;
67
68
} ,
68
69
69
70
removeEventListener : function (
70
71
eventName : BackPressEventName ,
71
72
handler : Function
72
73
) : void {
73
- var index = _backPressSubscriptions . indexOf ( handler ) ;
74
- if ( index !== - 1 ) {
75
- _backPressSubscriptions . splice ( index , 1 ) ;
76
- }
74
+ _backPressSubscriptions. delete ( handler ) ;
77
75
} ,
78
76
79
77
} ;
0 commit comments