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
         destroy();
120
         destroy();
121
         onModalDismissedListener.onModalDismissed(this);
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
     @Override
83
     @Override
84
     public void onModalDismissed(Modal modal) {
84
     public void onModalDismissed(Modal modal) {
85
         stack.remove(modal);
85
         stack.remove(modal);
86
+        if (isShowing()) {
87
+            stack.peek().onModalDismissed();
88
+        }
86
         EventBus.instance.post(new ModalDismissedEvent());
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
     @Override
250
     @Override
251
     public void onEvent(Event event) {
251
     public void onEvent(Event event) {
252
         if (event.getType().equals(ModalDismissedEvent.TYPE)) {
252
         if (event.getType().equals(ModalDismissedEvent.TYPE)) {
253
-            layout.onModalDismissed();
253
+            handleModalDismissedEvent();
254
         } else if (event.getType().equals(JsDevReloadEvent.TYPE)) {
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
 }