diff --git a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayDialogFragment.kt b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayDialogFragment.kt index 93c730c327..7cf5a127b3 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayDialogFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayDialogFragment.kt @@ -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, diff --git a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt index 4526489570..1a7681f648 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt @@ -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,22 +679,9 @@ class TabTrayView( return interactor.onBackPressed() } - fun scrollToTab(sessionId: String?) { + fun scrollToSelectedBrowserTab(selectedTabId: String? = null) { view.tabsTray.apply { - 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 } - - // 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 + - collectionsButtonAdapter.itemCount + - syncedTabsController.adapter.itemCount + val recyclerViewIndex = getSelectedBrowserTabViewIndex(selectedTabId) layoutManager?.scrollToPosition(recyclerViewIndex) smoothScrollBy( @@ -707,6 +691,30 @@ class TabTrayView( } } + 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 = 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`. + return if (view.context.settings().listTabView) { + selectedBrowserTabIndex + + collectionsButtonAdapter.itemCount + + syncedTabsController.adapter.itemCount + } else { + selectedBrowserTabIndex + } + } + companion object { private const val TAB_COUNT_SHOW_CFR = 6 private const val DEFAULT_TAB_ID = 0