From 5202efa2753646b8dabe4d6f64e818e00f616bf5 Mon Sep 17 00:00:00 2001 From: Alexandru2909 Date: Fri, 2 Sep 2022 15:39:58 +0300 Subject: [PATCH] [fenix] For https://github.com/mozilla-mobile/fenix/issues/26690 - Dismiss search dialog when opening recent synced tab dropdown menu --- .../controller/RecentSyncedTabController.kt | 11 +++++++++++ .../interactor/RecentSyncedTabInteractor.kt | 5 +++++ .../home/recentsyncedtabs/view/RecentSyncedTab.kt | 9 ++++++++- .../view/RecentSyncedTabViewHolder.kt | 1 + .../sessioncontrol/SessionControlInteractor.kt | 4 ++++ .../DefaultRecentSyncedTabControllerTest.kt | 14 ++++++++++++++ 6 files changed, 43 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/controller/RecentSyncedTabController.kt b/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/controller/RecentSyncedTabController.kt index e8632ce1a..8b34dc08a 100644 --- a/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/controller/RecentSyncedTabController.kt +++ b/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/controller/RecentSyncedTabController.kt @@ -25,6 +25,11 @@ interface RecentSyncedTabController { */ fun handleRecentSyncedTabClick(tab: RecentSyncedTab) + /** + * @see [RecentSyncedTabInteractor.onRecentSyncedTabLongClick] + */ + fun handleRecentSyncedTabLongClick() + /** * @see [RecentSyncedTabInteractor.onRecentSyncedTabClicked] */ @@ -66,6 +71,12 @@ class DefaultRecentSyncedTabController( ) } + override fun handleRecentSyncedTabLongClick() { + if (navController.currentDestination?.id == R.id.searchDialogFragment) { + navController.navigateUp() + } + } + override fun handleRecentSyncedTabRemoved(tab: RecentSyncedTab) { appStore.dispatch(AppAction.RemoveRecentSyncedTab(tab)) } diff --git a/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/interactor/RecentSyncedTabInteractor.kt b/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/interactor/RecentSyncedTabInteractor.kt index 602047e05..579e9c61b 100644 --- a/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/interactor/RecentSyncedTabInteractor.kt +++ b/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/interactor/RecentSyncedTabInteractor.kt @@ -17,6 +17,11 @@ interface RecentSyncedTabInteractor { */ fun onRecentSyncedTabClicked(tab: RecentSyncedTab) + /** + * Called when opening the dropdown menu on a recent synced tab by long press. + */ + fun onRecentSyncedTabLongClick() + /** * Opens the tabs tray to the synced tab page. Called when a user clicks on the "See all synced * tabs" button. diff --git a/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/view/RecentSyncedTab.kt b/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/view/RecentSyncedTab.kt index 896879b58..b1a3d6c71 100644 --- a/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/view/RecentSyncedTab.kt +++ b/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/view/RecentSyncedTab.kt @@ -59,6 +59,7 @@ import org.mozilla.fenix.theme.Theme * @param onRecentSyncedTabClick Invoked when the user clicks on the recent synced tab. * @param onSeeAllSyncedTabsButtonClick Invoked when user clicks on the "See all" button in the synced tab card. * @param onRemoveSyncedTab Invoked when user clicks on the "Remove" dropdown menu option. + * @param onRecentSyncedTabLongClick Invoked when user long presses the recent synced tab. */ @OptIn(ExperimentalFoundationApi::class) @Suppress("LongMethod") @@ -68,6 +69,7 @@ fun RecentSyncedTab( onRecentSyncedTabClick: (RecentSyncedTab) -> Unit, onSeeAllSyncedTabsButtonClick: () -> Unit, onRemoveSyncedTab: (RecentSyncedTab) -> Unit, + onRecentSyncedTabLongClick: () -> Unit, ) { var isDropdownExpanded by remember { mutableStateOf(false) } @@ -82,7 +84,10 @@ fun RecentSyncedTab( .height(180.dp) .combinedClickable( onClick = { tab?.let { onRecentSyncedTabClick(tab) } }, - onLongClick = { isDropdownExpanded = true }, + onLongClick = { + onRecentSyncedTabLongClick() + isDropdownExpanded = true + }, ), shape = RoundedCornerShape(8.dp), backgroundColor = FirefoxTheme.colors.layer2, @@ -285,6 +290,7 @@ private fun LoadedRecentSyncedTab() { onRecentSyncedTabClick = {}, onSeeAllSyncedTabsButtonClick = {}, onRemoveSyncedTab = {}, + onRecentSyncedTabLongClick = {}, ) } } @@ -298,6 +304,7 @@ private fun LoadingRecentSyncedTab() { onRecentSyncedTabClick = {}, onSeeAllSyncedTabsButtonClick = {}, onRemoveSyncedTab = {}, + onRecentSyncedTabLongClick = {}, ) } } diff --git a/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/view/RecentSyncedTabViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/view/RecentSyncedTabViewHolder.kt index 09b4349ad..e4f17d769 100644 --- a/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/view/RecentSyncedTabViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/view/RecentSyncedTabViewHolder.kt @@ -56,6 +56,7 @@ class RecentSyncedTabViewHolder( onRecentSyncedTabClick = recentSyncedTabInteractor::onRecentSyncedTabClicked, onSeeAllSyncedTabsButtonClick = recentSyncedTabInteractor::onSyncedTabShowAllClicked, onRemoveSyncedTab = recentSyncedTabInteractor::onRemovedRecentSyncedTab, + onRecentSyncedTabLongClick = recentSyncedTabInteractor::onRecentSyncedTabLongClick, ) } } 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 9491e5f7a..e7da4ed80 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 @@ -392,6 +392,10 @@ class SessionControlInteractor( recentSyncedTabController.handleRecentSyncedTabClick(tab) } + override fun onRecentSyncedTabLongClick() { + recentSyncedTabController.handleRecentSyncedTabLongClick() + } + override fun onSyncedTabShowAllClicked() { recentSyncedTabController.handleSyncedTabShowAllClicked() } diff --git a/app/src/test/java/org/mozilla/fenix/home/recentsyncedtabs/controller/DefaultRecentSyncedTabControllerTest.kt b/app/src/test/java/org/mozilla/fenix/home/recentsyncedtabs/controller/DefaultRecentSyncedTabControllerTest.kt index 3fac7ee82..418d3ee3c 100644 --- a/app/src/test/java/org/mozilla/fenix/home/recentsyncedtabs/controller/DefaultRecentSyncedTabControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/recentsyncedtabs/controller/DefaultRecentSyncedTabControllerTest.kt @@ -150,6 +150,20 @@ class DefaultRecentSyncedTabControllerTest { } } + @Test + fun `GIVEN search dialog is displayed WHEN recent synced tab is long clicked THEN dismiss search dialog`() { + every { navController.navigateUp() } returns true + every { navController.currentDestination } returns mockk { + every { id } returns R.id.searchDialogFragment + } + + controller.handleRecentSyncedTabLongClick() + + verify { + navController.navigateUp() + } + } + @Test fun `WHEN synced tab clicked THEN metric counter labeled by device type is incremented`() { val url = "https://mozilla.org"