Просмотр исходного кода

Create AppStyle and set button color from screen

Guy Carmeli 8 лет назад
Родитель
Сommit
04302d349b

+ 13
- 0
android/app/src/main/java/com/reactnativenavigation/params/AppStyle.java Просмотреть файл

1
+package com.reactnativenavigation.params;
2
+
3
+import android.os.Bundle;
4
+
5
+import com.reactnativenavigation.params.parsers.StyleParamsParser;
6
+
7
+public class AppStyle {
8
+    public static StyleParams appStyle;
9
+
10
+    public static void setAppStyle(Bundle params) {
11
+        appStyle = new StyleParamsParser(params.getBundle("appStyle")).parse();
12
+    }
13
+}

+ 6
- 0
android/app/src/main/java/com/reactnativenavigation/params/TitleBarButtonParams.java Просмотреть файл

23
     public StyleParams.Color color;
23
     public StyleParams.Color color;
24
     public ShowAsAction showAsAction;
24
     public ShowAsAction showAsAction;
25
     public boolean enabled = true;
25
     public boolean enabled = true;
26
+
27
+    public void setColorFromScreenStyle(StyleParams.Color titleBarButtonColor) {
28
+        if (!color.hasColor() && titleBarButtonColor.hasColor()) {
29
+            color = titleBarButtonColor;
30
+        }
31
+    }
26
 }
32
 }

+ 2
- 1
android/app/src/main/java/com/reactnativenavigation/params/parsers/ActivityParamsParser.java Просмотреть файл

3
 import android.os.Bundle;
3
 import android.os.Bundle;
4
 
4
 
5
 import com.reactnativenavigation.params.ActivityParams;
5
 import com.reactnativenavigation.params.ActivityParams;
6
+import com.reactnativenavigation.params.AppStyle;
6
 
7
 
7
 public class ActivityParamsParser extends Parser {
8
 public class ActivityParamsParser extends Parser {
8
     public static ActivityParams parse(Bundle params) {
9
     public static ActivityParams parse(Bundle params) {
9
         ActivityParams result = new ActivityParams();
10
         ActivityParams result = new ActivityParams();
10
 
11
 
11
-        StyleParamsParser.setAppStyle(params);
12
+        AppStyle.setAppStyle(params);
12
 
13
 
13
         if (hasKey(params, "screen")) {
14
         if (hasKey(params, "screen")) {
14
             result.type = ActivityParams.Type.SingleScreen;
15
             result.type = ActivityParams.Type.SingleScreen;

+ 15
- 19
android/app/src/main/java/com/reactnativenavigation/params/parsers/StyleParamsParser.java Просмотреть файл

4
 import android.support.annotation.NonNull;
4
 import android.support.annotation.NonNull;
5
 import android.support.annotation.Nullable;
5
 import android.support.annotation.Nullable;
6
 
6
 
7
+import com.reactnativenavigation.params.AppStyle;
7
 import com.reactnativenavigation.params.StyleParams;
8
 import com.reactnativenavigation.params.StyleParams;
8
 
9
 
9
 public class StyleParamsParser {
10
 public class StyleParamsParser {
10
-    private static StyleParams appStyle;
11
     private Bundle params;
11
     private Bundle params;
12
 
12
 
13
-    public static void setAppStyle(Bundle params) {
14
-        StyleParamsParser.appStyle = new StyleParamsParser(params.getBundle("appStyle")).parse();
15
-    }
16
-
17
     public StyleParamsParser(Bundle params) {
13
     public StyleParamsParser(Bundle params) {
18
         this.params = params;
14
         this.params = params;
19
     }
15
     }
50
 
46
 
51
     @Nullable
47
     @Nullable
52
     private StyleParams.Color getDefaultNavigationColor() {
48
     private StyleParams.Color getDefaultNavigationColor() {
53
-        return appStyle == null ? new StyleParams.Color() : appStyle.navigationBarColor;
49
+        return AppStyle.appStyle == null ? new StyleParams.Color() : AppStyle.appStyle.navigationBarColor;
54
     }
50
     }
55
 
51
 
56
     @Nullable
52
     @Nullable
57
     private StyleParams.Color getDefaultSelectedBottomTabsButtonColor() {
53
     private StyleParams.Color getDefaultSelectedBottomTabsButtonColor() {
58
-        return appStyle == null ? new StyleParams.Color() : appStyle.selectedBottomTabsButtonColor;
54
+        return AppStyle.appStyle == null ? new StyleParams.Color() : AppStyle.appStyle.selectedBottomTabsButtonColor;
59
     }
55
     }
60
 
56
 
61
     @Nullable
57
     @Nullable
62
     private StyleParams.Color getDefaultBottomTabsButtonColor() {
58
     private StyleParams.Color getDefaultBottomTabsButtonColor() {
63
-        return appStyle == null ? new StyleParams.Color() : appStyle.bottomTabsButtonColor;
59
+        return AppStyle.appStyle == null ? new StyleParams.Color() : AppStyle.appStyle.bottomTabsButtonColor;
64
     }
60
     }
65
 
61
 
66
     @Nullable
62
     @Nullable
67
     private StyleParams.Color getDefaultBottomTabsColor() {
63
     private StyleParams.Color getDefaultBottomTabsColor() {
68
-        return appStyle == null ? new StyleParams.Color() : appStyle.bottomTabsColor;
64
+        return AppStyle.appStyle == null ? new StyleParams.Color() : AppStyle.appStyle.bottomTabsColor;
69
     }
65
     }
70
 
66
 
71
     private boolean isDefaultBottomTabsHiddenOnScroll() {
67
     private boolean isDefaultBottomTabsHiddenOnScroll() {
72
-        return appStyle != null && appStyle.bottomTabsHiddenOnScroll;
68
+        return AppStyle.appStyle != null && AppStyle.appStyle.bottomTabsHiddenOnScroll;
73
     }
69
     }
74
 
70
 
75
     private boolean isDefaultBottomTabsHidden() {
71
     private boolean isDefaultBottomTabsHidden() {
76
-        return appStyle != null && appStyle.bottomTabsHidden;
72
+        return AppStyle.appStyle != null && AppStyle.appStyle.bottomTabsHidden;
77
     }
73
     }
78
 
74
 
79
     private boolean isDefaultScreenBelowTopBar() {
75
     private boolean isDefaultScreenBelowTopBar() {
80
-        return appStyle == null || appStyle.drawScreenBelowTopBar;
76
+        return AppStyle.appStyle == null || AppStyle.appStyle.drawScreenBelowTopBar;
81
     }
77
     }
82
 
78
 
83
     private boolean isDefaultTopTabsHidden() {
79
     private boolean isDefaultTopTabsHidden() {
84
-        return appStyle != null && appStyle.topTabsHidden;
80
+        return AppStyle.appStyle != null && AppStyle.appStyle.topTabsHidden;
85
     }
81
     }
86
 
82
 
87
     private boolean isDefaultBackButtonHidden() {
83
     private boolean isDefaultBackButtonHidden() {
88
-        return appStyle != null && appStyle.backButtonHidden;
84
+        return AppStyle.appStyle != null && AppStyle.appStyle.backButtonHidden;
89
     }
85
     }
90
 
86
 
91
     @Nullable
87
     @Nullable
92
     private StyleParams.Color getDefaultTitleBarColor() {
88
     private StyleParams.Color getDefaultTitleBarColor() {
93
-        return appStyle == null ? new StyleParams.Color() : appStyle.titleBarTitleColor;
89
+        return AppStyle.appStyle == null ? new StyleParams.Color() : AppStyle.appStyle.titleBarTitleColor;
94
     }
90
     }
95
 
91
 
96
     @Nullable
92
     @Nullable
97
     private StyleParams.Color getTitleBarButtonColor() {
93
     private StyleParams.Color getTitleBarButtonColor() {
98
-        return appStyle == null ? new StyleParams.Color() : appStyle.titleBarButtonColor;
94
+        return AppStyle.appStyle == null ? new StyleParams.Color() : AppStyle.appStyle.titleBarButtonColor;
99
     }
95
     }
100
 
96
 
101
     private boolean isDefaultTopBarHidden() {
97
     private boolean isDefaultTopBarHidden() {
102
-        return appStyle != null && appStyle.titleBarHidden;
98
+        return AppStyle.appStyle != null && AppStyle.appStyle.titleBarHidden;
103
     }
99
     }
104
 
100
 
105
     @Nullable
101
     @Nullable
106
     private StyleParams.Color getDefaultTopBarColor() {
102
     private StyleParams.Color getDefaultTopBarColor() {
107
-        return appStyle == null ? new StyleParams.Color() : appStyle.topBarColor;
103
+        return AppStyle.appStyle == null ? new StyleParams.Color() : AppStyle.appStyle.topBarColor;
108
     }
104
     }
109
 
105
 
110
     @Nullable
106
     @Nullable
111
     private StyleParams.Color getDefaultStatusBarColor() {
107
     private StyleParams.Color getDefaultStatusBarColor() {
112
-        return appStyle == null ? new StyleParams.Color() : appStyle.statusBarColor;
108
+        return AppStyle.appStyle == null ? new StyleParams.Color() : AppStyle.appStyle.statusBarColor;
113
     }
109
     }
114
 
110
 
115
     private boolean getBoolean(String titleBarHidden, boolean defaultValue) {
111
     private boolean getBoolean(String titleBarHidden, boolean defaultValue) {

+ 7
- 1
android/app/src/main/java/com/reactnativenavigation/params/parsers/TitleBarButtonParamsParser.java Просмотреть файл

2
 
2
 
3
 import android.os.Bundle;
3
 import android.os.Bundle;
4
 
4
 
5
+import com.reactnativenavigation.params.AppStyle;
5
 import com.reactnativenavigation.params.StyleParams;
6
 import com.reactnativenavigation.params.StyleParams;
6
 import com.reactnativenavigation.params.TitleBarButtonParams;
7
 import com.reactnativenavigation.params.TitleBarButtonParams;
7
 import com.reactnativenavigation.react.ImageLoader;
8
 import com.reactnativenavigation.react.ImageLoader;
25
         if (hasKey(bundle,"icon")) {
26
         if (hasKey(bundle,"icon")) {
26
             result.icon = ImageLoader.loadImage(bundle.getString("icon"));
27
             result.icon = ImageLoader.loadImage(bundle.getString("icon"));
27
         }
28
         }
28
-        result.color = StyleParams.Color.parse(bundle.getString("color"));
29
+        result.color = getColor(bundle, AppStyle.appStyle.titleBarButtonColor);
29
         result.showAsAction = parseShowAsAction(bundle.getString("showAsAction"));
30
         result.showAsAction = parseShowAsAction(bundle.getString("showAsAction"));
30
         result.enabled = bundle.getBoolean("enabled", true);
31
         result.enabled = bundle.getBoolean("enabled", true);
31
         result.eventId = bundle.getString("id");
32
         result.eventId = bundle.getString("id");
32
         return result;
33
         return result;
33
     }
34
     }
34
 
35
 
36
+    private StyleParams.Color getColor(Bundle bundle, StyleParams.Color defaultColor) {
37
+        StyleParams.Color color = StyleParams.Color.parse(bundle.getString("color"));
38
+        return color.hasColor() || defaultColor == null ? color : defaultColor;
39
+    }
40
+
35
     private static TitleBarButtonParams.ShowAsAction parseShowAsAction(String showAsAction) {
41
     private static TitleBarButtonParams.ShowAsAction parseShowAsAction(String showAsAction) {
36
         if (showAsAction == null) {
42
         if (showAsAction == null) {
37
             return TitleBarButtonParams.ShowAsAction.IfRoom;
43
             return TitleBarButtonParams.ShowAsAction.IfRoom;

+ 7
- 0
android/app/src/main/java/com/reactnativenavigation/screens/Screen.java Просмотреть файл

125
     }
125
     }
126
 
126
 
127
     public void setTitleBarRightButtons(String navigatorEventId, List<TitleBarButtonParams> titleBarButtons) {
127
     public void setTitleBarRightButtons(String navigatorEventId, List<TitleBarButtonParams> titleBarButtons) {
128
+        setButtonColorFromScreen(titleBarButtons);
128
         topBar.setTitleBarRightButtons(navigatorEventId, titleBarButtons);
129
         topBar.setTitleBarRightButtons(navigatorEventId, titleBarButtons);
129
     }
130
     }
130
 
131
 
136
     public StyleParams getStyleParams() {
137
     public StyleParams getStyleParams() {
137
         return screenParams.styleParams;
138
         return screenParams.styleParams;
138
     }
139
     }
140
+
141
+    private void setButtonColorFromScreen(List<TitleBarButtonParams> titleBarButtonParamses) {
142
+        for (TitleBarButtonParams titleBarButtonParamse : titleBarButtonParamses) {
143
+            titleBarButtonParamse.setColorFromScreenStyle(screenParams.styleParams.titleBarButtonColor);
144
+        }
145
+    }
139
 }
146
 }