From e975d5dd60a6dff6e670c51594baa257078ad6e1 Mon Sep 17 00:00:00 2001 From: DreVla Date: Tue, 27 Jun 2023 17:08:15 +0300 Subject: [PATCH] Bug 1838935 - Inactive tabs not selectable in multi-select mode When in tabs tray and in multi select mode, the user should not be able to select inactive tabs. --- .../mozilla/fenix/tabstray/TabsTrayController.kt | 4 ++- .../tabstray/DefaultTabsTrayControllerTest.kt | 31 ++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayController.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayController.kt index 2fb69d5acd42..fdc2866e2d08 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayController.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayController.kt @@ -532,7 +532,9 @@ class DefaultTabsTrayController( handleNavigateToBrowser() } tab.id in selected.map { it.id } -> handleTabUnselected(tab) - else -> tabsTrayStore.dispatch(TabsTrayAction.AddSelectTab(tab)) + source != TrayPagerAdapter.INACTIVE_TABS_FEATURE_NAME -> { + tabsTrayStore.dispatch(TabsTrayAction.AddSelectTab(tab)) + } } } diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/DefaultTabsTrayControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/DefaultTabsTrayControllerTest.kt index 6aecc5851ecc..0b5db351a5ea 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/DefaultTabsTrayControllerTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/tabstray/DefaultTabsTrayControllerTest.kt @@ -651,6 +651,37 @@ class DefaultTabsTrayControllerTest { } @Test + fun `GIVEN at least a tab is selected and the user is in multi select mode WHEN the user taps an inactive tab THEN that tab will not be selected`() { + val middleware = CaptureActionsMiddleware() + trayStore = TabsTrayStore(middlewares = listOf(middleware)) + trayStore.dispatch(TabsTrayAction.EnterSelectMode) + trayStore.waitUntilIdle() + val controller = spyk(createController()) + val normalTab = TabSessionState( + id = "1", + content = ContentState( + url = "www.mozilla.com", + ), + ) + val inactiveTab = TabSessionState( + id = "2", + content = ContentState( + url = "www.google.com", + ), + ) + + trayStore.dispatch(TabsTrayAction.EnterSelectMode) + trayStore.dispatch(TabsTrayAction.AddSelectTab(normalTab)) + trayStore.waitUntilIdle() + + controller.handleTabSelected(inactiveTab, TrayPagerAdapter.INACTIVE_TABS_FEATURE_NAME) + + middleware.assertLastAction(TabsTrayAction.AddSelectTab::class) { + assertEquals(normalTab, it.tab) + } + } + + @Test fun `GIVEN the user selects only the current tab WHEN the user forces tab to be inactive THEN tab does not become inactive`() { val currentTab = TabSessionState(content = mockk(), id = "currentTab", createdAt = 11) val secondTab = TabSessionState(content = mockk(), id = "secondTab", createdAt = 22) -- 2.11.4.GIT