Browse Source

Support statusBarTextColorScheme on Android

Guy Carmeli 7 years ago
parent
commit
096243827a

+ 20
- 0
android/app/src/main/java/com/reactnativenavigation/params/StatusBarTextColorScheme.java View File

1
+package com.reactnativenavigation.params;
2
+
3
+import android.os.Build;
4
+import android.support.annotation.Nullable;
5
+
6
+public enum StatusBarTextColorScheme {
7
+    Light, Dark, Undefined;
8
+
9
+    public static StatusBarTextColorScheme fromString(@Nullable String colorScheme) {
10
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M || colorScheme == null) return Undefined;
11
+        switch (colorScheme) {
12
+            case "light":
13
+                return Light;
14
+            case "dark":
15
+                return Dark;
16
+            default:
17
+                return Undefined;
18
+        }
19
+    }
20
+}

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

73
     }
73
     }
74
 
74
 
75
     public Orientation orientation;
75
     public Orientation orientation;
76
+    public StatusBarTextColorScheme statusBarTextColorScheme;
76
     public Color statusBarColor;
77
     public Color statusBarColor;
77
     public Color contextualMenuStatusBarColor;
78
     public Color contextualMenuStatusBarColor;
78
     public Color contextualMenuButtonsColor;
79
     public Color contextualMenuButtonsColor;

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

5
 
5
 
6
 import com.reactnativenavigation.params.AppStyle;
6
 import com.reactnativenavigation.params.AppStyle;
7
 import com.reactnativenavigation.params.Orientation;
7
 import com.reactnativenavigation.params.Orientation;
8
+import com.reactnativenavigation.params.StatusBarTextColorScheme;
8
 import com.reactnativenavigation.params.StyleParams;
9
 import com.reactnativenavigation.params.StyleParams;
9
 
10
 
10
 public class StyleParamsParser {
11
 public class StyleParamsParser {
27
         StyleParams result = new StyleParams(params);
28
         StyleParams result = new StyleParams(params);
28
         result.orientation = Orientation.fromString(params.getString("orientation", getDefaultOrientation()));
29
         result.orientation = Orientation.fromString(params.getString("orientation", getDefaultOrientation()));
29
         result.statusBarColor = getColor("statusBarColor", getDefaultStatusBarColor());
30
         result.statusBarColor = getColor("statusBarColor", getDefaultStatusBarColor());
31
+        result.statusBarTextColorScheme = StatusBarTextColorScheme.fromString(params.getString("statusBarTextColorScheme"));
30
         result.contextualMenuStatusBarColor = getColor("contextualMenuStatusBarColor", getDefaultContextualMenuStatusBarColor());
32
         result.contextualMenuStatusBarColor = getColor("contextualMenuStatusBarColor", getDefaultContextualMenuStatusBarColor());
31
         result.contextualMenuButtonsColor = getColor("contextualMenuButtonsColor", getDefaultContextualMenuButtonsColor());
33
         result.contextualMenuButtonsColor = getColor("contextualMenuButtonsColor", getDefaultContextualMenuButtonsColor());
32
         result.contextualMenuBackgroundColor = getColor("contextualMenuBackgroundColor", getDefaultContextualMenuBackgroundColor());
34
         result.contextualMenuBackgroundColor = getColor("contextualMenuBackgroundColor", getDefaultContextualMenuBackgroundColor());

+ 22
- 0
android/app/src/main/java/com/reactnativenavigation/screens/Screen.java View File

7
 import android.os.Build;
7
 import android.os.Build;
8
 import android.os.Bundle;
8
 import android.os.Bundle;
9
 import android.support.v7.app.AppCompatActivity;
9
 import android.support.v7.app.AppCompatActivity;
10
+import android.view.View;
10
 import android.view.Window;
11
 import android.view.Window;
11
 import android.widget.RelativeLayout;
12
 import android.widget.RelativeLayout;
12
 
13
 
23
 import com.reactnativenavigation.params.ContextualMenuParams;
24
 import com.reactnativenavigation.params.ContextualMenuParams;
24
 import com.reactnativenavigation.params.FabParams;
25
 import com.reactnativenavigation.params.FabParams;
25
 import com.reactnativenavigation.params.ScreenParams;
26
 import com.reactnativenavigation.params.ScreenParams;
27
+import com.reactnativenavigation.params.StatusBarTextColorScheme;
26
 import com.reactnativenavigation.params.StyleParams;
28
 import com.reactnativenavigation.params.StyleParams;
27
 import com.reactnativenavigation.params.TitleBarButtonParams;
29
 import com.reactnativenavigation.params.TitleBarButtonParams;
28
 import com.reactnativenavigation.params.TitleBarLeftButtonParams;
30
 import com.reactnativenavigation.params.TitleBarLeftButtonParams;
104
 
106
 
105
     public void setStyle() {
107
     public void setStyle() {
106
         setStatusBarColor(styleParams.statusBarColor);
108
         setStatusBarColor(styleParams.statusBarColor);
109
+        setStatusBarTextColorScheme(styleParams.statusBarTextColorScheme);
107
         setNavigationBarColor(styleParams.navigationBarColor);
110
         setNavigationBarColor(styleParams.navigationBarColor);
108
         topBar.setStyle(styleParams);
111
         topBar.setStyle(styleParams);
109
         if (styleParams.screenBackgroundColor.hasColor()) {
112
         if (styleParams.screenBackgroundColor.hasColor()) {
172
         }
175
         }
173
     }
176
     }
174
 
177
 
178
+    @TargetApi(Build.VERSION_CODES.M)
179
+    private void setStatusBarTextColorScheme(StatusBarTextColorScheme textColorScheme) {
180
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return;
181
+        if (StatusBarTextColorScheme.Dark.equals(textColorScheme)) {
182
+            int flags = getSystemUiVisibility();
183
+            flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
184
+            setSystemUiVisibility(flags);
185
+        } else {
186
+            clearLightStatusBar();
187
+        }
188
+    }
189
+
190
+    public void clearLightStatusBar() {
191
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return;
192
+        int flags = getSystemUiVisibility();
193
+        flags &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
194
+        setSystemUiVisibility(flags);
195
+    }
196
+
175
     @TargetApi(Build.VERSION_CODES.LOLLIPOP)
197
     @TargetApi(Build.VERSION_CODES.LOLLIPOP)
176
     public void setNavigationBarColor(StyleParams.Color navigationBarColor) {
198
     public void setNavigationBarColor(StyleParams.Color navigationBarColor) {
177
         if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return;
199
         if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return;

+ 1
- 0
src/deprecated/platformSpecificDeprecated.android.js View File

139
   let ret = {
139
   let ret = {
140
     orientation: originalStyleObject.orientation,
140
     orientation: originalStyleObject.orientation,
141
     statusBarColor: processColor(originalStyleObject.statusBarColor),
141
     statusBarColor: processColor(originalStyleObject.statusBarColor),
142
+    statusBarTextColorScheme: originalStyleObject.statusBarTextColorScheme,
142
     topBarReactView: originalStyleObject.navBarCustomView,
143
     topBarReactView: originalStyleObject.navBarCustomView,
143
     topBarReactViewAlignment: originalStyleObject.navBarComponentAlignment,
144
     topBarReactViewAlignment: originalStyleObject.navBarComponentAlignment,
144
     topBarReactViewInitialProps: originalStyleObject.navBarCustomViewInitialProps,
145
     topBarReactViewInitialProps: originalStyleObject.navBarCustomViewInitialProps,