RNNotificationsModule.java 5.57 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;
Amit Davidi's avatar
Amit Davidi committed
26
import com.wix.reactnativenotifications.gcm.GcmInstanceIdRefreshHandlerService;
Amit Davidi's avatar
Amit Davidi committed
27 28 29

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    @Override
    public void onAppNotVisible() {
    }

    @Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
111
        final IPushNotificationsDrawer notificationsDrawer = PushNotificationsDrawer.get(getReactApplicationContext().getApplicationContext());
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
        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
138

139
    protected void startGcmIntentService(String extraFlag) {
Amit Davidi's avatar
Amit Davidi committed
140 141
        final Context appContext = getReactApplicationContext().getApplicationContext();
        final Intent tokenFetchIntent = new Intent(appContext, GcmInstanceIdRefreshHandlerService.class);
142
        tokenFetchIntent.putExtra(extraFlag, true);
Amit Davidi's avatar
Amit Davidi committed
143 144
        appContext.startService(tokenFetchIntent);
    }
Amit Davidi's avatar
Amit Davidi committed
145
}