Browse Source

Cleanup/unmount notification overlay. (#705)

Royce Townsend 8 years ago
parent
commit
dd72a092be

+ 1
- 0
android/app/src/main/java/com/reactnativenavigation/layouts/BottomTabsLayout.java View File

306
         if (sideMenu != null) {
306
         if (sideMenu != null) {
307
             sideMenu.destroy();
307
             sideMenu.destroy();
308
         }
308
         }
309
+        slidingOverlaysQueue.destroy();
309
     }
310
     }
310
 
311
 
311
     @Override
312
     @Override

+ 1
- 0
android/app/src/main/java/com/reactnativenavigation/layouts/SingleScreenLayout.java View File

124
         if (sideMenu != null) {
124
         if (sideMenu != null) {
125
             sideMenu.destroy();
125
             sideMenu.destroy();
126
         }
126
         }
127
+        slidingOverlaysQueue.destroy();
127
     }
128
     }
128
 
129
 
129
     @Override
130
     @Override

+ 9
- 5
android/app/src/main/java/com/reactnativenavigation/views/slidingOverlay/SlidingOverlay.java View File

18
         Hidden, AnimateHide, Shown, AnimateShow
18
         Hidden, AnimateHide, Shown, AnimateShow
19
     }
19
     }
20
 
20
 
21
-    private final ContentView view;
21
+    private ContentView view = null;
22
     private final RelativeLayout parent;
22
     private final RelativeLayout parent;
23
     private final SlidingOverlayParams params;
23
     private final SlidingOverlayParams params;
24
 
24
 
33
     public SlidingOverlay(RelativeLayout parent, SlidingOverlayParams params) {
33
     public SlidingOverlay(RelativeLayout parent, SlidingOverlayParams params) {
34
         this.parent = parent;
34
         this.parent = parent;
35
         this.params = params;
35
         this.params = params;
36
-        view = createSlidingOverlayView(params);
37
     }
36
     }
38
 
37
 
39
     public void setSlidingListener(SlidingListener listener) {
38
     public void setSlidingListener(SlidingListener listener) {
45
     }
44
     }
46
 
45
 
47
     public void show() {
46
     public void show() {
47
+        view = createSlidingOverlayView(params);
48
         parent.addView(view);
48
         parent.addView(view);
49
 
49
 
50
         final PeekingAnimator animator = new PeekingAnimator(view, params.position, true);
50
         final PeekingAnimator animator = new PeekingAnimator(view, params.position, true);
87
         animator.animate();
87
         animator.animate();
88
     }
88
     }
89
 
89
 
90
+    public void destroy() {
91
+        visibilityState = VisibilityState.Hidden;
92
+        view.unmountReactView();
93
+        parent.removeView(view);
94
+    }
95
+
90
     public boolean isShowing() {
96
     public boolean isShowing() {
91
         return VisibilityState.AnimateShow == visibilityState;
97
         return VisibilityState.AnimateShow == visibilityState;
92
     }
98
     }
119
     }
125
     }
120
 
126
 
121
     protected void onSlidingOverlayEnd(ContentView view) {
127
     protected void onSlidingOverlayEnd(ContentView view) {
122
-        visibilityState = VisibilityState.Hidden;
123
-        view.unmountReactView();
124
-        parent.removeView(view);
128
+        destroy();
125
 
129
 
126
         if (listener != null) {
130
         if (listener != null) {
127
             listener.onSlidingOverlayGone();
131
             listener.onSlidingOverlayGone();

+ 21
- 4
android/app/src/main/java/com/reactnativenavigation/views/slidingOverlay/SlidingOverlaysQueue.java View File

47
                     pendingHide = true;
47
                     pendingHide = true;
48
                 }
48
                 }
49
                 else if (currentOverlay.isVisible()) {
49
                 else if (currentOverlay.isVisible()) {
50
-                    if (autoDismissTimer != null) {
51
-                        autoDismissTimer.cancel();
52
-                        autoDismissTimer = null;
53
-                    }
50
+                    cancelTimer();
54
                     currentOverlay.hide();
51
                     currentOverlay.hide();
55
                 }
52
                 }
56
             }
53
             }
88
         dispatchNextSlidingOverlay();
85
         dispatchNextSlidingOverlay();
89
     }
86
     }
90
 
87
 
88
+    public void destroy() {
89
+        SlidingOverlay currentOverlay = queue.poll();
90
+        while (!queue.isEmpty()) {
91
+            queue.poll();
92
+        }
93
+
94
+        if (currentOverlay != null) {
95
+            cancelTimer();
96
+            currentOverlay.setSlidingListener(null);
97
+            currentOverlay.destroy();
98
+        }
99
+    }
100
+
91
     protected void dispatchNextSlidingOverlay() {
101
     protected void dispatchNextSlidingOverlay() {
92
         NavigationApplication.instance.runOnMainThread(new Runnable() {
102
         NavigationApplication.instance.runOnMainThread(new Runnable() {
93
             @Override
103
             @Override
100
             }
110
             }
101
         });
111
         });
102
     }
112
     }
113
+
114
+    protected void cancelTimer() {
115
+        if (autoDismissTimer != null) {
116
+            autoDismissTimer.cancel();
117
+            autoDismissTimer = null;
118
+        }
119
+    }
103
 }
120
 }