Skip to content

Commit 92a18ba

Browse files
rogerkersefacebook-github-bot
authored andcommitted
SystemUiVisibility overwritten bug (facebook#17370)
Summary: Make StatusBar style respect previously set systemUiVisibility <!-- Thank you for sending the PR! We appreciate you spending the time to work on these changes. Help us understand your motivation by explaining why you decided to make this change. You can learn more about contributing to React Native here: http://facebook.github.io/react-native/docs/contributing.html Happy contributing! --> I tried to set `SystemUiVisibility` flag to `SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR` to enable Android's light soft navigation bar, but when I had `<StatusBar />` component in my view, then it was always overwritten. This is how I found the bug and fixed it. 1. In MainActivity you can set systemUiFlags like this in onCreate method ``` if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { Window window = getWindow(); View rootView = window.getDecorView().getRootView(); rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); } ``` 2. Add <StatusBar /> to a view 3. In `android/app/build.gradle` file set `targetSdkVersion` to **27** instead of 22 or something like that 4. In `android/app/src/main/res/values/styles.xml` add 2 lines to `AppTheme` ``` <item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:navigationBarColor">#ffffff</item> ``` 5. Run the app. 6. Test. Previously bottom soft navigation bar was set to white and buttons also to white (so they weren't visible anymore), because StatusBar was overwriting previously set systemUiVisibility Flags. Now the bar should be white and buttons dark as expected. Previous buggy android bottom navbar <img width="379" alt="screen shot 2017-12-27 at 17 11 57" src="https://user-images.githubusercontent.com/571171/34385126-2a3edc44-eb29-11e7-812e-846cfd2fb88b.png"> New fixed android bottom navbar <img width="379" alt="screen shot 2017-12-27 at 17 12 07" src="https://user-images.githubusercontent.com/571171/34385137-3e82517c-eb29-11e7-8af9-a3b7a41ae8e2.png"> This pull request does not change any existing feature. It only makes StatusBar coloring work more properly without affecting bottom navigation bar on android or any other system ui visibility feature. <!-- Help reviewers and the release process by writing your own release notes **INTERNAL and MINOR tagged notes will not be included in the next version's final release notes.** CATEGORY [----------] TYPE [ CLI ] [-------------] LOCATION [ DOCS ] [ BREAKING ] [-------------] [ GENERAL ] [ BUGFIX ] [-{Component}-] [ INTERNAL ] [ ENHANCEMENT ] [ {File} ] [ IOS ] [ FEATURE ] [ {Directory} ] |-----------| [ ANDROID ] [ MINOR ] [ {Framework} ] - | {Message} | [----------] [-------------] [-------------] |-----------| [CATEGORY] [TYPE] [LOCATION] - MESSAGE EXAMPLES: [IOS] [BREAKING] [FlatList] - Change a thing that breaks other things [ANDROID] [BUGFIX] [TextInput] - Did a thing to TextInput [CLI] [FEATURE] [local-cli/info/info.js] - CLI easier to do things with [DOCS] [BUGFIX] [GettingStarted.md] - Accidentally a thing/word [GENERAL] [ENHANCEMENT] [Yoga] - Added new yoga thing/position [INTERNAL] [FEATURE] [./scripts] - Added thing to script that nobody will see --> [ANDROID] [BUGFIX] [StatusBar] - Fixed StatusBar overwriting previously set SystemUiVisibility flags Pull Request resolved: facebook#17370 Differential Revision: D13860079 Pulled By: cpojer fbshipit-source-id: a0bca7acb7601eb78f0842239ea4dee76a63d1fd
1 parent fbe141c commit 92a18ba

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

ReactAndroid/src/main/java/com/facebook/react/modules/statusbar/StatusBarModule.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,13 @@ public void setStyle(@Nullable final String style) {
189189
@Override
190190
public void run() {
191191
View decorView = activity.getWindow().getDecorView();
192-
decorView.setSystemUiVisibility(
193-
"dark-content".equals(style) ? View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR : 0);
192+
int systemUiVisibilityFlags = decorView.getSystemUiVisibility();
193+
if ("dark-content".equals(style)) {
194+
systemUiVisibilityFlags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
195+
} else {
196+
systemUiVisibilityFlags &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
197+
}
198+
decorView.setSystemUiVisibility(systemUiVisibilityFlags);
194199
}
195200
}
196201
);

0 commit comments

Comments
 (0)