Browse Source

Move initialIconState to parser

Guy Carmeli 8 years ago
parent
commit
07d204ad74

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

44
     }
44
     }
45
 
45
 
46
     @ReactMethod
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
         NavigationCommandsHandler.setScreenTitleBarButtons(screenInstanceId, navigatorEventId, titleBarButtons);
51
         NavigationCommandsHandler.setScreenTitleBarButtons(screenInstanceId, navigatorEventId, titleBarButtons);
50
     }
52
     }
51
 
53
 

+ 1
- 1
android/app/src/main/java/com/reactnativenavigation/params/ScreenParams.java View File

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

+ 14
- 0
android/app/src/main/java/com/reactnativenavigation/params/TitleBarLeftButtonParams.java View File

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 View File

27
         result.navigatorEventId = result.navigationParams.getString(KEY_NAVIGATOR_EVENT_ID);
27
         result.navigatorEventId = result.navigationParams.getString(KEY_NAVIGATOR_EVENT_ID);
28
         result.screenInstanceId = result.navigationParams.getString(KEY_SCREEN_INSTANCE_ID);
28
         result.screenInstanceId = result.navigationParams.getString(KEY_SCREEN_INSTANCE_ID);
29
         if (hasKey(params, KEY_RIGHT_BUTTONS)) {
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
         if (hasKey(params, KEY_LEFT_BUTTON)) {
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
         result.title = params.getString(KEY_TITLE);
35
         result.title = params.getString(KEY_TITLE);
36
         result.styleParams = ScreenStyleParamsParser.parse(params.getBundle(STYLE_PARAMS));
36
         result.styleParams = ScreenStyleParamsParser.parse(params.getBundle(STYLE_PARAMS));

+ 2
- 2
android/app/src/main/java/com/reactnativenavigation/params/parsers/TitleBarButtonParamsParser.java View File

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

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

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 View File

6
 
6
 
7
 import com.balysv.materialmenu.MaterialMenuDrawable;
7
 import com.balysv.materialmenu.MaterialMenuDrawable;
8
 import com.reactnativenavigation.params.TitleBarButtonParams;
8
 import com.reactnativenavigation.params.TitleBarButtonParams;
9
+import com.reactnativenavigation.params.TitleBarLeftButtonParams;
9
 
10
 
10
 // TODO: replace with vector menu drawable
11
 // TODO: replace with vector menu drawable
11
 public class LeftButton extends MaterialMenuDrawable implements View.OnClickListener {
12
 public class LeftButton extends MaterialMenuDrawable implements View.OnClickListener {
16
                 Color.BLACK;
17
                 Color.BLACK;
17
     }
18
     }
18
 
19
 
19
-    private TitleBarButtonParams params;
20
+    private TitleBarLeftButtonParams params;
20
     private final TitleBarBackButtonListener titleBarBackButtonListener;
21
     private final TitleBarBackButtonListener titleBarBackButtonListener;
21
     private final String navigatorEventId;
22
     private final String navigatorEventId;
22
 
23
 
23
     public LeftButton(Context context,
24
     public LeftButton(Context context,
24
-                      TitleBarButtonParams params,
25
+                      TitleBarLeftButtonParams params,
25
                       TitleBarBackButtonListener titleBarBackButtonListener,
26
                       TitleBarBackButtonListener titleBarBackButtonListener,
26
                       String navigatorEventId) {
27
                       String navigatorEventId) {
27
         super(context, getColor(params), Stroke.THIN);
28
         super(context, getColor(params), Stroke.THIN);
33
 
34
 
34
     private void setInitialState() {
35
     private void setInitialState() {
35
         if (params != null) {
36
         if (params != null) {
36
-            setIconState(getIconStateFromId(params.eventId));
37
+            setIconState(params.initialIconState);
37
         } else {
38
         } else {
38
             setVisible(false);
39
             setVisible(false);
39
         }
40
         }
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
     private boolean isBackButton() {
50
     private boolean isBackButton() {
66
         return getIconState() == IconState.ARROW;
51
         return getIconState() == IconState.ARROW;
67
     }
52
     }

+ 2
- 1
android/app/src/main/java/com/reactnativenavigation/views/TitleBar.java View File

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

+ 2
- 1
android/app/src/main/java/com/reactnativenavigation/views/TopBar.java View File

6
 
6
 
7
 import com.reactnativenavigation.params.ScreenStyleParams;
7
 import com.reactnativenavigation.params.ScreenStyleParams;
8
 import com.reactnativenavigation.params.TitleBarButtonParams;
8
 import com.reactnativenavigation.params.TitleBarButtonParams;
9
+import com.reactnativenavigation.params.TitleBarLeftButtonParams;
9
 import com.reactnativenavigation.utils.ViewUtils;
10
 import com.reactnativenavigation.utils.ViewUtils;
10
 
11
 
11
 import java.util.List;
12
 import java.util.List;
21
         setId(ViewUtils.generateViewId());
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
                                          TitleBarBackButtonListener titleBarBackButtonListener,
26
                                          TitleBarBackButtonListener titleBarBackButtonListener,
26
                                          String navigatorEventId) {
27
                                          String navigatorEventId) {
27
         titleBar = new TitleBar(getContext());
28
         titleBar = new TitleBar(getContext());

+ 11
- 2
src/deprecated/platformSpecificDeprecated.android.js View File

136
   }
136
   }
137
 }
137
 }
138
 
138
 
139
-// TODO: add left buttons here
140
 function navigatorSetButtons(navigator, navigatorEventID, params) {
139
 function navigatorSetButtons(navigator, navigatorEventID, params) {
141
   if (params.rightButtons) {
140
   if (params.rightButtons) {
142
     params.rightButtons.forEach(function(button) {
141
     params.rightButtons.forEach(function(button) {
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
 function navigatorSetTabBadge(navigator, params) {
163
 function navigatorSetTabBadge(navigator, params) {

+ 2
- 2
src/platformSpecific.android.js View File

42
   NativeReactModule.setScreenTitleBarTitle(screenInstanceID, title);
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
 function showModal(screenParams) {
49
 function showModal(screenParams) {