mirror of
https://github.com/fork-maintainers/iceraven-browser
synced 2024-11-17 15:26:23 +00:00
[fenix] For https://github.com/mozilla-mobile/fenix/issues/26790 - Dismiss search dialog when opening recent visit dropdown menu
This commit is contained in:
parent
3d949c808f
commit
49d9032df2
@ -60,6 +60,11 @@ interface RecentVisitsController {
|
|||||||
* @param highlightUrl Url of the [RecentHistoryHighlight] to remove.
|
* @param highlightUrl Url of the [RecentHistoryHighlight] to remove.
|
||||||
*/
|
*/
|
||||||
fun handleRemoveRecentHistoryHighlight(highlightUrl: String)
|
fun handleRemoveRecentHistoryHighlight(highlightUrl: String)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback for when the user long clicks on a recent visit.
|
||||||
|
*/
|
||||||
|
fun handleRecentVisitLongClicked()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -140,6 +145,13 @@ class DefaultRecentVisitsController(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dismiss the search dialog if displayed.
|
||||||
|
*/
|
||||||
|
override fun handleRecentVisitLongClicked() {
|
||||||
|
dismissSearchDialogIfDisplayed()
|
||||||
|
}
|
||||||
|
|
||||||
@VisibleForTesting(otherwise = PRIVATE)
|
@VisibleForTesting(otherwise = PRIVATE)
|
||||||
fun dismissSearchDialogIfDisplayed() {
|
fun dismissSearchDialogIfDisplayed() {
|
||||||
if (navController.currentDestination?.id == R.id.searchDialogFragment) {
|
if (navController.currentDestination?.id == R.id.searchDialogFragment) {
|
||||||
|
@ -44,4 +44,9 @@ interface RecentVisitsInteractor {
|
|||||||
* @param highlightUrl [RecentHistoryHighlight.url] of the item to remove.
|
* @param highlightUrl [RecentHistoryHighlight.url] of the item to remove.
|
||||||
*/
|
*/
|
||||||
fun onRemoveRecentHistoryHighlight(highlightUrl: String)
|
fun onRemoveRecentHistoryHighlight(highlightUrl: String)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when opening the dropdown menu on a recent visit by long press.
|
||||||
|
*/
|
||||||
|
fun onRecentVisitLongClicked()
|
||||||
}
|
}
|
||||||
|
@ -64,12 +64,14 @@ private const val VISITS_PER_COLUMN = 3
|
|||||||
* @param recentVisits List of [RecentlyVisitedItem] to display.
|
* @param recentVisits List of [RecentlyVisitedItem] to display.
|
||||||
* @param menuItems List of [RecentVisitMenuItem] shown long clicking a [RecentlyVisitedItem].
|
* @param menuItems List of [RecentVisitMenuItem] shown long clicking a [RecentlyVisitedItem].
|
||||||
* @param onRecentVisitClick Invoked when the user clicks on a recent visit.
|
* @param onRecentVisitClick Invoked when the user clicks on a recent visit.
|
||||||
|
* @param onRecentVisitLongClick Invoked when the user long clicks on a recent visit.
|
||||||
*/
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
fun RecentlyVisited(
|
fun RecentlyVisited(
|
||||||
recentVisits: List<RecentlyVisitedItem>,
|
recentVisits: List<RecentlyVisitedItem>,
|
||||||
menuItems: List<RecentVisitMenuItem>,
|
menuItems: List<RecentVisitMenuItem>,
|
||||||
onRecentVisitClick: (RecentlyVisitedItem, Int) -> Unit = { _, _ -> },
|
onRecentVisitClick: (RecentlyVisitedItem, Int) -> Unit = { _, _ -> },
|
||||||
|
onRecentVisitLongClick: () -> Unit = {},
|
||||||
) {
|
) {
|
||||||
Card(
|
Card(
|
||||||
modifier = Modifier.fillMaxWidth(),
|
modifier = Modifier.fillMaxWidth(),
|
||||||
@ -102,6 +104,7 @@ fun RecentlyVisited(
|
|||||||
onRecentVisitClick = {
|
onRecentVisitClick = {
|
||||||
onRecentVisitClick(it, pageIndex + 1)
|
onRecentVisitClick(it, pageIndex + 1)
|
||||||
},
|
},
|
||||||
|
onRecentVisitLongClick = { onRecentVisitLongClick() },
|
||||||
)
|
)
|
||||||
is RecentHistoryGroup -> RecentlyVisitedHistoryGroup(
|
is RecentHistoryGroup -> RecentlyVisitedHistoryGroup(
|
||||||
recentVisit = recentVisit,
|
recentVisit = recentVisit,
|
||||||
@ -111,6 +114,7 @@ fun RecentlyVisited(
|
|||||||
onRecentVisitClick = {
|
onRecentVisitClick = {
|
||||||
onRecentVisitClick(it, pageIndex + 1)
|
onRecentVisitClick(it, pageIndex + 1)
|
||||||
},
|
},
|
||||||
|
onRecentVisitLongClick = { onRecentVisitLongClick() },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -128,8 +132,10 @@ fun RecentlyVisited(
|
|||||||
* @param clickableEnabled Whether click actions should be invoked or not.
|
* @param clickableEnabled Whether click actions should be invoked or not.
|
||||||
* @param showDividerLine Whether to show a divider line at the bottom.
|
* @param showDividerLine Whether to show a divider line at the bottom.
|
||||||
* @param onRecentVisitClick Invoked when the user clicks on a recent visit.
|
* @param onRecentVisitClick Invoked when the user clicks on a recent visit.
|
||||||
|
* @param onRecentVisitClick Invoked when the user long clicks on a recently visited group.
|
||||||
*/
|
*/
|
||||||
@OptIn(ExperimentalFoundationApi::class)
|
@OptIn(ExperimentalFoundationApi::class)
|
||||||
|
@Suppress("LongParameterList")
|
||||||
@Composable
|
@Composable
|
||||||
private fun RecentlyVisitedHistoryGroup(
|
private fun RecentlyVisitedHistoryGroup(
|
||||||
recentVisit: RecentHistoryGroup,
|
recentVisit: RecentHistoryGroup,
|
||||||
@ -137,6 +143,7 @@ private fun RecentlyVisitedHistoryGroup(
|
|||||||
clickableEnabled: Boolean,
|
clickableEnabled: Boolean,
|
||||||
showDividerLine: Boolean,
|
showDividerLine: Boolean,
|
||||||
onRecentVisitClick: (RecentHistoryGroup) -> Unit = { _ -> },
|
onRecentVisitClick: (RecentHistoryGroup) -> Unit = { _ -> },
|
||||||
|
onRecentVisitLongClick: () -> Unit = {},
|
||||||
) {
|
) {
|
||||||
var isMenuExpanded by remember { mutableStateOf(false) }
|
var isMenuExpanded by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
@ -145,7 +152,10 @@ private fun RecentlyVisitedHistoryGroup(
|
|||||||
.combinedClickable(
|
.combinedClickable(
|
||||||
enabled = clickableEnabled,
|
enabled = clickableEnabled,
|
||||||
onClick = { onRecentVisitClick(recentVisit) },
|
onClick = { onRecentVisitClick(recentVisit) },
|
||||||
onLongClick = { isMenuExpanded = true },
|
onLongClick = {
|
||||||
|
onRecentVisitLongClick()
|
||||||
|
isMenuExpanded = true
|
||||||
|
},
|
||||||
)
|
)
|
||||||
.size(268.dp, 56.dp),
|
.size(268.dp, 56.dp),
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
@ -195,8 +205,10 @@ private fun RecentlyVisitedHistoryGroup(
|
|||||||
* @param clickableEnabled Whether click actions should be invoked or not.
|
* @param clickableEnabled Whether click actions should be invoked or not.
|
||||||
* @param showDividerLine Whether to show a divider line at the bottom.
|
* @param showDividerLine Whether to show a divider line at the bottom.
|
||||||
* @param onRecentVisitClick Invoked when the user clicks on a recent visit.
|
* @param onRecentVisitClick Invoked when the user clicks on a recent visit.
|
||||||
|
* @param onRecentVisitLongClick Invoked when the user long clicks on a recent visit highlight.
|
||||||
*/
|
*/
|
||||||
@OptIn(ExperimentalFoundationApi::class)
|
@OptIn(ExperimentalFoundationApi::class)
|
||||||
|
@Suppress("LongParameterList")
|
||||||
@Composable
|
@Composable
|
||||||
private fun RecentlyVisitedHistoryHighlight(
|
private fun RecentlyVisitedHistoryHighlight(
|
||||||
recentVisit: RecentHistoryHighlight,
|
recentVisit: RecentHistoryHighlight,
|
||||||
@ -204,6 +216,7 @@ private fun RecentlyVisitedHistoryHighlight(
|
|||||||
clickableEnabled: Boolean,
|
clickableEnabled: Boolean,
|
||||||
showDividerLine: Boolean,
|
showDividerLine: Boolean,
|
||||||
onRecentVisitClick: (RecentHistoryHighlight) -> Unit = { _ -> },
|
onRecentVisitClick: (RecentHistoryHighlight) -> Unit = { _ -> },
|
||||||
|
onRecentVisitLongClick: () -> Unit = {},
|
||||||
) {
|
) {
|
||||||
var isMenuExpanded by remember { mutableStateOf(false) }
|
var isMenuExpanded by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
@ -212,7 +225,10 @@ private fun RecentlyVisitedHistoryHighlight(
|
|||||||
.combinedClickable(
|
.combinedClickable(
|
||||||
enabled = clickableEnabled,
|
enabled = clickableEnabled,
|
||||||
onClick = { onRecentVisitClick(recentVisit) },
|
onClick = { onRecentVisitClick(recentVisit) },
|
||||||
onLongClick = { isMenuExpanded = true },
|
onLongClick = {
|
||||||
|
onRecentVisitLongClick()
|
||||||
|
isMenuExpanded = true
|
||||||
|
},
|
||||||
)
|
)
|
||||||
.size(268.dp, 56.dp),
|
.size(268.dp, 56.dp),
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
|
@ -76,6 +76,7 @@ class RecentlyVisitedViewHolder(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
onRecentVisitLongClick = { interactor.onRecentVisitLongClicked() },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -434,6 +434,10 @@ class SessionControlInteractor(
|
|||||||
recentVisitsController.handleRemoveRecentHistoryHighlight(highlightUrl)
|
recentVisitsController.handleRemoveRecentHistoryHighlight(highlightUrl)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onRecentVisitLongClicked() {
|
||||||
|
recentVisitsController.handleRecentVisitLongClicked()
|
||||||
|
}
|
||||||
|
|
||||||
override fun openCustomizeHomePage() {
|
override fun openCustomizeHomePage() {
|
||||||
controller.handleCustomizeHomeTapped()
|
controller.handleCustomizeHomeTapped()
|
||||||
}
|
}
|
||||||
|
@ -181,4 +181,18 @@ class RecentVisitsControllerTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `WHEN long clicking a recent visit THEN search dialog should be dismissed `() = runTestOnMain {
|
||||||
|
every { navController.currentDestination } returns mockk {
|
||||||
|
every { id } returns R.id.searchDialogFragment
|
||||||
|
}
|
||||||
|
|
||||||
|
controller.handleRecentVisitLongClicked()
|
||||||
|
|
||||||
|
verify {
|
||||||
|
controller.dismissSearchDialogIfDisplayed()
|
||||||
|
navController.navigateUp()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -120,4 +120,11 @@ class RecentVisitsInteractorTest {
|
|||||||
|
|
||||||
verify { recentVisitsController.handleRemoveRecentHistoryHighlight("url") }
|
verify { recentVisitsController.handleRemoveRecentHistoryHighlight("url") }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun onRecentVisitLongClicked() {
|
||||||
|
interactor.onRecentVisitLongClicked()
|
||||||
|
|
||||||
|
verify { recentVisitsController.handleRecentVisitLongClicked() }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user