Browse Source

Temporary fix to fab position on screen (#5758)

Fab has been broken since v3. This is a very temporary fix until we refactor it and upgrade to fab from AndroidX
Guy Carmeli 4 years ago
parent
commit
47149835dc
No account linked to committer's email address

+ 38
- 146
lib/android/app/src/main/java/com/reactnativenavigation/presentation/FabPresenter.java View File

@@ -1,34 +1,32 @@
1 1
 package com.reactnativenavigation.presentation;
2 2
 
3 3
 
4
-import androidx.annotation.NonNull;
5 4
 import android.view.Gravity;
6 5
 import android.view.View;
7 6
 import android.view.ViewGroup;
8
-import android.widget.FrameLayout;
9
-import android.widget.RelativeLayout;
10 7
 
11 8
 import com.reactnativenavigation.R;
12 9
 import com.reactnativenavigation.parse.FabOptions;
10
+import com.reactnativenavigation.viewcontrollers.ViewController;
13 11
 import com.reactnativenavigation.views.Fab;
14 12
 import com.reactnativenavigation.views.FabMenu;
15
-import com.reactnativenavigation.views.ReactComponent;
16 13
 
17
-import static android.widget.RelativeLayout.ALIGN_PARENT_BOTTOM;
18
-import static android.widget.RelativeLayout.ALIGN_PARENT_LEFT;
19
-import static android.widget.RelativeLayout.ALIGN_PARENT_RIGHT;
20
-import static android.widget.RelativeLayout.ALIGN_PARENT_TOP;
14
+import androidx.annotation.NonNull;
15
+import androidx.coordinatorlayout.widget.CoordinatorLayout;
16
+
17
+import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
21 18
 import static com.github.clans.fab.FloatingActionButton.SIZE_MINI;
22 19
 import static com.github.clans.fab.FloatingActionButton.SIZE_NORMAL;
20
+import static com.reactnativenavigation.utils.ObjectUtils.perform;
23 21
 
24 22
 public class FabPresenter {
25 23
     private ViewGroup viewGroup;
26
-    private ReactComponent component;
24
+    private ViewController component;
27 25
 
28 26
     private Fab fab;
29 27
     private FabMenu fabMenu;
30 28
 
31
-    public void applyOptions(FabOptions options, @NonNull ReactComponent component, @NonNull ViewGroup viewGroup) {
29
+    public void applyOptions(FabOptions options, @NonNull ViewController component, @NonNull ViewGroup viewGroup) {
32 30
         this.viewGroup = viewGroup;
33 31
         this.component = component;
34 32
 
@@ -51,10 +49,9 @@ public class FabPresenter {
51 49
         }
52 50
     }
53 51
 
54
-    public void mergeOptions(FabOptions options, @NonNull ReactComponent component, @NonNull ViewGroup viewGroup) {
52
+    public void mergeOptions(FabOptions options, @NonNull ViewController component, @NonNull ViewGroup viewGroup) {
55 53
         this.viewGroup = viewGroup;
56 54
         this.component = component;
57
-
58 55
         if (options.id.hasValue()) {
59 56
             if (fabMenu != null && fabMenu.getFabId().equals(options.id.get())) {
60 57
                 mergeParams(fabMenu, options);
@@ -103,139 +100,44 @@ public class FabPresenter {
103 100
     }
104 101
 
105 102
     private void setParams(View fab, FabOptions options) {
106
-        ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
107
-        if (viewGroup instanceof RelativeLayout) {
108
-            RelativeLayout.LayoutParams layoutParamsRelative = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
109
-            layoutParamsRelative.bottomMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin);
110
-            layoutParamsRelative.rightMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin);
111
-            layoutParamsRelative.leftMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin);
112
-            layoutParamsRelative.topMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin);
113
-            if (options.alignHorizontally.hasValue()) {
114
-                if ("right".equals(options.alignHorizontally.get())) {
115
-                    layoutParamsRelative.removeRule(ALIGN_PARENT_LEFT);
116
-                    layoutParamsRelative.addRule(ALIGN_PARENT_RIGHT);
117
-                }
118
-                if ("left".equals(options.alignHorizontally.get())) {
119
-                    layoutParamsRelative.removeRule(ALIGN_PARENT_RIGHT);
120
-                    layoutParamsRelative.addRule(ALIGN_PARENT_LEFT);
121
-                }
122
-            } else {
123
-                layoutParamsRelative.addRule(ALIGN_PARENT_RIGHT);
103
+        CoordinatorLayout.LayoutParams lp = new CoordinatorLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
104
+        lp.rightMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin);
105
+        lp.leftMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin);
106
+        lp.bottomMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin);
107
+        fab.setTag(R.id.fab_bottom_margin, lp.bottomMargin);
108
+        lp.gravity = Gravity.BOTTOM;
109
+        if (options.alignHorizontally.hasValue()) {
110
+            if ("right".equals(options.alignHorizontally.get())) {
111
+                lp.gravity |= Gravity.RIGHT;
124 112
             }
125
-            if (options.alignVertically.hasValue()) {
126
-                if ("top".equals(options.alignVertically.get())) {
127
-                    layoutParamsRelative.removeRule(ALIGN_PARENT_BOTTOM);
128
-                    layoutParamsRelative.addRule(ALIGN_PARENT_TOP);
129
-                }
130
-                if ("bottom".equals(options.alignVertically.get())) {
131
-                    layoutParamsRelative.removeRule(ALIGN_PARENT_TOP);
132
-                    layoutParamsRelative.addRule(ALIGN_PARENT_BOTTOM);
133
-                }
134
-            } else {
135
-                layoutParamsRelative.addRule(ALIGN_PARENT_BOTTOM);
113
+            if ("left".equals(options.alignHorizontally.get())) {
114
+                lp.gravity |= Gravity.LEFT;
136 115
             }
137
-            layoutParams = layoutParamsRelative;
138
-        }
139
-        if (viewGroup instanceof FrameLayout) {
140
-            FrameLayout.LayoutParams layoutParamsFrame = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
141
-            layoutParamsFrame.bottomMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin);
142
-            layoutParamsFrame.rightMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin);
143
-            layoutParamsFrame.leftMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin);
144
-            layoutParamsFrame.topMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin);
145
-            if (options.alignHorizontally.hasValue()) {
146
-                if ("right".equals(options.alignHorizontally.get())) {
147
-                    removeGravityParam(layoutParamsFrame, Gravity.LEFT);
148
-                    setGravityParam(layoutParamsFrame, Gravity.RIGHT);
149
-                }
150
-                if ("left".equals(options.alignHorizontally.get())) {
151
-                    removeGravityParam(layoutParamsFrame, Gravity.RIGHT);
152
-                    setGravityParam(layoutParamsFrame, Gravity.LEFT);
153
-                }
154
-            } else {
155
-                setGravityParam(layoutParamsFrame, Gravity.RIGHT);
156
-            }
157
-            if (options.alignVertically.hasValue()) {
158
-                if ("top".equals(options.alignVertically.get())) {
159
-                    removeGravityParam(layoutParamsFrame, Gravity.BOTTOM);
160
-                    setGravityParam(layoutParamsFrame, Gravity.TOP);
161
-                }
162
-                if ("bottom".equals(options.alignVertically.get())) {
163
-                    removeGravityParam(layoutParamsFrame, Gravity.TOP);
164
-                    setGravityParam(layoutParamsFrame, Gravity.BOTTOM);
165
-                }
166
-            } else {
167
-                setGravityParam(layoutParamsFrame, Gravity.BOTTOM);
168
-            }
169
-            layoutParams = layoutParamsFrame;
116
+        } else {
117
+            lp.gravity |= Gravity.RIGHT;
170 118
         }
171
-        fab.setLayoutParams(layoutParams);
119
+        fab.setLayoutParams(lp);
172 120
     }
173 121
 
174 122
     private void mergeParams(View fab, FabOptions options) {
175
-        ViewGroup.LayoutParams layoutParams = fab.getLayoutParams();
176
-        if (viewGroup instanceof RelativeLayout) {
177
-            RelativeLayout.LayoutParams layoutParamsRelative = (RelativeLayout.LayoutParams) fab.getLayoutParams();
178
-            if (layoutParamsRelative == null) {
179
-                layoutParamsRelative = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
180
-                layoutParamsRelative.bottomMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin);
181
-                layoutParamsRelative.rightMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin);
182
-                layoutParamsRelative.leftMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin);
183
-                layoutParamsRelative.topMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin);
123
+        CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) perform(
124
+                fab,
125
+                new CoordinatorLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT),
126
+                View::getLayoutParams
127
+        );
128
+        fab.setTag(R.id.fab_bottom_margin, lp.leftMargin);
129
+        lp.gravity = Gravity.BOTTOM;
130
+        if (options.alignHorizontally.hasValue()) {
131
+            if ("right".equals(options.alignHorizontally.get())) {
132
+                lp.gravity |= Gravity.RIGHT;
184 133
             }
185
-            if (options.alignHorizontally.hasValue()) {
186
-                if ("right".equals(options.alignHorizontally.get())) {
187
-                    layoutParamsRelative.removeRule(ALIGN_PARENT_LEFT);
188
-                    layoutParamsRelative.addRule(ALIGN_PARENT_RIGHT);
189
-                }
190
-                if ("left".equals(options.alignHorizontally.get())) {
191
-                    layoutParamsRelative.removeRule(ALIGN_PARENT_RIGHT);
192
-                    layoutParamsRelative.addRule(ALIGN_PARENT_LEFT);
193
-                }
134
+            if ("left".equals(options.alignHorizontally.get())) {
135
+                lp.gravity |= Gravity.RIGHT;
194 136
             }
195
-            if (options.alignVertically.hasValue()) {
196
-                if ("top".equals(options.alignVertically.get())) {
197
-                    layoutParamsRelative.removeRule(ALIGN_PARENT_BOTTOM);
198
-                    layoutParamsRelative.addRule(ALIGN_PARENT_TOP);
199
-                }
200
-                if ("bottom".equals(options.alignVertically.get())) {
201
-                    layoutParamsRelative.removeRule(ALIGN_PARENT_TOP);
202
-                    layoutParamsRelative.addRule(ALIGN_PARENT_BOTTOM);
203
-                }
204
-            }
205
-            layoutParams = layoutParamsRelative;
206
-        }
207
-        if (viewGroup instanceof FrameLayout) {
208
-            FrameLayout.LayoutParams layoutParamsFrame = (FrameLayout.LayoutParams) fab.getLayoutParams();
209
-            if (layoutParamsFrame == null) {
210
-                layoutParamsFrame = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
211
-                layoutParamsFrame.bottomMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin);
212
-                layoutParamsFrame.rightMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin);
213
-                layoutParamsFrame.leftMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin);
214
-                layoutParamsFrame.topMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin);
215
-            }
216
-            if (options.alignHorizontally.hasValue()) {
217
-                if ("right".equals(options.alignHorizontally.get())) {
218
-                    removeGravityParam(layoutParamsFrame, Gravity.LEFT);
219
-                    setGravityParam(layoutParamsFrame, Gravity.RIGHT);
220
-                }
221
-                if ("left".equals(options.alignHorizontally.get())) {
222
-                    removeGravityParam(layoutParamsFrame, Gravity.RIGHT);
223
-                    setGravityParam(layoutParamsFrame, Gravity.LEFT);
224
-                }
225
-            }
226
-            if (options.alignVertically.hasValue()) {
227
-                if ("top".equals(options.alignVertically.get())) {
228
-                    removeGravityParam(layoutParamsFrame, Gravity.BOTTOM);
229
-                    setGravityParam(layoutParamsFrame, Gravity.TOP);
230
-                }
231
-                if ("bottom".equals(options.alignVertically.get())) {
232
-                    removeGravityParam(layoutParamsFrame, Gravity.TOP);
233
-                    setGravityParam(layoutParamsFrame, Gravity.BOTTOM);
234
-                }
235
-            }
236
-            layoutParams = layoutParamsFrame;
137
+        } else {
138
+            lp.gravity |= Gravity.RIGHT;
237 139
         }
238
-        fab.setLayoutParams(layoutParams);
140
+        fab.setLayoutParams(lp);
239 141
     }
240 142
 
241 143
     private void applyFabOptions(Fab fab, FabOptions options) {
@@ -373,14 +275,4 @@ public class FabPresenter {
373 275
             fabMenu.disableCollapse();
374 276
         }
375 277
     }
376
-
377
-    private void setGravityParam(FrameLayout.LayoutParams params, int gravityParam) {
378
-        params.gravity = params.gravity | gravityParam;
379
-    }
380
-
381
-    private void removeGravityParam(FrameLayout.LayoutParams params, int gravityParam) {
382
-        if ((params.gravity & gravityParam) == gravityParam) {
383
-            params.gravity = params.gravity & ~gravityParam;
384
-        }
385
-    }
386 278
 }

+ 8
- 0
lib/android/app/src/main/java/com/reactnativenavigation/utils/CoordinatorLayoutUtils.java View File

@@ -1,5 +1,9 @@
1 1
 package com.reactnativenavigation.utils;
2 2
 
3
+import android.view.View;
4
+
5
+import com.reactnativenavigation.R;
6
+
3 7
 import androidx.coordinatorlayout.widget.CoordinatorLayout;
4 8
 
5 9
 import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
@@ -14,4 +18,8 @@ public class CoordinatorLayoutUtils {
14 18
         lp.setBehavior(behavior);
15 19
         return lp;
16 20
     }
21
+
22
+    public static void updateBottomMargin(View view, int additionalMargin) {
23
+        ((CoordinatorLayout.LayoutParams) view.getLayoutParams()).bottomMargin = additionalMargin + ViewTags.get(view, R.id.fab_bottom_margin, 0);
24
+    }
17 25
 }

+ 2
- 2
lib/android/app/src/main/java/com/reactnativenavigation/utils/ObjectUtils.java View File

@@ -1,10 +1,10 @@
1 1
 package com.reactnativenavigation.utils;
2 2
 
3
-import androidx.annotation.Nullable;
4
-
5 3
 import com.reactnativenavigation.utils.Functions.Func1;
6 4
 import com.reactnativenavigation.utils.Functions.FuncR1;
7 5
 
6
+import androidx.annotation.Nullable;
7
+
8 8
 public class ObjectUtils {
9 9
     public static <T> void perform(@Nullable T obj, Func1<T> action) {
10 10
         if (obj != null) action.run(obj);

+ 11
- 0
lib/android/app/src/main/java/com/reactnativenavigation/utils/ViewTags.java View File

@@ -0,0 +1,11 @@
1
+package com.reactnativenavigation.utils;
2
+
3
+import android.view.View;
4
+
5
+import androidx.annotation.NonNull;
6
+
7
+public class ViewTags {
8
+    public static @NonNull <T> T get(View view, int key, @NonNull T defaultValue) {
9
+        return view.getTag(key) == null ? defaultValue : (T) view.getTag(key);
10
+    }
11
+}

+ 6
- 0
lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/ComponentViewController.java View File

@@ -3,6 +3,7 @@ package com.reactnativenavigation.viewcontrollers;
3 3
 import android.app.Activity;
4 4
 import android.view.View;
5 5
 
6
+import com.reactnativenavigation.interfaces.ScrollEventListener;
6 7
 import com.reactnativenavigation.parse.Options;
7 8
 import com.reactnativenavigation.presentation.ComponentPresenter;
8 9
 import com.reactnativenavigation.presentation.Presenter;
@@ -45,6 +46,11 @@ public class ComponentViewController extends ChildController<ComponentLayout> {
45 46
         presenter.setDefaultOptions(defaultOptions);
46 47
     }
47 48
 
49
+    @Override
50
+    public ScrollEventListener getScrollEventListener() {
51
+        return perform(view, null, ComponentLayout::getScrollEventListener);
52
+    }
53
+
48 54
     @Override
49 55
     public void onViewAppeared() {
50 56
         super.onViewAppeared();

+ 5
- 0
lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/ViewController.java View File

@@ -6,6 +6,7 @@ import android.view.ViewGroup;
6 6
 import android.view.ViewManager;
7 7
 import android.view.ViewTreeObserver;
8 8
 
9
+import com.reactnativenavigation.interfaces.ScrollEventListener;
9 10
 import com.reactnativenavigation.parse.Options;
10 11
 import com.reactnativenavigation.parse.params.Bool;
11 12
 import com.reactnativenavigation.parse.params.NullBool;
@@ -86,6 +87,10 @@ public abstract class ViewController<T extends ViewGroup> implements ViewTreeObs
86 87
         this.waitForRender = waitForRender;
87 88
     }
88 89
 
90
+    public ScrollEventListener getScrollEventListener() {
91
+        return null;
92
+    }
93
+
89 94
     public void addOnAppearedListener(Runnable onAppearedListener) {
90 95
         onAppearedListeners.add(onAppearedListener);
91 96
     }

+ 10
- 7
lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java View File

@@ -18,7 +18,8 @@ import com.reactnativenavigation.viewcontrollers.ParentController;
18 18
 import com.reactnativenavigation.viewcontrollers.ViewController;
19 19
 import com.reactnativenavigation.viewcontrollers.topbar.TopBarController;
20 20
 import com.reactnativenavigation.views.Component;
21
-import com.reactnativenavigation.views.ReactComponent;
21
+import com.reactnativenavigation.views.Fab;
22
+import com.reactnativenavigation.views.FabMenu;
22 23
 import com.reactnativenavigation.views.StackLayout;
23 24
 import com.reactnativenavigation.views.stack.StackBehaviour;
24 25
 import com.reactnativenavigation.views.topbar.TopBar;
@@ -35,6 +36,7 @@ import androidx.viewpager.widget.ViewPager;
35 36
 
36 37
 import static com.reactnativenavigation.utils.CollectionUtils.*;
37 38
 import static com.reactnativenavigation.utils.CoordinatorLayoutUtils.matchParentWithBehaviour;
39
+import static com.reactnativenavigation.utils.CoordinatorLayoutUtils.updateBottomMargin;
38 40
 import static com.reactnativenavigation.utils.ObjectUtils.perform;
39 41
 
40 42
 public class StackController extends ParentController<StackLayout> {
@@ -98,9 +100,7 @@ public class StackController extends ParentController<StackLayout> {
98 100
     public void applyChildOptions(Options options, ViewController child) {
99 101
         super.applyChildOptions(options, child);
100 102
         presenter.applyChildOptions(resolveCurrentOptions(), this, child);
101
-        if (child.getView() instanceof ReactComponent) {
102
-            fabOptionsPresenter.applyOptions(this.options.fabOptions, (ReactComponent) child.getView(), getView());
103
-        }
103
+        fabOptionsPresenter.applyOptions(this.options.fabOptions, child, getView());
104 104
         performOnParentController(parent ->
105 105
                 parent.applyChildOptions(
106 106
                         this.options.copy()
@@ -119,8 +119,8 @@ public class StackController extends ParentController<StackLayout> {
119 119
         super.mergeChildOptions(options, child);
120 120
         if (child.isViewShown() && peek() == child) {
121 121
             presenter.mergeChildOptions(options, resolveCurrentOptions(), this, child);
122
-            if (options.fabOptions.hasValue() && child instanceof ReactComponent) {
123
-                fabOptionsPresenter.mergeOptions(options.fabOptions, (ReactComponent) child, getView());
122
+            if (options.fabOptions.hasValue()) {
123
+                fabOptionsPresenter.mergeOptions(options.fabOptions, child, getView());
124 124
             }
125 125
         }
126 126
         performOnParentController(parent ->
@@ -395,7 +395,10 @@ public class StackController extends ParentController<StackLayout> {
395 395
 
396 396
     @Override
397 397
     public boolean onDependentViewChanged(CoordinatorLayout parent, ViewGroup child, View dependency) {
398
-        perform(findController(child), controller -> presenter.applyTopInsets(this, controller));
398
+        perform(findController(child), controller -> {
399
+            if (dependency instanceof TopBar) presenter.applyTopInsets(this, controller);
400
+            if (dependency instanceof Fab || dependency instanceof FabMenu) updateBottomMargin(dependency, getBottomInset());
401
+        });
399 402
         return false;
400 403
     }
401 404
 

+ 5
- 1
lib/android/app/src/main/java/com/reactnativenavigation/views/stack/StackBehaviour.java View File

@@ -5,6 +5,8 @@ import android.view.ViewGroup;
5 5
 
6 6
 import com.reactnativenavigation.views.BehaviourAdapter;
7 7
 import com.reactnativenavigation.views.BehaviourDelegate;
8
+import com.reactnativenavigation.views.Fab;
9
+import com.reactnativenavigation.views.FabMenu;
8 10
 import com.reactnativenavigation.views.topbar.TopBar;
9 11
 
10 12
 import androidx.annotation.NonNull;
@@ -17,6 +19,8 @@ public class StackBehaviour<V extends ViewGroup> extends BehaviourDelegate {
17 19
 
18 20
     @Override
19 21
     public boolean layoutDependsOn(@NonNull CoordinatorLayout parent, @NonNull ViewGroup child, @NonNull View dependency) {
20
-        return dependency instanceof TopBar;
22
+        return dependency instanceof TopBar ||
23
+               dependency instanceof Fab ||
24
+               dependency instanceof FabMenu;
21 25
     }
22 26
 }

+ 1
- 0
lib/android/app/src/main/res/values/ids.xml View File

@@ -4,4 +4,5 @@
4 4
     <item name="fragment_screen_content" type="id"/>
5 5
     <item name="topBarBackgroundComponent" type="id"/>
6 6
     <item name="bottomTabs" type="id"/>
7
+    <item name="fab_bottom_margin" type="id" />
7 8
 </resources>

+ 2
- 1
lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/FloatingActionButtonTest.java View File

@@ -1,7 +1,6 @@
1 1
 package com.reactnativenavigation.viewcontrollers;
2 2
 
3 3
 import android.app.Activity;
4
-import androidx.annotation.NonNull;
5 4
 import android.view.View;
6 5
 import android.view.ViewGroup;
7 6
 
@@ -19,6 +18,8 @@ import com.reactnativenavigation.views.StackLayout;
19 18
 
20 19
 import org.junit.Test;
21 20
 
21
+import androidx.annotation.NonNull;
22
+
22 23
 import static org.assertj.core.api.Java6Assertions.assertThat;
23 24
 
24 25
 public class FloatingActionButtonTest extends BaseTest {

+ 1
- 1
lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.java View File

@@ -1080,7 +1080,7 @@ public class StackControllerTest extends BaseTest {
1080 1080
     public void onDependentViewChanged_delegatesToPresenter() {
1081 1081
         CoordinatorLayout parent = Mockito.mock(CoordinatorLayout.class);
1082 1082
         uut.push(child1, new CommandListenerAdapter());
1083
-        assertThat(uut.onDependentViewChanged(parent, child1.getView(), Mockito.mock(View.class))).isFalse();
1083
+        assertThat(uut.onDependentViewChanged(parent, child1.getView(), Mockito.mock(TopBar.class))).isFalse();
1084 1084
         verify(presenter).applyTopInsets(eq(uut), eq(child1));
1085 1085
     }
1086 1086
 

+ 2
- 1
playground/src/commons/Colors.js View File

@@ -1,4 +1,5 @@
1 1
 module.exports = {
2 2
   background: '#e8e8e8',
3
-  primary: '#5847ff'
3
+  primary: '#5847ff',
4
+  secondary: '#FFC249'
4 5
 }

+ 6
- 2
playground/src/screens/ButtonsScreen.js View File

@@ -19,11 +19,15 @@ const {
19 19
 class Options extends Component {
20 20
   static options() {
21 21
     return {
22
+      fab: {
23
+        id: 'fab',
24
+        icon: require('../../img/navicon_add.png'),
25
+        backgroundColor: Colors.secondary
26
+      },
22 27
       topBar: {
23
-        visible: true,
24 28
         testID: TOP_BAR,
25 29
         title: {
26
-          text: 'Styling Options'
30
+          text: 'Buttons'
27 31
         },
28 32
         rightButtons: [
29 33
           {