ソースを参照

params passed to activity and passed from there"

Daniel Zlotin 8 年 前
コミット
e1165c51e1

+ 3
- 2
android/app/src/main/java/com/reactnativenavigation/bridge/NavigationReactModule.java ファイルの表示

8
 import com.facebook.react.bridge.ReactMethod;
8
 import com.facebook.react.bridge.ReactMethod;
9
 import com.facebook.react.bridge.ReadableMap;
9
 import com.facebook.react.bridge.ReadableMap;
10
 import com.reactnativenavigation.NavigationApplication;
10
 import com.reactnativenavigation.NavigationApplication;
11
+import com.reactnativenavigation.bridge.parsers.BundleConverter;
11
 import com.reactnativenavigation.controllers.NavigationActivity;
12
 import com.reactnativenavigation.controllers.NavigationActivity;
12
 
13
 
13
 /**
14
 /**
38
         Intent intent = new Intent(context, NavigationActivity.class);
39
         Intent intent = new Intent(context, NavigationActivity.class);
39
         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
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
         context.startActivity(intent);
45
         context.startActivity(intent);
45
     }
46
     }
46
 
47
 

+ 7
- 5
android/app/src/main/java/com/reactnativenavigation/bridge/parsers/ActivityParamsParser.java ファイルの表示

1
 package com.reactnativenavigation.bridge.parsers;
1
 package com.reactnativenavigation.bridge.parsers;
2
 
2
 
3
-import com.facebook.react.bridge.ReadableMap;
3
+import android.os.Bundle;
4
+
4
 import com.reactnativenavigation.controllers.ActivityParams;
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 ファイルの表示

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 ファイルの表示

1
 package com.reactnativenavigation.bridge.parsers;
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
 import com.reactnativenavigation.controllers.ScreenParams;
5
 import com.reactnativenavigation.controllers.ScreenParams;
6
 
6
 
7
-public class ScreenParamsParser implements ParamsParser<ScreenParams> {
7
+public class ScreenParamsParser {
8
     private static final String KEY_TITLE = "title";
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
     private static final String KEY_SCREEN_INSTANCE_ID = "screenInstanceID";
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
     private static final String KEY_ICON = "tabIcon";
13
     private static final String KEY_ICON = "tabIcon";
15
     private static final String KEY_NAVIGATOR_BUTTONS = "navigatorButtons";
14
     private static final String KEY_NAVIGATOR_BUTTONS = "navigatorButtons";
16
     private static final String KEY_RIGHT_BUTTONS = "rightButtons";
15
     private static final String KEY_RIGHT_BUTTONS = "rightButtons";
27
     private static final String KEY_TAB_INDICATOR_COLOR = "tabIndicatorColor";
26
     private static final String KEY_TAB_INDICATOR_COLOR = "tabIndicatorColor";
28
     private static final String KEY_BOTTOM_TABS_HIDDEN = "tabBarHidden";
27
     private static final String KEY_BOTTOM_TABS_HIDDEN = "tabBarHidden";
29
     private static final String KEY_BOTTOM_TABS_HIDDEN_ON_SCROLL = "bottomTabsHiddenOnScroll";
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
         ScreenParams result = new ScreenParams();
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
         result.screenInstanceId = params.getString(KEY_SCREEN_INSTANCE_ID);
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
         return result;
38
         return result;
48
     }
39
     }
49
 
40
 

+ 2
- 7
android/app/src/main/java/com/reactnativenavigation/controllers/ActivityParams.java ファイルの表示

1
 package com.reactnativenavigation.controllers;
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 ファイルの表示

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

+ 2
- 3
android/app/src/main/java/com/reactnativenavigation/controllers/ScreenParams.java ファイルの表示

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