diff --git a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt index 5c6bc0492..4c3b5882b 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt @@ -150,7 +150,8 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { val toolbarSessionObserver = TrackingProtectionOverlay( context = context, - settings = settings + settings = settings, + metrics = context.components.analytics.metrics ) { browserToolbarView.view } diff --git a/app/src/main/java/org/mozilla/fenix/cfr/SearchWidgetCFR.kt b/app/src/main/java/org/mozilla/fenix/cfr/SearchWidgetCFR.kt index 1b178bc01..1bbe94e05 100644 --- a/app/src/main/java/org/mozilla/fenix/cfr/SearchWidgetCFR.kt +++ b/app/src/main/java/org/mozilla/fenix/cfr/SearchWidgetCFR.kt @@ -20,8 +20,7 @@ import kotlinx.android.synthetic.main.tracking_protection_onboarding_popup.view. import org.mozilla.fenix.R import org.mozilla.fenix.components.SearchWidgetCreator import org.mozilla.fenix.components.metrics.Event -import org.mozilla.fenix.ext.components -import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.utils.Settings /** @@ -29,27 +28,29 @@ import org.mozilla.fenix.utils.Settings */ class SearchWidgetCFR( private val context: Context, + private val settings: Settings, + private val metrics: MetricController, private val getToolbar: () -> View ) { fun displayIfNecessary() { - if (!context.settings().isInSearchWidgetExperiment || - !context.settings().shouldDisplaySearchWidgetCFR() || - isShown - ) { return } - - isShown = true - showSearchWidgetCFR() + if (settings.isInSearchWidgetExperiment && + settings.shouldDisplaySearchWidgetCFR() && + !isShown + ) { + isShown = true + showSearchWidgetCFR() + } } - @Suppress("MagicNumber", "InflateParams") + @Suppress("InflateParams") private fun showSearchWidgetCFR() { - context.settings().incrementSearchWidgetCFRDisplayed() + settings.incrementSearchWidgetCFRDisplayed() val searchWidgetCFRDialog = Dialog(context) val layout = LayoutInflater.from(context) .inflate(R.layout.search_widget_cfr, null) - val isBottomToolbar = Settings.getInstance(context).shouldUseBottomToolbar + val isBottomToolbar = settings.shouldUseBottomToolbar layout.drop_down_triangle.isGone = isBottomToolbar layout.pop_up_triangle.isVisible = isBottomToolbar @@ -63,16 +64,16 @@ class SearchWidgetCFR( } layout.cfr_neg_button.setOnClickListener { - context.components.analytics.metrics.track(Event.SearchWidgetCFRNotNowPressed) + metrics.track(Event.SearchWidgetCFRNotNowPressed) searchWidgetCFRDialog.dismiss() - context.settings().manuallyDismissSearchWidgetCFR() + settings.manuallyDismissSearchWidgetCFR() } layout.cfr_pos_button.setOnClickListener { - context.components.analytics.metrics.track(Event.SearchWidgetCFRAddWidgetPressed) + metrics.track(Event.SearchWidgetCFRAddWidgetPressed) SearchWidgetCreator.createSearchWidget(context) searchWidgetCFRDialog.dismiss() - context.settings().manuallyDismissSearchWidgetCFR() + settings.manuallyDismissSearchWidgetCFR() } searchWidgetCFRDialog.apply { @@ -90,16 +91,16 @@ class SearchWidgetCFR( searchWidgetCFRDialog.setOnCancelListener { isShown = false - context.components.analytics.metrics.track(Event.SearchWidgetCFRCanceled) + metrics.track(Event.SearchWidgetCFRCanceled) } searchWidgetCFRDialog.setOnDismissListener { isShown = false - context.settings().incrementSearchWidgetCFRDismissed() + settings.incrementSearchWidgetCFRDismissed() } searchWidgetCFRDialog.show() - context.components.analytics.metrics.track(Event.SearchWidgetCFRDisplayed) + metrics.track(Event.SearchWidgetCFRDisplayed) } companion object { diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt index 1740152f1..0f3d75878 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -375,7 +375,13 @@ class HomeFragment : Fragment() { // the CFR in. view.toolbar_wrapper.doOnLayout { if (!browsingModeManager.mode.isPrivate) { - SearchWidgetCFR(view.context) { view.toolbar_wrapper }.displayIfNecessary() + SearchWidgetCFR( + context = view.context, + settings = view.context.settings(), + metrics = view.context.components.analytics.metrics + ) { + view.toolbar_wrapper + }.displayIfNecessary() } } diff --git a/app/src/main/java/org/mozilla/fenix/trackingprotection/TrackingProtectionOverlay.kt b/app/src/main/java/org/mozilla/fenix/trackingprotection/TrackingProtectionOverlay.kt index 0f0dae3dc..194c1326d 100644 --- a/app/src/main/java/org/mozilla/fenix/trackingprotection/TrackingProtectionOverlay.kt +++ b/app/src/main/java/org/mozilla/fenix/trackingprotection/TrackingProtectionOverlay.kt @@ -21,6 +21,7 @@ import kotlinx.android.synthetic.main.tracking_protection_onboarding_popup.view. import mozilla.components.browser.session.Session import org.mozilla.fenix.R import org.mozilla.fenix.components.metrics.Event +import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.increaseTapArea import org.mozilla.fenix.utils.Settings @@ -32,6 +33,7 @@ import org.mozilla.fenix.utils.Settings class TrackingProtectionOverlay( private val context: Context, private val settings: Settings, + private val metrics: MetricController, private val getToolbar: () -> View ) : Session.Observer { @@ -62,7 +64,7 @@ class TrackingProtectionOverlay( val layout = LayoutInflater.from(context) .inflate(R.layout.tracking_protection_onboarding_popup, null) - val isBottomToolbar = Settings.getInstance(context).shouldUseBottomToolbar + val isBottomToolbar = settings.shouldUseBottomToolbar layout.drop_down_triangle.isGone = isBottomToolbar layout.pop_up_triangle.isVisible = isBottomToolbar @@ -76,7 +78,7 @@ class TrackingProtectionOverlay( val closeButton = layout.findViewById(R.id.close_onboarding) closeButton.increaseTapArea(BUTTON_INCREASE_DPS) closeButton.setOnClickListener { - context.components.analytics.metrics.track(Event.ContextualHintETPDismissed) + metrics.track(Event.ContextualHintETPDismissed) trackingOnboardingDialog.dismiss() } @@ -115,12 +117,12 @@ class TrackingProtectionOverlay( val etpShield = getToolbar().findViewById(R.id.mozac_browser_toolbar_tracking_protection_indicator) trackingOnboardingDialog.message.setOnClickListener { - context.components.analytics.metrics.track(Event.ContextualHintETPInsideTap) + metrics.track(Event.ContextualHintETPInsideTap) trackingOnboardingDialog.dismiss() etpShield.performClick() } - context.components.analytics.metrics.track(Event.ContextualHintETPDisplayed) + metrics.track(Event.ContextualHintETPDisplayed) trackingOnboardingDialog.show() settings.incrementTrackingProtectionOnboardingCount() } diff --git a/app/src/test/java/org/mozilla/fenix/trackingprotection/TrackingProtectionOverlayTest.kt b/app/src/test/java/org/mozilla/fenix/trackingprotection/TrackingProtectionOverlayTest.kt index e4a9dca79..b408aa945 100644 --- a/app/src/test/java/org/mozilla/fenix/trackingprotection/TrackingProtectionOverlayTest.kt +++ b/app/src/test/java/org/mozilla/fenix/trackingprotection/TrackingProtectionOverlayTest.kt @@ -6,7 +6,9 @@ package org.mozilla.fenix.trackingprotection import android.content.Context import android.view.View +import io.mockk.MockKAnnotations import io.mockk.every +import io.mockk.impl.annotations.MockK import io.mockk.mockk import io.mockk.spyk import io.mockk.verify @@ -16,28 +18,27 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.R -import org.mozilla.fenix.utils.Settings +import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.helpers.FenixRobolectricTestRunner +import org.mozilla.fenix.utils.Settings @RunWith(FenixRobolectricTestRunner::class) class TrackingProtectionOverlayTest { private lateinit var context: Context - private lateinit var settings: Settings - private lateinit var toolbar: View - private lateinit var icon: View - private lateinit var session: Session - private lateinit var overlay: TrackingProtectionOverlay + @MockK(relaxed = true) private lateinit var settings: Settings + @MockK(relaxed = true) private lateinit var metrics: MetricController + @MockK(relaxed = true) private lateinit var toolbar: View + @MockK(relaxed = true) private lateinit var icon: View + @MockK(relaxed = true) private lateinit var session: Session + @MockK(relaxed = true) private lateinit var overlay: TrackingProtectionOverlay @Before fun setup() { + MockKAnnotations.init(this) context = spyk(testContext) - settings = mockk(relaxed = true) - toolbar = mockk(relaxed = true) - icon = mockk(relaxed = true) - session = mockk(relaxed = true) - overlay = TrackingProtectionOverlay(context, settings) { toolbar } + overlay = TrackingProtectionOverlay(context, settings, metrics) { toolbar } every { toolbar.findViewById(R.id.mozac_browser_toolbar_tracking_protection_indicator) } returns icon }