Browse Source

Implement SideMenu in BottomTabsLayout

Guy Carmeli 8 years ago
parent
commit
55eb1f5790

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

1
 package com.reactnativenavigation.layouts;
1
 package com.reactnativenavigation.layouts;
2
 
2
 
3
 import android.support.annotation.NonNull;
3
 import android.support.annotation.NonNull;
4
+import android.support.annotation.Nullable;
4
 import android.support.v7.app.AppCompatActivity;
5
 import android.support.v7.app.AppCompatActivity;
5
 import android.view.View;
6
 import android.view.View;
6
 import android.widget.RelativeLayout;
7
 import android.widget.RelativeLayout;
8
 import com.aurelhubert.ahbottomnavigation.AHBottomNavigation;
9
 import com.aurelhubert.ahbottomnavigation.AHBottomNavigation;
9
 import com.reactnativenavigation.params.ActivityParams;
10
 import com.reactnativenavigation.params.ActivityParams;
10
 import com.reactnativenavigation.params.ScreenParams;
11
 import com.reactnativenavigation.params.ScreenParams;
12
+import com.reactnativenavigation.params.SideMenuParams;
11
 import com.reactnativenavigation.params.TitleBarButtonParams;
13
 import com.reactnativenavigation.params.TitleBarButtonParams;
12
 import com.reactnativenavigation.params.TitleBarLeftButtonParams;
14
 import com.reactnativenavigation.params.TitleBarLeftButtonParams;
13
 import com.reactnativenavigation.screens.ScreenStack;
15
 import com.reactnativenavigation.screens.ScreenStack;
14
 import com.reactnativenavigation.views.BottomTabs;
16
 import com.reactnativenavigation.views.BottomTabs;
17
+import com.reactnativenavigation.views.SideMenu;
15
 
18
 
16
 import java.util.List;
19
 import java.util.List;
17
 
20
 
24
     private ActivityParams params;
27
     private ActivityParams params;
25
     private BottomTabs bottomTabs;
28
     private BottomTabs bottomTabs;
26
     private ScreenStack[] screenStacks;
29
     private ScreenStack[] screenStacks;
30
+    private final SideMenuParams sideMenuParams;
31
+    private @Nullable SideMenu sideMenu;
27
     private int currentStackIndex = 0;
32
     private int currentStackIndex = 0;
28
 
33
 
29
     public BottomTabsLayout(AppCompatActivity activity, ActivityParams params) {
34
     public BottomTabsLayout(AppCompatActivity activity, ActivityParams params) {
30
         super(activity);
35
         super(activity);
31
         this.activity = activity;
36
         this.activity = activity;
32
         this.params = params;
37
         this.params = params;
38
+        this.sideMenuParams = params.sideMenuParams;
33
         screenStacks = new ScreenStack[params.tabParams.size()];
39
         screenStacks = new ScreenStack[params.tabParams.size()];
34
         createLayout();
40
         createLayout();
35
     }
41
     }
36
 
42
 
37
     private void createLayout() {
43
     private void createLayout() {
44
+        createSideMenu();
38
         createBottomTabs();
45
         createBottomTabs();
39
-        addBottomTabsToScreen();
46
+        addBottomTabs();
40
         addScreenStacks();
47
         addScreenStacks();
41
         showInitialScreenStack();
48
         showInitialScreenStack();
42
     }
49
     }
43
 
50
 
51
+    private void createSideMenu() {
52
+        if (sideMenuParams == null) {
53
+            return;
54
+        }
55
+
56
+        sideMenu = new SideMenu(getContext(), sideMenuParams);
57
+        RelativeLayout.LayoutParams lp = new LayoutParams(MATCH_PARENT, MATCH_PARENT);
58
+        addView(sideMenu, lp);
59
+    }
60
+
44
     private void addScreenStacks() {
61
     private void addScreenStacks() {
45
         for (int i = 0; i < screenStacks.length; i++) {
62
         for (int i = 0; i < screenStacks.length; i++) {
46
             createAndAddScreens(i);
63
             createAndAddScreens(i);
48
     }
65
     }
49
 
66
 
50
     private void createAndAddScreens(int position) {
67
     private void createAndAddScreens(int position) {
51
-        ScreenStack newStack = new ScreenStack(activity, this, this);
68
+        ScreenStack newStack = new ScreenStack(activity, getContentContainer(), this);
52
         ScreenParams screenParams = params.tabParams.get(position);
69
         ScreenParams screenParams = params.tabParams.get(position);
53
         newStack.pushInitialScreen(screenParams, createScreenLayoutParams(screenParams));
70
         newStack.pushInitialScreen(screenParams, createScreenLayoutParams(screenParams));
54
         screenStacks[position] = newStack;
71
         screenStacks[position] = newStack;
55
     }
72
     }
56
 
73
 
74
+    private RelativeLayout getContentContainer() {
75
+        return sideMenu == null ? this : sideMenu.getContentContainer();
76
+    }
77
+
57
     @NonNull
78
     @NonNull
58
     private LayoutParams createScreenLayoutParams(ScreenParams params) {
79
     private LayoutParams createScreenLayoutParams(ScreenParams params) {
59
         LayoutParams lp = new LayoutParams(MATCH_PARENT, MATCH_PARENT);
80
         LayoutParams lp = new LayoutParams(MATCH_PARENT, MATCH_PARENT);
68
         bottomTabs.addTabs(params.tabParams, this);
89
         bottomTabs.addTabs(params.tabParams, this);
69
     }
90
     }
70
 
91
 
71
-    private void addBottomTabsToScreen() {
92
+    private void addBottomTabs() {
72
         LayoutParams lp = new LayoutParams(MATCH_PARENT, WRAP_CONTENT);
93
         LayoutParams lp = new LayoutParams(MATCH_PARENT, WRAP_CONTENT);
73
         lp.addRule(ALIGN_PARENT_BOTTOM);
94
         lp.addRule(ALIGN_PARENT_BOTTOM);
74
-        addView(bottomTabs, lp);
95
+        getContentContainer().addView(bottomTabs, lp);
75
     }
96
     }
76
 
97
 
77
     private void showInitialScreenStack() {
98
     private void showInitialScreenStack() {
128
 
149
 
129
     @Override
150
     @Override
130
     public void toggleSideMenuVisible(boolean animated) {
151
     public void toggleSideMenuVisible(boolean animated) {
131
-
152
+        if (sideMenu != null) {
153
+            sideMenu.toggleVisible(animated);
154
+        }
132
     }
155
     }
133
 
156
 
134
     @Override
157
     @Override
135
     public void setSideMenuVisible(boolean animated, boolean visible) {
158
     public void setSideMenuVisible(boolean animated, boolean visible) {
136
-
159
+        if (sideMenu != null) {
160
+            sideMenu.setVisible(visible, animated);
161
+        }
137
     }
162
     }
138
 
163
 
139
     @Override
164
     @Override
177
         for (ScreenStack screenStack : screenStacks) {
202
         for (ScreenStack screenStack : screenStacks) {
178
             screenStack.destroy();
203
             screenStack.destroy();
179
         }
204
         }
205
+
206
+        if (sideMenu != null) {
207
+            sideMenu.destroy();
208
+        }
180
     }
209
     }
181
 
210
 
182
     @Override
211
     @Override
225
 
254
 
226
     @Override
255
     @Override
227
     public void onSideMenuButtonClick() {
256
     public void onSideMenuButtonClick() {
228
-
257
+        if (sideMenu != null) {
258
+            sideMenu.openDrawer();
259
+        }
229
     }
260
     }
230
 }
261
 }

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

1
 package com.reactnativenavigation.layouts;
1
 package com.reactnativenavigation.layouts;
2
 
2
 
3
 import android.support.v7.app.AppCompatActivity;
3
 import android.support.v7.app.AppCompatActivity;
4
+import android.util.Log;
4
 
5
 
5
 import com.reactnativenavigation.params.ActivityParams;
6
 import com.reactnativenavigation.params.ActivityParams;
6
 
7
 
27
     }
28
     }
28
 
29
 
29
     private static void removeAllButTheFirst5Tabs(ActivityParams params) {
30
     private static void removeAllButTheFirst5Tabs(ActivityParams params) {
30
-        android.util.Log.e("LOG", "LayoutFactory:createBottomTabsScreenLayout() does not support more than 5 tabs, currently");
31
+        Log.e("Navigation", "LayoutFactory:createBottomTabsScreenLayout() does not support more than 5 tabs, currently");
31
         while (params.tabParams.size() > 5) {
32
         while (params.tabParams.size() > 5) {
32
             params.tabParams.remove(params.tabParams.size() - 1);
33
             params.tabParams.remove(params.tabParams.size() - 1);
33
         }
34
         }

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

167
 
167
 
168
   params.tabs.forEach(function(tab, idx) {
168
   params.tabs.forEach(function(tab, idx) {
169
     addNavigatorParams(tab, null, idx);
169
     addNavigatorParams(tab, null, idx);
170
-    addNavigatorButtons(tab);
170
+    addNavigatorButtons(tab, params.drawer);
171
     addNavigationStyleParams(tab);
171
     addNavigationStyleParams(tab);
172
     addTabIcon(tab);
172
     addTabIcon(tab);
173
     tab.passProps = params.passProps;
173
     tab.passProps = params.passProps;
183
   params.tabs = newTabs;
183
   params.tabs = newTabs;
184
 
184
 
185
   params.appStyle = convertStyleParams(params.appStyle);
185
   params.appStyle = convertStyleParams(params.appStyle);
186
-  // TODO: add drawer params
186
+  params.sideMenu = convertDrawerParamsToSideMenuParams(params.drawer);
187
 
187
 
188
   newPlatformSpecific.startApp(params);
188
   newPlatformSpecific.startApp(params);
189
 }
189
 }