For #22186 - Scroll to collection after creating one

This commit is contained in:
sarah541 2022-06-13 20:18:46 -04:00 committed by mergify[bot]
parent 5c7921b448
commit da4328e53f
4 changed files with 39 additions and 1 deletions

View File

@ -354,7 +354,10 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
.setText(view.context.getString(messageStringRes))
.setAction(requireContext().getString(R.string.create_collection_view)) {
findNavController().navigate(
BrowserFragmentDirections.actionGlobalHome(focusOnAddressBar = false)
BrowserFragmentDirections.actionGlobalHome(
focusOnAddressBar = false,
scrollToCollection = true
)
)
}
.show()

View File

@ -36,11 +36,16 @@ import androidx.lifecycle.Observer
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.LinearSmoothScroller
import androidx.recyclerview.widget.RecyclerView.SmoothScroller
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.button.MaterialButton
import com.google.android.material.snackbar.Snackbar
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import mozilla.components.browser.menu.view.MenuButton
@ -105,6 +110,7 @@ import org.mozilla.fenix.home.recentvisits.controller.DefaultRecentVisitsControl
import org.mozilla.fenix.home.sessioncontrol.DefaultSessionControlController
import org.mozilla.fenix.home.sessioncontrol.SessionControlInteractor
import org.mozilla.fenix.home.sessioncontrol.SessionControlView
import org.mozilla.fenix.home.sessioncontrol.viewholders.CollectionHeaderViewHolder
import org.mozilla.fenix.home.topsites.DefaultTopSitesView
import org.mozilla.fenix.nimbus.FxNimbus
import org.mozilla.fenix.onboarding.FenixOnboarding
@ -552,6 +558,27 @@ class HomeFragment : Fragment() {
if (bundleArgs.getBoolean(FOCUS_ON_ADDRESS_BAR)) {
navigateToSearch()
} else if (bundleArgs.getBoolean(SCROLL_TO_COLLECTION)) {
MainScope().launch {
delay(ANIM_SCROLL_DELAY)
val smoothScroller: SmoothScroller =
object : LinearSmoothScroller(sessionControlView!!.view.context) {
override fun getVerticalSnapPreference(): Int {
return SNAP_TO_START
}
}
val recyclerView = sessionControlView!!.view
val adapter = recyclerView.adapter!!
val collectionPosition = IntRange(0, adapter.itemCount - 1).firstOrNull {
adapter.getItemViewType(it) == CollectionHeaderViewHolder.LAYOUT_ID
}
collectionPosition?.run {
appBarLayout?.setExpanded(false)
val linearLayoutManager = recyclerView.layoutManager as LinearLayoutManager
smoothScroller.targetPosition = this
linearLayoutManager.startSmoothScroll(smoothScroller)
}
}
}
// DO NOT MOVE ANYTHING BELOW THIS addMarker CALL!
@ -1002,6 +1029,9 @@ class HomeFragment : Fragment() {
private const val FOCUS_ON_ADDRESS_BAR = "focusOnAddressBar"
private const val SCROLL_TO_COLLECTION = "scrollToCollection"
private const val ANIM_SCROLL_DELAY = 100L
private const val CFR_WIDTH_DIVIDER = 1.7
private const val CFR_Y_OFFSET = -20

View File

@ -585,6 +585,7 @@ class TabsTrayFragment : AppCompatDialogFragment() {
findNavController().navigate(
TabsTrayFragmentDirections.actionGlobalHome(
focusOnAddressBar = false,
scrollToCollection = true
)
)
dismissTabsTray()

View File

@ -185,6 +185,10 @@
android:name="focusOnAddressBar"
android:defaultValue="false"
app:argType="boolean" />
<argument
android:name="scrollToCollection"
android:defaultValue="false"
app:argType="boolean" />
</fragment>
<dialog
android:id="@+id/homeOnboardingDialogFragment"