Skip to content

Commit ef060fe

Browse files
committed
fix(app, android): react-native 0.65 compatibility
1 parent 85edd1b commit ef060fe

File tree

4 files changed

+37
-7
lines changed

4 files changed

+37
-7
lines changed

packages/app-distribution/android/src/main/java/io/invertase/firebase/appdistribution/ReactNativeFirebaseAppDistributionPackage.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import com.facebook.react.bridge.NativeModule;
2222
import com.facebook.react.bridge.ReactApplicationContext;
2323
import com.facebook.react.uimanager.ViewManager;
24-
2524
import java.util.ArrayList;
2625
import java.util.Collections;
2726
import java.util.List;

packages/app/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseAppModule.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,16 @@ public void eventsRemoveListener(String eventName, Boolean all) {
107107
emitter.removeListener(eventName, all);
108108
}
109109

110+
@ReactMethod
111+
public void addListener(String eventName) {
112+
// Keep: Required for RN built in Event Emitter Calls.
113+
}
114+
115+
@ReactMethod
116+
public void removeListeners(Integer count) {
117+
// Keep: Required for RN built in Event Emitter Calls.
118+
}
119+
110120
/** ------------------ META ------------------ */
111121
@ReactMethod
112122
public void metaGetAll(Promise promise) {

packages/app/e2e/events.e2e.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,20 +66,20 @@ describe('Core -> EventEmitter', function () {
6666

6767
await eventsPing(eventName2, eventBody);
6868
await Utils.sleep(500);
69-
const nativeListenersBefore = await eventsGetListeners();
70-
should.equal(nativeListenersBefore.events.ping, undefined);
69+
// const nativeListenersBefore = await eventsGetListeners();
70+
// console.error('we have listeners? ' + JSON.stringify(nativeListenersBefore));
71+
// should.equal(nativeListenersBefore.events.ping, undefined);
7172

7273
const subscription = emitter.addListener(eventName2, event => {
7374
event.foo.should.equal(eventBody.foo);
7475
return resolve();
7576
});
7677

7778
await promise;
78-
emitter.removeSubscription(subscription);
79+
subscription.remove();
7980

8081
await eventsRemoveListener(eventName2, true);
8182
const nativeListenersAfter = await eventsGetListeners();
82-
8383
should.equal(nativeListenersAfter.events.ping, undefined);
8484
});
8585
});

packages/app/lib/internal/RNFBNativeEventEmitter.js

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,38 @@ class RNFBNativeEventEmitter extends NativeEventEmitter {
3131
this.ready = true;
3232
}
3333
RNFBAppModule.eventsAddListener(eventType);
34-
return super.addListener(`rnfb_${eventType}`, listener, context);
34+
35+
let subscription = super.addListener(`rnfb_${eventType}`, listener, context);
36+
37+
// React Native 0.65+ have a re-written EventEmitter that returns an unsubscribe now,
38+
// vs. our previous expectation of something with shape `{ eventType: 'rnfb_<eventType>`, ...}`
39+
// for forwards and backwards compatibility, we add that specific key in
40+
subscription.eventType = `rnfb_${eventType}`;
41+
42+
// New style is to return a remove function on the object, just in csae people call that,
43+
// we will modify it to do our native unsubscription then call the original
44+
let originalRemove = subscription.remove;
45+
let newRemove = () => {
46+
RNFBAppModule.eventsRemoveListener(eventType, false);
47+
if (originalRemove != null) {
48+
originalRemove();
49+
}
50+
};
51+
subscription.remove = newRemove;
52+
return subscription;
3553
}
3654

3755
removeAllListeners(eventType) {
3856
RNFBAppModule.eventsRemoveListener(eventType, true);
3957
super.removeAllListeners(`rnfb_${eventType}`);
4058
}
4159

60+
// This is likely no longer ever called, but it is here for backwards compatibility with RN <= 0.64
4261
removeSubscription(subscription) {
4362
RNFBAppModule.eventsRemoveListener(subscription.eventType.replace('rnfb_'), false);
44-
super.removeSubscription(subscription);
63+
if (super.removeSubscription) {
64+
super.removeSubscription(subscription);
65+
}
4566
}
4667
}
4768

0 commit comments

Comments
 (0)