RNNotificationsModule.java 5.25 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;
Amit Davidi's avatar
Amit Davidi committed
8 9
import android.util.Log;

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

import static com.wix.reactnativenotifications.Defs.LOGTAG;

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

31
    public RNNotificationsModule(Application application, ReactApplicationContext reactContext) {
Amit Davidi's avatar
Amit Davidi committed
32
        super(reactContext);
Amit Davidi's avatar
Amit Davidi committed
33

34 35 36 37
        if (AppLifecycleFacadeHolder.get() instanceof ReactAppLifecycleFacade) {
            ((ReactAppLifecycleFacade) AppLifecycleFacadeHolder.get()).init(reactContext);
        }
        AppLifecycleFacadeHolder.get().addVisibilityListener(this);
38
        application.registerActivityLifecycleCallbacks(this);
Amit Davidi's avatar
Amit Davidi committed
39 40 41 42
    }

    @Override
    public String getName() {
43
        return "WixRNNotifications";
Amit Davidi's avatar
Amit Davidi committed
44 45 46 47
    }

    @Override
    public void initialize() {
Amit Davidi's avatar
Amit Davidi committed
48
        Log.d(LOGTAG, "Native module init");
49
        startGcmIntentService(GcmInstanceIdRefreshHandlerService.EXTRA_IS_APP_INIT);
Amit Davidi's avatar
Amit Davidi committed
50

51
        final IPushNotificationsDrawer notificationsDrawer = PushNotificationsDrawer.get(getReactApplicationContext().getApplicationContext());
52
        notificationsDrawer.onAppInit();
Amit Davidi's avatar
Amit Davidi committed
53 54
    }

55 56 57 58 59
    @ReactMethod
    public void refreshToken() {
        Log.d(LOGTAG, "Native method invocation: refreshToken()");
        startGcmIntentService(GcmInstanceIdRefreshHandlerService.EXTRA_MANUAL_REFRESH);
    }
Amit Davidi's avatar
Amit Davidi committed
60

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

66
        try {
67
            final PushNotificationProps notification = InitialNotificationHolder.getInstance().get();
68 69 70 71 72 73 74 75
            if (notification == null) {
                return;
            }

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

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

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

92 93
    @Override
    public void onAppVisible() {
94
        final IPushNotificationsDrawer notificationsDrawer = PushNotificationsDrawer.get(getReactApplicationContext().getApplicationContext());
95 96 97 98 99 100 101 102 103
        notificationsDrawer.onAppVisible();
    }

    @Override
    public void onAppNotVisible() {
    }

    @Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
104
        final IPushNotificationsDrawer notificationsDrawer = PushNotificationsDrawer.get(getReactApplicationContext().getApplicationContext());
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
        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
131

132
    protected void startGcmIntentService(String extraFlag) {
Amit Davidi's avatar
Amit Davidi committed
133 134
        final Context appContext = getReactApplicationContext().getApplicationContext();
        final Intent tokenFetchIntent = new Intent(appContext, GcmInstanceIdRefreshHandlerService.class);
135
        tokenFetchIntent.putExtra(extraFlag, true);
Amit Davidi's avatar
Amit Davidi committed
136 137
        appContext.startService(tokenFetchIntent);
    }
Amit Davidi's avatar
Amit Davidi committed
138
}