Browse Source

Getting there

* Created Snakbar class to encapsulate Snackbar logic.
* Clicking the action now emits event to current screen
* Action color works
Guy Carmeli 8 years ago
parent
commit
a76e7b25d8

+ 1
- 1
android/app/src/main/java/com/reactnativenavigation/bridge/NavigationReactModule.java View File

@@ -157,7 +157,7 @@ public class NavigationReactModule extends ReactContextBaseJavaModule {
157 157
     }
158 158
 
159 159
     @ReactMethod
160
-    public void showSnackbar(final ReadableMap params) {
160
+    public void showSnackbar(final String navigatorId, final ReadableMap params) {
161 161
         SnackbarParams snackbarParams = new SnackbarParamsParser().parse(BundleConverter.toBundle(params));
162 162
         NavigationCommandsHandler.showSnackbar(snackbarParams);
163 163
     }

+ 2
- 1
android/app/src/main/java/com/reactnativenavigation/layouts/BottomTabsLayout.java View File

@@ -178,7 +178,8 @@ public class BottomTabsLayout extends RelativeLayout implements Layout, AHBottom
178 178
 
179 179
     @Override
180 180
     public void showSnackbar(SnackbarParams params) {
181
-        snackbarContainer.addSnackbar(params);
181
+        final String eventId = getCurrentScreenStack().peek().getNavigatorEventId();
182
+        snackbarContainer.showSnackbar(eventId, params);
182 183
     }
183 184
 
184 185
     public void selectBottomTabByTabIndex(Integer index) {

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

@@ -2,8 +2,8 @@ package com.reactnativenavigation.params;
2 2
 
3 3
 public class SnackbarParams {
4 4
     public String text;
5
-    public StyleParams.Color textColor;
6 5
     public String buttonText;
7 6
     public StyleParams.Color buttonColor;
7
+    public String eventId;
8 8
     public int duration;
9 9
 }

+ 3
- 3
android/app/src/main/java/com/reactnativenavigation/params/parsers/SnackbarParamsParser.java View File

@@ -10,10 +10,10 @@ public class SnackbarParamsParser extends Parser {
10 10
     public SnackbarParams parse(Bundle params) {
11 11
         SnackbarParams result = new SnackbarParams();
12 12
         result.text = params.getString("text");
13
-        result.textColor = getColor(params, "textColor", AppStyle.appStyle.snackbarTextColor);
14
-        result.buttonText = params.getString("buttonText");
15
-        result.buttonColor = getColor(params, "buttonColor", AppStyle.appStyle.snackbarButtonColor);
13
+        result.buttonText = params.getString("actionText");
14
+        result.buttonColor = getColor(params, "actionColor", AppStyle.appStyle.snackbarButtonColor);
16 15
         result.duration = getDuration(params.getString("duration", "short"));
16
+        result.eventId = params.getString("actionId");
17 17
         return result;
18 18
     }
19 19
 

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

@@ -132,6 +132,10 @@ public abstract class Screen extends RelativeLayout {
132 132
         return screenParams.getScreenInstanceId();
133 133
     }
134 134
 
135
+    public String getNavigatorEventId() {
136
+        return screenParams.getNavigatorEventId();
137
+    }
138
+
135 139
     public void setTopBarVisible(boolean visible, boolean animate) {
136 140
         topBarVisibilityAnimator.setVisible(visible, animate);
137 141
     }

+ 2
- 4
android/app/src/main/java/com/reactnativenavigation/views/SnackbarContainer.java View File

@@ -2,7 +2,6 @@ package com.reactnativenavigation.views;
2 2
 
3 3
 import android.content.Context;
4 4
 import android.support.design.widget.CoordinatorLayout;
5
-import android.support.design.widget.Snackbar;
6 5
 
7 6
 import com.reactnativenavigation.params.SnackbarParams;
8 7
 
@@ -12,8 +11,7 @@ public class SnackbarContainer extends CoordinatorLayout {
12 11
         super(context);
13 12
     }
14 13
 
15
-    public void addSnackbar(SnackbarParams params) {
16
-        Snackbar snackbar = Snackbar.make(this, params.text, params.duration);
17
-        snackbar.show();
14
+    public void showSnackbar(final String navigatorEventId, final SnackbarParams params) {
15
+        new Snakbar(this, navigatorEventId, params).show();
18 16
     }
19 17
 }

+ 43
- 0
android/app/src/main/java/com/reactnativenavigation/views/Snakbar.java View File

@@ -0,0 +1,43 @@
1
+package com.reactnativenavigation.views;
2
+
3
+import android.support.design.widget.Snackbar;
4
+import android.view.View;
5
+
6
+import com.reactnativenavigation.NavigationApplication;
7
+import com.reactnativenavigation.params.SnackbarParams;
8
+
9
+public class Snakbar {
10
+    private final View parent;
11
+    private final String navigatorEventId;
12
+    private final SnackbarParams params;
13
+
14
+    public Snakbar(View parent, String navigatorEventId, SnackbarParams params) {
15
+        this.parent = parent;
16
+        this.navigatorEventId = navigatorEventId;
17
+        this.params = params;
18
+    }
19
+
20
+    public void show() {
21
+        Snackbar snackbar = Snackbar.make(parent, params.text, params.duration);
22
+        setAction(navigatorEventId, params, snackbar);
23
+        setStyle(snackbar, params);
24
+        snackbar.show();
25
+    }
26
+
27
+    private void setAction(final String navigatorEventId, final SnackbarParams params, Snackbar snackbar) {
28
+        if (params.eventId != null) {
29
+            snackbar.setAction(params.buttonText, new View.OnClickListener() {
30
+                @Override
31
+                public void onClick(View v) {
32
+                    NavigationApplication.instance.sendNavigatorEvent(params.eventId, navigatorEventId);
33
+                }
34
+            });
35
+        }
36
+    }
37
+
38
+    private void setStyle(Snackbar snackbar, SnackbarParams params) {
39
+        if (params.buttonColor.hasColor()) {
40
+            snackbar.setActionTextColor(params.buttonColor.getColor());
41
+        }
42
+    }
43
+}

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

@@ -419,7 +419,7 @@ function addNavigationStyleParams(screen) {
419 419
 }
420 420
 
421 421
 function showSnackbar(navigator, params) {
422
-  return newPlatformSpecific.showSnackbar(params);
422
+  return newPlatformSpecific.showSnackbar(navigator.navigatorEventID, params);
423 423
 }
424 424
 
425 425
 export default {

+ 2
- 2
src/platformSpecific.android.js View File

@@ -108,8 +108,8 @@ function setBottomTabBadgeByNavigatorId(navigatorId, badge) {
108 108
   NativeReactModule.setBottomTabBadgeByNavigatorId(navigatorId, badge);
109 109
 }
110 110
 
111
-function showSnackbar(params) {
112
-  NativeReactModule.showSnackbar(params);
111
+function showSnackbar(navigatorEventId, params) {
112
+  NativeReactModule.showSnackbar(navigatorEventId, params);
113 113
 }
114 114
 
115 115
 module.exports = {