1
0
Fork 0

For #7356: Scroll to selected tab when pressing tab overview

master
mcarare 2020-03-06 10:26:40 +02:00 committed by liuche
parent 414e905b76
commit e8ad2389ac
3 changed files with 31 additions and 10 deletions

View File

@ -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)
}
}

View File

@ -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<HomeFragmentArgs>().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

View File

@ -63,6 +63,10 @@
android:id="@+id/homeFragment"
android:name="org.mozilla.fenix.home.HomeFragment"
tools:layout="@layout/fragment_home">
<argument
android:name="shouldScrollToSelectedTab"
app:argType="boolean"
android:defaultValue="false" />
<action
android:id="@+id/action_homeFragment_to_turnOnSyncFragment"
app:destination="@+id/turnOnSyncFragment" />
@ -181,8 +185,9 @@
app:exitAnim="@anim/fade_out"
tools:layout="@layout/fragment_browser">
<action
android:id="@+id/action_browserFragment_to_homeFragment"
app:destination="@id/homeFragment" />
android:id="@+id/action_browserFragment_to_homeFragment_popUp"
app:destination="@id/homeFragment"
app:popUpTo="@id/homeFragment" />
<action
android:id="@+id/action_browserFragment_to_searchFragment"
app:enterAnim="@anim/fade_in_up"