From 6c501eb666db91286283c0faad748c6a43af5e78 Mon Sep 17 00:00:00 2001 From: Arthur Lee Date: Thu, 10 Jan 2019 14:25:02 -0800 Subject: [PATCH] Fix status bar default on Android Summary: On Android, the status bar color is not always black by default. The existing code causes the status bar to revert to black once the last `` component is unmounted from the "stack". This diff reverts the bar background color to what it was before, instead of assuming black. Reviewed By: yungsters Differential Revision: D13368136 fbshipit-source-id: ef0154f776607b57bb9400b72d521f5f485b0075 --- Libraries/Components/StatusBar/StatusBar.js | 5 ++++- .../react/modules/statusbar/StatusBarModule.java | 11 ++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/Libraries/Components/StatusBar/StatusBar.js b/Libraries/Components/StatusBar/StatusBar.js index 52e6a764d2c..de7f5fc5924 100644 --- a/Libraries/Components/StatusBar/StatusBar.js +++ b/Libraries/Components/StatusBar/StatusBar.js @@ -198,7 +198,10 @@ class StatusBar extends React.Component { static _defaultProps = createStackEntry({ animated: false, showHideTransition: 'fade', - backgroundColor: 'black', + backgroundColor: Platform.select({ + android: StatusBarManager.DEFAULT_BACKGROUND_COLOR ?? 'black', + ios: 'black', + }), barStyle: 'default', translucent: false, hidden: false, diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/statusbar/StatusBarModule.java b/ReactAndroid/src/main/java/com/facebook/react/modules/statusbar/StatusBarModule.java index ce7a96f93ca..e21912b5129 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/statusbar/StatusBarModule.java +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/statusbar/StatusBarModule.java @@ -38,6 +38,7 @@ import javax.annotation.Nullable; public class StatusBarModule extends ReactContextBaseJavaModule { private static final String HEIGHT_KEY = "HEIGHT"; + private static final String DEFAULT_BACKGROUND_COLOR_KEY = "DEFAULT_BACKGROUND_COLOR"; public static final String NAME = "StatusBarManager"; public StatusBarModule(ReactApplicationContext reactContext) { @@ -52,14 +53,22 @@ public class StatusBarModule extends ReactContextBaseJavaModule { @Override public @Nullable Map getConstants() { final Context context = getReactApplicationContext(); + final Activity activity = getCurrentActivity(); + final int heightResId = context.getResources() .getIdentifier("status_bar_height", "dimen", "android"); final float height = heightResId > 0 ? PixelUtil.toDIPFromPixel(context.getResources().getDimensionPixelSize(heightResId)) : 0; + String statusBarColorString = "black"; + + if (activity != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + final int statusBarColor = activity.getWindow().getStatusBarColor(); + statusBarColorString = String.format("#%06X", (0xFFFFFF & statusBarColor)); + } return MapBuilder.of( - HEIGHT_KEY, height); + HEIGHT_KEY, height, DEFAULT_BACKGROUND_COLOR_KEY, statusBarColorString); } @ReactMethod