RNNotificationsModule.java 4.99 KB
Newer Older
1
package com.wix.reactnativenotifications;
Amit Davidi's avatar
Amit Davidi committed
2

3 4
import android.app.Activity;
import android.app.Application;
Amit Davidi's avatar
Amit Davidi committed
5 6
import android.content.Context;
import android.content.Intent;
7
import android.os.Bundle;
8
import android.support.v4.app.NotificationManagerCompat;
Amit Davidi's avatar
Amit Davidi committed
9 10
import android.util.Log;

yogevbd's avatar
yogevbd committed
11
import com.facebook.react.bridge.ActivityEventListener;
12 13
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Promise;
Amit Davidi's avatar
Amit Davidi committed
14 15
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
16
import com.facebook.react.bridge.ReactMethod;
17
import com.facebook.react.bridge.ReadableMap;
18 19 20 21
import com.wix.reactnativenotifications.core.AppLifecycleFacade;
import com.wix.reactnativenotifications.core.AppLifecycleFacadeHolder;
import com.wix.reactnativenotifications.core.InitialNotificationHolder;
import com.wix.reactnativenotifications.core.ReactAppLifecycleFacade;
22 23
import com.wix.reactnativenotifications.core.notification.IPushNotification;
import com.wix.reactnativenotifications.core.notification.PushNotification;
24 25 26
import com.wix.reactnativenotifications.core.notification.PushNotificationProps;
import com.wix.reactnativenotifications.core.notificationdrawer.IPushNotificationsDrawer;
import com.wix.reactnativenotifications.core.notificationdrawer.PushNotificationsDrawer;
yogevbd's avatar
yogevbd committed
27
import com.wix.reactnativenotifications.gcm.FcmInstanceIdRefreshHandlerService;
Amit Davidi's avatar
Amit Davidi committed
28

yogevbd's avatar
yogevbd committed
29 30
import com.google.firebase.FirebaseApp;

Amit Davidi's avatar
Amit Davidi committed
31 32
import static com.wix.reactnativenotifications.Defs.LOGTAG;

yogevbd's avatar
yogevbd committed
33
public class RNNotificationsModule extends ReactContextBaseJavaModule implements ActivityEventListener {
Amit Davidi's avatar
Amit Davidi committed
34

35
    public RNNotificationsModule(Application application, ReactApplicationContext reactContext) {
Amit Davidi's avatar
Amit Davidi committed
36
        super(reactContext);
37 38 39
        if (AppLifecycleFacadeHolder.get() instanceof ReactAppLifecycleFacade) {
            ((ReactAppLifecycleFacade) AppLifecycleFacadeHolder.get()).init(reactContext);
        }
yogevbd's avatar
yogevbd committed
40 41

        reactContext.addActivityEventListener(this);
Amit Davidi's avatar
Amit Davidi committed
42 43 44 45
    }

    @Override
    public String getName() {
46
        return "WixRNNotifications";
Amit Davidi's avatar
Amit Davidi committed
47 48 49 50
    }

    @Override
    public void initialize() {
Amit Davidi's avatar
Amit Davidi committed
51
        Log.d(LOGTAG, "Native module init");
yogevbd's avatar
yogevbd committed
52
        startGcmIntentService(FcmInstanceIdRefreshHandlerService.EXTRA_IS_APP_INIT);
Amit Davidi's avatar
Amit Davidi committed
53

54
        final IPushNotificationsDrawer notificationsDrawer = PushNotificationsDrawer.get(getReactApplicationContext().getApplicationContext());
55
        notificationsDrawer.onAppInit();
Amit Davidi's avatar
Amit Davidi committed
56 57
    }

yogevbd's avatar
yogevbd committed
58 59 60 61 62 63 64 65 66 67
    @Override
    public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {

    }

    @Override
    public void onNewIntent(Intent intent) {
        Bundle notificationData = intent.getExtras();
        if (notificationData != null) {
            final IPushNotification notification = PushNotification.get(getReactApplicationContext().getApplicationContext(), notificationData);
yogevbd's avatar
yogevbd committed
68 69 70
            if (notification != null) {
                notification.onOpened();
            }
yogevbd's avatar
yogevbd committed
71 72 73
        }
    }

74 75 76
    @ReactMethod
    public void refreshToken() {
        Log.d(LOGTAG, "Native method invocation: refreshToken()");
yogevbd's avatar
yogevbd committed
77
        startGcmIntentService(FcmInstanceIdRefreshHandlerService.EXTRA_MANUAL_REFRESH);
78
    }
Amit Davidi's avatar
Amit Davidi committed
79

80 81
    @ReactMethod
    public void getInitialNotification(final Promise promise) {
Amit Davidi's avatar
Amit Davidi committed
82
        Log.d(LOGTAG, "Native method invocation: getInitialNotification");
83
        Object result = null;
Amit Davidi's avatar
Amit Davidi committed
84

85
        try {
86
            final PushNotificationProps notification = InitialNotificationHolder.getInstance().get();
87 88 89 90 91 92 93 94
            if (notification == null) {
                return;
            }

            result = Arguments.fromBundle(notification.asBundle());
        } finally {
            promise.resolve(result);
        }
Amit Davidi's avatar
Amit Davidi committed
95
    }
Amit Davidi's avatar
Amit Davidi committed
96

97 98 99 100
    @ReactMethod
    public void postLocalNotification(ReadableMap notificationPropsMap, int notificationId) {
        Log.d(LOGTAG, "Native method invocation: postLocalNotification");
        final Bundle notificationProps = Arguments.toBundle(notificationPropsMap);
101
        final IPushNotification pushNotification = PushNotification.get(getReactApplicationContext().getApplicationContext(), notificationProps);
102 103 104 105 106 107 108 109 110
        pushNotification.onPostRequest(notificationId);
    }

    @ReactMethod
    public void cancelLocalNotification(int notificationId) {
        IPushNotificationsDrawer notificationsDrawer = PushNotificationsDrawer.get(getReactApplicationContext().getApplicationContext());
        notificationsDrawer.onNotificationClearRequest(notificationId);
    }

111 112 113 114 115 116
    @ReactMethod
    public void isRegisteredForRemoteNotifications(Promise promise) {
        boolean hasPermission = NotificationManagerCompat.from(getReactApplicationContext()).areNotificationsEnabled();
        promise.resolve(new Boolean(hasPermission));
    }

117
    protected void startGcmIntentService(String extraFlag) {
Amit Davidi's avatar
Amit Davidi committed
118
        final Context appContext = getReactApplicationContext().getApplicationContext();
yogevbd's avatar
yogevbd committed
119
        final Intent tokenFetchIntent = new Intent(appContext, FcmInstanceIdRefreshHandlerService.class);
120
        tokenFetchIntent.putExtra(extraFlag, true);
Amit Davidi's avatar
Amit Davidi committed
121 122
        appContext.startService(tokenFetchIntent);
    }
Amit Davidi's avatar
Amit Davidi committed
123
}