From 8c43ccc0f6525e17cd036e4144af64c85e9d021a Mon Sep 17 00:00:00 2001 From: Jonathan Almeida Date: Mon, 1 Nov 2021 01:33:24 -0400 Subject: [PATCH] Issue #20704: Use AppStore for inactive expanded state --- .../java/org/mozilla/fenix/tabstray/TabsTrayFragment.kt | 3 ++- .../java/org/mozilla/fenix/tabstray/TrayPagerAdapter.kt | 6 +++++- .../fenix/tabstray/browser/InactiveTabViewHolder.kt | 2 +- .../mozilla/fenix/tabstray/browser/InactiveTabsAdapter.kt | 3 ++- .../fenix/tabstray/browser/InactiveTabsController.kt | 5 ++++- .../fenix/tabstray/browser/NormalBrowserTrayList.kt | 1 + .../tabstray/viewholders/NormalBrowserPageViewHolder.kt | 8 ++++++-- 7 files changed, 21 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayFragment.kt b/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayFragment.kt index 2f216d2576..cbc8791d9d 100644 --- a/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayFragment.kt @@ -388,7 +388,8 @@ class TabsTrayFragment : AppCompatDialogFragment() { browserInteractor, navigationInteractor, trayInteractor, - requireComponents.core.store + requireComponents.core.store, + requireComponents.appStore ) isUserInputEnabled = false } diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/TrayPagerAdapter.kt b/app/src/main/java/org/mozilla/fenix/tabstray/TrayPagerAdapter.kt index b54aeea846..37b242c4e9 100644 --- a/app/src/main/java/org/mozilla/fenix/tabstray/TrayPagerAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/tabstray/TrayPagerAdapter.kt @@ -11,6 +11,7 @@ import androidx.annotation.VisibleForTesting import androidx.recyclerview.widget.ConcatAdapter import androidx.recyclerview.widget.RecyclerView import mozilla.components.browser.state.store.BrowserStore +import org.mozilla.fenix.components.AppStore import org.mozilla.fenix.ext.settings import org.mozilla.fenix.sync.SyncedTabsAdapter import org.mozilla.fenix.tabstray.browser.BrowserTabsAdapter @@ -24,13 +25,15 @@ import org.mozilla.fenix.tabstray.viewholders.NormalBrowserPageViewHolder import org.mozilla.fenix.tabstray.viewholders.PrivateBrowserPageViewHolder import org.mozilla.fenix.tabstray.viewholders.SyncedTabsPageViewHolder +@Suppress("LongParameterList") class TrayPagerAdapter( @VisibleForTesting internal val context: Context, @VisibleForTesting internal val tabsTrayStore: TabsTrayStore, @VisibleForTesting internal val browserInteractor: BrowserTrayInteractor, @VisibleForTesting internal val navInteractor: NavigationInteractor, @VisibleForTesting internal val interactor: TabsTrayInteractor, - @VisibleForTesting internal val browserStore: BrowserStore + @VisibleForTesting internal val browserStore: BrowserStore, + @VisibleForTesting internal val appStore: AppStore ) : RecyclerView.Adapter() { /** @@ -67,6 +70,7 @@ class TrayPagerAdapter( itemView, tabsTrayStore, browserStore, + appStore, interactor ) } diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/browser/InactiveTabViewHolder.kt b/app/src/main/java/org/mozilla/fenix/tabstray/browser/InactiveTabViewHolder.kt index 2ad870292e..3be3d3b744 100644 --- a/app/src/main/java/org/mozilla/fenix/tabstray/browser/InactiveTabViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/tabstray/browser/InactiveTabViewHolder.kt @@ -37,7 +37,7 @@ sealed class InactiveTabViewHolder(itemView: View) : RecyclerView.ViewHolder(ite init { itemView.apply { - isActivated = InactiveTabsState.isExpanded + isActivated = itemView.context.components.appStore.state.inactiveTabsExpanded correctHeaderBorder(isActivated) diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/browser/InactiveTabsAdapter.kt b/app/src/main/java/org/mozilla/fenix/tabstray/browser/InactiveTabsAdapter.kt index 1a87a0dcef..a31d8ce19a 100644 --- a/app/src/main/java/org/mozilla/fenix/tabstray/browser/InactiveTabsAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/tabstray/browser/InactiveTabsAdapter.kt @@ -12,6 +12,7 @@ import androidx.recyclerview.widget.ListAdapter import mozilla.components.browser.state.state.TabSessionState import mozilla.components.browser.tabstray.TabsTray import org.mozilla.fenix.components.Components +import org.mozilla.fenix.ext.components import org.mozilla.fenix.tabstray.TabsTrayInteractor import org.mozilla.fenix.tabstray.browser.InactiveTabViewHolder.AutoCloseDialogHolder import org.mozilla.fenix.tabstray.browser.InactiveTabViewHolder.FooterHolder @@ -92,7 +93,7 @@ class InactiveTabsAdapter( } // If we have items, but we should be in a collapsed state. - if (!InactiveTabsState.isExpanded) { + if (!context.components.appStore.state.inactiveTabsExpanded) { submitList(listOf(Item.Header)) return } diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/browser/InactiveTabsController.kt b/app/src/main/java/org/mozilla/fenix/tabstray/browser/InactiveTabsController.kt index 3ac5401945..64778a6311 100644 --- a/app/src/main/java/org/mozilla/fenix/tabstray/browser/InactiveTabsController.kt +++ b/app/src/main/java/org/mozilla/fenix/tabstray/browser/InactiveTabsController.kt @@ -7,11 +7,14 @@ package org.mozilla.fenix.tabstray.browser import mozilla.components.browser.state.state.TabSessionState import mozilla.components.browser.state.store.BrowserStore import mozilla.components.browser.tabstray.TabsTray +import org.mozilla.fenix.components.appstate.AppAction +import org.mozilla.fenix.components.AppStore import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.components.metrics.Event class InactiveTabsController( private val browserStore: BrowserStore, + private val appStore: AppStore, private val tabFilter: (TabSessionState) -> Boolean, private val tray: TabsTray, private val metrics: MetricController @@ -21,7 +24,7 @@ class InactiveTabsController( * the title showing. */ fun updateCardExpansion(isExpanded: Boolean) { - InactiveTabsState.isExpanded = isExpanded + appStore.dispatch(AppAction.UpdateInactiveExpanded(isExpanded)) metrics.track( when (isExpanded) { diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/browser/NormalBrowserTrayList.kt b/app/src/main/java/org/mozilla/fenix/tabstray/browser/NormalBrowserTrayList.kt index f6a4a781ec..640e22f21a 100644 --- a/app/src/main/java/org/mozilla/fenix/tabstray/browser/NormalBrowserTrayList.kt +++ b/app/src/main/java/org/mozilla/fenix/tabstray/browser/NormalBrowserTrayList.kt @@ -52,6 +52,7 @@ class NormalBrowserTrayList @JvmOverloads constructor( DefaultInactiveTabsInteractor( InactiveTabsController( context.components.core.store, + context.components.appStore, inactiveTabsFilter, concatAdapter.inactiveTabsAdapter, context.components.analytics.metrics diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/viewholders/NormalBrowserPageViewHolder.kt b/app/src/main/java/org/mozilla/fenix/tabstray/viewholders/NormalBrowserPageViewHolder.kt index 697d76fd47..6bbe5b0bd7 100644 --- a/app/src/main/java/org/mozilla/fenix/tabstray/viewholders/NormalBrowserPageViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/tabstray/viewholders/NormalBrowserPageViewHolder.kt @@ -13,12 +13,13 @@ import mozilla.components.browser.state.selector.selectedNormalTab import mozilla.components.browser.state.state.TabSessionState import mozilla.components.browser.state.store.BrowserStore import org.mozilla.fenix.R +import org.mozilla.fenix.components.appstate.AppAction +import org.mozilla.fenix.components.AppStore import org.mozilla.fenix.ext.settings import org.mozilla.fenix.selection.SelectionHolder import org.mozilla.fenix.tabstray.TabsTrayInteractor import org.mozilla.fenix.tabstray.TabsTrayStore import org.mozilla.fenix.tabstray.browser.containsTabId -import org.mozilla.fenix.tabstray.browser.InactiveTabsState import org.mozilla.fenix.tabstray.browser.maxActiveTime import org.mozilla.fenix.tabstray.ext.browserAdapter import org.mozilla.fenix.tabstray.ext.defaultBrowserLayoutColumns @@ -38,6 +39,7 @@ class NormalBrowserPageViewHolder( containerView: View, private val tabsTrayStore: TabsTrayStore, private val browserStore: BrowserStore, + private val appStore: AppStore, interactor: TabsTrayInteractor, ) : AbstractBrowserPageViewHolder(containerView, tabsTrayStore, interactor), SelectionHolder { @@ -87,7 +89,9 @@ class NormalBrowserPageViewHolder( if (inactiveTabsAreEnabled && selectedTab.isNormalTabInactive(maxActiveTime)) { val inactiveTabsList = browserStore.state.inactiveTabs // We want to expand the inactive section first before we want to fire our scroll observer. - InactiveTabsState.isExpanded = true + + appStore.dispatch(AppAction.UpdateInactiveExpanded(true)) + inactiveTabAdapter.observeFirstInsert { inactiveTabsList.forEachIndexed { tabIndex, item -> if (item.id == selectedTab.id) {