RNNotificationsModule.java 5.68 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;

11 12
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Promise;
Amit Davidi's avatar
Amit Davidi committed
13 14
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
15
import com.facebook.react.bridge.ReactMethod;
16
import com.facebook.react.bridge.ReadableMap;
17 18 19 20
import com.wix.reactnativenotifications.core.AppLifecycleFacade;
import com.wix.reactnativenotifications.core.AppLifecycleFacadeHolder;
import com.wix.reactnativenotifications.core.InitialNotificationHolder;
import com.wix.reactnativenotifications.core.ReactAppLifecycleFacade;
21 22
import com.wix.reactnativenotifications.core.notification.IPushNotification;
import com.wix.reactnativenotifications.core.notification.PushNotification;
23 24 25
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
26
import com.wix.reactnativenotifications.gcm.FcmInstanceIdRefreshHandlerService;
Amit Davidi's avatar
Amit Davidi committed
27

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

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

32
public class RNNotificationsModule extends ReactContextBaseJavaModule implements AppLifecycleFacade.AppVisibilityListener, Application.ActivityLifecycleCallbacks {
Amit Davidi's avatar
Amit Davidi committed
33

34
    public RNNotificationsModule(Application application, ReactApplicationContext reactContext) {
Amit Davidi's avatar
Amit Davidi committed
35
        super(reactContext);
Amit Davidi's avatar
Amit Davidi committed
36

yogevbd's avatar
yogevbd committed
37
        FirebaseApp.initializeApp(reactContext.getApplicationContext());
38 39 40 41
        if (AppLifecycleFacadeHolder.get() instanceof ReactAppLifecycleFacade) {
            ((ReactAppLifecycleFacade) AppLifecycleFacadeHolder.get()).init(reactContext);
        }
        AppLifecycleFacadeHolder.get().addVisibilityListener(this);
42
        application.registerActivityLifecycleCallbacks(this);
Amit Davidi's avatar
Amit Davidi committed
43 44 45 46
    }

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

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

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

59 60 61
    @ReactMethod
    public void refreshToken() {
        Log.d(LOGTAG, "Native method invocation: refreshToken()");
yogevbd's avatar
yogevbd committed
62
        startGcmIntentService(FcmInstanceIdRefreshHandlerService.EXTRA_MANUAL_REFRESH);
63
    }
Amit Davidi's avatar
Amit Davidi committed
64

65 66
    @ReactMethod
    public void getInitialNotification(final Promise promise) {
Amit Davidi's avatar
Amit Davidi committed
67
        Log.d(LOGTAG, "Native method invocation: getInitialNotification");
68
        Object result = null;
Amit Davidi's avatar
Amit Davidi committed
69

70
        try {
71
            final PushNotificationProps notification = InitialNotificationHolder.getInstance().get();
72 73 74 75 76 77 78 79
            if (notification == null) {
                return;
            }

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

82 83 84 85
    @ReactMethod
    public void postLocalNotification(ReadableMap notificationPropsMap, int notificationId) {
        Log.d(LOGTAG, "Native method invocation: postLocalNotification");
        final Bundle notificationProps = Arguments.toBundle(notificationPropsMap);
86
        final IPushNotification pushNotification = PushNotification.get(getReactApplicationContext().getApplicationContext(), notificationProps);
87 88 89 90 91 92 93 94 95
        pushNotification.onPostRequest(notificationId);
    }

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

96 97 98 99 100 101
    @ReactMethod
    public void isRegisteredForRemoteNotifications(Promise promise) {
        boolean hasPermission = NotificationManagerCompat.from(getReactApplicationContext()).areNotificationsEnabled();
        promise.resolve(new Boolean(hasPermission));
    }

102 103
    @Override
    public void onAppVisible() {
104
        final IPushNotificationsDrawer notificationsDrawer = PushNotificationsDrawer.get(getReactApplicationContext().getApplicationContext());
105 106 107 108 109 110 111 112 113
        notificationsDrawer.onAppVisible();
    }

    @Override
    public void onAppNotVisible() {
    }

    @Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
114
        final IPushNotificationsDrawer notificationsDrawer = PushNotificationsDrawer.get(getReactApplicationContext().getApplicationContext());
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
        notificationsDrawer.onNewActivity(activity);
    }

    @Override
    public void onActivityStarted(Activity activity) {
    }

    @Override
    public void onActivityResumed(Activity activity) {
    }

    @Override
    public void onActivityPaused(Activity activity) {
    }

    @Override
    public void onActivityStopped(Activity activity) {
    }

    @Override
    public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
    }

    @Override
    public void onActivityDestroyed(Activity activity) {
    }
Amit Davidi's avatar
Amit Davidi committed
141

142
    protected void startGcmIntentService(String extraFlag) {
Amit Davidi's avatar
Amit Davidi committed
143
        final Context appContext = getReactApplicationContext().getApplicationContext();
yogevbd's avatar
yogevbd committed
144
        final Intent tokenFetchIntent = new Intent(appContext, FcmInstanceIdRefreshHandlerService.class);
145
        tokenFetchIntent.putExtra(extraFlag, true);
Amit Davidi's avatar
Amit Davidi committed
146 147
        appContext.startService(tokenFetchIntent);
    }
Amit Davidi's avatar
Amit Davidi committed
148
}