You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iceraven-browser/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingTelemetryRecorder.kt

239 lines
9.1 KiB
Kotlin

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.onboarding
import org.mozilla.fenix.GleanMetrics.Onboarding
import org.mozilla.fenix.onboarding.view.OnboardingPageUiData
/**
* Abstraction responsible for recording telemetry events for Onboarding.
*/
class OnboardingTelemetryRecorder {
/**
* Records "onboarding_completed" telemetry event.
* @param sequenceId The identifier of the onboarding sequence shown to the user.
* @param sequencePosition The sequence position of the page on which the completed event occurred.
*/
fun onOnboardingComplete(sequenceId: String, sequencePosition: String) {
Onboarding.completed.record(
Onboarding.CompletedExtra(
sequenceId = sequenceId,
sequencePosition = sequencePosition,
),
)
}
/**
* Records impression events for a given [OnboardingPageUiData.Type].
* @param sequenceId The identifier of the onboarding sequence shown to the user.
* @param pageType The page type for which the impression occurred.
* @param sequencePosition The sequence position of the page for which the impression occurred.
*/
fun onImpression(
sequenceId: String,
pageType: OnboardingPageUiData.Type,
sequencePosition: String,
) {
when (pageType) {
OnboardingPageUiData.Type.DEFAULT_BROWSER -> {
Onboarding.setToDefaultCard.record(
Onboarding.SetToDefaultCardExtra(
action = ACTION_IMPRESSION,
elementType = ET_ONBOARDING_CARD,
sequenceId = sequenceId,
sequencePosition = sequencePosition,
),
)
}
OnboardingPageUiData.Type.ADD_SEARCH_WIDGET -> {
Onboarding.addSearchWidgetCard.record(
Onboarding.AddSearchWidgetCardExtra(
action = ACTION_IMPRESSION,
elementType = ET_ONBOARDING_CARD,
sequenceId = sequenceId,
sequencePosition = sequencePosition,
),
)
}
OnboardingPageUiData.Type.SYNC_SIGN_IN -> {
Onboarding.signInCard.record(
Onboarding.SignInCardExtra(
action = ACTION_IMPRESSION,
elementType = ET_ONBOARDING_CARD,
sequenceId = sequenceId,
sequencePosition = sequencePosition,
),
)
}
OnboardingPageUiData.Type.NOTIFICATION_PERMISSION -> {
Onboarding.turnOnNotificationsCard.record(
Onboarding.TurnOnNotificationsCardExtra(
action = ACTION_IMPRESSION,
elementType = ET_ONBOARDING_CARD,
sequenceId = sequenceId,
sequencePosition = sequencePosition,
),
)
}
}
}
/**
* Records set to default click event.
* @param sequenceId The identifier of the onboarding sequence shown to the user.
* @param sequencePosition The sequence position of the page for which the impression occurred.
*/
fun onSetToDefaultClick(sequenceId: String, sequencePosition: String) {
Onboarding.setToDefault.record(
Onboarding.SetToDefaultExtra(
action = ACTION_CLICK,
elementType = ET_PRIMARY_BUTTON,
sequenceId = sequenceId,
sequencePosition = sequencePosition,
),
)
}
/**
* Records sync sign in click event.
* @param sequenceId The identifier of the onboarding sequence shown to the user.
* @param sequencePosition The sequence position of the page for which the impression occurred.
*/
fun onSyncSignInClick(sequenceId: String, sequencePosition: String) {
Onboarding.signIn.record(
Onboarding.SignInExtra(
action = ACTION_CLICK,
elementType = ET_PRIMARY_BUTTON,
sequenceId = sequenceId,
sequencePosition = sequencePosition,
),
)
}
/**
* Records notification permission click event.
* @param sequenceId The identifier of the onboarding sequence shown to the user.
* @param sequencePosition The sequence position of the page for which the impression occurred.
*/
fun onNotificationPermissionClick(sequenceId: String, sequencePosition: String) {
Onboarding.turnOnNotifications.record(
Onboarding.TurnOnNotificationsExtra(
action = ACTION_CLICK,
elementType = ET_PRIMARY_BUTTON,
sequenceId = sequenceId,
sequencePosition = sequencePosition,
),
)
}
/**
* Records add search widget click event.
* @param sequenceId The identifier of the onboarding sequence shown to the user.
* @param sequencePosition The sequence position of the page for which the impression occurred.
*/
fun onAddSearchWidgetClick(sequenceId: String, sequencePosition: String) {
Onboarding.addSearchWidget.record(
Onboarding.AddSearchWidgetExtra(
action = ACTION_CLICK,
elementType = ET_PRIMARY_BUTTON,
sequenceId = sequenceId,
sequencePosition = sequencePosition,
),
)
}
/**
* Records skip set to default click event.
* @param sequenceId The identifier of the onboarding sequence shown to the user.
* @param sequencePosition The sequence position of the page for which the impression occurred.
*/
fun onSkipSetToDefaultClick(sequenceId: String, sequencePosition: String) {
Onboarding.skipDefault.record(
Onboarding.SkipDefaultExtra(
action = ACTION_CLICK,
elementType = ET_SECONDARY_BUTTON,
sequenceId = sequenceId,
sequencePosition = sequencePosition,
),
)
}
/**
* Records skip sign in click event.
* @param sequenceId The identifier of the onboarding sequence shown to the user.
* @param sequencePosition The sequence position of the page for which the impression occurred.
*/
fun onSkipSignInClick(sequenceId: String, sequencePosition: String) {
Onboarding.skipSignIn.record(
Onboarding.SkipSignInExtra(
action = ACTION_CLICK,
elementType = ET_SECONDARY_BUTTON,
sequenceId = sequenceId,
sequencePosition = sequencePosition,
),
)
}
/**
* Records skip add widget click event.
* @param sequenceId The identifier of the onboarding sequence shown to the user.
* @param sequencePosition The sequence position of the page for which the impression occurred.
*/
fun onSkipAddWidgetClick(sequenceId: String, sequencePosition: String) {
Onboarding.skipAddSearchWidget.record(
Onboarding.SkipAddSearchWidgetExtra(
action = ACTION_CLICK,
elementType = ET_SECONDARY_BUTTON,
sequenceId = sequenceId,
sequencePosition = sequencePosition,
),
)
}
/**
* Records skip notification permission click event.
* @param sequenceId The identifier of the onboarding sequence shown to the user.
* @param sequencePosition The sequence position of the page for which the impression occurred.
*/
fun onSkipTurnOnNotificationsClick(sequenceId: String, sequencePosition: String) {
Onboarding.skipTurnOnNotifications.record(
Onboarding.SkipTurnOnNotificationsExtra(
action = ACTION_CLICK,
elementType = ET_SECONDARY_BUTTON,
sequenceId = sequenceId,
sequencePosition = sequencePosition,
),
)
}
/**
* Records privacy policy link text click event.
* @param sequenceId The identifier of the onboarding sequence shown to the user.
* @param sequencePosition The sequence position of the page on which the link click event occurred.
*/
fun onPrivacyPolicyClick(sequenceId: String, sequencePosition: String) {
Onboarding.privacyPolicy.record(
Onboarding.PrivacyPolicyExtra(
action = ACTION_CLICK,
elementType = ET_SECONDARY_BUTTON,
sequenceId = sequenceId,
sequencePosition = sequencePosition,
),
)
}
companion object {
private const val ACTION_IMPRESSION = "impression"
private const val ACTION_CLICK = "click"
private const val ET_ONBOARDING_CARD = "onboarding_card"
private const val ET_PRIMARY_BUTTON = "primary_button"
private const val ET_SECONDARY_BUTTON = "secondary_button"
}
}