Daniel Zlotin il y a 8 ans
Parent
révision
35cff65b7c

+ 5
- 2
android/app/src/main/java/com/reactnativenavigation/NavigationApplication.java Voir le fichier

@@ -23,8 +23,6 @@ public abstract class NavigationApplication extends Application {
23 23
         super.onCreate();
24 24
         instance = this;
25 25
         handler = new Handler(getMainLooper());
26
-        navigationReactInstance = new NavigationReactInstance();
27
-        navigationReactInstance.startReactContextOnceInBackgroundAndExecuteJS();
28 26
     }
29 27
 
30 28
     public void runOnMainThread(Runnable runnable) {
@@ -76,4 +74,9 @@ public abstract class NavigationApplication extends Application {
76 74
     public void sendEvent(String eventId, String navigatorEventId) {
77 75
         navigationReactInstance.getReactEventEmitter().sendEvent(eventId, navigatorEventId);
78 76
     }
77
+
78
+    public void startReactContext() {
79
+        navigationReactInstance = new NavigationReactInstance();
80
+        navigationReactInstance.startReactContextOnceInBackgroundAndExecuteJS();
81
+    }
79 82
 }

+ 1
- 0
android/app/src/main/java/com/reactnativenavigation/bridge/NavigationReactModule.java Voir le fichier

@@ -81,6 +81,7 @@ public class NavigationReactModule extends ReactContextBaseJavaModule {
81 81
 
82 82
     @ReactMethod
83 83
     public void popToRoot(final ReadableMap params) {
84
+        NavigationCommandsHandler.popToRoot(BundleConverter.toBundle(params));
84 85
     }
85 86
 
86 87
     @ReactMethod

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

@@ -113,4 +113,8 @@ public class NavigationActivity extends AppCompatActivity implements DefaultHard
113 113
     void pop(ScreenParams params) {
114 114
         layout.pop(params);
115 115
     }
116
+
117
+    void popToRoot(ScreenParams params) {
118
+        layout.popToRoot(params);
119
+    }
116 120
 }

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

@@ -58,4 +58,19 @@ public class NavigationCommandsHandler {
58 58
             }
59 59
         });
60 60
     }
61
+
62
+    public static void popToRoot(Bundle screenParams) {
63
+        final NavigationActivity currentActivity = NavigationActivity.currentActivity;
64
+        if (currentActivity == null) {
65
+            return;
66
+        }
67
+
68
+        final ScreenParams params = ScreenParamsParser.parse(screenParams);
69
+        NavigationApplication.instance.runOnMainThread(new Runnable() {
70
+            @Override
71
+            public void run() {
72
+                currentActivity.popToRoot(params);
73
+            }
74
+        });
75
+    }
61 76
 }

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

@@ -1,8 +1,10 @@
1 1
 package com.reactnativenavigation.controllers;
2 2
 
3
+import android.graphics.Color;
3 4
 import android.os.Bundle;
4 5
 import android.support.annotation.Nullable;
5 6
 import android.support.v7.app.AppCompatActivity;
7
+import android.view.View;
6 8
 import android.widget.Toast;
7 9
 
8 10
 import com.reactnativenavigation.NavigationApplication;
@@ -12,7 +14,11 @@ public abstract class SplashActivity extends AppCompatActivity {
12 14
     @Override
13 15
     protected void onCreate(@Nullable Bundle savedInstanceState) {
14 16
         super.onCreate(savedInstanceState);
17
+        NavigationApplication.instance.startReactContext();
15 18
         //TODO show fancy splash
19
+        View view = new View(this);
20
+        view.setBackgroundColor(Color.RED);
21
+        setContentView(view);
16 22
         Toast.makeText(this, "Loading navigation...", Toast.LENGTH_LONG).show();
17 23
     }
18 24
 }

+ 2
- 0
android/app/src/main/java/com/reactnativenavigation/layouts/Layout.java Voir le fichier

@@ -12,4 +12,6 @@ public interface Layout {
12 12
     void push(ScreenParams params);
13 13
 
14 14
     void pop(ScreenParams params);
15
+
16
+    void popToRoot(ScreenParams params);
15 17
 }

+ 5
- 1
android/app/src/main/java/com/reactnativenavigation/layouts/ScreenStack.java Voir le fichier

@@ -34,7 +34,7 @@ public class ScreenStack extends FrameLayout {
34 34
     }
35 35
 
36 36
     public void popToRoot() {
37
-        while (getStackSize() > 1) {
37
+        while (canPop()) {
38 38
             pop();
39 39
         }
40 40
     }
@@ -59,6 +59,10 @@ public class ScreenStack extends FrameLayout {
59 59
         return stack.peek();
60 60
     }
61 61
 
62
+    public boolean canPop() {
63
+        return getStackSize() > 1;
64
+    }
65
+
62 66
 
63 67
 //    /**
64 68
 //     * Remove the ScreenStack from {@code parent} while preventing all child react views from getting unmounted

+ 8
- 3
android/app/src/main/java/com/reactnativenavigation/layouts/SingleScreenLayout.java Voir le fichier

@@ -28,11 +28,11 @@ public class SingleScreenLayout extends FrameLayout implements Layout {
28 28
 
29 29
     @Override
30 30
     public boolean onBackPressed() {
31
-        if (stack.isEmpty()) {
32
-            return false;
33
-        } else {
31
+        if (stack.canPop()) {
34 32
             stack.pop();
35 33
             return true;
34
+        } else {
35
+            return false;
36 36
         }
37 37
     }
38 38
 
@@ -55,4 +55,9 @@ public class SingleScreenLayout extends FrameLayout implements Layout {
55 55
     public void pop(ScreenParams params) {
56 56
         stack.pop();
57 57
     }
58
+
59
+    @Override
60
+    public void popToRoot(ScreenParams params) {
61
+        stack.popToRoot();
62
+    }
58 63
 }

+ 10
- 7
src/deprecated/platformSpecificDeprecated.android.js Voir le fichier

@@ -54,6 +54,16 @@ function navigatorPop(navigator, params) {
54 54
   newPlatformSpecific.pop(adapted);
55 55
 }
56 56
 
57
+function navigatorPopToRoot(navigator, params) {
58
+  addNavigatorParams(params, navigator);
59
+
60
+  params.screenId = params.screen;
61
+  let adapted = adaptNavigationStyleToScreenStyle(params);
62
+  adapted = adaptNavigationParams(adapted);
63
+
64
+  newPlatformSpecific.popToRoot(adapted);
65
+}
66
+
57 67
 function adaptNavigationStyleToScreenStyle(screen) {
58 68
   const navigatorStyle = screen.navigatorStyle;
59 69
   if (!navigatorStyle) {
@@ -128,13 +138,6 @@ function navigatorSetButtons(navigator, navigatorEventID, params) {
128 138
   //RctActivity.setNavigatorButtons(params);
129 139
 }
130 140
 
131
-function navigatorPopToRoot(navigator, params) {
132
-  //RctActivity.navigatorPopToRoot({
133
-  //  navigatorID: navigator.navigatorID,
134
-  //  animated: !(params.animated === false)
135
-  //});
136
-}
137
-
138 141
 function navigatorResetTo(navigator, params) {
139 142
   //addNavigatorParams(params, navigator);
140 143
   //addNavigatorButtons(params);

+ 6
- 1
src/platformSpecific.android.js Voir le fichier

@@ -24,8 +24,13 @@ function pop(screenParams) {
24 24
   NativeModules.NavigationReactModule.pop(screenParams);
25 25
 }
26 26
 
27
+function popToRoot(screenParams) {
28
+  NativeModules.NavigationReactModule.pop(screenParams);
29
+}
30
+
27 31
 module.exports = {
28 32
   startApp,
29 33
   push,
30
-  pop
34
+  pop,
35
+  popToRoot
31 36
 };