Browse Source

Add toggle bottomTabs

works best with drawUnderTabBar
Guy Carmeli 8 years ago
parent
commit
4f1ed3a0fd

+ 4
- 3
android/app/src/main/java/com/reactnativenavigation/bridge/NavigationReactModule.java View File

88
     }
88
     }
89
 
89
 
90
     @ReactMethod
90
     @ReactMethod
91
-    public void setTopBarVisible(String screenInstanceID, boolean hidden, boolean animated) {
92
-        NavigationCommandsHandler.setTopBarVisible(screenInstanceID, hidden, animated);
91
+    public void setTopBarVisible(String screenInstanceId, boolean hidden, boolean animated) {
92
+        NavigationCommandsHandler.setTopBarVisible(screenInstanceId, hidden, animated);
93
     }
93
     }
94
 
94
 
95
     @ReactMethod
95
     @ReactMethod
97
     }
97
     }
98
 
98
 
99
     @ReactMethod
99
     @ReactMethod
100
-    public void setBottomTabsVisible(final ReadableMap params) {
100
+    public void setBottomTabsVisible(boolean hidden, boolean animated) {
101
+        NavigationCommandsHandler.setBottomTabsVisible(hidden, animated);
101
     }
102
     }
102
 
103
 
103
     @ReactMethod
104
     @ReactMethod

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

7
 
7
 
8
 import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
8
 import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
9
 import com.reactnativenavigation.NavigationApplication;
9
 import com.reactnativenavigation.NavigationApplication;
10
+import com.reactnativenavigation.layouts.BottomTabsLayout;
10
 import com.reactnativenavigation.layouts.Layout;
11
 import com.reactnativenavigation.layouts.Layout;
11
 import com.reactnativenavigation.layouts.LayoutFactory;
12
 import com.reactnativenavigation.layouts.LayoutFactory;
12
 import com.reactnativenavigation.params.ActivityParams;
13
 import com.reactnativenavigation.params.ActivityParams;
147
         modalController.setTopBarVisible(screenInstanceId, hidden, animated);
148
         modalController.setTopBarVisible(screenInstanceId, hidden, animated);
148
     }
149
     }
149
 
150
 
151
+    public void setBottomTabsVisible(boolean hidden, boolean animated) {
152
+        if (layout instanceof BottomTabsLayout) {
153
+            ((BottomTabsLayout) layout).setBottomTabsVisible(hidden, animated);
154
+        }
155
+    }
156
+
150
     void setTitleBarTitle(String screenInstanceId, String title) {
157
     void setTitleBarTitle(String screenInstanceId, String title) {
151
         layout.setTitleBarTitle(screenInstanceId, title);
158
         layout.setTitleBarTitle(screenInstanceId, title);
152
         modalController.setTitleBarTitle(screenInstanceId, title);
159
         modalController.setTitleBarTitle(screenInstanceId, title);

+ 14
- 1
android/app/src/main/java/com/reactnativenavigation/controllers/NavigationCommandsHandler.java View File

48
         });
48
         });
49
     }
49
     }
50
 
50
 
51
-
52
     public static void pop(Bundle screenParams) {
51
     public static void pop(Bundle screenParams) {
53
         final NavigationActivity currentActivity = NavigationActivity.currentActivity;
52
         final NavigationActivity currentActivity = NavigationActivity.currentActivity;
54
         if (currentActivity == null) {
53
         if (currentActivity == null) {
108
         });
107
         });
109
     }
108
     }
110
 
109
 
110
+    public static void setBottomTabsVisible(final boolean hidden, final boolean animated) {
111
+        final NavigationActivity currentActivity = NavigationActivity.currentActivity;
112
+        if (currentActivity == null) {
113
+            return;
114
+        }
115
+
116
+        NavigationApplication.instance.runOnMainThread(new Runnable() {
117
+            @Override
118
+            public void run() {
119
+                currentActivity.setBottomTabsVisible(hidden, animated);
120
+            }
121
+        });
122
+    }
123
+
111
     public static void setScreenTitleBarTitle(final String screenInstanceId, final String title) {
124
     public static void setScreenTitleBarTitle(final String screenInstanceId, final String title) {
112
         final NavigationActivity currentActivity = NavigationActivity.currentActivity;
125
         final NavigationActivity currentActivity = NavigationActivity.currentActivity;
113
         if (currentActivity == null) {
126
         if (currentActivity == null) {

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

93
         }
93
         }
94
     }
94
     }
95
 
95
 
96
+    public void setBottomTabsVisible(boolean hidden, boolean animated) {
97
+        bottomTabs.setVisibility(hidden, animated);
98
+    }
99
+
96
     @Override
100
     @Override
97
     public void setTitleBarTitle(String screenInstanceId, String title) {
101
     public void setTitleBarTitle(String screenInstanceId, String title) {
98
         for (int i = 0; i < bottomTabs.getItemsCount(); i++) {
102
         for (int i = 0; i < bottomTabs.getItemsCount(); i++) {

+ 20
- 0
android/app/src/main/java/com/reactnativenavigation/views/BottomTabs.java View File

5
 
5
 
6
 import com.aurelhubert.ahbottomnavigation.AHBottomNavigation;
6
 import com.aurelhubert.ahbottomnavigation.AHBottomNavigation;
7
 import com.aurelhubert.ahbottomnavigation.AHBottomNavigationItem;
7
 import com.aurelhubert.ahbottomnavigation.AHBottomNavigationItem;
8
+import com.reactnativenavigation.animation.VisibilityAnimator;
8
 import com.reactnativenavigation.params.ScreenParams;
9
 import com.reactnativenavigation.params.ScreenParams;
9
 import com.reactnativenavigation.params.StyleParams;
10
 import com.reactnativenavigation.params.StyleParams;
10
 import com.reactnativenavigation.utils.ViewUtils;
11
 import com.reactnativenavigation.utils.ViewUtils;
12
 import java.util.List;
13
 import java.util.List;
13
 
14
 
14
 public class BottomTabs extends AHBottomNavigation {
15
 public class BottomTabs extends AHBottomNavigation {
16
+
17
+    private VisibilityAnimator visibilityAnimator;
18
+
15
     public BottomTabs(Context context) {
19
     public BottomTabs(Context context) {
16
         super(context);
20
         super(context);
17
         setForceTint(true);
21
         setForceTint(true);
18
         setId(ViewUtils.generateViewId());
22
         setId(ViewUtils.generateViewId());
23
+        createVisibilityAnimator();
19
     }
24
     }
20
 
25
 
21
     public void addTabs(List<ScreenParams> params, OnTabSelectedListener onTabSelectedListener) {
26
     public void addTabs(List<ScreenParams> params, OnTabSelectedListener onTabSelectedListener) {
27
         }
32
         }
28
     }
33
     }
29
 
34
 
35
+    public void setVisibility(boolean hidden, boolean animated) {
36
+        visibilityAnimator.setVisible(hidden, animated);
37
+    }
38
+
30
     public void setStyleFromScreen(StyleParams params) {
39
     public void setStyleFromScreen(StyleParams params) {
31
         setBackgroundColor(params.bottomTabsColor);
40
         setBackgroundColor(params.bottomTabsColor);
32
 
41
 
52
     private void setVisibility(boolean bottomTabsHidden) {
61
     private void setVisibility(boolean bottomTabsHidden) {
53
         setVisibility(bottomTabsHidden ? GONE : VISIBLE);
62
         setVisibility(bottomTabsHidden ? GONE : VISIBLE);
54
     }
63
     }
64
+
65
+    private void createVisibilityAnimator() {
66
+        ViewUtils.runOnPreDraw(this, new Runnable() {
67
+            @Override
68
+            public void run() {
69
+                visibilityAnimator = new VisibilityAnimator(BottomTabs.this,
70
+                        VisibilityAnimator.HideDirection.Down,
71
+                        getHeight());
72
+            }
73
+        });
74
+    }
55
 }
75
 }

+ 3
- 5
src/deprecated/platformSpecificDeprecated.android.js View File

24
   /*
24
   /*
25
    * adapt to new API
25
    * adapt to new API
26
    */
26
    */
27
-  console.log('0');
28
   screen.screenId = screen.screen;
27
   screen.screenId = screen.screen;
29
   params.screen = adaptNavigationStyleToScreenStyle(screen);
28
   params.screen = adaptNavigationStyleToScreenStyle(screen);
30
   params.screen = adaptNavigationParams(screen);
29
   params.screen = adaptNavigationParams(screen);
227
 }
226
 }
228
 
227
 
229
 function navigatorToggleTabs(navigator, params) {
228
 function navigatorToggleTabs(navigator, params) {
230
-  //RctActivity.toggleNavigatorTabs({
231
-  //  hidden: params.to === 'hidden',
232
-  //  animated: !(params.animated === false)
233
-  //});
229
+  const visibility = params.to === 'hidden';
230
+  const animated = !(params.animated === false);
231
+  newPlatformSpecific.toggleBottomTabsVisible(visibility, animated);
234
 }
232
 }
235
 
233
 
236
 function showModal(params) {
234
 function showModal(params) {

+ 5
- 0
src/platformSpecific.android.js View File

30
   NativeReactModule.setTopBarVisible(screenInstanceID, visible, animated);
30
   NativeReactModule.setTopBarVisible(screenInstanceID, visible, animated);
31
 }
31
 }
32
 
32
 
33
+function toggleBottomTabsVisible(visible, animated) {
34
+  NativeReactModule.setBottomTabsVisible(visible, animated);
35
+}
36
+
33
 function setScreenTitleBarTitle(screenInstanceID, title) {
37
 function setScreenTitleBarTitle(screenInstanceID, title) {
34
   NativeReactModule.setScreenTitleBarTitle(screenInstanceID, title);
38
   NativeReactModule.setScreenTitleBarTitle(screenInstanceID, title);
35
 }
39
 }
57
   popToRoot,
61
   popToRoot,
58
   newStack,
62
   newStack,
59
   toggleTopBarVisible,
63
   toggleTopBarVisible,
64
+  toggleBottomTabsVisible,
60
   setScreenTitleBarTitle,
65
   setScreenTitleBarTitle,
61
   setScreenTitleBarButtons,
66
   setScreenTitleBarButtons,
62
   showModal,
67
   showModal,