tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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:
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/BookmarksTelemetryMiddleware.kt | 222++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------
Mmobile/android/fenix/config/detekt-baseline.xml | 2+-
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>