commit f8ed40dbde188347865e8df1c5e3f22ace396af8
parent a8ea9ca07f1b6617653de30a2accfe46af6b5655
Author: Segun Famisa <sfamisa@mozilla.com>
Date: Fri, 28 Nov 2025 17:17:22 +0000
Bug 2002797 - Remove unnecessary LongMethod suppression in BookmarksTelemetryMiddleware r=android-reviewers,fmasalha
This patch refactors the `BookmarksTelemetryMiddleware` to improve readability and maintainability.
The large `when` block in the main `invoke` function has been broken down into smaller, more focused private helper functions.
This change reduces the cognitive complexity of the main `invoke` method, allowing the `@Suppress("LongMethod")` annotation to be removed.
Differential Revision: https://phabricator.services.mozilla.com/D274295
Diffstat:
2 files changed, 136 insertions(+), 88 deletions(-)
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/BookmarksTelemetryMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/BookmarksTelemetryMiddleware.kt
@@ -15,7 +15,7 @@ private val LIST_SCREEN_METRIC_SOURCE = MetricsUtils.BookmarkAction.Source.BOOKM
internal class BookmarksTelemetryMiddleware : Middleware<BookmarksState, BookmarksAction> {
- @Suppress("LongMethod", "CyclomaticComplexMethod")
+ @Suppress("CyclomaticComplexMethod")
override fun invoke(
context: MiddlewareContext<BookmarksState, BookmarksAction>,
next: (BookmarksAction) -> Unit,
@@ -25,21 +25,7 @@ internal class BookmarksTelemetryMiddleware : Middleware<BookmarksState, Bookmar
next(action)
when (action) {
BackClicked -> preReductionState.handleBackClick()
- is BookmarksListMenuAction.Bookmark.CopyClicked -> {
- BookmarksManagement.copied.record(NoExtras())
- }
- DeletionDialogAction.DeleteTapped -> {
- val deletedItems = preReductionState.bookmarkItems.filter {
- it.guid in preReductionState.bookmarksDeletionDialogState.guidsToDelete
- }
- if (deletedItems.any { it is BookmarkItem.Folder }) {
- BookmarksManagement.folderRemove.record(NoExtras())
- }
-
- if (deletedItems.size > 1) {
- BookmarksManagement.multiRemoved.record(NoExtras())
- }
- }
+ is DeletionDialogAction -> preReductionState.handleDeleteDialogAction(action)
is BookmarkClicked -> {
if (preReductionState.selectedItems.isEmpty()) {
BookmarksManagement.open.record(NoExtras())
@@ -49,82 +35,21 @@ internal class BookmarksTelemetryMiddleware : Middleware<BookmarksState, Bookmar
)
}
}
- is BookmarksListMenuAction.Folder.OpenAllInNormalTabClicked -> {
- BookmarksManagement.openAllInNewTabs.record(NoExtras())
- MetricsUtils.recordBookmarkMetrics(
- MetricsUtils.BookmarkAction.OPEN,
- LIST_SCREEN_METRIC_SOURCE,
- )
- }
- is BookmarksListMenuAction.Folder.OpenAllInPrivateTabClicked -> {
- BookmarksManagement.openInPrivateTabs.record(NoExtras())
- MetricsUtils.recordBookmarkMetrics(
- MetricsUtils.BookmarkAction.OPEN,
- LIST_SCREEN_METRIC_SOURCE,
- )
- }
- is BookmarksListMenuAction.Bookmark.OpenInNormalTabClicked -> {
- BookmarksManagement.openInNewTab.record(NoExtras())
- MetricsUtils.recordBookmarkMetrics(
- MetricsUtils.BookmarkAction.OPEN,
- LIST_SCREEN_METRIC_SOURCE,
- )
- }
- is BookmarksListMenuAction.Bookmark.OpenInPrivateTabClicked -> {
- BookmarksManagement.openInPrivateTab.record(NoExtras())
- MetricsUtils.recordBookmarkMetrics(
- MetricsUtils.BookmarkAction.OPEN,
- LIST_SCREEN_METRIC_SOURCE,
- )
- }
- BookmarksListMenuAction.MultiSelect.OpenInNormalTabsClicked -> {
- BookmarksManagement.openInNewTabs.record(NoExtras())
- MetricsUtils.recordBookmarkMetrics(
- MetricsUtils.BookmarkAction.OPEN,
- LIST_SCREEN_METRIC_SOURCE,
- )
- }
- BookmarksListMenuAction.MultiSelect.OpenInPrivateTabsClicked -> {
- BookmarksManagement.openInPrivateTabs.record(NoExtras())
- MetricsUtils.recordBookmarkMetrics(
- MetricsUtils.BookmarkAction.OPEN,
- LIST_SCREEN_METRIC_SOURCE,
- )
- }
- SnackbarAction.Dismissed -> {
- val snackSnate = preReductionState.bookmarksSnackbarState
- if (snackSnate is BookmarksSnackbarState.UndoDeletion && snackSnate.guidsToDelete.size == 1) {
- BookmarksManagement.removed.record(NoExtras())
- val source = if (preReductionState.bookmarksEditFolderState != null) {
- EDIT_SCREEN_METRIC_SOURCE
- } else {
- LIST_SCREEN_METRIC_SOURCE
- }
- MetricsUtils.recordBookmarkMetrics(MetricsUtils.BookmarkAction.DELETE, source)
- }
- }
+
+ is BookmarksListMenuAction.Folder -> handleBookmarksListMenuFolderAction(action)
+ is BookmarksListMenuAction.Bookmark -> handleBookmarksListMenuBookmarkAction(action)
+ is BookmarksListMenuAction.MultiSelect -> preReductionState.handleBookmarksListMenuMultiSelectAction(
+ action,
+ )
+ is SnackbarAction -> preReductionState.handleSnackbarDismissedAction(action)
SearchClicked -> {
BookmarksManagement.searchIconTapped.record(NoExtras())
}
- is BookmarksListMenuAction.Bookmark.ShareClicked -> {
- BookmarksManagement.shared.record(NoExtras())
- }
- BookmarksListMenuAction.MultiSelect.ShareClicked -> {
- preReductionState.selectedItems.filterIsInstance<BookmarkItem.Bookmark>()
- .forEach { BookmarksManagement.shared.record(NoExtras()) }
- }
is BookmarksListMenuAction.SortMenu -> action.record()
- is BookmarksListMenuAction.Folder.DeleteClicked,
CloseClicked,
AddFolderClicked,
is SelectFolderAction.SortMenu,
is BookmarkLongClicked,
- is BookmarksListMenuAction.Bookmark.DeleteClicked,
- is BookmarksListMenuAction.Bookmark.EditClicked,
- is BookmarksListMenuAction.Folder.EditClicked,
- BookmarksListMenuAction.MultiSelect.DeleteClicked,
- BookmarksListMenuAction.MultiSelect.EditClicked,
- BookmarksListMenuAction.MultiSelect.MoveClicked,
BookmarksListMenuAction.SelectAll,
is BookmarksLoaded,
is SearchDismissed,
@@ -143,13 +68,10 @@ internal class BookmarksTelemetryMiddleware : Middleware<BookmarksState, Bookmar
is EditBookmarkAction.TitleChanged,
is EditBookmarkAction.URLChanged,
SelectFolderAction.ViewAppeared,
- DeletionDialogAction.CancelTapped,
- is DeletionDialogAction.CountLoaded,
EditFolderAction.DeleteClicked,
EditFolderAction.ParentFolderClicked,
is RecursiveSelectionCountLoaded,
is EditFolderAction.TitleChanged,
- SnackbarAction.Undo,
OpenTabsConfirmationDialogAction.CancelTapped,
OpenTabsConfirmationDialogAction.ConfirmTapped,
is OpenTabsConfirmationDialogAction.Present,
@@ -163,6 +85,111 @@ internal class BookmarksTelemetryMiddleware : Middleware<BookmarksState, Bookmar
}
}
+ private fun BookmarksState.handleSnackbarDismissedAction(action: SnackbarAction) {
+ when (action) {
+ SnackbarAction.Dismissed -> {
+ val snackSnate = bookmarksSnackbarState
+ if (snackSnate is BookmarksSnackbarState.UndoDeletion && snackSnate.guidsToDelete.size == 1) {
+ BookmarksManagement.removed.record(NoExtras())
+ val source = if (bookmarksEditFolderState != null) {
+ EDIT_SCREEN_METRIC_SOURCE
+ } else {
+ LIST_SCREEN_METRIC_SOURCE
+ }
+ MetricsUtils.recordBookmarkMetrics(MetricsUtils.BookmarkAction.DELETE, source)
+ }
+ }
+
+ SnackbarAction.Undo -> Unit
+ }
+ }
+
+ private fun BookmarksState.handleBookmarksListMenuMultiSelectAction(action: BookmarksListMenuAction.MultiSelect) {
+ when (action) {
+ BookmarksListMenuAction.MultiSelect.OpenInNormalTabsClicked -> {
+ BookmarksManagement.openInNewTabs.record(NoExtras())
+ MetricsUtils.recordBookmarkMetrics(
+ MetricsUtils.BookmarkAction.OPEN,
+ LIST_SCREEN_METRIC_SOURCE,
+ )
+ }
+
+ BookmarksListMenuAction.MultiSelect.OpenInPrivateTabsClicked -> {
+ BookmarksManagement.openInPrivateTabs.record(NoExtras())
+ MetricsUtils.recordBookmarkMetrics(
+ MetricsUtils.BookmarkAction.OPEN,
+ LIST_SCREEN_METRIC_SOURCE,
+ )
+ }
+
+ BookmarksListMenuAction.MultiSelect.ShareClicked -> {
+ selectedItems.filterIsInstance<BookmarkItem.Bookmark>()
+ .forEach { _ -> BookmarksManagement.shared.record(NoExtras()) }
+ }
+
+ BookmarksListMenuAction.MultiSelect.DeleteClicked,
+ BookmarksListMenuAction.MultiSelect.EditClicked,
+ BookmarksListMenuAction.MultiSelect.MoveClicked,
+ -> Unit
+ }
+ }
+
+ private fun handleBookmarksListMenuBookmarkAction(action: BookmarksListMenuAction.Bookmark) {
+ when (action) {
+ is BookmarksListMenuAction.Bookmark.OpenInNormalTabClicked -> {
+ BookmarksManagement.openInNewTab.record(NoExtras())
+ MetricsUtils.recordBookmarkMetrics(
+ MetricsUtils.BookmarkAction.OPEN,
+ LIST_SCREEN_METRIC_SOURCE,
+ )
+ }
+
+ is BookmarksListMenuAction.Bookmark.OpenInPrivateTabClicked -> {
+ BookmarksManagement.openInPrivateTab.record(NoExtras())
+ MetricsUtils.recordBookmarkMetrics(
+ MetricsUtils.BookmarkAction.OPEN,
+ LIST_SCREEN_METRIC_SOURCE,
+ )
+ }
+
+ is BookmarksListMenuAction.Bookmark.ShareClicked -> {
+ BookmarksManagement.shared.record(NoExtras())
+ }
+
+ is BookmarksListMenuAction.Bookmark.CopyClicked -> {
+ BookmarksManagement.copied.record(NoExtras())
+ }
+
+ is BookmarksListMenuAction.Bookmark.DeleteClicked,
+ is BookmarksListMenuAction.Bookmark.EditClicked,
+ -> Unit
+ }
+ }
+
+ private fun handleBookmarksListMenuFolderAction(action: BookmarksListMenuAction.Folder) {
+ when (action) {
+ is BookmarksListMenuAction.Folder.OpenAllInNormalTabClicked -> {
+ BookmarksManagement.openAllInNewTabs.record(NoExtras())
+ MetricsUtils.recordBookmarkMetrics(
+ MetricsUtils.BookmarkAction.OPEN,
+ LIST_SCREEN_METRIC_SOURCE,
+ )
+ }
+
+ is BookmarksListMenuAction.Folder.OpenAllInPrivateTabClicked -> {
+ BookmarksManagement.openInPrivateTabs.record(NoExtras())
+ MetricsUtils.recordBookmarkMetrics(
+ MetricsUtils.BookmarkAction.OPEN,
+ LIST_SCREEN_METRIC_SOURCE,
+ )
+ }
+
+ is BookmarksListMenuAction.Folder.EditClicked,
+ is BookmarksListMenuAction.Folder.DeleteClicked,
+ -> Unit
+ }
+ }
+
private fun BookmarksState.handleBackClick() {
when {
bookmarksEditBookmarkState != null -> {
@@ -201,4 +228,25 @@ internal class BookmarksTelemetryMiddleware : Middleware<BookmarksState, Bookmar
BookmarksListMenuAction.SortMenu.AtoZClicked -> BookmarksManagement.sortByAToZ.record()
BookmarksListMenuAction.SortMenu.ZtoAClicked -> BookmarksManagement.sortByZToA.record()
}
+
+ private fun BookmarksState.handleDeleteDialogAction(action: DeletionDialogAction) {
+ when (action) {
+ DeletionDialogAction.DeleteTapped -> {
+ val deletedItems = bookmarkItems.filter {
+ it.guid in bookmarksDeletionDialogState.guidsToDelete
+ }
+ if (deletedItems.any { it is BookmarkItem.Folder }) {
+ BookmarksManagement.folderRemove.record(NoExtras())
+ }
+
+ if (deletedItems.size > 1) {
+ BookmarksManagement.multiRemoved.record(NoExtras())
+ }
+ }
+
+ is DeletionDialogAction.CountLoaded,
+ DeletionDialogAction.CancelTapped,
+ -> Unit
+ }
+ }
}
diff --git a/mobile/android/fenix/config/detekt-baseline.xml b/mobile/android/fenix/config/detekt-baseline.xml
@@ -18,7 +18,7 @@
<ID>ForbiddenSuppress:BookmarksMiddleware.kt$BookmarksMiddleware$@Suppress("LongMethod", "CognitiveComplexMethod", "CyclomaticComplexMethod")</ID>
<ID>ForbiddenSuppress:BookmarksReducer.kt$@Suppress("CyclomaticComplexMethod")</ID>
<ID>ForbiddenSuppress:BookmarksScreen.kt$@Suppress("LongMethod", "CognitiveComplexMethod", "CyclomaticComplexMethod")</ID>
- <ID>ForbiddenSuppress:BookmarksTelemetryMiddleware.kt$BookmarksTelemetryMiddleware$@Suppress("LongMethod", "CyclomaticComplexMethod")</ID>
+ <ID>ForbiddenSuppress:BookmarksTelemetryMiddleware.kt$BookmarksTelemetryMiddleware$@Suppress("CyclomaticComplexMethod")</ID>
<ID>ForbiddenSuppress:BrowserToolbarCFRPresenter.kt$BrowserToolbarCFRPresenter$@Suppress("MagicNumber")</ID>
<ID>ForbiddenSuppress:BrowserToolbarMenuController.kt$DefaultBrowserToolbarMenuController$@Suppress("CognitiveComplexMethod", "LongMethod")</ID>
<ID>ForbiddenSuppress:BrowserToolbarMenuController.kt$DefaultBrowserToolbarMenuController$@Suppress("CognitiveComplexMethod", "LongMethod", "CyclomaticComplexMethod")</ID>