Browse Source

params passed to activity and passed from there"

Daniel Zlotin 8 years ago
parent
commit
e1165c51e1

+ 3
- 2
android/app/src/main/java/com/reactnativenavigation/bridge/NavigationReactModule.java View File

@@ -8,6 +8,7 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule;
8 8
 import com.facebook.react.bridge.ReactMethod;
9 9
 import com.facebook.react.bridge.ReadableMap;
10 10
 import com.reactnativenavigation.NavigationApplication;
11
+import com.reactnativenavigation.bridge.parsers.BundleConverter;
11 12
 import com.reactnativenavigation.controllers.NavigationActivity;
12 13
 
13 14
 /**
@@ -38,9 +39,9 @@ public class NavigationReactModule extends ReactContextBaseJavaModule {
38 39
         Intent intent = new Intent(context, NavigationActivity.class);
39 40
         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
40 41
 
41
-        Bundle extras = new Bundle();
42
+        Bundle paramsBundle = BundleConverter.toBundle(params);
42 43
 
43
-        intent.putExtras(extras);
44
+        intent.putExtra(NavigationActivity.PARAMS_BUNDLE, paramsBundle);
44 45
         context.startActivity(intent);
45 46
     }
46 47
 

+ 7
- 5
android/app/src/main/java/com/reactnativenavigation/bridge/parsers/ActivityParamsParser.java View File

@@ -1,11 +1,13 @@
1 1
 package com.reactnativenavigation.bridge.parsers;
2 2
 
3
-import com.facebook.react.bridge.ReadableMap;
3
+import android.os.Bundle;
4
+
4 5
 import com.reactnativenavigation.controllers.ActivityParams;
5 6
 
6
-public class ActivityParamsParser implements ParamsParser<ActivityParams> {
7
-    @Override
8
-    public ActivityParams parse(ReadableMap params) {
9
-        return null;
7
+public class ActivityParamsParser {
8
+    public ActivityParams parse(Bundle params) {
9
+        ActivityParams result = new ActivityParams();
10
+        result.screenParams = new ScreenParamsParser().parse(params);
11
+        return result;
10 12
     }
11 13
 }

+ 0
- 7
android/app/src/main/java/com/reactnativenavigation/bridge/parsers/ParamsParser.java View File

@@ -1,7 +0,0 @@
1
-package com.reactnativenavigation.bridge.parsers;
2
-
3
-import com.facebook.react.bridge.ReadableMap;
4
-
5
-public interface ParamsParser<T> {
6
-    T parse(ReadableMap params);
7
-}

+ 12
- 21
android/app/src/main/java/com/reactnativenavigation/bridge/parsers/ScreenParamsParser.java View File

@@ -1,16 +1,15 @@
1 1
 package com.reactnativenavigation.bridge.parsers;
2 2
 
3
-import com.facebook.react.bridge.ReadableMap;
4
-import com.facebook.react.bridge.ReadableNativeMap;
3
+import android.os.Bundle;
4
+
5 5
 import com.reactnativenavigation.controllers.ScreenParams;
6 6
 
7
-public class ScreenParamsParser implements ParamsParser<ScreenParams> {
7
+public class ScreenParamsParser {
8 8
     private static final String KEY_TITLE = "title";
9
-    private static final String KEY_SCREEN = "screen";
10
-    private static final String KEY_LABEL = "tabLabel";
9
+    private static final String KEY_SCREEN_ID = "screenId";
11 10
     private static final String KEY_SCREEN_INSTANCE_ID = "screenInstanceID";
12
-    private static final String KEY_NAVIGATOR_ID = "navigatorID";
13
-    private static final String KEY_NAVIGATOR_EVENT_ID = "navigatorEventID";
11
+    private static final String KEY_PROPS = "passProps";
12
+    private static final String KEY_LABEL = "tabLabel";
14 13
     private static final String KEY_ICON = "tabIcon";
15 14
     private static final String KEY_NAVIGATOR_BUTTONS = "navigatorButtons";
16 15
     private static final String KEY_RIGHT_BUTTONS = "rightButtons";
@@ -27,23 +26,15 @@ public class ScreenParamsParser implements ParamsParser<ScreenParams> {
27 26
     private static final String KEY_TAB_INDICATOR_COLOR = "tabIndicatorColor";
28 27
     private static final String KEY_BOTTOM_TABS_HIDDEN = "tabBarHidden";
29 28
     private static final String KEY_BOTTOM_TABS_HIDDEN_ON_SCROLL = "bottomTabsHiddenOnScroll";
30
-    private static final String KEY_PROPS = "passProps";
31 29
 
32
-    @Override
33
-    public ScreenParams parse(ReadableMap params) {
30
+    public ScreenParams parse(Bundle params) {
34 31
         ScreenParams result = new ScreenParams();
35
-        result.title = params.getString(KEY_TITLE);
36
-        result.tabLabel = params.getString(KEY_LABEL);
37
-        result.screenId = params.getString(KEY_SCREEN);
32
+        result.screenId = params.getString(KEY_SCREEN_ID);
38 33
         result.screenInstanceId = params.getString(KEY_SCREEN_INSTANCE_ID);
39
-        result.navigatorId = params.getString(KEY_NAVIGATOR_ID);
40
-        result.navigatorEventId = params.getString(KEY_NAVIGATOR_EVENT_ID);
41
-        result.tabIcon = getString(KEY_ICON);
42
-        if (screen.hasKey(KEY_PROPS)) {
43
-            passedProps = ((ReadableNativeMap) screen.getMap(KEY_PROPS)).toHashMap();
44
-        }
45
-        result.buttons = getButtons(screen);
46
-        result.backButtonHidden = getBoolean(screen, KEY_BACK_BUTTON_HIDDEN);
34
+        result.passProps = params.getBundle(KEY_PROPS);
35
+        result.buttons = null;
36
+        result.title = params.getString(KEY_TITLE);
37
+        result.styleParams = null;
47 38
         return result;
48 39
     }
49 40
 

+ 2
- 7
android/app/src/main/java/com/reactnativenavigation/controllers/ActivityParams.java View File

@@ -1,10 +1,5 @@
1 1
 package com.reactnativenavigation.controllers;
2 2
 
3
-import java.io.Serializable;
4
-
5
-public class ActivityParams implements Serializable {
6
-
7
-    String screenName;
8
-
9
-
3
+public class ActivityParams {
4
+    public ScreenParams screenParams;
10 5
 }

+ 5
- 0
android/app/src/main/java/com/reactnativenavigation/controllers/NavigationActivity.java View File

@@ -10,6 +10,7 @@ import com.facebook.react.ReactPackage;
10 10
 import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
11 11
 import com.facebook.react.shell.MainReactPackage;
12 12
 import com.reactnativenavigation.bridge.NavigationReactPackage;
13
+import com.reactnativenavigation.bridge.parsers.ActivityParamsParser;
13 14
 import com.reactnativenavigation.layouts.Layout;
14 15
 import com.reactnativenavigation.layouts.ScreenLayout;
15 16
 import com.reactnativenavigation.react.JsDevReloadHandler;
@@ -22,6 +23,7 @@ import java.util.List;
22 23
 
23 24
 public class NavigationActivity extends AppCompatActivity implements NavigationReactInstance.ReactContextCreator, DefaultHardwareBackBtnHandler {
24 25
 
26
+    public static final String PARAMS_BUNDLE = "PARAMS_BUNDLE";
25 27
     /**
26 28
      * Although we start multiple activities, we make sure to pass Intent.CLEAR_TASK | Intent.NEW_TASK
27 29
      * So that we actually have only 1 instance of the activity running at one time.
@@ -51,6 +53,9 @@ public class NavigationActivity extends AppCompatActivity implements NavigationR
51 53
     @Override
52 54
     protected void onCreate(Bundle savedInstanceState) {
53 55
         super.onCreate(savedInstanceState);
56
+
57
+        ActivityParams params = new ActivityParamsParser().parse(getIntent().getBundleExtra(PARAMS_BUNDLE));
58
+
54 59
         modalController = new ModalController();
55 60
         navigationReactInstance = new NavigationReactInstance(this);
56 61
         navigationReactInstance.startReactContextOnceInBackgroundAndExecuteJS();

+ 2
- 3
android/app/src/main/java/com/reactnativenavigation/controllers/ScreenParams.java View File

@@ -1,6 +1,5 @@
1 1
 package com.reactnativenavigation.controllers;
2 2
 
3
-import android.graphics.drawable.Drawable;
4 3
 import android.os.Bundle;
5 4
 
6 5
 import com.reactnativenavigation.views.TitleBarButton;
@@ -13,7 +12,7 @@ public class ScreenParams {
13 12
     public Bundle passProps;
14 13
     public ArrayList<TitleBarButton.Params> buttons;
15 14
     public String title;
16
-    public String tabLabel;
17
-    public Drawable tabIcon;
18 15
     public ScreenStyleParams styleParams;
16
+    //    public String tabLabel; TODO when tabs are supported move to TabParams
17
+    //    public Drawable tabIcon;
19 18
 }