Преглед изворни кода

Fix tabs and right buttons getting parsed in wrong order

Guy Carmeli пре 8 година
родитељ
комит
39e8334fd9

+ 1
- 1
android/app/src/main/java/com/reactnativenavigation/params/parsers/ActivityParamsParser.java Прегледај датотеку

@@ -18,7 +18,7 @@ public class ActivityParamsParser extends Parser {
18 18
 
19 19
         if (hasKey(params, "tabs")) {
20 20
             result.type = ActivityParams.Type.TabBased;
21
-            result.tabParams = ScreenParamsParser.parseTabs(params.getBundle("tabs"));
21
+            result.tabParams = new ScreenParamsParser().parseTabs(params.getBundle("tabs"));
22 22
         }
23 23
 
24 24
         if (hasKey(params, "sideMenu")) {

+ 16
- 1
android/app/src/main/java/com/reactnativenavigation/params/parsers/Parser.java Прегледај датотеку

@@ -2,8 +2,11 @@ package com.reactnativenavigation.params.parsers;
2 2
 
3 3
 import android.os.Bundle;
4 4
 
5
-public class Parser {
5
+import java.util.ArrayList;
6
+import java.util.Collections;
7
+import java.util.List;
6 8
 
9
+public class Parser {
7 10
     protected static boolean hasKey(Bundle bundle, String key) {
8 11
         return bundle.keySet().contains(key);
9 12
     }
@@ -20,4 +23,16 @@ public class Parser {
20 23
             super(key);
21 24
         }
22 25
     }
26
+
27
+    protected interface ParseStrategy<T> {
28
+        T parse(Bundle params);
29
+    }
30
+
31
+    protected <T> List<T> parseBundle(Bundle params, ParseStrategy<T> strategy) {
32
+        ArrayList<T> result = new ArrayList<>(Collections.nCopies(params.keySet().size(), (T) null));
33
+        for (String key : params.keySet()) {
34
+            result.set(Integer.parseInt(key), strategy.parse(params.getBundle(key)));
35
+        }
36
+        return result;
37
+    }
23 38
 }

+ 8
- 9
android/app/src/main/java/com/reactnativenavigation/params/parsers/ScreenParamsParser.java Прегледај датотеку

@@ -10,8 +10,6 @@ import com.reactnativenavigation.params.TitleBarLeftButtonParams;
10 10
 import com.reactnativenavigation.params.TopTabParams;
11 11
 import com.reactnativenavigation.react.ImageLoader;
12 12
 
13
-import java.util.ArrayList;
14
-import java.util.Arrays;
15 13
 import java.util.List;
16 14
 
17 15
 public class ScreenParamsParser extends Parser {
@@ -75,7 +73,7 @@ public class ScreenParamsParser extends Parser {
75 73
     private static List<TopTabParams> parseTopTabs(Bundle params) {
76 74
         List<TopTabParams> topTabParams = null;
77 75
         if (hasKey(params, TOP_TABS)) {
78
-             topTabParams = TopTabParamsParser.parse(params.getBundle(TOP_TABS));
76
+            topTabParams = new TopTabParamsParser().parse(params.getBundle(TOP_TABS));
79 77
         }
80 78
         return topTabParams;
81 79
     }
@@ -101,11 +99,12 @@ public class ScreenParamsParser extends Parser {
101 99
         return leftButton;
102 100
     }
103 101
 
104
-    public static List<ScreenParams> parseTabs(Bundle params) {
105
-        ScreenParams result[] = new ScreenParams[params.keySet().size()];
106
-        for (String key : params.keySet()) {
107
-            result[Integer.parseInt(key)] = ScreenParamsParser.parse(params.getBundle(key));
108
-        }
109
-        return new ArrayList<>(Arrays.asList(result));
102
+    public List<ScreenParams> parseTabs(Bundle params) {
103
+        return parseBundle(params, new ParseStrategy<ScreenParams>() {
104
+            @Override
105
+            public ScreenParams parse(Bundle screen) {
106
+                return ScreenParamsParser.parse(screen);
107
+            }
108
+        });
110 109
     }
111 110
 }

+ 6
- 7
android/app/src/main/java/com/reactnativenavigation/params/parsers/TitleBarButtonParamsParser.java Прегледај датотеку

@@ -7,17 +7,16 @@ import com.reactnativenavigation.params.StyleParams;
7 7
 import com.reactnativenavigation.params.TitleBarButtonParams;
8 8
 import com.reactnativenavigation.react.ImageLoader;
9 9
 
10
-import java.util.ArrayList;
11 10
 import java.util.List;
12 11
 
13 12
 public class TitleBarButtonParamsParser extends Parser {
14 13
     public List<TitleBarButtonParams> parseButtons(Bundle params) {
15
-        List<TitleBarButtonParams> result = new ArrayList<>();
16
-
17
-        for (String key : params.keySet()) {
18
-            result.add(parseSingleButton(params.getBundle(key)));
19
-        }
20
-        return result;
14
+        return parseBundle(params, new ParseStrategy<TitleBarButtonParams>() {
15
+            @Override
16
+            public TitleBarButtonParams parse(Bundle button) {
17
+                return parseSingleButton(button);
18
+            }
19
+        });
21 20
     }
22 21
 
23 22
     public TitleBarButtonParams parseSingleButton(Bundle bundle) {

+ 7
- 7
android/app/src/main/java/com/reactnativenavigation/params/parsers/TopTabParamsParser.java Прегледај датотеку

@@ -6,7 +6,6 @@ import android.support.annotation.NonNull;
6 6
 import com.reactnativenavigation.params.NavigationParams;
7 7
 import com.reactnativenavigation.params.TopTabParams;
8 8
 
9
-import java.util.ArrayList;
10 9
 import java.util.List;
11 10
 
12 11
 public class TopTabParamsParser extends Parser {
@@ -15,12 +14,13 @@ public class TopTabParamsParser extends Parser {
15 14
     private static final String NAVIGATION_PARAMS = "navigationParams";
16 15
 
17 16
     @SuppressWarnings("ConstantConditions")
18
-    public static List<TopTabParams> parse(Bundle params) {
19
-        List<TopTabParams> result = new ArrayList<>();
20
-        for (String key : params.keySet()) {
21
-            result.add(parseItem(params.getBundle(key)));
22
-        }
23
-        return result;
17
+    public List<TopTabParams> parse(Bundle params) {
18
+        return parseBundle(params, new ParseStrategy<TopTabParams>() {
19
+            @Override
20
+            public TopTabParams parse(Bundle topTabs) {
21
+                return parseItem(topTabs);
22
+            }
23
+        });
24 24
     }
25 25
 
26 26
     @NonNull