Procházet zdrojové kódy

Move initialIconState to parser

Guy Carmeli před 8 roky
rodič
revize
07d204ad74

+ 4
- 2
android/app/src/main/java/com/reactnativenavigation/bridge/NavigationReactModule.java Zobrazit soubor

@@ -44,8 +44,10 @@ public class NavigationReactModule extends ReactContextBaseJavaModule {
44 44
     }
45 45
 
46 46
     @ReactMethod
47
-    public void setScreenTitleBarButtons(String screenInstanceId, String navigatorEventId, ReadableArray buttons) {
48
-        List<TitleBarButtonParams> titleBarButtons = TitleBarButtonParamsParser.parseButtons(BundleConverter.toBundle(buttons));
47
+    public void setScreenTitleBarButtons(String screenInstanceId, String navigatorEventId, ReadableArray rightButtons, ReadableMap leftButton) {
48
+        List<TitleBarButtonParams> titleBarButtons = new TitleBarButtonParamsParser().
49
+                parseButtons(BundleConverter.toBundle(rightButtons));
50
+
49 51
         NavigationCommandsHandler.setScreenTitleBarButtons(screenInstanceId, navigatorEventId, titleBarButtons);
50 52
     }
51 53
 

+ 1
- 1
android/app/src/main/java/com/reactnativenavigation/params/ScreenParams.java Zobrazit soubor

@@ -8,7 +8,7 @@ public class ScreenParams {
8 8
     public String screenId;
9 9
     public Bundle passProps;
10 10
     public List<TitleBarButtonParams> rightButtons;
11
-    public TitleBarButtonParams leftButton;
11
+    public TitleBarLeftButtonParams leftButton;
12 12
     public String title;
13 13
     public ScreenStyleParams styleParams;
14 14
     public List<TopTabParams> topTabParams;

+ 14
- 0
android/app/src/main/java/com/reactnativenavigation/params/TitleBarLeftButtonParams.java Zobrazit soubor

@@ -0,0 +1,14 @@
1
+package com.reactnativenavigation.params;
2
+
3
+import com.balysv.materialmenu.MaterialMenuDrawable;
4
+
5
+public class TitleBarLeftButtonParams extends TitleBarButtonParams {
6
+    public MaterialMenuDrawable.IconState initialIconState;
7
+
8
+    public TitleBarLeftButtonParams(TitleBarButtonParams params) {
9
+        icon = params.icon;
10
+        color = params.color;
11
+        eventId = params.eventId;
12
+        enabled = params.enabled;
13
+    }
14
+}

+ 2
- 2
android/app/src/main/java/com/reactnativenavigation/params/parsers/ScreenParamsParser.java Zobrazit soubor

@@ -27,10 +27,10 @@ public class ScreenParamsParser extends Parser {
27 27
         result.navigatorEventId = result.navigationParams.getString(KEY_NAVIGATOR_EVENT_ID);
28 28
         result.screenInstanceId = result.navigationParams.getString(KEY_SCREEN_INSTANCE_ID);
29 29
         if (hasKey(params, KEY_RIGHT_BUTTONS)) {
30
-            result.rightButtons = TitleBarButtonParamsParser.parseButtons(params.getBundle(KEY_RIGHT_BUTTONS));
30
+            result.rightButtons = new TitleBarButtonParamsParser().parseButtons(params.getBundle(KEY_RIGHT_BUTTONS));
31 31
         }
32 32
         if (hasKey(params, KEY_LEFT_BUTTON)) {
33
-            result.leftButton = TitleBarButtonParamsParser.parseSingleButton(params.getBundle(KEY_LEFT_BUTTON));
33
+            result.leftButton = new TitleBarLeftButtonParamsParser().parseSingleButton(params.getBundle(KEY_LEFT_BUTTON));
34 34
         }
35 35
         result.title = params.getString(KEY_TITLE);
36 36
         result.styleParams = ScreenStyleParamsParser.parse(params.getBundle(STYLE_PARAMS));

+ 2
- 2
android/app/src/main/java/com/reactnativenavigation/params/parsers/TitleBarButtonParamsParser.java Zobrazit soubor

@@ -10,7 +10,7 @@ import java.util.ArrayList;
10 10
 import java.util.List;
11 11
 
12 12
 public class TitleBarButtonParamsParser extends Parser {
13
-    public static List<TitleBarButtonParams> parseButtons(Bundle params) {
13
+    public List<TitleBarButtonParams> parseButtons(Bundle params) {
14 14
         List<TitleBarButtonParams> result = new ArrayList<>();
15 15
 
16 16
         for (String key : params.keySet()) {
@@ -19,7 +19,7 @@ public class TitleBarButtonParamsParser extends Parser {
19 19
         return result;
20 20
     }
21 21
 
22
-    public static TitleBarButtonParams parseSingleButton(Bundle bundle) {
22
+    public TitleBarButtonParams parseSingleButton(Bundle bundle) {
23 23
         TitleBarButtonParams result = new TitleBarButtonParams();
24 24
         result.label = bundle.getString("title");
25 25
         if (hasKey(bundle,"icon")) {

+ 30
- 0
android/app/src/main/java/com/reactnativenavigation/params/parsers/TitleBarLeftButtonParamsParser.java Zobrazit soubor

@@ -0,0 +1,30 @@
1
+package com.reactnativenavigation.params.parsers;
2
+
3
+import android.os.Bundle;
4
+
5
+import com.balysv.materialmenu.MaterialMenuDrawable;
6
+import com.reactnativenavigation.params.TitleBarLeftButtonParams;
7
+
8
+public class TitleBarLeftButtonParamsParser extends TitleBarButtonParamsParser {
9
+
10
+    public TitleBarLeftButtonParams parseSingleButton(Bundle params) {
11
+        TitleBarLeftButtonParams backButtonParams = new TitleBarLeftButtonParams(super.parseSingleButton(params));
12
+        backButtonParams.initialIconState = getIconStateFromId(backButtonParams.eventId);
13
+        return backButtonParams;
14
+    }
15
+
16
+    private MaterialMenuDrawable.IconState getIconStateFromId(String id) {
17
+        switch (id) {
18
+            case "back":
19
+                return MaterialMenuDrawable.IconState.ARROW;
20
+            case "cancel":
21
+                return MaterialMenuDrawable.IconState.X;
22
+            case "accept":
23
+                return MaterialMenuDrawable.IconState.CHECK;
24
+            case "sideMenu":
25
+                return MaterialMenuDrawable.IconState.BURGER;
26
+            default:
27
+                throw new RuntimeException("Unsupported button type " + id);
28
+        }
29
+    }
30
+}

+ 4
- 19
android/app/src/main/java/com/reactnativenavigation/views/LeftButton.java Zobrazit soubor

@@ -6,6 +6,7 @@ import android.view.View;
6 6
 
7 7
 import com.balysv.materialmenu.MaterialMenuDrawable;
8 8
 import com.reactnativenavigation.params.TitleBarButtonParams;
9
+import com.reactnativenavigation.params.TitleBarLeftButtonParams;
9 10
 
10 11
 // TODO: replace with vector menu drawable
11 12
 public class LeftButton extends MaterialMenuDrawable implements View.OnClickListener {
@@ -16,12 +17,12 @@ public class LeftButton extends MaterialMenuDrawable implements View.OnClickList
16 17
                 Color.BLACK;
17 18
     }
18 19
 
19
-    private TitleBarButtonParams params;
20
+    private TitleBarLeftButtonParams params;
20 21
     private final TitleBarBackButtonListener titleBarBackButtonListener;
21 22
     private final String navigatorEventId;
22 23
 
23 24
     public LeftButton(Context context,
24
-                      TitleBarButtonParams params,
25
+                      TitleBarLeftButtonParams params,
25 26
                       TitleBarBackButtonListener titleBarBackButtonListener,
26 27
                       String navigatorEventId) {
27 28
         super(context, getColor(params), Stroke.THIN);
@@ -33,7 +34,7 @@ public class LeftButton extends MaterialMenuDrawable implements View.OnClickList
33 34
 
34 35
     private void setInitialState() {
35 36
         if (params != null) {
36
-            setIconState(getIconStateFromId(params.eventId));
37
+            setIconState(params.initialIconState);
37 38
         } else {
38 39
             setVisible(false);
39 40
         }
@@ -46,22 +47,6 @@ public class LeftButton extends MaterialMenuDrawable implements View.OnClickList
46 47
         }
47 48
     }
48 49
 
49
-    // TODO: move to parser
50
-    public IconState getIconStateFromId(String id) {
51
-        switch (id) {
52
-            case "back":
53
-                return IconState.ARROW;
54
-            case "cancel":
55
-                return IconState.X;
56
-            case "accept":
57
-                return IconState.CHECK;
58
-            case "sideMenu":
59
-                return IconState.BURGER;
60
-            default:
61
-                throw new RuntimeException("Unsupported button type " + id);
62
-        }
63
-    }
64
-
65 50
     private boolean isBackButton() {
66 51
         return getIconState() == IconState.ARROW;
67 52
     }

+ 2
- 1
android/app/src/main/java/com/reactnativenavigation/views/TitleBar.java Zobrazit soubor

@@ -6,6 +6,7 @@ import android.view.Menu;
6 6
 
7 7
 import com.reactnativenavigation.animation.VisibilityAnimator;
8 8
 import com.reactnativenavigation.params.TitleBarButtonParams;
9
+import com.reactnativenavigation.params.TitleBarLeftButtonParams;
9 10
 
10 11
 import java.util.List;
11 12
 
@@ -41,7 +42,7 @@ public class TitleBar extends Toolbar {
41 42
         button.addToMenu(index);
42 43
     }
43 44
 
44
-    public void setLeftButton(TitleBarButtonParams leftButtonParams,
45
+    public void setLeftButton(TitleBarLeftButtonParams leftButtonParams,
45 46
                                TitleBarBackButtonListener titleBarBackButtonListener, String navigatorEventId) {
46 47
         LeftButton leftButton = new LeftButton(getContext(), leftButtonParams, titleBarBackButtonListener, navigatorEventId);
47 48
         setNavigationOnClickListener(leftButton);

+ 2
- 1
android/app/src/main/java/com/reactnativenavigation/views/TopBar.java Zobrazit soubor

@@ -6,6 +6,7 @@ import android.support.design.widget.TabLayout;
6 6
 
7 7
 import com.reactnativenavigation.params.ScreenStyleParams;
8 8
 import com.reactnativenavigation.params.TitleBarButtonParams;
9
+import com.reactnativenavigation.params.TitleBarLeftButtonParams;
9 10
 import com.reactnativenavigation.utils.ViewUtils;
10 11
 
11 12
 import java.util.List;
@@ -21,7 +22,7 @@ public class TopBar extends AppBarLayout {
21 22
         setId(ViewUtils.generateViewId());
22 23
     }
23 24
 
24
-    public void addTitleBarAndSetButtons(List<TitleBarButtonParams> rightButtons, TitleBarButtonParams leftButton,
25
+    public void addTitleBarAndSetButtons(List<TitleBarButtonParams> rightButtons, TitleBarLeftButtonParams leftButton,
25 26
                                          TitleBarBackButtonListener titleBarBackButtonListener,
26 27
                                          String navigatorEventId) {
27 28
         titleBar = new TitleBar(getContext());

+ 11
- 2
src/deprecated/platformSpecificDeprecated.android.js Zobrazit soubor

@@ -136,7 +136,6 @@ function addTabIcon(tab) {
136 136
   }
137 137
 }
138 138
 
139
-// TODO: add left buttons here
140 139
 function navigatorSetButtons(navigator, navigatorEventID, params) {
141 140
   if (params.rightButtons) {
142 141
     params.rightButtons.forEach(function(button) {
@@ -148,7 +147,17 @@ function navigatorSetButtons(navigator, navigatorEventID, params) {
148 147
       }
149 148
     });
150 149
   }
151
-  newPlatformSpecific.setScreenTitleBarButtons(navigator.screenInstanceID, navigatorEventID, params.rightButtons);
150
+  if (params.leftButton) {
151
+    params.leftButton.forEach(function(button) {
152
+      if (button.icon) {
153
+        const icon = resolveAssetSource(button.icon);
154
+        if (icon) {
155
+          button.icon = icon.uri;
156
+        }
157
+      }
158
+    });
159
+  }
160
+  newPlatformSpecific.setScreenTitleBarButtons(navigator.screenInstanceID, navigatorEventID, params.rightButtons, params.leftButton);
152 161
 }
153 162
 
154 163
 function navigatorSetTabBadge(navigator, params) {

+ 2
- 2
src/platformSpecific.android.js Zobrazit soubor

@@ -42,8 +42,8 @@ function setScreenTitleBarTitle(screenInstanceID, title) {
42 42
   NativeReactModule.setScreenTitleBarTitle(screenInstanceID, title);
43 43
 }
44 44
 
45
-function setScreenTitleBarButtons(screenInstanceID, navigatorEventID, buttons) {
46
-  NativeReactModule.setScreenTitleBarButtons(screenInstanceID, navigatorEventID, buttons);
45
+function setScreenTitleBarButtons(screenInstanceID, navigatorEventID, rightButtons, leftButton) {
46
+  NativeReactModule.setScreenTitleBarButtons(screenInstanceID, navigatorEventID, rightButtons, leftButton);
47 47
 }
48 48
 
49 49
 function showModal(screenParams) {