Browse Source

Merge branch 'switchToTab' of github.com:wix/react-native-navigation into switchToTab

Guy Carmeli 8 years ago
parent
commit
972185fbf2

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

@@ -76,7 +76,8 @@ public class NavigationReactModule extends ReactContextBaseJavaModule {
76 76
     }
77 77
 
78 78
     @ReactMethod
79
-    public void selectBottomTab(final ReadableMap params) {
79
+    public void selectBottomTab(String navigatorId, Integer index) {
80
+        NavigationCommandsHandler.selectBottomTab(navigatorId, index);
80 81
     }
81 82
 
82 83
     @ReactMethod

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

@@ -212,4 +212,10 @@ public class NavigationActivity extends AppCompatActivity implements DefaultHard
212 212
     public void setSideMenuVisible(boolean animated, boolean visible) {
213 213
         layout.setSideMenuVisible(animated, visible);
214 214
     }
215
+
216
+    public void selectBottomTab(String navigatorId, Integer index) {
217
+        if (layout instanceof BottomTabsLayout) {
218
+            ((BottomTabsLayout) layout).selectBottomTab(navigatorId, index);
219
+        }
220
+    }
215 221
 }

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

@@ -238,4 +238,18 @@ public class NavigationCommandsHandler {
238 238
             }
239 239
         });
240 240
     }
241
+
242
+    public static void selectBottomTab(final String navigatorId, final Integer index) {
243
+        final NavigationActivity currentActivity = NavigationActivity.currentActivity;
244
+        if (currentActivity == null) {
245
+            return;
246
+        }
247
+
248
+        NavigationApplication.instance.runOnMainThread(new Runnable() {
249
+            @Override
250
+            public void run() {
251
+                currentActivity.selectBottomTab(navigatorId, index);
252
+            }
253
+        });
254
+    }
241 255
 }

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

@@ -164,18 +164,20 @@ public class BottomTabsLayout extends RelativeLayout implements Layout, AHBottom
164 164
         }
165 165
     }
166 166
 
167
+    public void selectBottomTab(String navigatorId, Integer index) {
168
+        if (index != null) {
169
+            bottomTabs.setCurrentItem(index);
170
+        } else {
171
+            bottomTabs.setCurrentItem(getScreenStackIndex(navigatorId));
172
+        }
173
+    }
174
+
167 175
     @Override
168 176
     public void push(ScreenParams screenParams) {
169 177
         ScreenStack screenStack = getScreenStack(screenParams.getNavigatorId());
170
-        if (screenStack == null) {
171
-            return;
172
-        }
173
-
178
+        screenStack.push(screenParams, createScreenLayoutParams(screenParams));
174 179
         if (isCurrentStack(screenStack)) {
175
-            screenStack.push(screenParams, createScreenLayoutParams(screenParams));
176 180
             bottomTabs.setStyleFromScreen(screenParams.styleParams);
177
-        } else {
178
-            screenStack.push(screenParams, createScreenLayoutParams(screenParams));
179 181
         }
180 182
     }
181 183
 
@@ -245,13 +247,24 @@ public class BottomTabsLayout extends RelativeLayout implements Layout, AHBottom
245 247
         return screenStacks[currentStackIndex];
246 248
     }
247 249
 
248
-    private @Nullable ScreenStack getScreenStack(String navigatorId) {
249
-        for (ScreenStack screenStack : screenStacks) {
250
-            if (screenStack.getNavigatorId().equals(navigatorId)) {
251
-                return screenStack;
250
+    private @NonNull ScreenStack getScreenStack(String navigatorId) {
251
+        int index = getScreenStackIndex(navigatorId);
252
+        return screenStacks[index];
253
+    }
254
+
255
+    private int getScreenStackIndex(String navigatorId) throws ScreenStackNotFoundException {
256
+        for (int i = 0; i < screenStacks.length; i++) {
257
+            if (screenStacks[i].getNavigatorId().equals(navigatorId)) {
258
+                return i;
252 259
             }
253 260
         }
254
-        return null;
261
+        throw new ScreenStackNotFoundException("Stack " + navigatorId + " not found");
262
+    }
263
+
264
+    private class ScreenStackNotFoundException extends RuntimeException {
265
+        public ScreenStackNotFoundException(String navigatorId) {
266
+            super(navigatorId);
267
+        }
255 268
     }
256 269
 
257 270
     private boolean isCurrentStack(ScreenStack screenStack) {

+ 3
- 1
example-redux/src/screens/SecondTabScreen.js View File

@@ -65,7 +65,9 @@ class SecondTabScreen extends Component {
65 65
   }
66 66
 
67 67
   onSelectFirstTabPress() {
68
-    this.props.navigator.switchToTab()
68
+    this.props.navigator.switchToTab({
69
+      tabIndex: 0
70
+    })
69 71
   }
70 72
 
71 73
   onSetButton() {

+ 1
- 4
src/deprecated/platformSpecificDeprecated.android.js View File

@@ -243,10 +243,7 @@ function navigatorSetTitle(navigator, params) {
243 243
 }
244 244
 
245 245
 function navigatorSwitchToTab(navigator, params) {
246
-  //RctActivity.switchToTab({
247
-  //  navigatorID: navigator.navigatorID,
248
-  //  tabIndex: params.tabIndex
249
-  //});
246
+  newPlatformSpecific.selectBottomTab(navigator.navigatorID, params.tabIndex);
250 247
 }
251 248
 
252 249
 function navigatorToggleDrawer(navigator, params) {

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

@@ -92,6 +92,10 @@ function setSideMenuVisible(animated, visible) {
92 92
   NativeReactModule.setSideMenuVisible(animated, visible);
93 93
 }
94 94
 
95
+function selectBottomTab(navigatorId, index) {
96
+  NativeReactModule.selectBottomTab(navigatorId, index);
97
+}
98
+
95 99
 module.exports = {
96 100
   startApp,
97 101
   push,
@@ -106,5 +110,6 @@ module.exports = {
106 110
   dismissTopModal,
107 111
   dismissAllModals,
108 112
   toggleSideMenuVisible,
109
-  setSideMenuVisible
113
+  setSideMenuVisible,
114
+  selectBottomTab
110 115
 };