1
0
Fork 0

Pass settings and metrics to CFR

master
Tiger Oakes 2020-07-20 19:06:22 -07:00 committed by Mihai Branescu
parent 98d5ae6b89
commit e809df0858
5 changed files with 47 additions and 36 deletions

View File

@ -150,7 +150,8 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
val toolbarSessionObserver = TrackingProtectionOverlay( val toolbarSessionObserver = TrackingProtectionOverlay(
context = context, context = context,
settings = settings settings = settings,
metrics = context.components.analytics.metrics
) { ) {
browserToolbarView.view browserToolbarView.view
} }

View File

@ -20,8 +20,7 @@ import kotlinx.android.synthetic.main.tracking_protection_onboarding_popup.view.
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.components.SearchWidgetCreator import org.mozilla.fenix.components.SearchWidgetCreator
import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.ext.components import org.mozilla.fenix.components.metrics.MetricController
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.utils.Settings
/** /**
@ -29,27 +28,29 @@ import org.mozilla.fenix.utils.Settings
*/ */
class SearchWidgetCFR( class SearchWidgetCFR(
private val context: Context, private val context: Context,
private val settings: Settings,
private val metrics: MetricController,
private val getToolbar: () -> View private val getToolbar: () -> View
) { ) {
fun displayIfNecessary() { fun displayIfNecessary() {
if (!context.settings().isInSearchWidgetExperiment || if (settings.isInSearchWidgetExperiment &&
!context.settings().shouldDisplaySearchWidgetCFR() || settings.shouldDisplaySearchWidgetCFR() &&
isShown !isShown
) { return } ) {
isShown = true
isShown = true showSearchWidgetCFR()
showSearchWidgetCFR() }
} }
@Suppress("MagicNumber", "InflateParams") @Suppress("InflateParams")
private fun showSearchWidgetCFR() { private fun showSearchWidgetCFR() {
context.settings().incrementSearchWidgetCFRDisplayed() settings.incrementSearchWidgetCFRDisplayed()
val searchWidgetCFRDialog = Dialog(context) val searchWidgetCFRDialog = Dialog(context)
val layout = LayoutInflater.from(context) val layout = LayoutInflater.from(context)
.inflate(R.layout.search_widget_cfr, null) .inflate(R.layout.search_widget_cfr, null)
val isBottomToolbar = Settings.getInstance(context).shouldUseBottomToolbar val isBottomToolbar = settings.shouldUseBottomToolbar
layout.drop_down_triangle.isGone = isBottomToolbar layout.drop_down_triangle.isGone = isBottomToolbar
layout.pop_up_triangle.isVisible = isBottomToolbar layout.pop_up_triangle.isVisible = isBottomToolbar
@ -63,16 +64,16 @@ class SearchWidgetCFR(
} }
layout.cfr_neg_button.setOnClickListener { layout.cfr_neg_button.setOnClickListener {
context.components.analytics.metrics.track(Event.SearchWidgetCFRNotNowPressed) metrics.track(Event.SearchWidgetCFRNotNowPressed)
searchWidgetCFRDialog.dismiss() searchWidgetCFRDialog.dismiss()
context.settings().manuallyDismissSearchWidgetCFR() settings.manuallyDismissSearchWidgetCFR()
} }
layout.cfr_pos_button.setOnClickListener { layout.cfr_pos_button.setOnClickListener {
context.components.analytics.metrics.track(Event.SearchWidgetCFRAddWidgetPressed) metrics.track(Event.SearchWidgetCFRAddWidgetPressed)
SearchWidgetCreator.createSearchWidget(context) SearchWidgetCreator.createSearchWidget(context)
searchWidgetCFRDialog.dismiss() searchWidgetCFRDialog.dismiss()
context.settings().manuallyDismissSearchWidgetCFR() settings.manuallyDismissSearchWidgetCFR()
} }
searchWidgetCFRDialog.apply { searchWidgetCFRDialog.apply {
@ -90,16 +91,16 @@ class SearchWidgetCFR(
searchWidgetCFRDialog.setOnCancelListener { searchWidgetCFRDialog.setOnCancelListener {
isShown = false isShown = false
context.components.analytics.metrics.track(Event.SearchWidgetCFRCanceled) metrics.track(Event.SearchWidgetCFRCanceled)
} }
searchWidgetCFRDialog.setOnDismissListener { searchWidgetCFRDialog.setOnDismissListener {
isShown = false isShown = false
context.settings().incrementSearchWidgetCFRDismissed() settings.incrementSearchWidgetCFRDismissed()
} }
searchWidgetCFRDialog.show() searchWidgetCFRDialog.show()
context.components.analytics.metrics.track(Event.SearchWidgetCFRDisplayed) metrics.track(Event.SearchWidgetCFRDisplayed)
} }
companion object { companion object {

View File

@ -375,7 +375,13 @@ class HomeFragment : Fragment() {
// the CFR in. // the CFR in.
view.toolbar_wrapper.doOnLayout { view.toolbar_wrapper.doOnLayout {
if (!browsingModeManager.mode.isPrivate) { 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()
} }
} }

View File

@ -21,6 +21,7 @@ import kotlinx.android.synthetic.main.tracking_protection_onboarding_popup.view.
import mozilla.components.browser.session.Session import mozilla.components.browser.session.Session
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.components.metrics.Event 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.components
import org.mozilla.fenix.ext.increaseTapArea import org.mozilla.fenix.ext.increaseTapArea
import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.utils.Settings
@ -32,6 +33,7 @@ import org.mozilla.fenix.utils.Settings
class TrackingProtectionOverlay( class TrackingProtectionOverlay(
private val context: Context, private val context: Context,
private val settings: Settings, private val settings: Settings,
private val metrics: MetricController,
private val getToolbar: () -> View private val getToolbar: () -> View
) : Session.Observer { ) : Session.Observer {
@ -62,7 +64,7 @@ class TrackingProtectionOverlay(
val layout = LayoutInflater.from(context) val layout = LayoutInflater.from(context)
.inflate(R.layout.tracking_protection_onboarding_popup, null) .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.drop_down_triangle.isGone = isBottomToolbar
layout.pop_up_triangle.isVisible = isBottomToolbar layout.pop_up_triangle.isVisible = isBottomToolbar
@ -76,7 +78,7 @@ class TrackingProtectionOverlay(
val closeButton = layout.findViewById<ImageView>(R.id.close_onboarding) val closeButton = layout.findViewById<ImageView>(R.id.close_onboarding)
closeButton.increaseTapArea(BUTTON_INCREASE_DPS) closeButton.increaseTapArea(BUTTON_INCREASE_DPS)
closeButton.setOnClickListener { closeButton.setOnClickListener {
context.components.analytics.metrics.track(Event.ContextualHintETPDismissed) metrics.track(Event.ContextualHintETPDismissed)
trackingOnboardingDialog.dismiss() trackingOnboardingDialog.dismiss()
} }
@ -115,12 +117,12 @@ class TrackingProtectionOverlay(
val etpShield = val etpShield =
getToolbar().findViewById<View>(R.id.mozac_browser_toolbar_tracking_protection_indicator) getToolbar().findViewById<View>(R.id.mozac_browser_toolbar_tracking_protection_indicator)
trackingOnboardingDialog.message.setOnClickListener { trackingOnboardingDialog.message.setOnClickListener {
context.components.analytics.metrics.track(Event.ContextualHintETPInsideTap) metrics.track(Event.ContextualHintETPInsideTap)
trackingOnboardingDialog.dismiss() trackingOnboardingDialog.dismiss()
etpShield.performClick() etpShield.performClick()
} }
context.components.analytics.metrics.track(Event.ContextualHintETPDisplayed) metrics.track(Event.ContextualHintETPDisplayed)
trackingOnboardingDialog.show() trackingOnboardingDialog.show()
settings.incrementTrackingProtectionOnboardingCount() settings.incrementTrackingProtectionOnboardingCount()
} }

View File

@ -6,7 +6,9 @@ package org.mozilla.fenix.trackingprotection
import android.content.Context import android.content.Context
import android.view.View import android.view.View
import io.mockk.MockKAnnotations
import io.mockk.every import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.mockk.mockk import io.mockk.mockk
import io.mockk.spyk import io.mockk.spyk
import io.mockk.verify import io.mockk.verify
@ -16,28 +18,27 @@ import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mozilla.fenix.R 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.helpers.FenixRobolectricTestRunner
import org.mozilla.fenix.utils.Settings
@RunWith(FenixRobolectricTestRunner::class) @RunWith(FenixRobolectricTestRunner::class)
class TrackingProtectionOverlayTest { class TrackingProtectionOverlayTest {
private lateinit var context: Context private lateinit var context: Context
private lateinit var settings: Settings @MockK(relaxed = true) private lateinit var settings: Settings
private lateinit var toolbar: View @MockK(relaxed = true) private lateinit var metrics: MetricController
private lateinit var icon: View @MockK(relaxed = true) private lateinit var toolbar: View
private lateinit var session: Session @MockK(relaxed = true) private lateinit var icon: View
private lateinit var overlay: TrackingProtectionOverlay @MockK(relaxed = true) private lateinit var session: Session
@MockK(relaxed = true) private lateinit var overlay: TrackingProtectionOverlay
@Before @Before
fun setup() { fun setup() {
MockKAnnotations.init(this)
context = spyk(testContext) 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<View>(R.id.mozac_browser_toolbar_tracking_protection_indicator) } returns icon every { toolbar.findViewById<View>(R.id.mozac_browser_toolbar_tracking_protection_indicator) } returns icon
} }