From 3d949c808f5b862a5c4ee822cc2f62d33a34ec8e Mon Sep 17 00:00:00 2001 From: Alexandru2909 Date: Tue, 6 Sep 2022 09:38:57 +0300 Subject: [PATCH] [fenix] For https://github.com/mozilla-mobile/fenix/issues/26790 - Dismiss search dialog when opening recent tab dropdown menu For https://github.com/mozilla-mobile/fenix/issues/26790 - recent tab --- .../recenttabs/controller/RecentTabController.kt | 9 +++++++++ .../recenttabs/interactor/RecentTabInteractor.kt | 5 +++++ .../home/recenttabs/view/RecentTabViewHolder.kt | 1 + .../fenix/home/recenttabs/view/RecentTabs.kt | 8 +++++++- .../sessioncontrol/SessionControlInteractor.kt | 4 ++++ .../fenix/home/SessionControlInteractorTest.kt | 6 ++++++ .../controller/RecentTabControllerTest.kt | 15 +++++++++++++++ 7 files changed, 47 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/home/recenttabs/controller/RecentTabController.kt b/app/src/main/java/org/mozilla/fenix/home/recenttabs/controller/RecentTabController.kt index d67e775b40..3168dabd96 100644 --- a/app/src/main/java/org/mozilla/fenix/home/recenttabs/controller/RecentTabController.kt +++ b/app/src/main/java/org/mozilla/fenix/home/recenttabs/controller/RecentTabController.kt @@ -29,6 +29,11 @@ interface RecentTabController { */ fun handleRecentTabClicked(tabId: String) + /** + * @see [RecentTabInteractor.onRecentTabLongClicked] + */ + fun handleRecentTabLongClicked() + /** * @see [RecentTabInteractor.onRecentTabShowAllClicked] */ @@ -64,6 +69,10 @@ class DefaultRecentTabsController( navController.navigate(R.id.browserFragment) } + override fun handleRecentTabLongClicked() { + dismissSearchDialogIfDisplayed() + } + override fun handleRecentTabShowAllClicked() { dismissSearchDialogIfDisplayed() RecentTabs.showAllClicked.record(NoExtras()) diff --git a/app/src/main/java/org/mozilla/fenix/home/recenttabs/interactor/RecentTabInteractor.kt b/app/src/main/java/org/mozilla/fenix/home/recenttabs/interactor/RecentTabInteractor.kt index e8e2df8a73..3fe6a2e9dd 100644 --- a/app/src/main/java/org/mozilla/fenix/home/recenttabs/interactor/RecentTabInteractor.kt +++ b/app/src/main/java/org/mozilla/fenix/home/recenttabs/interactor/RecentTabInteractor.kt @@ -17,6 +17,11 @@ interface RecentTabInteractor { */ fun onRecentTabClicked(tabId: String) + /** + * Called when the user long clicks on a recent tab. + */ + fun onRecentTabLongClicked() + /** * Show the tabs tray. Called when a user clicks on the "Show all" button besides the recent * tabs. diff --git a/app/src/main/java/org/mozilla/fenix/home/recenttabs/view/RecentTabViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/recenttabs/view/RecentTabViewHolder.kt index 26918b532a..eb598a8ea5 100644 --- a/app/src/main/java/org/mozilla/fenix/home/recenttabs/view/RecentTabViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/recenttabs/view/RecentTabViewHolder.kt @@ -46,6 +46,7 @@ class RecentTabViewHolder( RecentTabs( recentTabs = recentTabs.value ?: emptyList(), onRecentTabClick = { recentTabInteractor.onRecentTabClicked(it) }, + onRecentTabLongClick = { recentTabInteractor.onRecentTabLongClicked() }, menuItems = listOf( RecentTabMenuItem( title = stringResource(id = R.string.recent_tab_menu_item_remove), diff --git a/app/src/main/java/org/mozilla/fenix/home/recenttabs/view/RecentTabs.kt b/app/src/main/java/org/mozilla/fenix/home/recenttabs/view/RecentTabs.kt index c2fa4e8361..8a0fb538e3 100644 --- a/app/src/main/java/org/mozilla/fenix/home/recenttabs/view/RecentTabs.kt +++ b/app/src/main/java/org/mozilla/fenix/home/recenttabs/view/RecentTabs.kt @@ -72,6 +72,7 @@ fun RecentTabs( recentTabs: List, menuItems: List, onRecentTabClick: (String) -> Unit = {}, + onRecentTabLongClick: () -> Unit = {}, ) { Column( modifier = Modifier.fillMaxWidth(), @@ -84,6 +85,7 @@ fun RecentTabs( tab = tab, menuItems = menuItems, onRecentTabClick = onRecentTabClick, + onRecentTabLongClick = onRecentTabLongClick, ) } } @@ -103,6 +105,7 @@ private fun RecentTabItem( tab: RecentTab.Tab, menuItems: List, onRecentTabClick: (String) -> Unit = {}, + onRecentTabLongClick: () -> Unit = {}, ) { var isMenuExpanded by remember { mutableStateOf(false) } @@ -113,7 +116,10 @@ private fun RecentTabItem( .combinedClickable( enabled = true, onClick = { onRecentTabClick(tab.state.id) }, - onLongClick = { isMenuExpanded = true }, + onLongClick = { + onRecentTabLongClick() + isMenuExpanded = true + }, ), shape = RoundedCornerShape(8.dp), backgroundColor = FirefoxTheme.colors.layer2, diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt index 82a84e74ee..0b50937c79 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt @@ -380,6 +380,10 @@ class SessionControlInteractor( recentTabController.handleRecentTabShowAllClicked() } + override fun onRecentTabLongClicked() { + recentTabController.handleRecentTabLongClicked() + } + override fun onRemoveRecentTab(tab: RecentTab.Tab) { recentTabController.handleRecentTabRemoved(tab) } diff --git a/app/src/test/java/org/mozilla/fenix/home/SessionControlInteractorTest.kt b/app/src/test/java/org/mozilla/fenix/home/SessionControlInteractorTest.kt index 680d3e59b0..fbb773a4ce 100644 --- a/app/src/test/java/org/mozilla/fenix/home/SessionControlInteractorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/SessionControlInteractorTest.kt @@ -162,6 +162,12 @@ class SessionControlInteractorTest { verify { recentTabController.handleRecentTabClicked(tabId) } } + @Test + fun onRecentTabLongClicked() { + interactor.onRecentTabLongClicked() + verify { recentTabController.handleRecentTabLongClicked() } + } + @Test fun onRecentTabShowAllClicked() { interactor.onRecentTabShowAllClicked() diff --git a/app/src/test/java/org/mozilla/fenix/home/recenttabs/controller/RecentTabControllerTest.kt b/app/src/test/java/org/mozilla/fenix/home/recenttabs/controller/RecentTabControllerTest.kt index e81391f2c8..f4347bd0bc 100644 --- a/app/src/test/java/org/mozilla/fenix/home/recenttabs/controller/RecentTabControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/recenttabs/controller/RecentTabControllerTest.kt @@ -163,4 +163,19 @@ class RecentTabControllerTest { assertNotNull(RecentTabs.showAllClicked.testGetValue()) } + + @Test + fun `GIVEN search dialog is displayed WHEN long clicking a recent tab THEN search dialog is dismissed`() { + every { navController.currentDestination } returns mockk { + every { id } returns R.id.searchDialogFragment + } + every { navController.navigateUp() } returns true + + controller.handleRecentTabLongClicked() + + verify { + controller.dismissSearchDialogIfDisplayed() + navController.navigateUp() + } + } }