To get the index of the current selected browser tab when using reverse layout
we should also account for items placed below of the browser tabs.
The patch here unifies the logic already used for some calls but not all.
pull/600/head
Mugurell 4 years ago committed by GitHub
parent 23ff2851e6
commit da543114c3

@ -291,7 +291,7 @@ class TabTrayDialogFragment : AppCompatDialogFragment(), UserInteractionHandler
getString(R.string.snackbar_deleted_undo),
{
requireComponents.useCases.tabsUseCases.undo.invoke()
_tabTrayView?.scrollToTab(tab.id)
_tabTrayView?.scrollToSelectedBrowserTab(tab.id)
},
operation = { },
elevation = ELEVATION,

@ -157,9 +157,6 @@ class TabTrayView(
val tabs = getTabs(isPrivate)
val selectedBrowserTabIndex = tabs
.indexOfFirst { it.id == view.context.components.core.store.state.selectedTabId }
updateBottomSheetBehavior()
setTopOffset(isInLandscape())
@ -208,14 +205,14 @@ class TabTrayView(
}
if (!hasLoaded) {
hasLoaded = true
scrollToTab(view.context.components.core.store.state.selectedTabId)
scrollToSelectedBrowserTab()
if (view.context.settings().accessibilityServicesEnabled) {
lifecycleScope.launch {
delay(SELECTION_DELAY.toLong())
lifecycleScope.launch(Main) {
layoutManager?.findViewByPosition(selectedBrowserTabIndex)
layoutManager?.findViewByPosition(getSelectedBrowserTabViewIndex())
?.requestFocus()
layoutManager?.findViewByPosition(selectedBrowserTabIndex)
layoutManager?.findViewByPosition(getSelectedBrowserTabViewIndex())
?.sendAccessibilityEvent(
AccessibilityEvent.TYPE_VIEW_FOCUSED
)
@ -367,7 +364,7 @@ class TabTrayView(
toggleSaveToCollectionButton(isPrivateModeSelected)
updateUINormalMode(view.context.components.core.store.state)
scrollToTab(view.context.components.core.store.state.selectedTabId)
scrollToSelectedBrowserTab()
if (isPrivateModeSelected) {
components.analytics.metrics.track(Event.TabsTrayPrivateModeTapped)
@ -682,28 +679,39 @@ class TabTrayView(
return interactor.onBackPressed()
}
fun scrollToTab(sessionId: String?) {
fun scrollToSelectedBrowserTab(selectedTabId: String? = null) {
view.tabsTray.apply {
val recyclerViewIndex = getSelectedBrowserTabViewIndex(selectedTabId)
layoutManager?.scrollToPosition(recyclerViewIndex)
smoothScrollBy(
0,
- resources.getDimensionPixelSize(R.dimen.tab_tray_tab_item_height) / 2
)
}
}
private fun getSelectedBrowserTabViewIndex(sessionId: String? = null): Int {
val tabs = if (isPrivateModeSelected) {
view.context.components.core.store.state.privateTabs
} else {
view.context.components.core.store.state.normalTabs
}
val selectedBrowserTabIndex = tabs
.indexOfFirst { it.id == sessionId }
val selectedBrowserTabIndex = if (sessionId != null) {
tabs.indexOfFirst { it.id == sessionId }
} else {
tabs.indexOfFirst { it.id == view.context.components.core.store.state.selectedTabId }
}
// We offset the tab index by the number of items in the other adapters.
// We add the offset, because the layoutManager is initialized with `reverseLayout`.
val recyclerViewIndex = selectedBrowserTabIndex +
return if (view.context.settings().listTabView) {
selectedBrowserTabIndex +
collectionsButtonAdapter.itemCount +
syncedTabsController.adapter.itemCount
layoutManager?.scrollToPosition(recyclerViewIndex)
smoothScrollBy(
0,
- resources.getDimensionPixelSize(R.dimen.tab_tray_tab_item_height) / 2
)
} else {
selectedBrowserTabIndex
}
}

Loading…
Cancel
Save