Browse Source

Implement setSideMenuVisible and toggleSideMenuVisible

Guy Carmeli 8 years ago
parent
commit
b53481d285

+ 7
- 1
android/app/src/main/java/com/reactnativenavigation/bridge/NavigationReactModule.java View File

@@ -80,7 +80,13 @@ public class NavigationReactModule extends ReactContextBaseJavaModule {
80 80
     }
81 81
 
82 82
     @ReactMethod
83
-    public void toggleSideMenuVisible(final ReadableMap params) {
83
+    public void toggleSideMenuVisible(boolean animated) {
84
+        NavigationCommandsHandler.toggleSideMenuVisible(animated);
85
+    }
86
+
87
+    @ReactMethod
88
+    public void setSideMenuVisible(boolean animated, boolean visible) {
89
+        NavigationCommandsHandler.setSideMenuVisible(animated, visible);
84 90
     }
85 91
 
86 92
     @ReactMethod

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

@@ -195,4 +195,12 @@ public class NavigationActivity extends AppCompatActivity implements DefaultHard
195 195
         layout.setTitleBarLeftButton(screenInstanceId, navigatorEventId, titleBarLeftButton);
196 196
         modalController.setTitleBarLeftButton(screenInstanceId, navigatorEventId, titleBarLeftButton);
197 197
     }
198
+
199
+    public void toggleSideMenuVisible(boolean animated) {
200
+        layout.toggleSideMenuVisible(animated);
201
+    }
202
+
203
+    public void setSideMenuVisible(boolean animated, boolean visible) {
204
+        layout.setSideMenuVisible(animated, visible);
205
+    }
198 206
 }

+ 28
- 0
android/app/src/main/java/com/reactnativenavigation/controllers/NavigationCommandsHandler.java View File

@@ -210,4 +210,32 @@ public class NavigationCommandsHandler {
210 210
             }
211 211
         });
212 212
     }
213
+
214
+    public static void toggleSideMenuVisible(final boolean animated) {
215
+        final NavigationActivity currentActivity = NavigationActivity.currentActivity;
216
+        if (currentActivity == null) {
217
+            return;
218
+        }
219
+
220
+        NavigationApplication.instance.runOnMainThread(new Runnable() {
221
+            @Override
222
+            public void run() {
223
+                currentActivity.toggleSideMenuVisible(animated);
224
+            }
225
+        });
226
+    }
227
+
228
+    public static void setSideMenuVisible(final boolean animated, final boolean visible) {
229
+        final NavigationActivity currentActivity = NavigationActivity.currentActivity;
230
+        if (currentActivity == null) {
231
+            return;
232
+        }
233
+
234
+        NavigationApplication.instance.runOnMainThread(new Runnable() {
235
+            @Override
236
+            public void run() {
237
+                currentActivity.setSideMenuVisible(animated, visible);
238
+            }
239
+        });
240
+    }
213 241
 }

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

@@ -126,6 +126,16 @@ public class BottomTabsLayout extends RelativeLayout implements Layout, AHBottom
126 126
         }
127 127
     }
128 128
 
129
+    @Override
130
+    public void toggleSideMenuVisible(boolean animated) {
131
+
132
+    }
133
+
134
+    @Override
135
+    public void setSideMenuVisible(boolean animated, boolean visible) {
136
+
137
+    }
138
+
129 139
     @Override
130 140
     public void push(ScreenParams screenParams) {
131 141
         getCurrentScreenStack().push(screenParams, createScreenLayoutParams(screenParams));

+ 4
- 0
android/app/src/main/java/com/reactnativenavigation/layouts/Layout.java View File

@@ -19,4 +19,8 @@ public interface Layout extends ScreenStackContainer {
19 19
     void setTitleBarRightButtons(String screenInstanceId, String navigatorEventId, List<TitleBarButtonParams> titleBarButtons);
20 20
 
21 21
     void setTitleBarLeftButton(String screenInstanceId, String navigatorEventId, TitleBarLeftButtonParams titleBarLeftButtonParams);
22
+
23
+    void toggleSideMenuVisible(boolean animated);
24
+
25
+    void setSideMenuVisible(boolean animated, boolean visible);
22 26
 }

+ 14
- 0
android/app/src/main/java/com/reactnativenavigation/layouts/SingleScreenLayout.java View File

@@ -132,6 +132,20 @@ public class SingleScreenLayout extends RelativeLayout implements Layout {
132 132
         stack.setScreenTitleBarLeftButton(screenInstanceId, navigatorEventId, titleBarLeftButtonParams);
133 133
     }
134 134
 
135
+    @Override
136
+    public void toggleSideMenuVisible(boolean animated) {
137
+        if (sideMenu != null) {
138
+            sideMenu.toggleVisible(animated);
139
+        }
140
+    }
141
+
142
+    @Override
143
+    public void setSideMenuVisible(boolean animated, boolean visible) {
144
+        if (sideMenu != null) {
145
+            sideMenu.setVisible(visible, animated);
146
+        }
147
+    }
148
+
135 149
     @Override
136 150
     public boolean onTitleBarBackButtonClick() {
137 151
         if (leftButtonOnClickListener != null) {

+ 26
- 0
android/app/src/main/java/com/reactnativenavigation/views/SideMenu.java View File

@@ -23,10 +23,36 @@ public class SideMenu extends DrawerLayout {
23 23
         removeView(sideMenuView);
24 24
     }
25 25
 
26
+    public void setVisible(boolean visible, boolean animated) {
27
+        if (!isShown() && visible) {
28
+            openDrawer(animated);
29
+        }
30
+
31
+        if (isShown() && !visible) {
32
+            closeDrawer(animated);
33
+        }
34
+    }
35
+
26 36
     public void openDrawer() {
27 37
         openDrawer(Gravity.LEFT);
28 38
     }
29 39
 
40
+    public void openDrawer(boolean animated) {
41
+        openDrawer(Gravity.LEFT, animated);
42
+    }
43
+
44
+    public void closeDrawer(boolean animated) {
45
+        closeDrawer(Gravity.LEFT, animated);
46
+    }
47
+
48
+    public void toggleVisible(boolean animated) {
49
+        if (isShown()) {
50
+            closeDrawer(animated);
51
+        } else {
52
+            openDrawer(animated);
53
+        }
54
+    }
55
+
30 56
     public SideMenu(Context context, SideMenuParams sideMenuParams) {
31 57
         super(context);
32 58
         createContentContainer();

+ 7
- 6
src/deprecated/platformSpecificDeprecated.android.js View File

@@ -243,11 +243,13 @@ function navigatorSwitchToTab(navigator, params) {
243 243
 }
244 244
 
245 245
 function navigatorToggleDrawer(navigator, params) {
246
-  //RctActivity.toggleDrawer({
247
-  //  side: params.side,
248
-  //  animated: !(params.animated === false),
249
-  //  to: params.to || ''
250
-  //});
246
+  const animated = !(params.animated === false);
247
+  if (params.to) {
248
+    const visible = params.to === 'open';
249
+    newPlatformSpecific.setSideMenuVisible(animated, visible);
250
+  } else {
251
+    newPlatformSpecific.toggleSideMenuVisible(animated);
252
+  }
251 253
 }
252 254
 
253 255
 function navigatorToggleNavBar(navigator, params) {
@@ -317,7 +319,6 @@ function addNavigatorButtons(screen, sideMenuParams) {
317 319
   }
318 320
 
319 321
   let leftButton = getLeftButton(screen);
320
-  debugger;
321 322
   if (sideMenuParams && !leftButton) {
322 323
     leftButton = createSideMenuButton();
323 324
   }

+ 11
- 1
src/platformSpecific.android.js View File

@@ -80,6 +80,14 @@ function savePassProps(params) {
80 80
   }
81 81
 }
82 82
 
83
+function toggleSideMenuVisible(animated) {
84
+  NativeReactModule.toggleSideMenuVisible(animated);
85
+}
86
+
87
+function setSideMenuVisible(animated, visible) {
88
+  NativeReactModule.setSideMenuVisible(animated, visible);
89
+}
90
+
83 91
 module.exports = {
84 92
   startApp,
85 93
   push,
@@ -92,5 +100,7 @@ module.exports = {
92 100
   setScreenTitleBarButtons,
93 101
   showModal,
94 102
   dismissTopModal,
95
-  dismissAllModals
103
+  dismissAllModals,
104
+  toggleSideMenuVisible,
105
+  setSideMenuVisible
96 106
 };