Parcourir la 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 il y a 8 ans
Parent
révision
18fabcc87b

+ 4
- 0
android/app/src/main/java/com/reactnativenavigation/controllers/Modal.java Voir le fichier

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 Voir le fichier

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 Voir le fichier

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
 }