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(
context = context,
settings = settings
settings = settings,
metrics = context.components.analytics.metrics
) {
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.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 {

View File

@ -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()
}
}

View File

@ -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<ImageView>(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<View>(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()
}

View File

@ -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<View>(R.id.mozac_browser_toolbar_tracking_protection_indicator) } returns icon
}