|
3 | 3 | import android.content.Context; |
4 | 4 | import android.support.annotation.NonNull; |
5 | 5 |
|
| 6 | +import com.facebook.react.ReactApplication; |
| 7 | +import com.facebook.react.ReactInstanceManager; |
| 8 | +import com.facebook.react.ReactNativeHost; |
6 | 9 | import com.facebook.react.bridge.Arguments; |
| 10 | +import com.facebook.react.bridge.ReactContext; |
7 | 11 | import com.facebook.react.bridge.WritableMap; |
| 12 | +import com.facebook.react.modules.core.DeviceEventManagerModule; |
| 13 | + |
8 | 14 | import com.onradar.sdk.Radar; |
9 | 15 | import com.onradar.sdk.RadarReceiver; |
10 | 16 | import com.onradar.sdk.model.RadarEvent; |
11 | 17 | import com.onradar.sdk.model.RadarUser; |
12 | 18 |
|
13 | 19 | public class RNRadarReceiver extends RadarReceiver { |
14 | 20 |
|
| 21 | + private ReactNativeHost mReactNativeHost; |
| 22 | + |
| 23 | + private void invokeSendEvent(ReactContext reactContext, String eventName, Object data) { |
| 24 | + reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, data); |
| 25 | + } |
| 26 | + |
| 27 | + private void sendEvent(final String eventName, final Object data) { |
| 28 | + final ReactInstanceManager reactInstanceManager = mReactNativeHost.getReactInstanceManager(); |
| 29 | + ReactContext reactContext = reactInstanceManager.getCurrentReactContext(); |
| 30 | + if (reactContext == null) { |
| 31 | + reactInstanceManager.addReactInstanceEventListener(new ReactInstanceManager.ReactInstanceEventListener() { |
| 32 | + @Override |
| 33 | + public void onReactContextInitialized(ReactContext reactContext) { |
| 34 | + invokeSendEvent(reactContext, eventName, data); |
| 35 | + reactInstanceManager.removeReactInstanceEventListener(this); |
| 36 | + } |
| 37 | + }); |
| 38 | + if (!reactInstanceManager.hasStartedCreatingInitialContext()) { |
| 39 | + reactInstanceManager.createReactContextInBackground(); |
| 40 | + } |
| 41 | + } else { |
| 42 | + invokeSendEvent(reactContext, eventName, data); |
| 43 | + } |
| 44 | + } |
| 45 | + |
15 | 46 | @Override |
16 | 47 | public void onEventsReceived(@NonNull Context context, @NonNull RadarEvent[] events, @NonNull RadarUser user) { |
| 48 | + ReactApplication reactApplication = ((ReactApplication)context.getApplicationContext()); |
| 49 | + mReactNativeHost = reactApplication.getReactNativeHost(); |
| 50 | + |
17 | 51 | WritableMap map = Arguments.createMap(); |
18 | 52 | map.putArray("events", RNRadarUtils.arrayForEvents(events)); |
19 | 53 | map.putMap("user", RNRadarUtils.mapForUser(user)); |
20 | | - RNRadarEventEmitter.getSharedInstance().sendEvent("events", map); |
| 54 | + |
| 55 | + sendEvent("events", map); |
21 | 56 | } |
22 | 57 |
|
23 | 58 | @Override |
24 | 59 | public void onError(@NonNull Context context, @NonNull Radar.RadarStatus status) { |
25 | | - RNRadarEventEmitter.getSharedInstance().sendEvent("error", RNRadarUtils.stringForStatus(status)); |
| 60 | + ReactApplication reactApplication = ((ReactApplication)context.getApplicationContext()); |
| 61 | + mReactNativeHost = reactApplication.getReactNativeHost(); |
| 62 | + |
| 63 | + sendEvent("error", RNRadarUtils.stringForStatus(status)); |
26 | 64 | } |
27 | 65 |
|
28 | 66 | } |
0 commit comments