Pass settings and metrics to CFR
parent
98d5ae6b89
commit
e809df0858
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue