diff --git a/android/src/main/java/com/wix/reactnativenotifications/core/RNNotificationsModule.java b/android/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java similarity index 88% rename from android/src/main/java/com/wix/reactnativenotifications/core/RNNotificationsModule.java rename to android/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java index 8129e570e5d3ac9d93c99b7ca55c5ff0372074a8..1f5535e62366a6be98bf6cc484784f2cd468c61e 100644 --- a/android/src/main/java/com/wix/reactnativenotifications/core/RNNotificationsModule.java +++ b/android/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java @@ -1,4 +1,4 @@ -package com.wix.reactnativenotifications.core; +package com.wix.reactnativenotifications; import android.app.Activity; import android.app.Application; @@ -13,6 +13,10 @@ import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.ReadableMap; +import com.wix.reactnativenotifications.core.AppLifecycleFacade; +import com.wix.reactnativenotifications.core.AppLifecycleFacadeHolder; +import com.wix.reactnativenotifications.core.InitialNotificationHolder; +import com.wix.reactnativenotifications.core.ReactAppLifecycleFacade; import com.wix.reactnativenotifications.core.notification.IPushNotification; import com.wix.reactnativenotifications.core.notification.PushNotification; import com.wix.reactnativenotifications.core.notification.PushNotificationProps; @@ -27,8 +31,10 @@ public class RNNotificationsModule extends ReactContextBaseJavaModule implements public RNNotificationsModule(Application application, ReactApplicationContext reactContext) { super(reactContext); - ReactAppLifecycleFacade.get().init(reactContext); - ReactAppLifecycleFacade.get().addVisibilityListener(this); + if (AppLifecycleFacadeHolder.get() instanceof ReactAppLifecycleFacade) { + ((ReactAppLifecycleFacade) AppLifecycleFacadeHolder.get()).init(reactContext); + } + AppLifecycleFacadeHolder.get().addVisibilityListener(this); application.registerActivityLifecycleCallbacks(this); } @@ -58,7 +64,7 @@ public class RNNotificationsModule extends ReactContextBaseJavaModule implements Object result = null; try { - final PushNotificationProps notification = InitialNotification.getInstance().get(); + final PushNotificationProps notification = InitialNotificationHolder.getInstance().get(); if (notification == null) { return; } @@ -73,7 +79,7 @@ public class RNNotificationsModule extends ReactContextBaseJavaModule implements public void postLocalNotification(ReadableMap notificationPropsMap, int notificationId) { Log.d(LOGTAG, "Native method invocation: postLocalNotification"); final Bundle notificationProps = Arguments.toBundle(notificationPropsMap); - final IPushNotification pushNotification = PushNotification.get(getReactApplicationContext().getApplicationContext(), notificationProps, ReactAppLifecycleFacade.get()); + final IPushNotification pushNotification = PushNotification.get(getReactApplicationContext().getApplicationContext(), notificationProps); pushNotification.onPostRequest(notificationId); } diff --git a/android/src/main/java/com/wix/reactnativenotifications/RNNotificationsPackage.java b/android/src/main/java/com/wix/reactnativenotifications/RNNotificationsPackage.java index e8495c45278d29aa9170fad0355fe8eb7011a525..49a9b3dbb33f8b638e85fce0a1323ce3c4bd2cd2 100644 --- a/android/src/main/java/com/wix/reactnativenotifications/RNNotificationsPackage.java +++ b/android/src/main/java/com/wix/reactnativenotifications/RNNotificationsPackage.java @@ -7,7 +7,6 @@ import com.facebook.react.bridge.JavaScriptModule; import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.uimanager.ViewManager; -import com.wix.reactnativenotifications.core.RNNotificationsModule; import java.util.Arrays; import java.util.Collections; diff --git a/android/src/main/java/com/wix/reactnativenotifications/core/AppLifecycleFacadeHolder.java b/android/src/main/java/com/wix/reactnativenotifications/core/AppLifecycleFacadeHolder.java new file mode 100644 index 0000000000000000000000000000000000000000..54856d552b5d4f347ed7f6b8aaab857246ae18cc --- /dev/null +++ b/android/src/main/java/com/wix/reactnativenotifications/core/AppLifecycleFacadeHolder.java @@ -0,0 +1,14 @@ +package com.wix.reactnativenotifications.core; + +public class AppLifecycleFacadeHolder { + + protected static AppLifecycleFacade sInstance = new ReactAppLifecycleFacade(); + + public static AppLifecycleFacade get() { + return sInstance; + } + + public static void set(AppLifecycleFacade facade) { + sInstance = facade; + } +} diff --git a/android/src/main/java/com/wix/reactnativenotifications/core/InitialNotification.java b/android/src/main/java/com/wix/reactnativenotifications/core/InitialNotificationHolder.java similarity index 65% rename from android/src/main/java/com/wix/reactnativenotifications/core/InitialNotification.java rename to android/src/main/java/com/wix/reactnativenotifications/core/InitialNotificationHolder.java index ee697ec04f25fb2c31ba4bc78c6c3d78b5229700..3636f41f7f3155d97870ab6113ab2b2b9f1bebd9 100644 --- a/android/src/main/java/com/wix/reactnativenotifications/core/InitialNotification.java +++ b/android/src/main/java/com/wix/reactnativenotifications/core/InitialNotificationHolder.java @@ -4,22 +4,22 @@ import android.support.annotation.Nullable; import com.wix.reactnativenotifications.core.notification.PushNotificationProps; -public class InitialNotification { +public class InitialNotificationHolder { - private static InitialNotification sInstance; + private static InitialNotificationHolder sInstance; private PushNotificationProps mNotification; - public static void setInstance(InitialNotification instance) { + public static void setInstance(InitialNotificationHolder instance) { sInstance = instance; } - /*package*/ InitialNotification() { + /*package*/ InitialNotificationHolder() { } - public static InitialNotification getInstance() { + public static InitialNotificationHolder getInstance() { if (sInstance == null) { - sInstance = new InitialNotification(); + sInstance = new InitialNotificationHolder(); } return sInstance; } diff --git a/android/src/main/java/com/wix/reactnativenotifications/core/ProxyService.java b/android/src/main/java/com/wix/reactnativenotifications/core/ProxyService.java index bbc10c8b36bc7b101910d2c563959800a91f27b2..f1abbb2ce8766909b6126d90145a23ea2f87ef50 100644 --- a/android/src/main/java/com/wix/reactnativenotifications/core/ProxyService.java +++ b/android/src/main/java/com/wix/reactnativenotifications/core/ProxyService.java @@ -20,7 +20,7 @@ public class ProxyService extends IntentService { protected void onHandleIntent(Intent intent) { Log.d(TAG, "New intent: "+intent); final Bundle notificationData = NotificationIntentAdapter.extractPendingNotificationDataFromIntent(intent); - final IPushNotification pushNotification = PushNotification.get(this, notificationData, ReactAppLifecycleFacade.get()); + final IPushNotification pushNotification = PushNotification.get(this, notificationData); if (pushNotification != null) { pushNotification.onOpened(); } diff --git a/android/src/main/java/com/wix/reactnativenotifications/core/ReactAppLifecycleFacade.java b/android/src/main/java/com/wix/reactnativenotifications/core/ReactAppLifecycleFacade.java index 13934f090ee38aa9d0e2354f8649227e97e0cb4c..b185903e6f88219cd94343d50d78b38e28839509 100644 --- a/android/src/main/java/com/wix/reactnativenotifications/core/ReactAppLifecycleFacade.java +++ b/android/src/main/java/com/wix/reactnativenotifications/core/ReactAppLifecycleFacade.java @@ -12,16 +12,10 @@ import static com.wix.reactnativenotifications.Defs.LOGTAG; public class ReactAppLifecycleFacade implements AppLifecycleFacade { - private static final ReactAppLifecycleFacade sInstance = new ReactAppLifecycleFacade(); - private ReactContext mReactContext; private boolean mIsVisible; private Set mListeners = new CopyOnWriteArraySet<>(); - public static ReactAppLifecycleFacade get() { - return sInstance; - } - public void init(ReactContext reactContext) { mReactContext = reactContext; reactContext.addLifecycleEventListener(new LifecycleEventListener() { diff --git a/android/src/main/java/com/wix/reactnativenotifications/core/notification/INotificationsApplication.java b/android/src/main/java/com/wix/reactnativenotifications/core/notification/INotificationsApplication.java index ba88dbd57a8394b0534c2cf969b65417001d0e72..25cf21b9f4bf2d3a07fd437b0049284ad98a8593 100644 --- a/android/src/main/java/com/wix/reactnativenotifications/core/notification/INotificationsApplication.java +++ b/android/src/main/java/com/wix/reactnativenotifications/core/notification/INotificationsApplication.java @@ -7,5 +7,5 @@ import com.wix.reactnativenotifications.core.AppLaunchHelper; import com.wix.reactnativenotifications.core.AppLifecycleFacade; public interface INotificationsApplication { - IPushNotification getPushNotification(Context context, Bundle bundle, AppLifecycleFacade defaultFacade, AppLaunchHelper defaultAppLaunchHelper); + IPushNotification getPushNotification(Context context, Bundle bundle, AppLifecycleFacade facade, AppLaunchHelper defaultAppLaunchHelper); } diff --git a/android/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java b/android/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java index 35dd1c4641d0eed69d1d18ce9690e15392317021..9fec1de6bcce2f68f96b88a50ab5963a256d34af 100644 --- a/android/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java +++ b/android/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java @@ -11,10 +11,11 @@ import com.facebook.react.bridge.ReactContext; import com.wix.reactnativenotifications.core.AppLaunchHelper; import com.wix.reactnativenotifications.core.AppLifecycleFacade; import com.wix.reactnativenotifications.core.AppLifecycleFacade.AppVisibilityListener; -import com.wix.reactnativenotifications.core.InitialNotification; +import com.wix.reactnativenotifications.core.AppLifecycleFacadeHolder; +import com.wix.reactnativenotifications.core.InitialNotificationHolder; +import com.wix.reactnativenotifications.core.JsIOHelper; import com.wix.reactnativenotifications.core.NotificationIntentAdapter; import com.wix.reactnativenotifications.core.ProxyService; -import com.wix.reactnativenotifications.core.JsIOHelper; import static com.wix.reactnativenotifications.Defs.NOTIFICATION_OPENED_EVENT_NAME; import static com.wix.reactnativenotifications.Defs.NOTIFICATION_RECEIVED_EVENT_NAME; @@ -38,16 +39,12 @@ public class PushNotification implements IPushNotification { } }; - public static IPushNotification get(Context context, Bundle bundle, AppLifecycleFacade facade) { - return PushNotification.get(context, bundle, facade, new AppLaunchHelper()); - } - - public static IPushNotification get(Context context, Bundle bundle, AppLifecycleFacade facade, AppLaunchHelper appLaunchHelper) { + public static IPushNotification get(Context context, Bundle bundle) { Context appContext = context.getApplicationContext(); if (appContext instanceof INotificationsApplication) { - return ((INotificationsApplication) appContext).getPushNotification(context, bundle, facade, appLaunchHelper); + return ((INotificationsApplication) appContext).getPushNotification(context, bundle, AppLifecycleFacadeHolder.get(), new AppLaunchHelper()); } - return new PushNotification(context, bundle, facade, appLaunchHelper, new JsIOHelper()); + return new PushNotification(context, bundle, AppLifecycleFacadeHolder.get(), new AppLaunchHelper(), new JsIOHelper()); } protected PushNotification(Context context, Bundle bundle, AppLifecycleFacade appLifecycleFacade, AppLaunchHelper appLaunchHelper, JsIOHelper JsIOHelper) { @@ -110,7 +107,7 @@ public class PushNotification implements IPushNotification { } protected void setAsInitialNotification() { - InitialNotification.getInstance().set(mNotificationProps); + InitialNotificationHolder.getInstance().set(mNotificationProps); } protected void dispatchImmediately() { diff --git a/android/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawer.java b/android/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawer.java index 3f841b2d8986243359c0fc6c877c6cc8c440160e..7b320e16d8368dbe1d36973126a58a5125452e1f 100644 --- a/android/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawer.java +++ b/android/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawer.java @@ -5,7 +5,7 @@ import android.app.NotificationManager; import android.content.Context; import com.wix.reactnativenotifications.core.AppLaunchHelper; -import com.wix.reactnativenotifications.core.InitialNotification; +import com.wix.reactnativenotifications.core.InitialNotificationHolder; public class PushNotificationsDrawer implements IPushNotificationsDrawer { @@ -45,7 +45,7 @@ public class PushNotificationsDrawer implements IPushNotificationsDrawer { boolean launchIntentsActivity = mAppLaunchHelper.isLaunchIntentsActivity(activity); boolean launchIntentOfNotification = mAppLaunchHelper.isLaunchIntentOfNotification(activity.getIntent()); if (launchIntentsActivity && !launchIntentOfNotification) { - InitialNotification.getInstance().clear(); + InitialNotificationHolder.getInstance().clear(); } } diff --git a/android/src/main/java/com/wix/reactnativenotifications/gcm/GcmMessageHandlerService.java b/android/src/main/java/com/wix/reactnativenotifications/gcm/GcmMessageHandlerService.java index 5a75a9a3acb4c3d78c80f86b4b294ef0c0c0a503..f59665529429b87779fc37fe009f7505b30bc394 100644 --- a/android/src/main/java/com/wix/reactnativenotifications/gcm/GcmMessageHandlerService.java +++ b/android/src/main/java/com/wix/reactnativenotifications/gcm/GcmMessageHandlerService.java @@ -6,7 +6,6 @@ import android.util.Log; import com.google.android.gms.gcm.GcmListenerService; import com.wix.reactnativenotifications.core.notification.IPushNotification; import com.wix.reactnativenotifications.core.notification.PushNotification; -import com.wix.reactnativenotifications.core.ReactAppLifecycleFacade; import static com.wix.reactnativenotifications.Defs.LOGTAG; @@ -17,7 +16,7 @@ public class GcmMessageHandlerService extends GcmListenerService { Log.d(LOGTAG, "New message from GCM: " + bundle); try { - final IPushNotification notification = PushNotification.get(getApplicationContext(), bundle, ReactAppLifecycleFacade.get()); + final IPushNotification notification = PushNotification.get(getApplicationContext(), bundle); notification.onReceived(); } catch (IPushNotification.InvalidNotificationException e) { // A GCM message, yes - but not the kind we know how to work with. diff --git a/android/src/test/java/com/wix/reactnativenotifications/core/InitialNotificationTest.java b/android/src/test/java/com/wix/reactnativenotifications/core/InitialNotificationHolderTest.java similarity index 71% rename from android/src/test/java/com/wix/reactnativenotifications/core/InitialNotificationTest.java rename to android/src/test/java/com/wix/reactnativenotifications/core/InitialNotificationHolderTest.java index ce67661e165b41274f5bb48a64fc09d497422930..23fb7499a0661b8110968e9f2192059a36446b48 100644 --- a/android/src/test/java/com/wix/reactnativenotifications/core/InitialNotificationTest.java +++ b/android/src/test/java/com/wix/reactnativenotifications/core/InitialNotificationHolderTest.java @@ -10,18 +10,18 @@ import static org.junit.Assert.*; import static org.mockito.Mockito.mock; @RunWith(MockitoJUnitRunner.class) -public class InitialNotificationTest { +public class InitialNotificationHolderTest { @Test public void initialState() throws Exception { - final InitialNotification uut = createUUT(); + final InitialNotificationHolder uut = createUUT(); assertNull(uut.get()); } @Test public void setsInitialNotification() throws Exception { PushNotificationProps props = mock(PushNotificationProps.class); - final InitialNotification uut = createUUT(); + final InitialNotificationHolder uut = createUUT(); uut.set(props); assertEquals(props, uut.get()); } @@ -29,7 +29,7 @@ public class InitialNotificationTest { @Test public void clearsInitialNotification() throws Exception { PushNotificationProps props = mock(PushNotificationProps.class); - final InitialNotification uut = createUUT(); + final InitialNotificationHolder uut = createUUT(); uut.set(props); uut.clear(); assertNull(uut.get()); @@ -39,7 +39,7 @@ public class InitialNotificationTest { public void replacesInitialNotification() throws Exception { PushNotificationProps props1 = mock(PushNotificationProps.class); PushNotificationProps props2 = mock(PushNotificationProps.class); - final InitialNotification uut = createUUT(); + final InitialNotificationHolder uut = createUUT(); uut.set(props1); uut.set(props2); assertNotEquals(props1, props2); @@ -48,12 +48,12 @@ public class InitialNotificationTest { @Test public void isALazySingleton() throws Exception { - final InitialNotification instance = InitialNotification.getInstance(); + final InitialNotificationHolder instance = InitialNotificationHolder.getInstance(); assertNotNull(instance); - assertEquals(instance, InitialNotification.getInstance()); + assertEquals(instance, InitialNotificationHolder.getInstance()); } - private InitialNotification createUUT() { - return new InitialNotification(); + private InitialNotificationHolder createUUT() { + return new InitialNotificationHolder(); } } \ No newline at end of file diff --git a/android/src/test/java/com/wix/reactnativenotifications/core/notification/PushNotificationTest.java b/android/src/test/java/com/wix/reactnativenotifications/core/notification/PushNotificationTest.java index 0493a9db5650f0e3002796be438b81a84797afb4..5da59862686164f96bb6a5510bf477a9c35e52f8 100644 --- a/android/src/test/java/com/wix/reactnativenotifications/core/notification/PushNotificationTest.java +++ b/android/src/test/java/com/wix/reactnativenotifications/core/notification/PushNotificationTest.java @@ -12,7 +12,7 @@ import com.facebook.react.bridge.ReactContext; import com.wix.reactnativenotifications.core.AppLaunchHelper; import com.wix.reactnativenotifications.core.AppLifecycleFacade; import com.wix.reactnativenotifications.core.AppLifecycleFacade.AppVisibilityListener; -import com.wix.reactnativenotifications.core.InitialNotification; +import com.wix.reactnativenotifications.core.InitialNotificationHolder; import com.wix.reactnativenotifications.core.JsIOHelper; import org.junit.Before; @@ -58,7 +58,7 @@ public class PushNotificationTest { @Before public void setup() throws Exception { MockitoAnnotations.initMocks(this); - InitialNotification.setInstance(mock(InitialNotification.class)); + InitialNotificationHolder.setInstance(mock(InitialNotificationHolder.class)); when(mDefaultBundle.getString(eq("title"))).thenReturn(DEFAULT_NOTIFICATION_TITLE); when(mDefaultBundle.getString(eq("body"))).thenReturn(DEFAULT_NOTIFICATION_BODY); @@ -96,7 +96,7 @@ public class PushNotificationTest { final PushNotification uut = createUUT(); uut.onOpened(); - verify(InitialNotification.getInstance()).set(any(PushNotificationProps.class)); + verify(InitialNotificationHolder.getInstance()).set(any(PushNotificationProps.class)); } @Test @@ -119,7 +119,7 @@ public class PushNotificationTest { final PushNotification uut = createUUT(); uut.onOpened(); - verify(InitialNotification.getInstance(), never()).set(any(PushNotificationProps.class)); + verify(InitialNotificationHolder.getInstance(), never()).set(any(PushNotificationProps.class)); } @Test @@ -176,7 +176,7 @@ public class PushNotificationTest { final PushNotification uut = createUUT(); uut.onOpened(); - verify(InitialNotification.getInstance(), never()).set(any(PushNotificationProps.class)); + verify(InitialNotificationHolder.getInstance(), never()).set(any(PushNotificationProps.class)); } @Test @@ -187,7 +187,7 @@ public class PushNotificationTest { final PushNotification uut = createUUT(); uut.onOpened(); - verify(InitialNotification.getInstance()).set(any(PushNotificationProps.class)); + verify(InitialNotificationHolder.getInstance()).set(any(PushNotificationProps.class)); } @Test diff --git a/android/src/test/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawerTest.java b/android/src/test/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawerTest.java index fc2b90504b0d48b011a311f74f5521984ba7598d..d65b0d76304afa048cdbe528d47c302df450e42f 100644 --- a/android/src/test/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawerTest.java +++ b/android/src/test/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawerTest.java @@ -7,7 +7,7 @@ import android.content.Intent; import com.facebook.react.bridge.ReactContext; import com.wix.reactnativenotifications.core.AppLaunchHelper; -import com.wix.reactnativenotifications.core.InitialNotification; +import com.wix.reactnativenotifications.core.InitialNotificationHolder; import org.junit.Before; import org.junit.Test; @@ -35,7 +35,7 @@ public class PushNotificationsDrawerTest { public void setup() throws Exception { MockitoAnnotations.initMocks(this); - InitialNotification.setInstance(mock(InitialNotification.class)); + InitialNotificationHolder.setInstance(mock(InitialNotificationHolder.class)); when(mContext.getSystemService(Context.NOTIFICATION_SERVICE)).thenReturn(mNotificationManager); } @@ -60,7 +60,7 @@ public class PushNotificationsDrawerTest { @Test public void onNewActivity_activityIsTheOneLaunchedByNotifs_clearInitialNotification() throws Exception { - verify(InitialNotification.getInstance(), never()).clear(); + verify(InitialNotificationHolder.getInstance(), never()).clear(); Activity activity = mock(Activity.class); Intent intent = mock(Intent.class); @@ -70,7 +70,7 @@ public class PushNotificationsDrawerTest { createUUT().onNewActivity(activity); - verify(InitialNotification.getInstance()).clear(); + verify(InitialNotificationHolder.getInstance()).clear(); } @Test @@ -83,7 +83,7 @@ public class PushNotificationsDrawerTest { createUUT().onNewActivity(activity); - verify(InitialNotification.getInstance(), never()).clear(); + verify(InitialNotificationHolder.getInstance(), never()).clear(); } @Test @@ -96,7 +96,7 @@ public class PushNotificationsDrawerTest { createUUT().onNewActivity(activity); - verify(InitialNotification.getInstance(), never()).clear(); + verify(InitialNotificationHolder.getInstance(), never()).clear(); } protected PushNotificationsDrawer createUUT() {