Explorar el Código

Save dynamic fab in ScreenParams (#858)

Since fab set dynamically wasn’t saved in screen params, when returning
to that screen the fab wasn't displayed.

This commit also enables setting fab dynamically in modals
Guy Carmeli hace 8 años
padre
commit
5cc24e1dbc

+ 5
- 0
android/app/src/main/java/com/reactnativenavigation/controllers/Modal.java Ver fichero

@@ -13,6 +13,7 @@ import com.reactnativenavigation.layouts.ModalScreenLayout;
13 13
 import com.reactnativenavigation.layouts.ScreenStackContainer;
14 14
 import com.reactnativenavigation.params.AppStyle;
15 15
 import com.reactnativenavigation.params.ContextualMenuParams;
16
+import com.reactnativenavigation.params.FabParams;
16 17
 import com.reactnativenavigation.params.Orientation;
17 18
 import com.reactnativenavigation.params.ScreenParams;
18 19
 import com.reactnativenavigation.params.TitleBarButtonParams;
@@ -47,6 +48,10 @@ public class Modal extends Dialog implements DialogInterface.OnDismissListener,
47 48
         layout.setTitleBarLeftButton(screenInstanceId, navigatorEventId, titleBarLeftButton);
48 49
     }
49 50
 
51
+    void setFab(String screenInstanceId, String navigatorEventId, FabParams fab) {
52
+        layout.setFab(screenInstanceId, navigatorEventId, fab);
53
+    }
54
+
50 55
     public void showContextualMenu(String screenInstanceId, ContextualMenuParams params, Callback onButtonClicked) {
51 56
         layout.showContextualMenu(screenInstanceId, params, onButtonClicked);
52 57
     }

+ 18
- 11
android/app/src/main/java/com/reactnativenavigation/controllers/ModalController.java Ver fichero

@@ -7,6 +7,7 @@ import com.reactnativenavigation.events.EventBus;
7 7
 import com.reactnativenavigation.events.ModalDismissedEvent;
8 8
 import com.reactnativenavigation.layouts.ScreenStackContainer;
9 9
 import com.reactnativenavigation.params.ContextualMenuParams;
10
+import com.reactnativenavigation.params.FabParams;
10 11
 import com.reactnativenavigation.params.ScreenParams;
11 12
 import com.reactnativenavigation.params.TitleBarButtonParams;
12 13
 import com.reactnativenavigation.params.TitleBarLeftButtonParams;
@@ -14,15 +15,15 @@ import com.reactnativenavigation.params.TitleBarLeftButtonParams;
14 15
 import java.util.List;
15 16
 import java.util.Stack;
16 17
 
17
-public class ModalController implements ScreenStackContainer, Modal.OnModalDismissedListener {
18
+class ModalController implements ScreenStackContainer, Modal.OnModalDismissedListener {
18 19
     private final AppCompatActivity activity;
19 20
     private Stack<Modal> stack = new Stack<>();
20 21
 
21
-    public ModalController(AppCompatActivity activity) {
22
+    ModalController(AppCompatActivity activity) {
22 23
         this.activity = activity;
23 24
     }
24 25
 
25
-    public boolean containsNavigator(String navigatorId) {
26
+    boolean containsNavigator(String navigatorId) {
26 27
         for (Modal modal : stack) {
27 28
             if (modal.containsNavigator(navigatorId)) {
28 29
                 return true;
@@ -31,26 +32,26 @@ public class ModalController implements ScreenStackContainer, Modal.OnModalDismi
31 32
         return false;
32 33
     }
33 34
 
34
-    public void showModal(ScreenParams screenParams) {
35
+    void showModal(ScreenParams screenParams) {
35 36
         Modal modal = new Modal(activity, this, screenParams);
36 37
         modal.show();
37 38
         stack.add(modal);
38 39
     }
39 40
 
40
-    public void dismissTopModal() {
41
+    void dismissTopModal() {
41 42
         if (isShowing()) {
42 43
             stack.pop().dismiss();
43 44
         }
44 45
     }
45 46
 
46
-    public void dismissAllModals() {
47
+    void dismissAllModals() {
47 48
         for (Modal modal : stack) {
48 49
             modal.dismiss();
49 50
         }
50 51
         stack.clear();
51 52
     }
52 53
 
53
-    public boolean isShowing() {
54
+    boolean isShowing() {
54 55
         return !stack.empty();
55 56
     }
56 57
 
@@ -97,30 +98,36 @@ public class ModalController implements ScreenStackContainer, Modal.OnModalDismi
97 98
         }
98 99
     }
99 100
 
100
-    public void setTitleBarTitle(String screenInstanceId, String title) {
101
+    void setTitleBarTitle(String screenInstanceId, String title) {
101 102
         for (Modal modal : stack) {
102 103
             modal.setTitleBarTitle(screenInstanceId, title);
103 104
         }
104 105
     }
105 106
 
106
-    public void setTitleBarSubtitle(String screenInstanceId, String subtitle) {
107
+    void setTitleBarSubtitle(String screenInstanceId, String subtitle) {
107 108
         for (Modal modal : stack) {
108 109
             modal.setTitleBarSubtitle(screenInstanceId, subtitle);
109 110
         }
110 111
     }
111 112
 
112
-    public void setTitleBarRightButtons(String screenInstanceId, String navigatorEventId, List<TitleBarButtonParams> titleBarButtons) {
113
+    void setTitleBarRightButtons(String screenInstanceId, String navigatorEventId, List<TitleBarButtonParams> titleBarButtons) {
113 114
         for (Modal modal : stack) {
114 115
             modal.setTitleBarRightButtons(screenInstanceId, navigatorEventId, titleBarButtons);
115 116
         }
116 117
     }
117 118
 
118
-    public void setTitleBarLeftButton(String screenInstanceId, String navigatorEventId, TitleBarLeftButtonParams titleBarLeftButton) {
119
+    void setTitleBarLeftButton(String screenInstanceId, String navigatorEventId, TitleBarLeftButtonParams titleBarLeftButton) {
119 120
         for (Modal modal : stack) {
120 121
             modal.setTitleBarLeftButton(screenInstanceId, navigatorEventId, titleBarLeftButton);
121 122
         }
122 123
     }
123 124
 
125
+    void setFab(String screenInstanceId, String navigatorEventId, FabParams fab) {
126
+        for (Modal modal : stack) {
127
+            modal.setFab(screenInstanceId, navigatorEventId, fab);
128
+        }
129
+    }
130
+
124 131
     public void showContextualMenu(String screenInstanceId, ContextualMenuParams params, Callback onButtonClicked) {
125 132
         for (Modal modal : stack) {
126 133
             modal.showContextualMenu(screenInstanceId, params, onButtonClicked);

+ 1
- 0
android/app/src/main/java/com/reactnativenavigation/controllers/NavigationActivity.java Ver fichero

@@ -277,6 +277,7 @@ public class NavigationActivity extends AppCompatActivity implements DefaultHard
277 277
 
278 278
     void setScreenFab(String screenInstanceId, String navigatorEventId, FabParams fab) {
279 279
         layout.setFab(screenInstanceId, navigatorEventId, fab);
280
+        modalController.setFab(screenInstanceId, navigatorEventId, fab);
280 281
     }
281 282
 
282 283
     public void toggleSideMenuVisible(boolean animated, Side side) {

+ 1
- 1
android/app/src/main/java/com/reactnativenavigation/layouts/BottomTabsLayout.java Ver fichero

@@ -187,7 +187,7 @@ public class BottomTabsLayout extends BaseLayout implements AHBottomNavigation.O
187 187
     @Override
188 188
     public void setFab(String screenInstanceId, String navigatorEventId, FabParams fabParams) {
189 189
         for (int i = 0; i < bottomTabs.getItemsCount(); i++) {
190
-            screenStacks[i].setFab(screenInstanceId, navigatorEventId, fabParams);
190
+            screenStacks[i].setFab(screenInstanceId, fabParams);
191 191
         }
192 192
     }
193 193
 

+ 1
- 1
android/app/src/main/java/com/reactnativenavigation/layouts/SingleScreenLayout.java Ver fichero

@@ -192,7 +192,7 @@ public class SingleScreenLayout extends BaseLayout {
192 192
 
193 193
     @Override
194 194
     public void setFab(String screenInstanceId, String navigatorEventId, FabParams fabParams) {
195
-        stack.setFab(screenInstanceId, navigatorEventId, fabParams);
195
+        stack.setFab(screenInstanceId, fabParams);
196 196
     }
197 197
 
198 198
     @Override

+ 4
- 0
android/app/src/main/java/com/reactnativenavigation/params/BaseScreenParams.java Ver fichero

@@ -44,4 +44,8 @@ public class BaseScreenParams {
44 44
     public FabParams getFab() {
45 45
         return fabParams;
46 46
     }
47
+
48
+    public void setFab(FabParams params) {
49
+        fabParams = params;
50
+    }
47 51
 }

+ 3
- 3
android/app/src/main/java/com/reactnativenavigation/screens/ScreenStack.java Ver fichero

@@ -294,11 +294,11 @@ public class ScreenStack {
294 294
         });
295 295
     }
296 296
 
297
-    public void setFab(String screenInstanceId, final String navigatorEventId, final FabParams fabParams) {
297
+    public void setFab(String screenInstanceId, final FabParams fabParams) {
298 298
         performOnScreen(screenInstanceId, new Task<Screen>() {
299 299
             @Override
300
-            public void run(Screen param) {
301
-                param.setFab(fabParams);
300
+            public void run(Screen screen) {
301
+                screen.setFab(fabParams);
302 302
             }
303 303
         });
304 304
     }

+ 7
- 0
android/app/src/main/java/com/reactnativenavigation/screens/ViewPagerScreen.java Ver fichero

@@ -6,6 +6,7 @@ import android.support.v4.view.ViewPager;
6 6
 import android.support.v7.app.AppCompatActivity;
7 7
 
8 8
 import com.reactnativenavigation.params.BaseScreenParams;
9
+import com.reactnativenavigation.params.FabParams;
9 10
 import com.reactnativenavigation.params.PageParams;
10 11
 import com.reactnativenavigation.params.ScreenParams;
11 12
 import com.reactnativenavigation.views.ContentView;
@@ -32,6 +33,12 @@ public class ViewPagerScreen extends Screen {
32 33
         return screenParams.topTabParams.get(viewPager.getCurrentItem());
33 34
     }
34 35
 
36
+    @Override
37
+    public void setFab(FabParams fabParams) {
38
+        super.setFab(fabParams);
39
+        getScreenParams().fabParams = fabParams;
40
+    }
41
+
35 42
     @Override
36 43
     protected void createContent() {
37 44
         TopTabs topTabs = topBar.initTabs();