Skip to content

Commit 8833c25

Browse files
authored
Additional snackbar style params (wix#735)
Implement backgroundColor and textColor style params
1 parent a650743 commit 8833c25

File tree

7 files changed

+48
-7
lines changed

7 files changed

+48
-7
lines changed

android/app/src/main/java/com/reactnativenavigation/params/SnackbarParams.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ public class SnackbarParams {
44
public String text;
55
public String buttonText;
66
public StyleParams.Color buttonColor;
7+
public StyleParams.Color backgroundColor;
78
public String eventId;
89
public int duration;
10+
public StyleParams.Color textColor;
911
}

android/app/src/main/java/com/reactnativenavigation/params/StyleParams.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ public int getColor() {
3131
public static Color parse(Bundle bundle, String key) {
3232
return bundle.containsKey(key) ? new Color(bundle.getInt(key)) : new Color();
3333
}
34+
35+
public String getHexColor() {
36+
return String.format("#%06X", (0xFFFFFF & getColor()));
37+
}
3438
}
3539

3640
public Color statusBarColor;

android/app/src/main/java/com/reactnativenavigation/params/parsers/Parser.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ <T> List<T> parseBundle(Bundle params, ParseStrategy<T> strategy) {
3737
return result;
3838
}
3939

40+
protected StyleParams.Color getColor(Bundle params, String backgroundColor) {
41+
return getColor(params, backgroundColor, null);
42+
}
43+
4044
protected StyleParams.Color getColor(Bundle bundle, String key, StyleParams.Color defaultColor) {
4145
StyleParams.Color color = StyleParams.Color.parse(bundle, key);
4246
return color.hasColor() || defaultColor == null ? color : defaultColor;

android/app/src/main/java/com/reactnativenavigation/params/parsers/SnackbarParamsParser.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
package com.reactnativenavigation.params.parsers;
22

3+
import android.graphics.Color;
34
import android.os.Bundle;
45
import android.support.design.widget.Snackbar;
56

67
import com.reactnativenavigation.params.AppStyle;
78
import com.reactnativenavigation.params.SnackbarParams;
9+
import com.reactnativenavigation.params.StyleParams;
810

911
public class SnackbarParamsParser extends Parser {
1012
public SnackbarParams parse(Bundle params) {
1113
SnackbarParams result = new SnackbarParams();
1214
result.text = params.getString("text");
15+
result.textColor = getColor(params, "textColor", new StyleParams.Color(Color.WHITE));
1316
result.buttonText = params.getString("actionText");
1417
result.buttonColor = getColor(params, "actionColor", AppStyle.appStyle.snackbarButtonColor);
18+
result.backgroundColor = getColor(params, "backgroundColor");
1519
result.duration = getDuration(params.getString("duration", "short"));
1620
result.eventId = params.getString("actionId");
1721
return result;

android/app/src/main/java/com/reactnativenavigation/views/FloatingActionButtonCoordinator.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class FloatingActionButtonCoordinator {
3636
FloatingActionButtonAnimator fabAnimator;
3737
private final ArrayList<FloatingActionButton> actions;
3838

39-
public FloatingActionButtonCoordinator(CoordinatorLayout parent) {
39+
FloatingActionButtonCoordinator(CoordinatorLayout parent) {
4040
this.parent = parent;
4141
actions = new ArrayList<>();
4242
crossFadeAnimationDuration = parent.getResources().getInteger(android.R.integer.config_shortAnimTime);
@@ -45,7 +45,7 @@ public FloatingActionButtonCoordinator(CoordinatorLayout parent) {
4545

4646
public void add(final FabParams params) {
4747
Log.i(TAG, "add() called with: params = [" + params + "]");
48-
if (parent.getChildCount() > 0) {
48+
if (hasFab()) {
4949
remove(new Runnable() {
5050
@Override
5151
public void run() {
@@ -66,9 +66,8 @@ public void run() {
6666
fabAnimator.show();
6767
}
6868

69-
public void remove(@Nullable final Runnable onComplete) {
70-
Log.w(TAG, "remove: ");
71-
if (parent.getChildCount() == 0) {
69+
void remove(@Nullable final Runnable onComplete) {
70+
if (!hasFab()) {
7271
if (onComplete != null) {
7372
onComplete.run();
7473
}
@@ -88,6 +87,10 @@ public void onAnimationEnd(Animator animation) {
8887
fabAnimator.removeActionsFromScreen(actions);
8988
}
9089

90+
private boolean hasFab() {
91+
return collapsedFab != null || expendedFab != null;
92+
}
93+
9194
private void removeAllViews() {
9295
parent.removeView(collapsedFab);
9396
parent.removeView(expendedFab);

android/app/src/main/java/com/reactnativenavigation/views/Snakbar.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.reactnativenavigation.views;
22

33
import android.support.design.widget.Snackbar;
4+
import android.text.Html;
5+
import android.text.Spanned;
46
import android.view.View;
57

68
import com.reactnativenavigation.NavigationApplication;
@@ -36,12 +38,21 @@ public View getView() {
3638
}
3739

3840
private void create() {
39-
snackbar = Snackbar.make((View) parent, params.text, params.duration);
41+
snackbar = Snackbar.make((View) parent, getStyledText(), params.duration);
4042
setAction(navigatorEventId, params, snackbar);
4143
setStyle(snackbar, params);
4244
setOnDismissListener();
4345
}
4446

47+
private Spanned getStyledText() {
48+
String styledText = "<font color=\"" +
49+
params.textColor.getHexColor() +
50+
"\">" +
51+
params.text +
52+
"</font>";
53+
return Html.fromHtml(styledText);
54+
}
55+
4556
private void setAction(final String navigatorEventId, final SnackbarParams params, Snackbar snackbar) {
4657
if (params.eventId != null) {
4758
snackbar.setAction(params.buttonText, new View.OnClickListener() {
@@ -57,6 +68,9 @@ private void setStyle(Snackbar snackbar, SnackbarParams params) {
5768
if (params.buttonColor.hasColor()) {
5869
snackbar.setActionTextColor(params.buttonColor.getColor());
5970
}
71+
if (params.backgroundColor.hasColor()) {
72+
snackbar.getView().setBackgroundColor(params.backgroundColor.getColor());
73+
}
6074
}
6175

6276
private void setOnDismissListener() {

src/deprecated/platformSpecificDeprecated.android.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,17 @@ function addNavigationStyleParams(screen) {
549549
}
550550

551551
function showSnackbar(navigator, params) {
552-
return newPlatformSpecific.showSnackbar(params);
552+
const adapted = _.cloneDeep(params);
553+
if (adapted.backgroundColor) {
554+
adapted.backgroundColor = processColor(adapted.backgroundColor);
555+
}
556+
if (adapted.actionColor) {
557+
adapted.actionColor = processColor(adapted.actionColor);
558+
}
559+
if (adapted.textColor) {
560+
adapted.textColor = processColor(adapted.textColor);
561+
}
562+
return newPlatformSpecific.showSnackbar(adapted);
553563
}
554564

555565
function showContextualMenu(navigator, params) {

0 commit comments

Comments
 (0)