From f4a8685137f0ee87ff17403bbb301a8841e8241a Mon Sep 17 00:00:00 2001 From: svbutko Date: Wed, 1 Sep 2021 19:09:15 +0300 Subject: [PATCH 1/3] Pop to root when tapping on active bottom tab --- .../bottomtabs/BottomTabsController.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java index 3bfc944a77f..d18437e3dce 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java @@ -169,15 +169,22 @@ public ViewController getCurrentChild() { @Override public boolean onTabSelected(int index, boolean wasSelected) { - BottomTabOptions options = tabs.get(index).resolveCurrentOptions().bottomTabOptions; + StackController stack = ((StackController) tabs.get(index)); + BottomTabOptions options = stack.resolveCurrentOptions().bottomTabOptions; eventEmitter.emitBottomTabPressed(index); if (options.selectTabOnPress.get(true)) { eventEmitter.emitBottomTabSelected(bottomTabs.getCurrentItem(), index); - if (wasSelected) return false; - selectTab(index); + if (!wasSelected) { + selectTab(index); + } } + + if (wasSelected) { + stack.popToRoot(Options.EMPTY, new CommandListenerAdapter()); + } + return false; } From 3960b6942b23b69c46381f2047612bc548821aa2 Mon Sep 17 00:00:00 2001 From: svbutko Date: Thu, 2 Sep 2021 10:24:49 +0300 Subject: [PATCH 2/3] Add missing imports --- .../viewcontrollers/bottomtabs/BottomTabsController.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java index d18437e3dce..482e79eb3b6 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java @@ -15,11 +15,13 @@ import com.reactnativenavigation.options.BottomTabOptions; import com.reactnativenavigation.options.Options; import com.reactnativenavigation.react.CommandListener; +import com.reactnativenavigation.react.CommandListenerAdapter; import com.reactnativenavigation.react.events.EventEmitter; import com.reactnativenavigation.utils.ImageLoader; import com.reactnativenavigation.viewcontrollers.bottomtabs.attacher.BottomTabsAttacher; import com.reactnativenavigation.viewcontrollers.child.ChildControllersRegistry; import com.reactnativenavigation.viewcontrollers.parent.ParentController; +import com.reactnativenavigation.viewcontrollers.stack.StackController; import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter; import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController; import com.reactnativenavigation.views.bottomtabs.BottomTabs; From 1d7a1f85fbbddd28d4a48d2f10439f084acd68f7 Mon Sep 17 00:00:00 2001 From: svbutko Date: Thu, 2 Sep 2021 10:58:43 +0300 Subject: [PATCH 3/3] Add stack type checking before popping to root --- .../viewcontrollers/bottomtabs/BottomTabsController.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java index 482e79eb3b6..d973e29b7fd 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java @@ -171,7 +171,7 @@ public ViewController getCurrentChild() { @Override public boolean onTabSelected(int index, boolean wasSelected) { - StackController stack = ((StackController) tabs.get(index)); + ViewController stack = tabs.get(index); BottomTabOptions options = stack.resolveCurrentOptions().bottomTabOptions; eventEmitter.emitBottomTabPressed(index); @@ -183,8 +183,8 @@ public boolean onTabSelected(int index, boolean wasSelected) { } } - if (wasSelected) { - stack.popToRoot(Options.EMPTY, new CommandListenerAdapter()); + if (wasSelected && stack instanceof StackController) { + ((StackController) stack).popToRoot(Options.EMPTY, new CommandListenerAdapter()); } return false;