diff --git a/android/src/main/java/com/reactnativenavigation/react/JsDevReloadHandler.java b/android/src/main/java/com/reactnativenavigation/react/JsDevReloadHandler.java index c562ccd5511..4ad7aa86a9f 100644 --- a/android/src/main/java/com/reactnativenavigation/react/JsDevReloadHandler.java +++ b/android/src/main/java/com/reactnativenavigation/react/JsDevReloadHandler.java @@ -19,6 +19,8 @@ public interface ReloadListener { void onReload(); } + private static final ReloadListener NO_OP_RELOAD_LISTENER = () -> {}; + private final BroadcastReceiver reloadReceiver = new BroadcastReceiver() { @Override public void onReceive(final Context context, final Intent intent) { @@ -28,7 +30,7 @@ public void onReceive(final Context context, final Intent intent) { private final DevSupportManager devSupportManager; private long firstRTimestamp = 0; - private ReloadListener reloadListener = () -> {}; + private ReloadListener reloadListener = NO_OP_RELOAD_LISTENER; JsDevReloadHandler(DevSupportManager devSupportManager) { this.devSupportManager = devSupportManager; @@ -45,7 +47,7 @@ public void setReloadListener(ReloadListener listener) { public void removeReloadListener(ReloadListener listener) { if (reloadListener == listener) { - reloadListener = null; + reloadListener = NO_OP_RELOAD_LISTENER; } } diff --git a/android/src/main/java/com/reactnativenavigation/react/ReloadHandler.java b/android/src/main/java/com/reactnativenavigation/react/ReloadHandler.java index 118b865d8ba..dba5037c139 100644 --- a/android/src/main/java/com/reactnativenavigation/react/ReloadHandler.java +++ b/android/src/main/java/com/reactnativenavigation/react/ReloadHandler.java @@ -2,7 +2,8 @@ public class ReloadHandler extends ReloadHandlerFacade implements JsDevReloadHandler.ReloadListener { - private Runnable onReloadListener = () -> {}; + private static final Runnable NO_OP_RELOAD_LISTENER = () -> {}; + private Runnable onReloadListener = NO_OP_RELOAD_LISTENER; public void setOnReloadListener(Runnable onReload) { this.onReloadListener = onReload; @@ -19,6 +20,6 @@ public void onSuccess() { } public void destroy() { - onReloadListener = null; + onReloadListener = NO_OP_RELOAD_LISTENER; } } diff --git a/android/src/test/java/com/reactnativenavigation/react/JsDevReloadHandlerTest.java b/android/src/test/java/com/reactnativenavigation/react/JsDevReloadHandlerTest.java new file mode 100644 index 00000000000..1caf067b522 --- /dev/null +++ b/android/src/test/java/com/reactnativenavigation/react/JsDevReloadHandlerTest.java @@ -0,0 +1,23 @@ +package com.reactnativenavigation.react; + +import com.facebook.react.devsupport.interfaces.DevSupportManager; +import com.reactnativenavigation.BaseTest; + +import org.junit.Test; +import org.mockito.Mockito; + +public class JsDevReloadHandlerTest extends BaseTest { + @Test + public void onSuccess_afterListenerRemovalIsIgnored() { + JsDevReloadHandler.ReloadListener listener = + Mockito.mock(JsDevReloadHandler.ReloadListener.class); + JsDevReloadHandler handler = + new JsDevReloadHandler(Mockito.mock(DevSupportManager.class)); + handler.setReloadListener(listener); + handler.removeReloadListener(listener); + + handler.onSuccess(); + + Mockito.verifyNoInteractions(listener); + } +} diff --git a/android/src/test/java/com/reactnativenavigation/react/ReloadListenerTest.java b/android/src/test/java/com/reactnativenavigation/react/ReloadListenerTest.java index 066268a97e7..5dfb6b36b49 100644 --- a/android/src/test/java/com/reactnativenavigation/react/ReloadListenerTest.java +++ b/android/src/test/java/com/reactnativenavigation/react/ReloadListenerTest.java @@ -21,4 +21,14 @@ public void onSuccess_viewsAreDestroyed() { uut.onSuccess(); Mockito.verify(handler).run(); } + + @Test + public void onSuccess_afterDestroyIsIgnored() { + uut.setOnReloadListener(handler); + uut.destroy(); + + uut.onSuccess(); + + Mockito.verifyNoInteractions(handler); + } }