From c6de8632ded6fd28fe441735ae79768da8966803 Mon Sep 17 00:00:00 2001 From: Mugurell Date: Fri, 13 Nov 2020 07:32:45 +0200 Subject: [PATCH] For #16461 - Ensure the proper items order after exiting Multiselect (#16482) --- .../mozilla/fenix/tabtray/SyncedTabsController.kt | 7 ++++++- .../fenix/tabtray/SyncedTabsControllerTest.kt | 14 +++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/tabtray/SyncedTabsController.kt b/app/src/main/java/org/mozilla/fenix/tabtray/SyncedTabsController.kt index 8fbb87c63..d878a3517 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/SyncedTabsController.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/SyncedTabsController.kt @@ -21,6 +21,7 @@ import mozilla.components.browser.storage.sync.SyncedDeviceTabs import mozilla.components.feature.syncedtabs.view.SyncedTabsView import mozilla.components.lib.state.ext.flowScoped import mozilla.components.support.ktx.kotlinx.coroutines.flow.ifChanged +import org.mozilla.fenix.ext.settings import org.mozilla.fenix.sync.ListenerDelegate import org.mozilla.fenix.sync.SyncedTabsAdapter import org.mozilla.fenix.sync.ext.toAdapterList @@ -50,7 +51,11 @@ class SyncedTabsController( .collect { mode -> when (mode) { is TabTrayDialogFragmentState.Mode.Normal -> { - concatAdapter.addAdapter(0, adapter) + if (view.context.settings().gridTabView) { + concatAdapter.addAdapter(adapter) + } else { + concatAdapter.addAdapter(0, adapter) + } } is TabTrayDialogFragmentState.Mode.MultiSelect -> { concatAdapter.removeAdapter(adapter) diff --git a/app/src/test/java/org/mozilla/fenix/tabtray/SyncedTabsControllerTest.kt b/app/src/test/java/org/mozilla/fenix/tabtray/SyncedTabsControllerTest.kt index 768681f70..26e3ecb35 100644 --- a/app/src/test/java/org/mozilla/fenix/tabtray/SyncedTabsControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/tabtray/SyncedTabsControllerTest.kt @@ -25,6 +25,7 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.R +import org.mozilla.fenix.ext.settings import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.sync.SyncedTabsViewHolder import org.mozilla.fenix.tabtray.TabTrayDialogFragmentAction.EnterMultiSelectMode @@ -54,6 +55,7 @@ class SyncedTabsControllerTest { every { lifecycleOwner.lifecycle } returns lifecycle concatAdapter = mockk() + every { concatAdapter.addAdapter(any()) } returns true every { concatAdapter.addAdapter(any(), any()) } returns true every { concatAdapter.removeAdapter(any()) } returns true @@ -128,12 +130,22 @@ class SyncedTabsControllerTest { @Test fun `concatAdapter updated on mode changes`() = testDispatcher.runBlockingTest { - store.dispatch(EnterMultiSelectMode).joinBlocking() + // When returning from Multiselect while in grid view the adapter should be added at the end + every { view.context.settings().gridTabView } returns true + store.dispatch(EnterMultiSelectMode).joinBlocking() verify { concatAdapter.removeAdapter(any()) } store.dispatch(ExitMultiSelectMode).joinBlocking() + verify { concatAdapter.addAdapter(any()) } + // When returning from Multiselect while in list view the adapter should be added at the front + every { view.context.settings().gridTabView } returns false + + store.dispatch(EnterMultiSelectMode).joinBlocking() + verify { concatAdapter.removeAdapter(any()) } + + store.dispatch(ExitMultiSelectMode).joinBlocking() verify { concatAdapter.addAdapter(0, any()) } } }