Browse Source

refactor all the things

Daniel Zlotin 8 years ago
parent
commit
69e0e6d46b

+ 27
- 3
android/app/src/main/java/com/reactnativenavigation/NavigationApplication.java View File

@@ -3,10 +3,18 @@ package com.reactnativenavigation;
3 3
 import android.app.Application;
4 4
 import android.os.Handler;
5 5
 
6
-public abstract class NavigationApplication extends Application {
6
+import com.facebook.react.ReactPackage;
7
+import com.facebook.react.shell.MainReactPackage;
8
+import com.reactnativenavigation.bridge.NavigationReactPackage;
9
+import com.reactnativenavigation.react.NavigationReactInstance;
7 10
 
8
-    public static NavigationApplication instance;
11
+import java.util.Arrays;
12
+import java.util.List;
13
+
14
+public abstract class NavigationApplication extends Application implements NavigationReactInstance.ReactContextCreator {
9 15
 
16
+    public static NavigationApplication instance;
17
+    private NavigationReactInstance navigationReactInstance;
10 18
     private Handler handler;
11 19
 
12 20
     @Override
@@ -14,13 +22,29 @@ public abstract class NavigationApplication extends Application {
14 22
         super.onCreate();
15 23
         instance = this;
16 24
         handler = new Handler(getMainLooper());
25
+        navigationReactInstance = new NavigationReactInstance(this);
26
+        navigationReactInstance.startReactContextOnceInBackgroundAndExecuteJS();
17 27
     }
18 28
 
19
-    public abstract boolean isDebug();
20 29
 
21 30
     public Handler getMainHandler() {
22 31
         return handler;
23 32
     }
24 33
 
34
+    public NavigationReactInstance getNavigationReactInstance() {
35
+        return navigationReactInstance;
36
+    }
37
+
38
+    @Override
39
+    public final List<ReactPackage> createReactPackages() {
40
+        List<ReactPackage> list = Arrays.asList(
41
+                new MainReactPackage(),
42
+                new NavigationReactPackage());
43
+        list.addAll(createAdditionalReactPackages());
44
+        return list;
45
+    }
46
+
47
+    public abstract boolean isDebug();
25 48
 
49
+    public abstract List<ReactPackage> createAdditionalReactPackages();
26 50
 }

+ 18
- 25
android/app/src/main/java/com/reactnativenavigation/controllers/NavigationActivity.java View File

@@ -1,14 +1,19 @@
1 1
 package com.reactnativenavigation.controllers;
2 2
 
3 3
 import android.app.Activity;
4
+import android.content.BroadcastReceiver;
5
+import android.content.Context;
4 6
 import android.content.Intent;
7
+import android.content.IntentFilter;
5 8
 import android.os.Bundle;
9
+import android.support.v4.content.LocalBroadcastManager;
6 10
 import android.support.v7.app.AppCompatActivity;
7 11
 import android.view.KeyEvent;
8 12
 
9 13
 import com.facebook.react.ReactPackage;
10 14
 import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
11 15
 import com.facebook.react.shell.MainReactPackage;
16
+import com.reactnativenavigation.NavigationApplication;
12 17
 import com.reactnativenavigation.bridge.NavigationReactPackage;
13 18
 import com.reactnativenavigation.params.ActivityParams;
14 19
 import com.reactnativenavigation.params.parsers.ActivityParamsParser;
@@ -22,7 +27,7 @@ import java.util.Arrays;
22 27
 import java.util.List;
23 28
 
24 29
 
25
-public class NavigationActivity extends AppCompatActivity implements NavigationReactInstance.ReactContextCreator, DefaultHardwareBackBtnHandler {
30
+public class NavigationActivity extends AppCompatActivity implements DefaultHardwareBackBtnHandler, NavigationReactInstance.OnJsDevReloadListener {
26 31
 
27 32
     public static final String PARAMS_BUNDLE = "PARAMS_BUNDLE";
28 33
     /**
@@ -32,7 +37,6 @@ public class NavigationActivity extends AppCompatActivity implements NavigationR
32 37
      * This is somewhat weird, and in the future either fully support multiple activities, OR a single activity with changing contentView ala ReactNative impl.
33 38
      */
34 39
     private static Activity currentActivity;
35
-    private NavigationReactInstance navigationReactInstance;
36 40
     private ModalController modalController;
37 41
     private Layout layout = new Layout() {
38 42
         @Override
@@ -59,14 +63,13 @@ public class NavigationActivity extends AppCompatActivity implements NavigationR
59 63
         activityParams = ActivityParamsParser.parse(getIntent().getBundleExtra(PARAMS_BUNDLE));
60 64
 
61 65
         modalController = new ModalController();
62
-        navigationReactInstance = new NavigationReactInstance(this);
63
-        navigationReactInstance.startReactContextOnceInBackgroundAndExecuteJS();
66
+
64 67
         RedboxPermission.permissionToShowRedboxIfNeeded(this);
65 68
         createLayout();
66 69
     }
67 70
 
68 71
     private void createLayout() {
69
-        ScreenLayout screenLayout = new ScreenLayout(this, navigationReactInstance.getReactInstanceManager(), activityParams.screenParams);
72
+        ScreenLayout screenLayout = new ScreenLayout(this, activityParams.screenParams);
70 73
         setContentView(screenLayout);
71 74
     }
72 75
 
@@ -74,14 +77,14 @@ public class NavigationActivity extends AppCompatActivity implements NavigationR
74 77
     protected void onResume() {
75 78
         super.onResume();
76 79
         currentActivity = this;
77
-        navigationReactInstance.onResume(this, this);
80
+        getNavigationReactInstance().onResume(this, this, this);
78 81
     }
79 82
 
80 83
     @Override
81 84
     protected void onPause() {
82 85
         super.onPause();
83 86
         currentActivity = null;
84
-        navigationReactInstance.onPause();
87
+        getNavigationReactInstance().onPause();
85 88
     }
86 89
 
87 90
     @Override
@@ -90,23 +93,10 @@ public class NavigationActivity extends AppCompatActivity implements NavigationR
90 93
         layout.onDestroy();
91 94
         super.onDestroy();
92 95
         if (currentActivity == null || currentActivity.isFinishing()) {
93
-            navigationReactInstance.onHostDestroy();
96
+            getNavigationReactInstance().onHostDestroy();
94 97
         }
95 98
     }
96 99
 
97
-
98
-    private NavigationReactInstance getNavigationReactInstance() {
99
-        return navigationReactInstance;
100
-    }
101
-
102
-    @Override
103
-    public List<ReactPackage> createReactPackages() {
104
-        return Arrays.asList(
105
-                new MainReactPackage(),
106
-                new NavigationReactPackage()
107
-        );
108
-    }
109
-
110 100
     @Override
111 101
     public void onJsDevReload() {
112 102
         layout.removeAllReactViews();
@@ -125,17 +115,20 @@ public class NavigationActivity extends AppCompatActivity implements NavigationR
125 115
         if (layout.onBackPressed()) {
126 116
             return;
127 117
         }
128
-        navigationReactInstance.onBackPressed();
118
+        getNavigationReactInstance().onBackPressed();
129 119
     }
130 120
 
131 121
     @Override
132 122
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
133
-        navigationReactInstance.onActivityResult(requestCode, resultCode, data);
123
+        getNavigationReactInstance().onActivityResult(requestCode, resultCode, data);
134 124
     }
135 125
 
136 126
     @Override
137 127
     public boolean onKeyUp(int keyCode, KeyEvent event) {
138
-        return JsDevReloadHandler.onKeyUp(navigationReactInstance.getReactInstanceManager(), getCurrentFocus(), keyCode)
139
-                || super.onKeyUp(keyCode, event);
128
+        return JsDevReloadHandler.onKeyUp(getCurrentFocus(), keyCode) || super.onKeyUp(keyCode, event);
129
+    }
130
+
131
+    private NavigationReactInstance getNavigationReactInstance() {
132
+        return NavigationApplication.instance.getNavigationReactInstance();
140 133
     }
141 134
 }

+ 8
- 0
android/app/src/main/java/com/reactnativenavigation/controllers/SplashActivity.java View File

@@ -0,0 +1,8 @@
1
+package com.reactnativenavigation.controllers;
2
+
3
+import android.support.v7.app.AppCompatActivity;
4
+
5
+public class SplashActivity extends AppCompatActivity {
6
+
7
+
8
+}

+ 6
- 1
android/app/src/main/java/com/reactnativenavigation/react/JsDevReloadHandler.java View File

@@ -12,7 +12,12 @@ public class JsDevReloadHandler {
12 12
     private static boolean shouldRefreshOnRR = false;
13 13
 
14 14
     //TODO yuck.
15
-    public static boolean onKeyUp(ReactInstanceManager reactInstanceManager, View currentFocus, int keyCode) {
15
+    public static boolean onKeyUp(View currentFocus, int keyCode) {
16
+        ReactInstanceManager reactInstanceManager = NavigationApplication
17
+                .instance
18
+                .getNavigationReactInstance()
19
+                .getReactInstanceManager();
20
+
16 21
         if (reactInstanceManager != null &&
17 22
                 reactInstanceManager.getDevSupportManager().getDevSupportEnabled()) {
18 23
             if (keyCode == KeyEvent.KEYCODE_MENU) {

+ 9
- 3
android/app/src/main/java/com/reactnativenavigation/react/NavigationReactInstance.java View File

@@ -1,6 +1,5 @@
1 1
 package com.reactnativenavigation.react;
2 2
 
3
-import android.app.Activity;
4 3
 import android.content.Intent;
5 4
 
6 5
 import com.facebook.react.LifecycleState;
@@ -10,16 +9,20 @@ import com.facebook.react.bridge.ReactContext;
10 9
 import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
11 10
 import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter;
12 11
 import com.reactnativenavigation.NavigationApplication;
12
+import com.reactnativenavigation.controllers.NavigationActivity;
13 13
 
14 14
 import java.util.List;
15 15
 
16 16
 public class NavigationReactInstance {
17 17
 
18 18
     private final ReactInstanceManager reactInstanceManager;
19
+    private OnJsDevReloadListener onJsDevReloadListener;
19 20
 
20 21
     public interface ReactContextCreator {
21 22
         List<ReactPackage> createReactPackages();
23
+    }
22 24
 
25
+    public interface OnJsDevReloadListener {
23 26
         void onJsDevReload();
24 27
     }
25 28
 
@@ -58,11 +61,13 @@ public class NavigationReactInstance {
58 61
         reactInstanceManager.onBackPressed();
59 62
     }
60 63
 
61
-    public void onResume(Activity activity, DefaultHardwareBackBtnHandler defaultHardwareBackBtnHandler) {
64
+    public void onResume(NavigationActivity activity, DefaultHardwareBackBtnHandler defaultHardwareBackBtnHandler, OnJsDevReloadListener onJsDevReloadListener) {
65
+        this.onJsDevReloadListener = onJsDevReloadListener;
62 66
         reactInstanceManager.onHostResume(activity, defaultHardwareBackBtnHandler);
63 67
     }
64 68
 
65 69
     public void onPause() {
70
+        this.onJsDevReloadListener = null;
66 71
         reactInstanceManager.onHostPause();
67 72
     }
68 73
 
@@ -74,7 +79,8 @@ public class NavigationReactInstance {
74 79
         new JsDevReloadListenerReplacer(reactInstanceManager, new JsDevReloadListenerReplacer.Listener() {
75 80
             @Override
76 81
             public void onJsDevReload() {
77
-                reactContextCreator.onJsDevReload();
82
+                if (onJsDevReloadListener != null)
83
+                    onJsDevReloadListener.onJsDevReload();
78 84
             }
79 85
         }).replace();
80 86
     }