diff --git a/app/metrics.yaml b/app/metrics.yaml index 32176e705..39c7d8dfb 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -5893,6 +5893,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 6bf30a46b..67240683d 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 @@ -275,6 +275,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 c7fc48b88..cfd4baa77 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 @@ -823,6 +823,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 e86f47217..b28e526bc 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 @@ -604,9 +604,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 751c8cd82..749f56840 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 = { },