Commit 6402f88b authored by Libin Lu's avatar Libin Lu

use local intents

parent 3a5fed83
...@@ -25,6 +25,7 @@ import com.google.firebase.messaging.RemoteMessage.Notification; ...@@ -25,6 +25,7 @@ import com.google.firebase.messaging.RemoteMessage.Notification;
import android.app.Application; import android.app.Application;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.NotificationManagerCompat; import android.support.v4.app.NotificationManagerCompat;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log; import android.util.Log;
import android.content.Context; import android.content.Context;
...@@ -38,7 +39,7 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li ...@@ -38,7 +39,7 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li
private final static String TAG = FIRMessagingModule.class.getCanonicalName(); private final static String TAG = FIRMessagingModule.class.getCanonicalName();
private FIRLocalMessagingHelper mFIRLocalMessagingHelper; private FIRLocalMessagingHelper mFIRLocalMessagingHelper;
private BadgeHelper mBadgeHelper; private BadgeHelper mBadgeHelper;
public FIRMessagingModule(ReactApplicationContext reactContext) { public FIRMessagingModule(ReactApplicationContext reactContext) {
super(reactContext); super(reactContext);
mFIRLocalMessagingHelper = new FIRLocalMessagingHelper((Application) reactContext.getApplicationContext()); mFIRLocalMessagingHelper = new FIRLocalMessagingHelper((Application) reactContext.getApplicationContext());
...@@ -49,12 +50,12 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li ...@@ -49,12 +50,12 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li
registerMessageHandler(); registerMessageHandler();
registerLocalMessageHandler(); registerLocalMessageHandler();
} }
@Override @Override
public String getName() { public String getName() {
return "RNFIRMessaging"; return "RNFIRMessaging";
} }
@ReactMethod @ReactMethod
public void getInitialNotification(Promise promise){ public void getInitialNotification(Promise promise){
Activity activity = getCurrentActivity(); Activity activity = getCurrentActivity();
...@@ -64,7 +65,7 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li ...@@ -64,7 +65,7 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li
} }
promise.resolve(parseIntent(activity.getIntent())); promise.resolve(parseIntent(activity.getIntent()));
} }
@ReactMethod @ReactMethod
public void requestPermissions(Promise promise){ public void requestPermissions(Promise promise){
if(NotificationManagerCompat.from(getReactApplicationContext()).areNotificationsEnabled()){ if(NotificationManagerCompat.from(getReactApplicationContext()).areNotificationsEnabled()){
...@@ -73,7 +74,7 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li ...@@ -73,7 +74,7 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li
promise.reject(null, "Notification disabled"); promise.reject(null, "Notification disabled");
} }
} }
@ReactMethod @ReactMethod
public void getFCMToken(Promise promise) { public void getFCMToken(Promise promise) {
try { try {
...@@ -84,7 +85,7 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li ...@@ -84,7 +85,7 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li
promise.reject(null,e.getMessage()); promise.reject(null,e.getMessage());
} }
} }
@ReactMethod @ReactMethod
public void deleteInstanceId(Promise promise){ public void deleteInstanceId(Promise promise){
try { try {
...@@ -95,19 +96,19 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li ...@@ -95,19 +96,19 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li
promise.reject(null,e.getMessage()); promise.reject(null,e.getMessage());
} }
} }
@ReactMethod @ReactMethod
public void presentLocalNotification(ReadableMap details) { public void presentLocalNotification(ReadableMap details) {
Bundle bundle = Arguments.toBundle(details); Bundle bundle = Arguments.toBundle(details);
mFIRLocalMessagingHelper.sendNotification(bundle); mFIRLocalMessagingHelper.sendNotification(bundle);
} }
@ReactMethod @ReactMethod
public void scheduleLocalNotification(ReadableMap details) { public void scheduleLocalNotification(ReadableMap details) {
Bundle bundle = Arguments.toBundle(details); Bundle bundle = Arguments.toBundle(details);
mFIRLocalMessagingHelper.sendNotificationScheduled(bundle); mFIRLocalMessagingHelper.sendNotificationScheduled(bundle);
} }
@ReactMethod @ReactMethod
public void cancelLocalNotification(String notificationID) { public void cancelLocalNotification(String notificationID) {
mFIRLocalMessagingHelper.cancelLocalNotification(notificationID); mFIRLocalMessagingHelper.cancelLocalNotification(notificationID);
...@@ -116,27 +117,27 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li ...@@ -116,27 +117,27 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li
public void cancelAllLocalNotifications() { public void cancelAllLocalNotifications() {
mFIRLocalMessagingHelper.cancelAllLocalNotifications(); mFIRLocalMessagingHelper.cancelAllLocalNotifications();
} }
@ReactMethod @ReactMethod
public void removeDeliveredNotification(String notificationID) { public void removeDeliveredNotification(String notificationID) {
mFIRLocalMessagingHelper.removeDeliveredNotification(notificationID); mFIRLocalMessagingHelper.removeDeliveredNotification(notificationID);
} }
@ReactMethod @ReactMethod
public void removeAllDeliveredNotifications(){ public void removeAllDeliveredNotifications(){
mFIRLocalMessagingHelper.removeAllDeliveredNotifications(); mFIRLocalMessagingHelper.removeAllDeliveredNotifications();
} }
@ReactMethod @ReactMethod
public void subscribeToTopic(String topic){ public void subscribeToTopic(String topic){
FirebaseMessaging.getInstance().subscribeToTopic(topic); FirebaseMessaging.getInstance().subscribeToTopic(topic);
} }
@ReactMethod @ReactMethod
public void unsubscribeFromTopic(String topic){ public void unsubscribeFromTopic(String topic){
FirebaseMessaging.getInstance().unsubscribeFromTopic(topic); FirebaseMessaging.getInstance().unsubscribeFromTopic(topic);
} }
@ReactMethod @ReactMethod
public void getScheduledLocalNotifications(Promise promise){ public void getScheduledLocalNotifications(Promise promise){
ArrayList<Bundle> bundles = mFIRLocalMessagingHelper.getScheduledLocalNotifications(); ArrayList<Bundle> bundles = mFIRLocalMessagingHelper.getScheduledLocalNotifications();
...@@ -146,26 +147,26 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li ...@@ -146,26 +147,26 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li
} }
promise.resolve(array); promise.resolve(array);
} }
@ReactMethod @ReactMethod
public void setBadgeNumber(int badgeNumber) { public void setBadgeNumber(int badgeNumber) {
mBadgeHelper.setBadgeCount(badgeNumber); mBadgeHelper.setBadgeCount(badgeNumber);
} }
@ReactMethod @ReactMethod
public void getBadgeNumber(Promise promise) { public void getBadgeNumber(Promise promise) {
promise.resolve(mBadgeHelper.getBadgeCount()); promise.resolve(mBadgeHelper.getBadgeCount());
} }
private void sendEvent(String eventName, Object params) { private void sendEvent(String eventName, Object params) {
getReactApplicationContext() getReactApplicationContext()
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, params); .emit(eventName, params);
} }
private void registerTokenRefreshHandler() { private void registerTokenRefreshHandler() {
IntentFilter intentFilter = new IntentFilter("com.evollu.react.fcm.FCMRefreshToken"); IntentFilter intentFilter = new IntentFilter("com.evollu.react.fcm.FCMRefreshToken");
getReactApplicationContext().registerReceiver(new BroadcastReceiver() { LocalBroadcastManager.getInstance(getReactApplicationContext()).registerReceiver(new BroadcastReceiver() {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
if (getReactApplicationContext().hasActiveCatalystInstance()) { if (getReactApplicationContext().hasActiveCatalystInstance()) {
...@@ -175,13 +176,13 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li ...@@ -175,13 +176,13 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li
} }
}, intentFilter); }, intentFilter);
} }
@ReactMethod @ReactMethod
public void send(String senderId, ReadableMap payload) throws Exception { public void send(String senderId, ReadableMap payload) throws Exception {
FirebaseMessaging fm = FirebaseMessaging.getInstance(); FirebaseMessaging fm = FirebaseMessaging.getInstance();
RemoteMessage.Builder message = new RemoteMessage.Builder(senderId + "@gcm.googleapis.com") RemoteMessage.Builder message = new RemoteMessage.Builder(senderId + "@gcm.googleapis.com")
.setMessageId(UUID.randomUUID().toString()); .setMessageId(UUID.randomUUID().toString());
ReadableMapKeySetIterator iterator = payload.keySetIterator(); ReadableMapKeySetIterator iterator = payload.keySetIterator();
while (iterator.hasNextKey()) { while (iterator.hasNextKey()) {
String key = iterator.nextKey(); String key = iterator.nextKey();
...@@ -190,7 +191,7 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li ...@@ -190,7 +191,7 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li
} }
fm.send(message.build()); fm.send(message.build());
} }
private String getStringFromReadableMap(ReadableMap map, String key) throws Exception { private String getStringFromReadableMap(ReadableMap map, String key) throws Exception {
switch (map.getType(key)) { switch (map.getType(key)) {
case String: case String:
...@@ -207,18 +208,18 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li ...@@ -207,18 +208,18 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li
throw new Exception("Unknown data type: " + map.getType(key).name() + " for message key " + key ); throw new Exception("Unknown data type: " + map.getType(key).name() + " for message key " + key );
} }
} }
private void registerMessageHandler() { private void registerMessageHandler() {
IntentFilter intentFilter = new IntentFilter("com.evollu.react.fcm.ReceiveNotification"); IntentFilter intentFilter = new IntentFilter("com.evollu.react.fcm.ReceiveNotification");
getReactApplicationContext().registerReceiver(new BroadcastReceiver() { LocalBroadcastManager.getInstance(getReactApplicationContext()).registerReceiver(new BroadcastReceiver() {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
if (getReactApplicationContext().hasActiveCatalystInstance()) { if (getReactApplicationContext().hasActiveCatalystInstance()) {
RemoteMessage message = intent.getParcelableExtra("data"); RemoteMessage message = intent.getParcelableExtra("data");
WritableMap params = Arguments.createMap(); WritableMap params = Arguments.createMap();
WritableMap fcmData = Arguments.createMap(); WritableMap fcmData = Arguments.createMap();
if (message.getNotification() != null) { if (message.getNotification() != null) {
Notification notification = message.getNotification(); Notification notification = message.getNotification();
fcmData.putString("title", notification.getTitle()); fcmData.putString("title", notification.getTitle());
...@@ -233,7 +234,7 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li ...@@ -233,7 +234,7 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li
params.putString("from", message.getFrom()); params.putString("from", message.getFrom());
params.putString("google.message_id", message.getMessageId()); params.putString("google.message_id", message.getMessageId());
params.putDouble("google.sent_time", message.getSentTime()); params.putDouble("google.sent_time", message.getSentTime());
if(message.getData() != null){ if(message.getData() != null){
Map<String, String> data = message.getData(); Map<String, String> data = message.getData();
Set<String> keysIterator = data.keySet(); Set<String> keysIterator = data.keySet();
...@@ -242,16 +243,16 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li ...@@ -242,16 +243,16 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li
} }
} }
sendEvent("FCMNotificationReceived", params); sendEvent("FCMNotificationReceived", params);
} }
} }
}, intentFilter); }, intentFilter);
} }
private void registerLocalMessageHandler() { private void registerLocalMessageHandler() {
IntentFilter intentFilter = new IntentFilter("com.evollu.react.fcm.ReceiveLocalNotification"); IntentFilter intentFilter = new IntentFilter("com.evollu.react.fcm.ReceiveLocalNotification");
getReactApplicationContext().registerReceiver(new BroadcastReceiver() { LocalBroadcastManager.getInstance(getReactApplicationContext()).registerReceiver(new BroadcastReceiver() {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
if (getReactApplicationContext().hasActiveCatalystInstance()) { if (getReactApplicationContext().hasActiveCatalystInstance()) {
...@@ -260,7 +261,7 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li ...@@ -260,7 +261,7 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li
} }
}, intentFilter); }, intentFilter);
} }
private WritableMap parseIntent(Intent intent){ private WritableMap parseIntent(Intent intent){
WritableMap params; WritableMap params;
Bundle extras = intent.getExtras(); Bundle extras = intent.getExtras();
...@@ -277,30 +278,30 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li ...@@ -277,30 +278,30 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li
WritableMap fcm = Arguments.createMap(); WritableMap fcm = Arguments.createMap();
fcm.putString("action", intent.getAction()); fcm.putString("action", intent.getAction());
params.putMap("fcm", fcm); params.putMap("fcm", fcm);
params.putInt("opened_from_tray", 1); params.putInt("opened_from_tray", 1);
return params; return params;
} }
@Override @Override
public void onHostResume() { public void onHostResume() {
mFIRLocalMessagingHelper.setApplicationForeground(true); mFIRLocalMessagingHelper.setApplicationForeground(true);
} }
@Override @Override
public void onHostPause() { public void onHostPause() {
mFIRLocalMessagingHelper.setApplicationForeground(false); mFIRLocalMessagingHelper.setApplicationForeground(false);
} }
@Override @Override
public void onHostDestroy() { public void onHostDestroy() {
} }
@Override @Override
public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) { public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {
} }
@Override @Override
public void onNewIntent(Intent intent){ public void onNewIntent(Intent intent){
sendEvent("FCMNotificationReceived", parseIntent(intent)); sendEvent("FCMNotificationReceived", parseIntent(intent));
......
...@@ -2,6 +2,7 @@ package com.evollu.react.fcm; ...@@ -2,6 +2,7 @@ package com.evollu.react.fcm;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log; import android.util.Log;
import com.google.firebase.iid.FirebaseInstanceId; import com.google.firebase.iid.FirebaseInstanceId;
...@@ -29,6 +30,6 @@ public class InstanceIdService extends FirebaseInstanceIdService { ...@@ -29,6 +30,6 @@ public class InstanceIdService extends FirebaseInstanceIdService {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString("token", refreshedToken); bundle.putString("token", refreshedToken);
i.putExtras(bundle); i.putExtras(bundle);
sendBroadcast(i); LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(i);
} }
} }
...@@ -5,6 +5,7 @@ import android.content.Intent; ...@@ -5,6 +5,7 @@ import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log; import android.util.Log;
import com.facebook.react.ReactApplication; import com.facebook.react.ReactApplication;
...@@ -41,12 +42,12 @@ public class MessagingService extends FirebaseMessagingService { ...@@ -41,12 +42,12 @@ public class MessagingService extends FirebaseMessagingService {
ReactContext context = mReactInstanceManager.getCurrentReactContext(); ReactContext context = mReactInstanceManager.getCurrentReactContext();
// If it's constructed, send a notification // If it's constructed, send a notification
if (context != null) { if (context != null) {
context.sendOrderedBroadcast(message, null); LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(message);
} else { } else {
// Otherwise wait for construction, then send the notification // Otherwise wait for construction, then send the notification
mReactInstanceManager.addReactInstanceEventListener(new ReactInstanceManager.ReactInstanceEventListener() { mReactInstanceManager.addReactInstanceEventListener(new ReactInstanceManager.ReactInstanceEventListener() {
public void onReactContextInitialized(ReactContext context) { public void onReactContextInitialized(ReactContext context) {
context.sendOrderedBroadcast(message, null); LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(message);
} }
}); });
if (!mReactInstanceManager.hasStartedCreatingInitialContext()) { if (!mReactInstanceManager.hasStartedCreatingInitialContext()) {
......
...@@ -17,6 +17,7 @@ import android.os.Build; ...@@ -17,6 +17,7 @@ import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationManagerCompat; import android.support.v4.app.NotificationManagerCompat;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log; import android.util.Log;
import java.io.IOException; import java.io.IOException;
...@@ -191,7 +192,7 @@ public class SendNotificationTask extends AsyncTask<Void, Void, Void> { ...@@ -191,7 +192,7 @@ public class SendNotificationTask extends AsyncTask<Void, Void, Void> {
Log.d(TAG, "broadcast intent if it is a scheduled notification"); Log.d(TAG, "broadcast intent if it is a scheduled notification");
Intent i = new Intent("com.evollu.react.fcm.ReceiveLocalNotification"); Intent i = new Intent("com.evollu.react.fcm.ReceiveLocalNotification");
i.putExtras(bundle); i.putExtras(bundle);
mContext.sendOrderedBroadcast(i, null); LocalBroadcastManager.getInstance(mContext).sendBroadcast(i);
} }
if(!mIsForeground || bundle.getBoolean("show_in_foreground")){ if(!mIsForeground || bundle.getBoolean("show_in_foreground")){
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment