Quellcode durchsuchen

Cleanup/unmount notification overlay. (#705)

Royce Townsend vor 8 Jahren
Ursprung
Commit
dd72a092be

+ 1
- 0
android/app/src/main/java/com/reactnativenavigation/layouts/BottomTabsLayout.java Datei anzeigen

@@ -306,6 +306,7 @@ public class BottomTabsLayout extends BaseLayout implements AHBottomNavigation.O
306 306
         if (sideMenu != null) {
307 307
             sideMenu.destroy();
308 308
         }
309
+        slidingOverlaysQueue.destroy();
309 310
     }
310 311
 
311 312
     @Override

+ 1
- 0
android/app/src/main/java/com/reactnativenavigation/layouts/SingleScreenLayout.java Datei anzeigen

@@ -124,6 +124,7 @@ public class SingleScreenLayout extends BaseLayout {
124 124
         if (sideMenu != null) {
125 125
             sideMenu.destroy();
126 126
         }
127
+        slidingOverlaysQueue.destroy();
127 128
     }
128 129
 
129 130
     @Override

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

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

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

@@ -47,10 +47,7 @@ public class SlidingOverlaysQueue implements SlidingOverlay.SlidingListener{
47 47
                     pendingHide = true;
48 48
                 }
49 49
                 else if (currentOverlay.isVisible()) {
50
-                    if (autoDismissTimer != null) {
51
-                        autoDismissTimer.cancel();
52
-                        autoDismissTimer = null;
53
-                    }
50
+                    cancelTimer();
54 51
                     currentOverlay.hide();
55 52
                 }
56 53
             }
@@ -88,6 +85,19 @@ public class SlidingOverlaysQueue implements SlidingOverlay.SlidingListener{
88 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 101
     protected void dispatchNextSlidingOverlay() {
92 102
         NavigationApplication.instance.runOnMainThread(new Runnable() {
93 103
             @Override
@@ -100,4 +110,11 @@ public class SlidingOverlaysQueue implements SlidingOverlay.SlidingListener{
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
 }