1
0
Fork 0

For #11479: Record open tabs count in metrics ping (#12024)

master
Sawyer Blatz 2020-06-26 17:15:43 -07:00 committed by GitHub
parent c6415ce18f
commit 8a08cb941e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 70 additions and 3 deletions

View File

@ -689,6 +689,38 @@ metrics:
notification_emails:
- fenix-core@mozilla.com
expires: "2020-09-01"
tabs_open_count:
type: counter
lifetime: application
description: |
A counter that indicates how many NORMAL tabs a user has open. This
value will only be set if the user has at least *one* open tab. If they
have 0, this ping will not get sent, resulting in a null value. To
disambiguate between a failed `tabs_open_count` ping and 0 open tabs,
please see `has_open_tabs`.
send_in_pings:
- metrics
bugs:
- https://github.com/mozilla-mobile/fenix/issues/11479
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/12024
notification_emails:
- fenix-core@mozilla.com
expires: "2020-09-01"
has_open_tabs:
type: boolean
lifetime: application
description: |
A boolean that indicates if the user has any open NORMAL tabs.
send_in_pings:
- metrics
bugs:
- https://github.com/mozilla-mobile/fenix/issues/11479
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/12024
notification_emails:
- fenix-core@mozilla.com
expires: "2020-09-01"
preferences:
show_search_suggestions:

View File

@ -12,9 +12,12 @@ import mozilla.components.browser.session.SessionManager
import org.mozilla.fenix.components.metrics.MetricController
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.metrics
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.search.telemetry.ads.AdsTelemetry
import org.mozilla.fenix.utils.Settings
class UriOpenedObserver(
private val settings: Settings,
private val owner: LifecycleOwner,
private val sessionManager: SessionManager,
metrics: MetricController,
@ -22,6 +25,7 @@ class UriOpenedObserver(
) : SessionManager.Observer {
constructor(activity: FragmentActivity) : this(
activity.applicationContext.settings(),
activity,
activity.components.core.sessionManager,
activity.metrics,
@ -41,20 +45,24 @@ class UriOpenedObserver(
}
override fun onAllSessionsRemoved() {
settings.setOpenTabsCount(sessionManager.sessions.filter { !it.private }.size)
sessionManager.sessions.forEach {
it.unregister(singleSessionObserver)
}
}
override fun onSessionAdded(session: Session) {
settings.setOpenTabsCount(sessionManager.sessions.filter { !it.private }.size)
session.register(singleSessionObserver, owner)
}
override fun onSessionRemoved(session: Session) {
settings.setOpenTabsCount(sessionManager.sessions.filter { !it.private }.size)
session.unregister(singleSessionObserver)
}
override fun onSessionsRestored() {
settings.setOpenTabsCount(sessionManager.sessions.filter { !it.private }.size)
sessionManager.sessions.forEach {
it.register(singleSessionObserver, owner)
}

View File

@ -697,6 +697,12 @@ class GleanMetricsService(private val context: Context) : MetricsService {
searchWidgetInstalled.set(context.settings().searchWidgetInstalled)
val openTabsCount = context.settings().openTabsCount
hasOpenTabs.set(openTabsCount > 0)
if (openTabsCount > 0) {
tabsOpenCount.add(openTabsCount)
}
val topSitesSize = context.settings().topSitesSize
hasTopSites.set(topSitesSize > 0)
if (topSitesSize > 0) {

View File

@ -775,6 +775,19 @@ class Settings private constructor(
default = 0
)
fun setOpenTabsCount(count: Int) {
preferences.edit().putInt(
appContext.getPreferenceKey(R.string.pref_key_open_tabs_count),
count
).apply()
}
val openTabsCount: Int
get() = preferences.getInt(
appContext.getPreferenceKey(R.string.pref_key_open_tabs_count),
0
)
private var savedLoginsSortingStrategyString by stringPreference(
appContext.getPreferenceKey(R.string.pref_key_saved_logins_sorting_strategy),
default = SavedLoginsFragment.SORTING_STRATEGY_ALPHABETICALLY

View File

@ -177,6 +177,8 @@
<string name="pref_key_debug_settings" translatable="false">pref_key_debug_settings</string>
<string name="pref_key_open_tabs_count" translatable="false">pref_key_open_tabs_count</string>
<string name="pref_key_search_count" translatable="false">pref_key_search_count</string>
<string name="pref_key_search_widget_cfr_display_count" translatable="false">pref_key_search_widget_cfr_display_count</string>
<string name="pref_key_search_widget_cfr_dismiss_count" translatable="false">pref_key_search_widget_cfr_dismiss_count</string>

View File

@ -16,9 +16,11 @@ import org.junit.Test
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.metrics.MetricController
import org.mozilla.fenix.search.telemetry.ads.AdsTelemetry
import org.mozilla.fenix.utils.Settings
class TelemetrySessionObserverTest {
private val settings: Settings = mockk(relaxed = true)
private val owner: LifecycleOwner = mockk(relaxed = true)
private val sessionManager: SessionManager = mockk(relaxed = true)
private val metrics: MetricController = mockk(relaxed = true)
@ -29,7 +31,7 @@ class TelemetrySessionObserverTest {
@Before
fun setup() {
singleSessionObserver =
UriOpenedObserver(owner, sessionManager, metrics, ads).singleSessionObserver
UriOpenedObserver(settings, owner, sessionManager, metrics, ads).singleSessionObserver
}
@Test

View File

@ -11,11 +11,13 @@ import mozilla.components.browser.session.Session
import mozilla.components.browser.session.SessionManager
import org.junit.Before
import org.junit.Test
import org.mozilla.fenix.search.telemetry.ads.AdsTelemetry
import org.mozilla.fenix.components.metrics.MetricController
import org.mozilla.fenix.search.telemetry.ads.AdsTelemetry
import org.mozilla.fenix.utils.Settings
class UriOpenedObserverTest {
private val settings: Settings = mockk(relaxed = true)
private val owner: LifecycleOwner = mockk(relaxed = true)
private val sessionManager: SessionManager = mockk(relaxed = true)
private val metrics: MetricController = mockk()
@ -24,7 +26,7 @@ class UriOpenedObserverTest {
@Before
fun setup() {
observer = UriOpenedObserver(owner, sessionManager, metrics, ads)
observer = UriOpenedObserver(settings, owner, sessionManager, metrics, ads)
}
@Test

File diff suppressed because one or more lines are too long