Parcourir la source

packager edge case fix

Daniel Zlotin il y a 7 ans
Parent
révision
f8f0ad21b4

+ 3
- 0
lib/android/app/src/main/java/com/reactnativenavigation/NavigationApplication.java Voir le fichier

@@ -1,6 +1,7 @@
1 1
 package com.reactnativenavigation;
2 2
 
3 3
 import android.app.Application;
4
+import android.content.Context;
4 5
 
5 6
 import com.facebook.react.ReactApplication;
6 7
 import com.facebook.react.ReactNativeHost;
@@ -8,11 +9,13 @@ import com.reactnativenavigation.react.ReactGateway;
8 9
 
9 10
 public abstract class NavigationApplication extends Application implements ReactApplication {
10 11
 
12
+	public static Context context;
11 13
 	private ReactGateway reactGateway;
12 14
 
13 15
 	@Override
14 16
 	public void onCreate() {
15 17
 		super.onCreate();
18
+		context = this;
16 19
 		reactGateway = new ReactGateway(this, isDebug());
17 20
 	}
18 21
 

+ 25
- 0
lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationReactInitializer.java Voir le fichier

@@ -2,17 +2,23 @@ package com.reactnativenavigation.react;
2 2
 
3 3
 import com.facebook.react.ReactInstanceManager;
4 4
 import com.facebook.react.bridge.ReactContext;
5
+import com.facebook.react.devsupport.interfaces.PackagerStatusCallback;
5 6
 import com.reactnativenavigation.NavigationActivity;
7
+import com.reactnativenavigation.utils.Toaster;
8
+import com.reactnativenavigation.utils.UiThread;
6 9
 
7 10
 public class NavigationReactInitializer implements ReactInstanceManager.ReactInstanceEventListener {
8 11
 
9 12
 	private final ReactInstanceManager reactInstanceManager;
10 13
 	private final DevPermissionRequest devPermissionRequest;
14
+	private final boolean isDebug;
11 15
 	private boolean waitingForAppLaunchEvent = true;
16
+	private boolean isPackagerRunning = false;
12 17
 
13 18
 	public NavigationReactInitializer(ReactInstanceManager reactInstanceManager, boolean isDebug) {
14 19
 		this.reactInstanceManager = reactInstanceManager;
15 20
 		this.devPermissionRequest = new DevPermissionRequest(isDebug);
21
+		this.isDebug = isDebug;
16 22
 	}
17 23
 
18 24
 	public void onActivityCreated(NavigationActivity activity) {
@@ -42,6 +48,25 @@ public class NavigationReactInitializer implements ReactInstanceManager.ReactIns
42 48
 	}
43 49
 
44 50
 	private void prepareReactApp() {
51
+		if (isDebug && !isPackagerRunning) {
52
+			reactInstanceManager.getDevSupportManager().isPackagerRunning(new PackagerStatusCallback() {
53
+				@Override
54
+				public void onPackagerStatusFetched(final boolean packagerIsRunning) {
55
+					UiThread.post(new Runnable() {
56
+						@Override
57
+						public void run() {
58
+							isPackagerRunning = packagerIsRunning;
59
+							if (!isPackagerRunning) {
60
+								Toaster.toast("Packager is not running!");
61
+							} else {
62
+								prepareReactApp();
63
+							}
64
+						}
65
+					});
66
+				}
67
+			});
68
+			return;
69
+		}
45 70
 		reactInstanceManager.addReactInstanceEventListener(this);
46 71
 		if (shouldCreateContext()) {
47 72
 			reactInstanceManager.createReactContextInBackground();

+ 11
- 0
lib/android/app/src/main/java/com/reactnativenavigation/utils/Toaster.java Voir le fichier

@@ -0,0 +1,11 @@
1
+package com.reactnativenavigation.utils;
2
+
3
+import android.widget.Toast;
4
+
5
+import com.reactnativenavigation.NavigationApplication;
6
+
7
+public class Toaster {
8
+	public static void toast(String text) {
9
+		Toast.makeText(NavigationApplication.context, text, Toast.LENGTH_LONG).show();
10
+	}
11
+}