tor-browser

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

commit a75cda43239f1c772532d956ce3a5404880815de
parent 2ab03fd872e86b6efdb891c2022d6d4d9557b17d
Author: Devota Aabel <daabel@mozilla.com>
Date:   Thu, 30 Oct 2025 17:29:26 +0000

Bug 1984410- Add telemetry for Content Discover More page. r=gl,android-reviewers

Differential Revision: https://phabricator.services.mozilla.com/D270402

Diffstat:
Mmobile/android/fenix/app/metrics.yaml | 18+++++++++++++++++-
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/fake/FakeHomepagePreview.kt | 1+
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/pocket/controller/PocketStoriesController.kt | 11+++++++++++
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/pocket/interactor/PocketStoriesInteractor.kt | 9+++++++++
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/pocket/ui/StoriesScreen.kt | 5+++++
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt | 4++++
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/pocket/DefaultPocketStoriesControllerTest.kt | 8++++++++
7 files changed, 55 insertions(+), 1 deletion(-)

diff --git a/mobile/android/fenix/app/metrics.yaml b/mobile/android/fenix/app/metrics.yaml @@ -8600,7 +8600,23 @@ pocket: metadata: tags: - PocketIntegration - +stories_library: + viewed: + type: event + description: | + A user viewed the "discover more" content feed + bugs: + - https://bugzilla.mozilla.org/show_bug.cgi?id=1984410 + data_reviews: + - https://phabricator.services.mozilla.com/D270402 + data_sensitivity: + - interaction + notification_emails: + - android-probes@mozilla.com + expires: never + metadata: + tags: + - PocketIntegration first_session: campaign: type: string diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/fake/FakeHomepagePreview.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/fake/FakeHomepagePreview.kt @@ -119,6 +119,7 @@ internal object FakeHomepagePreview { ) { /* no op */ } override fun onDiscoverMoreClicked() { /* no op */ } + override fun onDiscoverMoreScreenViewed() { /* no op */ } } internal val privateBrowsingInteractor diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/pocket/controller/PocketStoriesController.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/pocket/controller/PocketStoriesController.kt @@ -17,6 +17,7 @@ import mozilla.components.service.pocket.ext.getCurrentFlightImpressions import mozilla.telemetry.glean.private.NoExtras import org.mozilla.fenix.GleanMetrics.Pings import org.mozilla.fenix.GleanMetrics.Pocket +import org.mozilla.fenix.GleanMetrics.StoriesLibrary import org.mozilla.fenix.R import org.mozilla.fenix.components.AppStore import org.mozilla.fenix.components.appstate.AppAction.ContentRecommendationsAction @@ -26,6 +27,7 @@ import org.mozilla.fenix.home.HomeFragmentDirections import org.mozilla.fenix.home.mars.MARSUseCases import org.mozilla.fenix.home.pocket.PocketImpression import org.mozilla.fenix.home.pocket.PocketRecommendedStoriesCategory +import org.mozilla.fenix.home.pocket.interactor.PocketStoriesInteractor import org.mozilla.fenix.utils.Settings import java.lang.ref.WeakReference @@ -71,6 +73,11 @@ interface PocketStoriesController { * Callback for when the user clicks on the "Discover more" button. */ fun handleDiscoverMoreClicked() + + /** + * @see [PocketStoriesInteractor.onDiscoverMoreScreenViewed] + */ + fun handleDiscoverMoreScreenViewed() } /** @@ -262,4 +269,8 @@ internal class DefaultPocketStoriesController( HomeFragmentDirections.actionHomeFragmentToStoriesFragment(), ) } + + override fun handleDiscoverMoreScreenViewed() { + StoriesLibrary.viewed.record(NoExtras()) + } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/pocket/interactor/PocketStoriesInteractor.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/pocket/interactor/PocketStoriesInteractor.kt @@ -49,6 +49,11 @@ interface PocketStoriesInteractor { * Callback when an user clicks on the "Discover more" nutton for stories on the homepage. */ fun onDiscoverMoreClicked() + + /** + * Sends telemetry related to the "Discover more" screen being viewed. + */ + fun onDiscoverMoreScreenViewed() } /** @@ -76,4 +81,8 @@ class DefaultPocketStoriesInteractor( override fun onDiscoverMoreClicked() { controller.handleDiscoverMoreClicked() } + + override fun onDiscoverMoreScreenViewed() { + controller.handleDiscoverMoreScreenViewed() + } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/pocket/ui/StoriesScreen.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/pocket/ui/StoriesScreen.kt @@ -23,6 +23,7 @@ import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll @@ -49,6 +50,10 @@ fun StoriesScreen( interactor: PocketStoriesInteractor, onNavigationIconClick: () -> Unit, ) { + LaunchedEffect(Unit) { + interactor.onDiscoverMoreScreenViewed() + } + BackInvokedHandler { onNavigationIconClick() } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt @@ -381,6 +381,10 @@ class SessionControlInteractor( pocketStoriesController.handleDiscoverMoreClicked() } + override fun onDiscoverMoreScreenViewed() { + pocketStoriesController.handleDiscoverMoreScreenViewed() + } + override fun reportSessionMetrics(state: AppState) { controller.handleReportSessionMetrics(state) } diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/pocket/DefaultPocketStoriesControllerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/pocket/DefaultPocketStoriesControllerTest.kt @@ -31,6 +31,7 @@ import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.GleanMetrics.Pings import org.mozilla.fenix.GleanMetrics.Pocket +import org.mozilla.fenix.GleanMetrics.StoriesLibrary import org.mozilla.fenix.R import org.mozilla.fenix.components.AppStore import org.mozilla.fenix.components.appstate.AppAction.ContentRecommendationsAction @@ -588,6 +589,13 @@ class DefaultPocketStoriesControllerTest { } } + fun `WHEN screen is shown THEN impression is logged`() { + assertNull(StoriesLibrary.viewed.testGetValue()) + val controller = createController() + controller.handleDiscoverMoreScreenViewed() + assertNotNull(StoriesLibrary.viewed.testGetValue()) + } + private fun createController( appStore: AppStore = AppStore(), ) = DefaultPocketStoriesController(