Parcourir la source

refactor all the things

Daniel Zlotin il y a 8 ans
Parent
révision
69e0e6d46b

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

3
 import android.app.Application;
3
 import android.app.Application;
4
 import android.os.Handler;
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
     private Handler handler;
18
     private Handler handler;
11
 
19
 
12
     @Override
20
     @Override
14
         super.onCreate();
22
         super.onCreate();
15
         instance = this;
23
         instance = this;
16
         handler = new Handler(getMainLooper());
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
     public Handler getMainHandler() {
30
     public Handler getMainHandler() {
22
         return handler;
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 Voir le fichier

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

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 Voir le fichier

12
     private static boolean shouldRefreshOnRR = false;
12
     private static boolean shouldRefreshOnRR = false;
13
 
13
 
14
     //TODO yuck.
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
         if (reactInstanceManager != null &&
21
         if (reactInstanceManager != null &&
17
                 reactInstanceManager.getDevSupportManager().getDevSupportEnabled()) {
22
                 reactInstanceManager.getDevSupportManager().getDevSupportEnabled()) {
18
             if (keyCode == KeyEvent.KEYCODE_MENU) {
23
             if (keyCode == KeyEvent.KEYCODE_MENU) {

+ 9
- 3
android/app/src/main/java/com/reactnativenavigation/react/NavigationReactInstance.java Voir le fichier

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