Pārlūkot izejas kodu

Enable reloading from cmd (#775)

Guy Carmeli 8 gadus atpakaļ
vecāks
revīzija
791011e0d7

+ 12
- 8
android/app/src/main/java/com/reactnativenavigation/controllers/NavigationActivity.java Parādīt failu

31
 import com.reactnativenavigation.params.SnackbarParams;
31
 import com.reactnativenavigation.params.SnackbarParams;
32
 import com.reactnativenavigation.params.TitleBarButtonParams;
32
 import com.reactnativenavigation.params.TitleBarButtonParams;
33
 import com.reactnativenavigation.params.TitleBarLeftButtonParams;
33
 import com.reactnativenavigation.params.TitleBarLeftButtonParams;
34
-import com.reactnativenavigation.react.JsDevReloadHandler;
34
+import com.reactnativenavigation.react.ReactGateway;
35
 import com.reactnativenavigation.views.SideMenu.Side;
35
 import com.reactnativenavigation.views.SideMenu.Side;
36
 
36
 
37
 import java.util.List;
37
 import java.util.List;
108
 
108
 
109
         currentActivity = this;
109
         currentActivity = this;
110
         IntentDataHandler.onResume(getIntent());
110
         IntentDataHandler.onResume(getIntent());
111
-        NavigationApplication.instance.getReactGateway().onResumeActivity(this, this);
111
+        getReactGateway().onResumeActivity(this, this);
112
         NavigationApplication.instance.getActivityCallbacks().onActivityResumed(this);
112
         NavigationApplication.instance.getActivityCallbacks().onActivityResumed(this);
113
         EventBus.instance.register(this);
113
         EventBus.instance.register(this);
114
         IntentDataHandler.onPostResume(getIntent());
114
         IntentDataHandler.onPostResume(getIntent());
117
     @Override
117
     @Override
118
     protected void onNewIntent(Intent intent) {
118
     protected void onNewIntent(Intent intent) {
119
         super.onNewIntent(intent);
119
         super.onNewIntent(intent);
120
-        NavigationApplication.instance.getReactGateway().onNewIntent(intent);
120
+        getReactGateway().onNewIntent(intent);
121
         NavigationApplication.instance.getActivityCallbacks().onNewIntent(intent);
121
         NavigationApplication.instance.getActivityCallbacks().onNewIntent(intent);
122
     }
122
     }
123
 
123
 
132
         super.onPause();
132
         super.onPause();
133
         currentActivity = null;
133
         currentActivity = null;
134
         IntentDataHandler.onPause(getIntent());
134
         IntentDataHandler.onPause(getIntent());
135
-        NavigationApplication.instance.getReactGateway().onPauseActivity();
135
+        getReactGateway().onPauseActivity();
136
         NavigationApplication.instance.getActivityCallbacks().onActivityPaused(this);
136
         NavigationApplication.instance.getActivityCallbacks().onActivityPaused(this);
137
         EventBus.instance.unregister(this);
137
         EventBus.instance.unregister(this);
138
     }
138
     }
163
 
163
 
164
     private void destroyJsIfNeeded() {
164
     private void destroyJsIfNeeded() {
165
         if (currentActivity == null || currentActivity.isFinishing()) {
165
         if (currentActivity == null || currentActivity.isFinishing()) {
166
-            NavigationApplication.instance.getReactGateway().onDestroyApp();
166
+            getReactGateway().onDestroyApp();
167
         }
167
         }
168
     }
168
     }
169
 
169
 
175
     @Override
175
     @Override
176
     public void onBackPressed() {
176
     public void onBackPressed() {
177
         if (layout != null && !layout.onBackPressed()) {
177
         if (layout != null && !layout.onBackPressed()) {
178
-            NavigationApplication.instance.getReactGateway().onBackPressed();
178
+            getReactGateway().onBackPressed();
179
         }
179
         }
180
     }
180
     }
181
 
181
 
182
     @Override
182
     @Override
183
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
183
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
184
-        NavigationApplication.instance.getReactGateway().onActivityResult(requestCode, resultCode, data);
184
+        getReactGateway().onActivityResult(requestCode, resultCode, data);
185
         NavigationApplication.instance.getActivityCallbacks().onActivityResult(requestCode, resultCode, data);
185
         NavigationApplication.instance.getActivityCallbacks().onActivityResult(requestCode, resultCode, data);
186
     }
186
     }
187
 
187
 
188
     @Override
188
     @Override
189
     public boolean onKeyUp(int keyCode, KeyEvent event) {
189
     public boolean onKeyUp(int keyCode, KeyEvent event) {
190
-        return JsDevReloadHandler.onKeyUp(getCurrentFocus(), keyCode) || super.onKeyUp(keyCode, event);
190
+        return getReactGateway().onKeyUp(getCurrentFocus(), keyCode) || super.onKeyUp(keyCode, event);
191
+    }
192
+
193
+    private ReactGateway getReactGateway() {
194
+        return NavigationApplication.instance.getReactGateway();
191
     }
195
     }
192
 
196
 
193
     void push(ScreenParams params) {
197
     void push(ScreenParams params) {

+ 38
- 9
android/app/src/main/java/com/reactnativenavigation/react/JsDevReloadHandler.java Parādīt failu

1
 package com.reactnativenavigation.react;
1
 package com.reactnativenavigation.react;
2
 
2
 
3
+import android.content.BroadcastReceiver;
4
+import android.content.Context;
5
+import android.content.Intent;
6
+import android.content.IntentFilter;
3
 import android.view.KeyEvent;
7
 import android.view.KeyEvent;
4
 import android.view.View;
8
 import android.view.View;
5
 import android.widget.EditText;
9
 import android.widget.EditText;
7
 import com.facebook.react.ReactInstanceManager;
11
 import com.facebook.react.ReactInstanceManager;
8
 import com.reactnativenavigation.NavigationApplication;
12
 import com.reactnativenavigation.NavigationApplication;
9
 
13
 
10
-public class JsDevReloadHandler {
14
+class JsDevReloadHandler {
11
 
15
 
12
     private static boolean shouldRefreshOnRR = false;
16
     private static boolean shouldRefreshOnRR = false;
17
+    private final BroadcastReceiver reloadReceiver = new BroadcastReceiver() {
18
+        @Override
19
+        public void onReceive(Context context, Intent intent) {
20
+            reload();
21
+        }
22
+    };
13
 
23
 
14
-    //TODO yuck.
15
-    public static boolean onKeyUp(View currentFocus, int keyCode) {
16
-        ReactInstanceManager reactInstanceManager = NavigationApplication
17
-                .instance
18
-                .getReactGateway()
19
-                .getReactInstanceManager();
24
+    void onResumeActivity() {
25
+        if (getReactInstanceManager().getDevSupportManager().getDevSupportEnabled()) {
26
+            NavigationApplication.instance.registerReceiver(reloadReceiver, new IntentFilter("react.native.RELOAD"));
27
+        }
28
+    }
29
+
30
+    void onPauseActivity() {
31
+        if (getReactInstanceManager().getDevSupportManager().getDevSupportEnabled()) {
32
+            NavigationApplication.instance.unregisterReceiver(reloadReceiver);
33
+        }
34
+    }
35
+
36
+    boolean onKeyUp(View currentFocus, int keyCode) {
37
+        ReactInstanceManager reactInstanceManager = getReactInstanceManager();
20
 
38
 
21
         if (reactInstanceManager != null &&
39
         if (reactInstanceManager != null &&
22
                 reactInstanceManager.getDevSupportManager().getDevSupportEnabled()) {
40
                 reactInstanceManager.getDevSupportManager().getDevSupportEnabled()) {
27
             if (keyCode == KeyEvent.KEYCODE_R && !(currentFocus instanceof EditText)) {
45
             if (keyCode == KeyEvent.KEYCODE_R && !(currentFocus instanceof EditText)) {
28
                 // Enable double-tap-R-to-reload
46
                 // Enable double-tap-R-to-reload
29
                 if (shouldRefreshOnRR) {
47
                 if (shouldRefreshOnRR) {
30
-                    reactInstanceManager.getDevSupportManager().handleReloadJS();
31
-                    shouldRefreshOnRR = false;
48
+                    reload();
32
                     return true;
49
                     return true;
33
                 } else {
50
                 } else {
34
                     shouldRefreshOnRR = true;
51
                     shouldRefreshOnRR = true;
45
         }
62
         }
46
         return false;
63
         return false;
47
     }
64
     }
65
+
66
+    private void reload() {
67
+        getReactInstanceManager().getDevSupportManager().handleReloadJS();
68
+        shouldRefreshOnRR = false;
69
+    }
70
+
71
+    private ReactInstanceManager getReactInstanceManager() {
72
+        return NavigationApplication
73
+                .instance
74
+                .getReactGateway()
75
+                .getReactInstanceManager();
76
+    }
48
 }
77
 }

+ 14
- 2
android/app/src/main/java/com/reactnativenavigation/react/NavigationReactGateway.java Parādīt failu

2
 
2
 
3
 import android.app.Activity;
3
 import android.app.Activity;
4
 import android.content.Intent;
4
 import android.content.Intent;
5
+import android.view.View;
5
 
6
 
6
 import com.facebook.react.ReactInstanceManager;
7
 import com.facebook.react.ReactInstanceManager;
7
 import com.facebook.react.ReactNativeHost;
8
 import com.facebook.react.ReactNativeHost;
20
 
21
 
21
 import javax.annotation.Nullable;
22
 import javax.annotation.Nullable;
22
 
23
 
24
+//import android.view.View;
25
+
23
 public class NavigationReactGateway implements ReactGateway {
26
 public class NavigationReactGateway implements ReactGateway {
24
 
27
 
25
     private final ReactNativeHost host;
28
     private final ReactNativeHost host;
26
     private NavigationReactEventEmitter reactEventEmitter;
29
     private NavigationReactEventEmitter reactEventEmitter;
30
+    private JsDevReloadHandler jsDevReloadHandler;
27
 
31
 
28
     public NavigationReactGateway() {
32
     public NavigationReactGateway() {
29
         host = new ReactNativeHostImpl();
33
         host = new ReactNativeHostImpl();
34
+        jsDevReloadHandler = new JsDevReloadHandler();
30
     }
35
     }
31
 
36
 
32
     @Override
37
     @Override
67
 
72
 
68
     public void onPauseActivity() {
73
     public void onPauseActivity() {
69
         getReactInstanceManager().onHostPause();
74
         getReactInstanceManager().onHostPause();
75
+        jsDevReloadHandler.onPauseActivity();
70
     }
76
     }
71
 
77
 
72
     public void onNewIntent(Intent intent) {
78
     public void onNewIntent(Intent intent) {
73
         getReactInstanceManager().onNewIntent(intent);
79
         getReactInstanceManager().onNewIntent(intent);
74
     }
80
     }
75
 
81
 
82
+    @Override
83
+    public boolean onKeyUp(View currentFocus, int keyCode) {
84
+        return jsDevReloadHandler.onKeyUp(currentFocus, keyCode);
85
+    }
86
+
76
     public void onResumeActivity(Activity activity, DefaultHardwareBackBtnHandler defaultHardwareBackBtnHandler) {
87
     public void onResumeActivity(Activity activity, DefaultHardwareBackBtnHandler defaultHardwareBackBtnHandler) {
77
         getReactInstanceManager().onHostResume(activity, defaultHardwareBackBtnHandler);
88
         getReactInstanceManager().onHostResume(activity, defaultHardwareBackBtnHandler);
89
+        jsDevReloadHandler.onResumeActivity();
78
     }
90
     }
79
 
91
 
80
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
92
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
87
     }
99
     }
88
 
100
 
89
     //TODO temp hack
101
     //TODO temp hack
90
-    void onReactContextInitialized() {
102
+    private void onReactContextInitialized() {
91
         reactEventEmitter = new NavigationReactEventEmitter(getReactContext());
103
         reactEventEmitter = new NavigationReactEventEmitter(getReactContext());
92
     }
104
     }
93
 
105
 
94
     private static class ReactNativeHostImpl extends ReactNativeHost implements ReactInstanceManager.ReactInstanceEventListener {
106
     private static class ReactNativeHostImpl extends ReactNativeHost implements ReactInstanceManager.ReactInstanceEventListener {
95
 
107
 
96
-        public ReactNativeHostImpl() {
108
+        ReactNativeHostImpl() {
97
             super(NavigationApplication.instance);
109
             super(NavigationApplication.instance);
98
         }
110
         }
99
 
111
 

+ 3
- 0
android/app/src/main/java/com/reactnativenavigation/react/ReactGateway.java Parādīt failu

2
 
2
 
3
 import android.app.Activity;
3
 import android.app.Activity;
4
 import android.content.Intent;
4
 import android.content.Intent;
5
+import android.view.View;
5
 
6
 
6
 import com.facebook.react.ReactInstanceManager;
7
 import com.facebook.react.ReactInstanceManager;
7
 import com.facebook.react.bridge.ReactContext;
8
 import com.facebook.react.bridge.ReactContext;
33
     boolean hasStartedCreatingContext();
34
     boolean hasStartedCreatingContext();
34
 
35
 
35
     void onNewIntent(Intent intent);
36
     void onNewIntent(Intent intent);
37
+
38
+    boolean onKeyUp(View currentFocus, int keyCode);
36
 }
39
 }