Pārlūkot izejas kodu

bridge interface discussion

Daniel Zlotin 8 gadus atpakaļ
vecāks
revīzija
7f88b8f310

+ 2
- 2
android/app/src/main/java/com/reactnativenavigation/activities/BaseReactActivity.java Parādīt failu

@@ -35,7 +35,7 @@ import com.reactnativenavigation.core.objects.Button;
35 35
 import com.reactnativenavigation.core.objects.Drawer;
36 36
 import com.reactnativenavigation.core.objects.Screen;
37 37
 import com.reactnativenavigation.modal.RnnModal;
38
-import com.reactnativenavigation.packages.RnnPackage;
38
+import com.reactnativenavigation.bridge.NavigationReactPackage;
39 39
 import com.reactnativenavigation.utils.ContextProvider;
40 40
 import com.reactnativenavigation.utils.StyleHelper;
41 41
 import com.reactnativenavigation.views.RnnToolBar;
@@ -139,7 +139,7 @@ public abstract class BaseReactActivity extends AppCompatActivity implements Def
139 139
     public List<ReactPackage> getPackages() {
140 140
         return Arrays.asList(
141 141
                 new MainReactPackage(),
142
-                new RnnPackage()
142
+                new NavigationReactPackage()
143 143
         );
144 144
     }
145 145
 

+ 170
- 0
android/app/src/main/java/com/reactnativenavigation/bridge/NavigationReactModule.java Parādīt failu

@@ -0,0 +1,170 @@
1
+package com.reactnativenavigation.bridge;
2
+
3
+import android.app.Activity;
4
+import android.content.Intent;
5
+import android.os.Bundle;
6
+
7
+import com.facebook.react.bridge.ReactApplicationContext;
8
+import com.facebook.react.bridge.ReactContextBaseJavaModule;
9
+import com.facebook.react.bridge.ReactMethod;
10
+import com.facebook.react.bridge.ReadableArray;
11
+import com.facebook.react.bridge.ReadableMap;
12
+import com.facebook.react.bridge.ReadableNativeMap;
13
+import com.reactnativenavigation.activities.BaseReactActivity;
14
+import com.reactnativenavigation.activities.BottomTabActivity;
15
+import com.reactnativenavigation.activities.RootActivity;
16
+import com.reactnativenavigation.activities.SingleScreenActivity;
17
+import com.reactnativenavigation.controllers.ModalController;
18
+import com.reactnativenavigation.core.objects.Drawer;
19
+import com.reactnativenavigation.core.objects.Screen;
20
+import com.reactnativenavigation.utils.BridgeUtils;
21
+import com.reactnativenavigation.utils.ContextProvider;
22
+
23
+import java.util.ArrayList;
24
+
25
+/**
26
+ * The basic abstract components we will expose:
27
+ * BottomTabs
28
+ * TopBar
29
+ * - TitleBar
30
+ * - TopTabs (segmented control / view pager)
31
+ * DeviceStatusBar
32
+ * AndroidNavigationBar
33
+ * SideMenu
34
+ */
35
+public class NavigationReactModule extends ReactContextBaseJavaModule {
36
+    public static final String NAME = "NavigationReactModule";
37
+
38
+    public NavigationReactModule(ReactApplicationContext reactContext) {
39
+        super(reactContext);
40
+    }
41
+
42
+    @Override
43
+    public String getName() {
44
+        return NAME;
45
+    }
46
+
47
+    @ReactMethod
48
+    public void startTabBasedApp(ReadableArray screens, ReadableMap style, ReadableMap drawerParams) {
49
+        Activity context = ContextProvider.getActivityContext();
50
+        if (context != null && !context.isFinishing()) {
51
+            Intent intent = new Intent(context, BottomTabActivity.class);
52
+            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
53
+
54
+            Bundle extras = new Bundle();
55
+            extras.putSerializable(BottomTabActivity.EXTRA_SCREENS, createScreens(screens));
56
+            if (drawerParams != null) {
57
+                extras.putSerializable(BottomTabActivity.DRAWER_PARAMS, new Drawer(drawerParams));
58
+            }
59
+            if (style != null) {
60
+                BridgeUtils.addMapToBundle(((ReadableNativeMap) style).toHashMap(), extras);
61
+            }
62
+            intent.putExtras(extras);
63
+
64
+            context.startActivity(intent);
65
+            //TODO add abstract isRoot() instead of instanceof?
66
+            if (ContextProvider.getActivityContext() instanceof RootActivity) {
67
+                context.overridePendingTransition(0, 0);
68
+            }
69
+
70
+            // Dismiss modals associated with previous activity
71
+            ModalController.getInstance().dismissAllModals();
72
+        }
73
+    }
74
+
75
+    private ArrayList<Screen> createScreens(ReadableArray screens) {
76
+        ArrayList<Screen> ret = new ArrayList<>();
77
+        for (int i = 0; i < screens.size(); i++) {
78
+            ret.add(new Screen(screens.getMap(i)));
79
+        }
80
+        return ret;
81
+    }
82
+
83
+    @ReactMethod
84
+    public void startSingleScreenApp(ReadableMap screen, ReadableMap drawerParams) {
85
+        BaseReactActivity context = ContextProvider.getActivityContext();
86
+        if (context != null && !context.isFinishing()) {
87
+            Intent intent = new Intent(context, SingleScreenActivity.class);
88
+            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
89
+
90
+            Bundle extras = new Bundle();
91
+            extras.putSerializable(SingleScreenActivity.EXTRA_SCREEN, new Screen(screen));
92
+            if (drawerParams != null) {
93
+                extras.putSerializable(SingleScreenActivity.DRAWER_PARAMS, new Drawer(drawerParams));
94
+            }
95
+            intent.putExtras(extras);
96
+
97
+            context.startActivity(intent);
98
+            if (ContextProvider.getActivityContext() instanceof RootActivity) {
99
+                context.overridePendingTransition(0, 0);
100
+            }
101
+
102
+            // Dismiss modals associated with previous activity
103
+            ModalController.getInstance().dismissAllModals();
104
+        }
105
+    }
106
+
107
+    @ReactMethod
108
+    public void setScreenTitleBarTitle(final ReadableMap params) {
109
+    }
110
+
111
+    @ReactMethod
112
+    public void setScreenTitleBarButtons(final ReadableMap params) {
113
+    }
114
+
115
+    @ReactMethod
116
+    public void setTabBadge(final ReadableMap params) {
117
+    }
118
+
119
+    @ReactMethod
120
+    public void selectBottomTab(final ReadableMap params) {
121
+    }
122
+
123
+    @ReactMethod
124
+    public void toggleSideMenuVisible(final ReadableMap params) {
125
+    }
126
+
127
+    @ReactMethod
128
+    public void toggleTopBarVisible(final ReadableMap params) {
129
+    }
130
+
131
+    @ReactMethod
132
+    public void setTopBarVisible(final ReadableMap params) {
133
+    }
134
+
135
+    @ReactMethod
136
+    public void toggleBottomTabsVisible(final ReadableMap params) {
137
+    }
138
+
139
+    @ReactMethod
140
+    public void setBottomTabsVisible(final ReadableMap params) {
141
+    }
142
+
143
+    @ReactMethod
144
+    public void push(final ReadableMap params) {
145
+    }
146
+
147
+    @ReactMethod
148
+    public void pop(final ReadableMap params) {
149
+    }
150
+
151
+    @ReactMethod
152
+    public void popToRoot(final ReadableMap params) {
153
+    }
154
+
155
+    @ReactMethod
156
+    public void newStack(final ReadableMap params) {
157
+    }
158
+
159
+    @ReactMethod
160
+    public void showModal(final ReadableMap params) {
161
+    }
162
+
163
+    @ReactMethod
164
+    public void dismissAllModals(final ReadableMap params) {
165
+    }
166
+
167
+    @ReactMethod
168
+    public void dismissTopModal() {
169
+    }
170
+}

android/app/src/main/java/com/reactnativenavigation/packages/RnnPackage.java → android/app/src/main/java/com/reactnativenavigation/bridge/NavigationReactPackage.java Parādīt failu

@@ -1,22 +1,21 @@
1
-package com.reactnativenavigation.packages;
1
+package com.reactnativenavigation.bridge;
2 2
 
3 3
 import com.facebook.react.ReactPackage;
4 4
 import com.facebook.react.bridge.JavaScriptModule;
5 5
 import com.facebook.react.bridge.NativeModule;
6 6
 import com.facebook.react.bridge.ReactApplicationContext;
7 7
 import com.facebook.react.uimanager.ViewManager;
8
-import com.reactnativenavigation.modules.RctActivityModule;
9 8
 
10 9
 import java.util.Arrays;
11 10
 import java.util.Collections;
12 11
 import java.util.List;
13 12
 
14
-public class RnnPackage implements ReactPackage {
13
+public class NavigationReactPackage implements ReactPackage {
15 14
 
16 15
     @Override
17 16
     public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
18 17
         return Arrays.<NativeModule>asList(
19
-                new RctActivityModule(reactContext)
18
+                new NavigationReactModule(reactContext)
20 19
         );
21 20
     }
22 21
 

+ 1
- 1
android/app/src/main/java/com/reactnativenavigation/core/objects/Screen.java Parādīt failu

@@ -57,7 +57,7 @@ public class Screen extends JsonObject implements Serializable {
57 57
     public final boolean backButtonHidden;
58 58
     public HashMap<String, Object> passedProps = new HashMap<>();
59 59
 
60
-    // Navigation styling
60
+    // NavigationReactModule styling
61 61
     @Nullable @ColorInt public Integer toolBarColor;
62 62
     @Nullable public Boolean toolBarHidden;
63 63
     @Nullable @ColorInt public Integer statusBarColor;

+ 0
- 346
android/app/src/main/java/com/reactnativenavigation/modules/RctActivityModule.java Parādīt failu

@@ -1,346 +0,0 @@
1
-package com.reactnativenavigation.modules;
2
-
3
-import android.app.Activity;
4
-import android.content.Intent;
5
-import android.os.Bundle;
6
-
7
-import com.facebook.react.bridge.ReactApplicationContext;
8
-import com.facebook.react.bridge.ReactContextBaseJavaModule;
9
-import com.facebook.react.bridge.ReactMethod;
10
-import com.facebook.react.bridge.ReadableArray;
11
-import com.facebook.react.bridge.ReadableMap;
12
-import com.facebook.react.bridge.ReadableNativeMap;
13
-import com.reactnativenavigation.activities.BaseReactActivity;
14
-import com.reactnativenavigation.activities.BottomTabActivity;
15
-import com.reactnativenavigation.activities.RootActivity;
16
-import com.reactnativenavigation.activities.SingleScreenActivity;
17
-import com.reactnativenavigation.controllers.ModalController;
18
-import com.reactnativenavigation.core.objects.Drawer;
19
-import com.reactnativenavigation.core.objects.Screen;
20
-import com.reactnativenavigation.modal.RnnModal;
21
-import com.reactnativenavigation.utils.BridgeUtils;
22
-import com.reactnativenavigation.utils.ContextProvider;
23
-
24
-import java.util.ArrayList;
25
-
26
-public class RctActivityModule extends ReactContextBaseJavaModule {
27
-    public static final String REACT_CLASS = "RctActivity";
28
-    private static final String KEY_NAVIGATOR_ID = "navigatorID";
29
-
30
-    public RctActivityModule(ReactApplicationContext reactContext) {
31
-        super(reactContext);
32
-    }
33
-
34
-    @Override
35
-    public String getName() {
36
-        return REACT_CLASS;
37
-    }
38
-
39
-    @ReactMethod
40
-    public void startTabBasedApp(ReadableArray screens, ReadableMap style, ReadableMap drawerParams) {
41
-        Activity context = ContextProvider.getActivityContext();
42
-        if (context != null && !context.isFinishing()) {
43
-            Intent intent = new Intent(context, BottomTabActivity.class);
44
-            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
45
-
46
-            Bundle extras = new Bundle();
47
-            extras.putSerializable(BottomTabActivity.EXTRA_SCREENS, createScreens(screens));
48
-            if (drawerParams != null) {
49
-                extras.putSerializable(BottomTabActivity.DRAWER_PARAMS, new Drawer(drawerParams));
50
-            }
51
-            if (style != null) {
52
-                BridgeUtils.addMapToBundle(((ReadableNativeMap) style).toHashMap(), extras);
53
-            }
54
-            intent.putExtras(extras);
55
-
56
-            context.startActivity(intent);
57
-            //TODO add abstract isRoot() instead of instanceof?
58
-            if (ContextProvider.getActivityContext() instanceof RootActivity) {
59
-                context.overridePendingTransition(0, 0);
60
-            }
61
-
62
-            // Dismiss modals associated with previous activity
63
-            ModalController.getInstance().dismissAllModals();
64
-        }
65
-    }
66
-
67
-    private ArrayList<Screen> createScreens(ReadableArray screens) {
68
-        ArrayList<Screen> ret = new ArrayList<>();
69
-        for (int i = 0; i < screens.size(); i++) {
70
-            ret.add(new Screen(screens.getMap(i)));
71
-        }
72
-        return ret;
73
-    }
74
-
75
-    @ReactMethod
76
-    public void startSingleScreenApp(ReadableMap screen, ReadableMap drawerParams) {
77
-        BaseReactActivity context = ContextProvider.getActivityContext();
78
-        if (context != null && !context.isFinishing()) {
79
-            Intent intent = new Intent(context, SingleScreenActivity.class);
80
-            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
81
-
82
-            Bundle extras = new Bundle();
83
-            extras.putSerializable(SingleScreenActivity.EXTRA_SCREEN, new Screen(screen));
84
-            if (drawerParams != null) {
85
-                extras.putSerializable(SingleScreenActivity.DRAWER_PARAMS, new Drawer(drawerParams));
86
-            }
87
-            intent.putExtras(extras);
88
-
89
-            context.startActivity(intent);
90
-            if (ContextProvider.getActivityContext() instanceof RootActivity) {
91
-                context.overridePendingTransition(0, 0);
92
-            }
93
-
94
-            // Dismiss modals associated with previous activity
95
-            ModalController.getInstance().dismissAllModals();
96
-        }
97
-    }
98
-
99
-    @ReactMethod
100
-    public void setNavigatorButtons(final ReadableMap buttons) {
101
-        final BaseReactActivity context = ContextProvider.getActivityContext();
102
-        if (context == null || context.isFinishing()) {
103
-            return;
104
-        }
105
-        context.runOnUiThread(new Runnable() {
106
-            @Override
107
-            public void run() {
108
-                context.setNavigationButtons(buttons);
109
-            }
110
-        });
111
-    }
112
-
113
-    @ReactMethod
114
-    public void setNavigatorTitle(final ReadableMap title) {
115
-        final BaseReactActivity context = ContextProvider.getActivityContext();
116
-        if (context == null || context.isFinishing()) {
117
-            return;
118
-        }
119
-        context.runOnUiThread(new Runnable() {
120
-            @Override
121
-            public void run() {
122
-                context.setNavigationTitle(title);
123
-            }
124
-        });
125
-    }
126
-
127
-    @ReactMethod
128
-    public void setTabBadge(final ReadableMap params) {
129
-        final BaseReactActivity context = ContextProvider.getActivityContext();
130
-        if (context == null || context.isFinishing()) {
131
-            return;
132
-        }
133
-        context.runOnUiThread(new Runnable() {
134
-            @Override
135
-            public void run() {
136
-                ((BottomTabActivity) context).setTabBadge(params);
137
-            }
138
-        });
139
-    }
140
-
141
-    @ReactMethod
142
-    public void switchToTab(final ReadableMap params) {
143
-        final BaseReactActivity context = ContextProvider.getActivityContext();
144
-        if (context == null || context.isFinishing()) {
145
-            return;
146
-        }
147
-        context.runOnUiThread(new Runnable() {
148
-            @Override
149
-            public void run() {
150
-                ((BottomTabActivity) context).switchToTab(params);
151
-            }
152
-        });
153
-    }
154
-
155
-    @ReactMethod
156
-    public void toggleDrawer(final ReadableMap params) {
157
-        final BaseReactActivity context = ContextProvider.getActivityContext();
158
-        if (context == null || context.isFinishing()) {
159
-            return;
160
-        }
161
-        context.runOnUiThread(new Runnable() {
162
-            @Override
163
-            public void run() {
164
-                context.toggleDrawer(params);
165
-            }
166
-        });
167
-    }
168
-
169
-    @ReactMethod
170
-    public void toggleNavigationBar(final ReadableMap params) {
171
-        final BaseReactActivity context = ContextProvider.getActivityContext();
172
-        if (context == null || context.isFinishing()) {
173
-            return;
174
-        }
175
-        context.runOnUiThread(new Runnable() {
176
-            @Override
177
-            public void run() {
178
-                context.toggleNavigationBar(params);
179
-            }
180
-        });
181
-    }
182
-
183
-    @ReactMethod
184
-    public void toggleNavigatorTabs(final ReadableMap params) {
185
-        final BaseReactActivity context = ContextProvider.getActivityContext();
186
-        if (context == null || context.isFinishing()) {
187
-            return;
188
-        }
189
-        context.runOnUiThread(new Runnable() {
190
-            @Override
191
-            public void run() {
192
-                ((BottomTabActivity) context).toggleTabs(params);
193
-            }
194
-        });
195
-    }
196
-
197
-    @ReactMethod
198
-    public void navigatorPush(final ReadableMap skreen) {
199
-        final Screen screen = new Screen(skreen);
200
-        final BaseReactActivity context = ContextProvider.getActivityContext();
201
-        if (context == null || context.isFinishing()) {
202
-            return;
203
-        }
204
-
205
-        // First, check if the screen should be pushed to a Modal
206
-        ModalController modalController = ModalController.getInstance();
207
-        if (modalController.isModalDisplayed()) {
208
-            final RnnModal modal = modalController.get();
209
-            if (modal != null) {
210
-                context.runOnUiThread(new Runnable() {
211
-                    @Override
212
-                    public void run() {
213
-                        modal.push(screen);
214
-                    }
215
-                });
216
-            }
217
-            return;
218
-        }
219
-
220
-        // No Modal is displayed, Push to activity
221
-        context.runOnUiThread(new Runnable() {
222
-            @Override
223
-            public void run() {
224
-                context.push(screen);
225
-            }
226
-        });
227
-    }
228
-
229
-    @ReactMethod
230
-    public void navigatorPop(final ReadableMap navigator) {
231
-        final String navigatorId = navigator.getString(KEY_NAVIGATOR_ID);
232
-        final BaseReactActivity context = ContextProvider.getActivityContext();
233
-        if (context == null || context.isFinishing()) {
234
-            return;
235
-        }
236
-
237
-        // First, check if the screen should be popped from a Modal
238
-        ModalController modalController = ModalController.getInstance();
239
-        if (modalController.isModalDisplayed()) {
240
-            final RnnModal modal = modalController.get();
241
-            if (modal != null) {
242
-                context.runOnUiThread(new Runnable() {
243
-                    @Override
244
-                    public void run() {
245
-                        modal.pop();
246
-                    }
247
-                });
248
-            }
249
-            return;
250
-        } else {
251
-            context.runOnUiThread(new Runnable() {
252
-                @Override
253
-                public void run() {
254
-                    context.pop(navigatorId);
255
-                }
256
-            });
257
-        }
258
-    }
259
-
260
-    @ReactMethod
261
-    public void navigatorPopToRoot(final ReadableMap params) {
262
-        final BaseReactActivity context = ContextProvider.getActivityContext();
263
-        if (context == null || context.isFinishing()) {
264
-            return;
265
-        }
266
-
267
-        final String navigatorID = params.getString(KEY_NAVIGATOR_ID);
268
-        context.runOnUiThread(new Runnable() {
269
-            @Override
270
-            public void run() {
271
-                context.popToRoot(navigatorID);
272
-            }
273
-        });
274
-    }
275
-
276
-    @ReactMethod
277
-    public void navigatorResetTo(final ReadableMap skreen) {
278
-        final BaseReactActivity context = ContextProvider.getActivityContext();
279
-        if (context == null || context.isFinishing()) {
280
-            return;
281
-        }
282
-
283
-        final Screen screen = new Screen(skreen);
284
-        context.runOnUiThread(new Runnable() {
285
-            @Override
286
-            public void run() {
287
-                context.resetTo(screen);
288
-            }
289
-        });
290
-    }
291
-
292
-    @ReactMethod
293
-    public void showModal(final ReadableMap screen) {
294
-        final BaseReactActivity context = ContextProvider.getActivityContext();
295
-        if (context != null && !context.isFinishing()) {
296
-            context.runOnUiThread(new Runnable() {
297
-                @Override
298
-                public void run() {
299
-                    new RnnModal(context, new Screen(screen)).show();
300
-                }
301
-            });
302
-        }
303
-    }
304
-
305
-    @ReactMethod
306
-    public void dismissAllModals(final ReadableMap params) {
307
-        final BaseReactActivity context = ContextProvider.getActivityContext();
308
-        if (context != null && !context.isFinishing()) {
309
-            context.runOnUiThread(new Runnable() {
310
-                @Override
311
-                public void run() {
312
-                    ModalController modalController = ModalController.getInstance();
313
-                    if (modalController.isModalDisplayed()) {
314
-                        modalController.dismissAllModals();
315
-                    }
316
-                }
317
-            });
318
-        }
319
-    }
320
-
321
-    /**
322
-     * Dismisses the top modal (the last modal pushed).
323
-     */
324
-    @ReactMethod
325
-    public void dismissModal() {
326
-        ModalController modalController = ModalController.getInstance();
327
-        if (modalController.isModalDisplayed()) {
328
-            modalController.dismissModal();
329
-        }
330
-    }
331
-
332
-    @ReactMethod
333
-    public void showFAB(final ReadableMap params) {
334
-        final BaseReactActivity context = ContextProvider.getActivityContext();
335
-        if (context == null || context.isFinishing()) {
336
-            return;
337
-        }
338
-        context.runOnUiThread(new Runnable() {
339
-            @Override
340
-            public void run() {
341
-                context.showFAB(params);
342
-            }
343
-        });
344
-    }
345
-
346
-}