Browse Source

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 8 years ago
parent
commit
5cc24e1dbc

+ 5
- 0
android/app/src/main/java/com/reactnativenavigation/controllers/Modal.java View File

13
 import com.reactnativenavigation.layouts.ScreenStackContainer;
13
 import com.reactnativenavigation.layouts.ScreenStackContainer;
14
 import com.reactnativenavigation.params.AppStyle;
14
 import com.reactnativenavigation.params.AppStyle;
15
 import com.reactnativenavigation.params.ContextualMenuParams;
15
 import com.reactnativenavigation.params.ContextualMenuParams;
16
+import com.reactnativenavigation.params.FabParams;
16
 import com.reactnativenavigation.params.Orientation;
17
 import com.reactnativenavigation.params.Orientation;
17
 import com.reactnativenavigation.params.ScreenParams;
18
 import com.reactnativenavigation.params.ScreenParams;
18
 import com.reactnativenavigation.params.TitleBarButtonParams;
19
 import com.reactnativenavigation.params.TitleBarButtonParams;
47
         layout.setTitleBarLeftButton(screenInstanceId, navigatorEventId, titleBarLeftButton);
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
     public void showContextualMenu(String screenInstanceId, ContextualMenuParams params, Callback onButtonClicked) {
55
     public void showContextualMenu(String screenInstanceId, ContextualMenuParams params, Callback onButtonClicked) {
51
         layout.showContextualMenu(screenInstanceId, params, onButtonClicked);
56
         layout.showContextualMenu(screenInstanceId, params, onButtonClicked);
52
     }
57
     }

+ 18
- 11
android/app/src/main/java/com/reactnativenavigation/controllers/ModalController.java View File

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

+ 1
- 0
android/app/src/main/java/com/reactnativenavigation/controllers/NavigationActivity.java View File

277
 
277
 
278
     void setScreenFab(String screenInstanceId, String navigatorEventId, FabParams fab) {
278
     void setScreenFab(String screenInstanceId, String navigatorEventId, FabParams fab) {
279
         layout.setFab(screenInstanceId, navigatorEventId, fab);
279
         layout.setFab(screenInstanceId, navigatorEventId, fab);
280
+        modalController.setFab(screenInstanceId, navigatorEventId, fab);
280
     }
281
     }
281
 
282
 
282
     public void toggleSideMenuVisible(boolean animated, Side side) {
283
     public void toggleSideMenuVisible(boolean animated, Side side) {

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

187
     @Override
187
     @Override
188
     public void setFab(String screenInstanceId, String navigatorEventId, FabParams fabParams) {
188
     public void setFab(String screenInstanceId, String navigatorEventId, FabParams fabParams) {
189
         for (int i = 0; i < bottomTabs.getItemsCount(); i++) {
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 View File

192
 
192
 
193
     @Override
193
     @Override
194
     public void setFab(String screenInstanceId, String navigatorEventId, FabParams fabParams) {
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
     @Override
198
     @Override

+ 4
- 0
android/app/src/main/java/com/reactnativenavigation/params/BaseScreenParams.java View File

44
     public FabParams getFab() {
44
     public FabParams getFab() {
45
         return fabParams;
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 View File

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
         performOnScreen(screenInstanceId, new Task<Screen>() {
298
         performOnScreen(screenInstanceId, new Task<Screen>() {
299
             @Override
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 View File

6
 import android.support.v7.app.AppCompatActivity;
6
 import android.support.v7.app.AppCompatActivity;
7
 
7
 
8
 import com.reactnativenavigation.params.BaseScreenParams;
8
 import com.reactnativenavigation.params.BaseScreenParams;
9
+import com.reactnativenavigation.params.FabParams;
9
 import com.reactnativenavigation.params.PageParams;
10
 import com.reactnativenavigation.params.PageParams;
10
 import com.reactnativenavigation.params.ScreenParams;
11
 import com.reactnativenavigation.params.ScreenParams;
11
 import com.reactnativenavigation.views.ContentView;
12
 import com.reactnativenavigation.views.ContentView;
32
         return screenParams.topTabParams.get(viewPager.getCurrentItem());
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
     @Override
42
     @Override
36
     protected void createContent() {
43
     protected void createContent() {
37
         TopTabs topTabs = topBar.initTabs();
44
         TopTabs topTabs = topBar.initTabs();