diff --git a/app/metrics.yaml b/app/metrics.yaml index 5417bc7817..993a097f73 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -5880,6 +5880,21 @@ recent_bookmarks: notification_emails: - android-probes@mozilla.com expires: "2022-02-01" + recent_bookmarks_count: + type: quantity + description: | + The number of bookmarked items appearing in the + Recently Saved section on the home page. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/22075 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/22293 + data_sensitivity: + - interaction + notification_emails: + - android-probes@mozilla.com + expires: "2022-11-01" + unit: integer recent_searches: group_deleted: diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/Event.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/Event.kt index 268dd4697b..a45b7e6e22 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/Event.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/Event.kt @@ -274,6 +274,7 @@ sealed class Event { object BookmarkClicked : Event() object ShowAllBookmarks : Event() object RecentBookmarksShown : Event() + data class RecentBookmarkCount(val count: Int) : Event() // Recently visited/Recent searches object RecentSearchesGroupDeleted : Event() diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt index 343cea4f8a..2063361168 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt @@ -822,6 +822,10 @@ private val Event.wrapper: EventWrapper<*>? { RecentBookmarks.shown.record(it) } ) + is Event.RecentBookmarkCount -> EventWrapper( + { RecentBookmarks.recentBookmarksCount.set(this.count.toLong()) }, + ) + is Event.AndroidAutofillRequestWithLogins -> EventWrapper( { AndroidAutofill.requestMatchingLogins.record(it) } ) diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt index fe7aaebead..1123325984 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt @@ -605,9 +605,13 @@ class DefaultSessionControlController( } override fun handleReportSessionMetrics(state: HomeFragmentState) { - metrics.track( - if (state.recentTabs.isEmpty()) Event.RecentTabsSectionIsNotVisible - else Event.RecentTabsSectionIsVisible - ) + with(metrics) { + track( + if (state.recentTabs.isEmpty()) Event.RecentTabsSectionIsNotVisible + else Event.RecentTabsSectionIsVisible + ) + + track(Event.RecentBookmarkCount(state.recentBookmarks.size)) + } } } diff --git a/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt b/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt index 78d716025a..d535d20381 100644 --- a/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt @@ -29,6 +29,7 @@ import mozilla.components.browser.state.state.recover.RecoverableTab import mozilla.components.browser.state.state.selectedOrDefaultSearchEngine import mozilla.components.browser.state.store.BrowserStore import mozilla.components.concept.engine.Engine +import mozilla.components.concept.storage.BookmarkNode import mozilla.components.feature.session.SessionUseCases import mozilla.components.feature.tab.collections.TabCollection import mozilla.components.feature.tabs.TabsUseCases @@ -843,6 +844,27 @@ class DefaultSessionControlControllerTest { } } + @Test + fun `WHEN handleReportSessionMetrics is called AND there are zero recent bookmarks THEN report Event#RecentBookmarkCount(0)`() { + every { homeFragmentState.recentBookmarks } returns emptyList() + every { homeFragmentState.recentTabs } returns emptyList() + createController().handleReportSessionMetrics(homeFragmentState) + verify { + metrics.track(Event.RecentBookmarkCount(0)) + } + } + + @Test + fun `WHEN handleReportSessionMetrics is called AND there is at least one recent bookmark THEN report Event#RecentBookmarkCount(1)`() { + val recentBookmark: BookmarkNode = mockk(relaxed = true) + every { homeFragmentState.recentBookmarks } returns listOf(recentBookmark) + every { homeFragmentState.recentTabs } returns emptyList() + createController().handleReportSessionMetrics(homeFragmentState) + verify { + metrics.track(Event.RecentBookmarkCount(1)) + } + } + private fun createController( hideOnboarding: () -> Unit = { }, registerCollectionStorageObserver: () -> Unit = { },