Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[V3] Android: re-add support for navigationBarColor #5547

Merged
merged 3 commits into from
Oct 31, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion docs/docs/options-migration.md
Original file line number Diff line number Diff line change
Expand Up @@ -540,6 +540,15 @@ statusBar: {
}
```

## navigationBarColor
NavigationBar color

```js
navigationBar: {
backgroundColor: 'red'
}
```

## drawUnderStatusBar
Draw content behind the StatusBar

Expand Down Expand Up @@ -603,7 +612,6 @@ topBar: {
* topBarShadowOffset
* topBarShadowRadius
* preferredContentSize
* navigationBarColor
* navBarSubTitleTextCentered
* collapsingToolBarImage
* collapsingToolBarCollapsedColor
Expand Down
3 changes: 3 additions & 0 deletions docs/docs/styling.md
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,9 @@ Navigation.mergeOptions(this.props.componentId, {
drawBehind: true,
visible: false
},
navigationBar: {
backgroundColor: 'red',
},
layout: {
topMargin: (await Navigation.constants()).statusBarHeight, // Set the layout's top margin
orientation: ['portrait', 'landscape'] | ['sensorLandscape'], // An array of supported orientations
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.reactnativenavigation.parse;

import com.reactnativenavigation.parse.params.Colour;
import com.reactnativenavigation.parse.params.NullColor;
import com.reactnativenavigation.parse.parsers.ColorParser;

import org.json.JSONObject;

public class NavigationBarOptions {
public static NavigationBarOptions parse(JSONObject json) {
NavigationBarOptions result = new NavigationBarOptions();
if (json == null) return result;

result.backgroundColor = ColorParser.parse(json, "backgroundColor");

return result;
}

public Colour backgroundColor = new NullColor();

public void mergeWith(NavigationBarOptions other) {
if (other.backgroundColor.hasValue()) backgroundColor = other.backgroundColor;
}

public void mergeWithDefault(NavigationBarOptions defaultOptions) {
if (!backgroundColor.hasValue()) backgroundColor = defaultOptions.backgroundColor;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ public static Options parse(TypefaceLoader typefaceManager, JSONObject json) {
result.sideMenuRootOptions = SideMenuRootOptions.parse(json.optJSONObject("sideMenu"));
result.animations = AnimationsOptions.parse(json.optJSONObject("animations"));
result.modal = ModalOptions.parse(json);
result.navigationBar = NavigationBarOptions.parse(json.optJSONObject("navigationBar"));
result.statusBar = StatusBarOptions.parse(json.optJSONObject("statusBar"));
result.layout = LayoutOptions.parse(json.optJSONObject("layout"));
result.transitions = Transitions.parse(json.optJSONObject("customTransition"));
Expand All @@ -44,6 +45,7 @@ public static Options parse(TypefaceLoader typefaceManager, JSONObject json) {
@NonNull public AnimationsOptions animations = new AnimationsOptions();
@NonNull public SideMenuRootOptions sideMenuRootOptions = new SideMenuRootOptions();
@NonNull public ModalOptions modal = new ModalOptions();
@NonNull public NavigationBarOptions navigationBar = new NavigationBarOptions();
@NonNull public StatusBarOptions statusBar = new StatusBarOptions();
@NonNull public LayoutOptions layout = new LayoutOptions();
@NonNull public Transitions transitions = new Transitions();
Expand All @@ -65,6 +67,7 @@ public Options copy() {
result.sideMenuRootOptions.mergeWith(sideMenuRootOptions);
result.animations.mergeWith(animations);
result.modal.mergeWith(modal);
result.navigationBar.mergeWith(navigationBar);
result.statusBar.mergeWith(statusBar);
result.layout.mergeWith(layout);
result.transitions.mergeWith(transitions);
Expand All @@ -83,6 +86,7 @@ public Options mergeWith(final Options other) {
result.animations.mergeWith(other.animations);
result.sideMenuRootOptions.mergeWith(other.sideMenuRootOptions);
result.modal.mergeWith(other.modal);
result.navigationBar.mergeWith(other.navigationBar);
result.statusBar.mergeWith(other.statusBar);
result.layout.mergeWith(other.layout);
result.transitions.mergeWith(transitions);
Expand All @@ -99,6 +103,7 @@ public Options withDefaultOptions(final Options defaultOptions) {
animations.mergeWithDefault(defaultOptions.animations);
sideMenuRootOptions.mergeWithDefault(defaultOptions.sideMenuRootOptions);
modal.mergeWithDefault(defaultOptions.modal);
navigationBar.mergeWithDefault(defaultOptions.navigationBar);
statusBar.mergeWithDefault(defaultOptions.statusBar);
layout.mergeWithDefault(defaultOptions.layout);
transitions.mergeWithDefault(defaultOptions.transitions);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import android.view.ViewGroup.MarginLayoutParams;
import android.view.Window;

import com.reactnativenavigation.parse.NavigationBarOptions;
import com.reactnativenavigation.parse.Options;
import com.reactnativenavigation.parse.OrientationOptions;
import com.reactnativenavigation.parse.StatusBarOptions;
Expand Down Expand Up @@ -84,6 +85,7 @@ private void applyBackgroundColor(ViewController view, Options options) {
}

private void applyStatusBarOptions(Options options) {
setNavigationBarBackgroundColor(options.navigationBar);
setStatusBarBackgroundColor(options.statusBar);
setTextColorScheme(options.statusBar.textColorScheme);
setTranslucent(options.statusBar);
Expand Down Expand Up @@ -117,6 +119,13 @@ private void setStatusBarBackgroundColor(StatusBarOptions statusBar) {
}
}

private void setNavigationBarBackgroundColor(NavigationBarOptions navigationBar) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && navigationBar.backgroundColor.canApplyValue()) {
int defaultColor = activity.getWindow().getNavigationBarColor();
activity.getWindow().setNavigationBarColor(navigationBar.backgroundColor.get(defaultColor));
}
}

private void setTextColorScheme(TextColorScheme scheme) {
final View view = activity.getWindow().getDecorView();
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return;
Expand Down