Browse Source

Notify modalDismiss if no modals are displayed

Notify the Activity layout that the top most Modal was dismissed only
if no other modals are displayed. Currently this event is used as a
`onVisible` event to to the layout. This whole logic can be simplified
when we implement proper screen visibility events.
Guy Carmeli 8 years ago
parent
commit
18fabcc87b

+ 4
- 0
android/app/src/main/java/com/reactnativenavigation/controllers/Modal.java View File

@@ -120,4 +120,8 @@ public class Modal extends Dialog implements DialogInterface.OnDismissListener,
120 120
         destroy();
121 121
         onModalDismissedListener.onModalDismissed(this);
122 122
     }
123
+
124
+    public void onModalDismissed() {
125
+        layout.onModalDismissed();
126
+    }
123 127
 }

+ 3
- 0
android/app/src/main/java/com/reactnativenavigation/controllers/ModalController.java View File

@@ -83,6 +83,9 @@ public class ModalController implements ScreenStackContainer, Modal.OnModalDismi
83 83
     @Override
84 84
     public void onModalDismissed(Modal modal) {
85 85
         stack.remove(modal);
86
+        if (isShowing()) {
87
+            stack.peek().onModalDismissed();
88
+        }
86 89
         EventBus.instance.post(new ModalDismissedEvent());
87 90
     }
88 91
 

+ 13
- 3
android/app/src/main/java/com/reactnativenavigation/controllers/NavigationActivity.java View File

@@ -250,10 +250,20 @@ public class NavigationActivity extends AppCompatActivity implements DefaultHard
250 250
     @Override
251 251
     public void onEvent(Event event) {
252 252
         if (event.getType().equals(ModalDismissedEvent.TYPE)) {
253
-            layout.onModalDismissed();
253
+            handleModalDismissedEvent();
254 254
         } else if (event.getType().equals(JsDevReloadEvent.TYPE)) {
255
-            modalController.destroy();
256
-            layout.destroy();
255
+            handleJsDevReloadEvent();
257 256
         }
258 257
     }
258
+
259
+    private void handleModalDismissedEvent() {
260
+        if (!modalController.isShowing()) {
261
+            layout.onModalDismissed();
262
+        }
263
+    }
264
+
265
+    private void handleJsDevReloadEvent() {
266
+        modalController.destroy();
267
+        layout.destroy();
268
+    }
259 269
 }