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
     }
157
     }
158
 
158
 
159
     @ReactMethod
159
     @ReactMethod
160
-    public void showSnackbar(final ReadableMap params) {
160
+    public void showSnackbar(final String navigatorId, final ReadableMap params) {
161
         SnackbarParams snackbarParams = new SnackbarParamsParser().parse(BundleConverter.toBundle(params));
161
         SnackbarParams snackbarParams = new SnackbarParamsParser().parse(BundleConverter.toBundle(params));
162
         NavigationCommandsHandler.showSnackbar(snackbarParams);
162
         NavigationCommandsHandler.showSnackbar(snackbarParams);
163
     }
163
     }

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

178
 
178
 
179
     @Override
179
     @Override
180
     public void showSnackbar(SnackbarParams params) {
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
     public void selectBottomTabByTabIndex(Integer index) {
185
     public void selectBottomTabByTabIndex(Integer index) {

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

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

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

10
     public SnackbarParams parse(Bundle params) {
10
     public SnackbarParams parse(Bundle params) {
11
         SnackbarParams result = new SnackbarParams();
11
         SnackbarParams result = new SnackbarParams();
12
         result.text = params.getString("text");
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
         result.duration = getDuration(params.getString("duration", "short"));
15
         result.duration = getDuration(params.getString("duration", "short"));
16
+        result.eventId = params.getString("actionId");
17
         return result;
17
         return result;
18
     }
18
     }
19
 
19
 

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

132
         return screenParams.getScreenInstanceId();
132
         return screenParams.getScreenInstanceId();
133
     }
133
     }
134
 
134
 
135
+    public String getNavigatorEventId() {
136
+        return screenParams.getNavigatorEventId();
137
+    }
138
+
135
     public void setTopBarVisible(boolean visible, boolean animate) {
139
     public void setTopBarVisible(boolean visible, boolean animate) {
136
         topBarVisibilityAnimator.setVisible(visible, animate);
140
         topBarVisibilityAnimator.setVisible(visible, animate);
137
     }
141
     }

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

2
 
2
 
3
 import android.content.Context;
3
 import android.content.Context;
4
 import android.support.design.widget.CoordinatorLayout;
4
 import android.support.design.widget.CoordinatorLayout;
5
-import android.support.design.widget.Snackbar;
6
 
5
 
7
 import com.reactnativenavigation.params.SnackbarParams;
6
 import com.reactnativenavigation.params.SnackbarParams;
8
 
7
 
12
         super(context);
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

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
 }
419
 }
420
 
420
 
421
 function showSnackbar(navigator, params) {
421
 function showSnackbar(navigator, params) {
422
-  return newPlatformSpecific.showSnackbar(params);
422
+  return newPlatformSpecific.showSnackbar(navigator.navigatorEventID, params);
423
 }
423
 }
424
 
424
 
425
 export default {
425
 export default {

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

108
   NativeReactModule.setBottomTabBadgeByNavigatorId(navigatorId, badge);
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
 module.exports = {
115
 module.exports = {