From e8ad2389acd7f052b363e0946e178b8ef2d76403 Mon Sep 17 00:00:00 2001 From: mcarare <“mihai.carare.dev@gmail.com”> Date: Fri, 6 Mar 2020 10:26:40 +0200 Subject: [PATCH] For #7356: Scroll to selected tab when pressing tab overview --- .../toolbar/BrowserToolbarController.kt | 12 ++++------- .../org/mozilla/fenix/home/HomeFragment.kt | 20 +++++++++++++++++++ app/src/main/res/navigation/nav_graph.xml | 9 +++++++-- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt index 0ea8ded99..ecd6a74d0 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt @@ -302,14 +302,10 @@ class DefaultBrowserToolbarController( // Delay for a short amount of time so the browser has time to start animating out // before we transition the fragment. This makes the animation feel smoother delay(ANIMATION_DELAY) - if (!navController.popBackStack(R.id.homeFragment, false)) { - val directions = BrowserFragmentDirections.actionBrowserFragmentToHomeFragment() - navController.nav( - R.id.browserFragment, - directions, - null - ) - } + val directions = BrowserFragmentDirections.actionBrowserFragmentToHomeFragmentPopUp( + shouldScrollToSelectedTab = true + ) + navController.navigate(directions) } } diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt index 6efa41388..98e968c13 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -37,6 +37,7 @@ import androidx.lifecycle.OnLifecycleEvent import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController +import androidx.navigation.fragment.navArgs import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE @@ -91,7 +92,9 @@ import org.mozilla.fenix.ext.requireComponents import org.mozilla.fenix.ext.sessionsOfType import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.toTab +import org.mozilla.fenix.home.sessioncontrol.AdapterItem import org.mozilla.fenix.home.sessioncontrol.DefaultSessionControlController +import org.mozilla.fenix.home.sessioncontrol.SessionControlAdapter import org.mozilla.fenix.home.sessioncontrol.SessionControlInteractor import org.mozilla.fenix.home.sessioncontrol.SessionControlView import org.mozilla.fenix.home.sessioncontrol.viewholders.CollectionViewHolder @@ -502,6 +505,11 @@ class HomeFragment : Fragment() { activity?.window?.setBackgroundDrawableResource(R.drawable.private_home_background_gradient) } hideToolbar() + val safeArguments = arguments?.let { navArgs().value } + val shouldScrollToSelectedTab = safeArguments?.shouldScrollToSelectedTab ?: false + if (shouldScrollToSelectedTab) { + scrollToSelectedTab() + } } override fun onPause() { @@ -924,6 +932,17 @@ class HomeFragment : Fragment() { } } + private fun scrollToSelectedTab() { + val position = (sessionControlView!!.view.adapter as SessionControlAdapter) + .currentList.indexOfFirst { + it is AdapterItem.TabItem && it.tab.selected == true + } + if (position > 0) { + (sessionControlView!!.view.layoutManager as LinearLayoutManager) + .scrollToPositionWithOffset(position, SELECTED_TAB_OFFSET) + } + } + companion object { private const val ANIMATION_DELAY = 100L @@ -934,6 +953,7 @@ class HomeFragment : Fragment() { private const val ANIM_SNACKBAR_DELAY = 100L private const val CFR_WIDTH_DIVIDER = 1.7 private const val CFR_Y_OFFSET = -20 + private const val SELECTED_TAB_OFFSET = 20 // Layout private const val HEADER_MARGIN = 60 diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index 636cf9f88..2aa3ad269 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -63,6 +63,10 @@ android:id="@+id/homeFragment" android:name="org.mozilla.fenix.home.HomeFragment" tools:layout="@layout/fragment_home"> + @@ -181,8 +185,9 @@ app:exitAnim="@anim/fade_out" tools:layout="@layout/fragment_browser"> + android:id="@+id/action_browserFragment_to_homeFragment_popUp" + app:destination="@id/homeFragment" + app:popUpTo="@id/homeFragment" />