Skip to content

Commit

Permalink
Re-adding glean (#465)
Browse files Browse the repository at this point in the history
- Re-adding glean for non debug builds

Co-authored-by: John Oberhauser <j.git-global@obez.io>
  • Loading branch information
JohnOberhauser and John Oberhauser committed Apr 15, 2024
1 parent 8ca838b commit 96d6de6
Show file tree
Hide file tree
Showing 6 changed files with 140 additions and 1 deletion.
2 changes: 2 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,7 @@ plugins {
alias(libs.plugins.android.library) apply false
alias(libs.plugins.android.secrets) apply false
alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.glean) apply false
alias(libs.plugins.jetbrains.python) apply false
alias(libs.plugins.detekt) apply false
}
7 changes: 7 additions & 0 deletions core/analytics/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
plugins {
id("social.firefly.android.library")
id("social.firefly.android.library.secrets")
alias(libs.plugins.jetbrains.python)
alias(libs.plugins.glean)
}

android {
Expand All @@ -17,6 +19,9 @@ dependencies {
implementation(project(":core:datastore"))
implementation(project(":core:common"))

implementation(libs.glean)
implementation(libs.mozilla.components.service.glean)

implementation(libs.androidx.navigation.compose)
implementation(libs.koin.core)
implementation(libs.koin.androidx.compose)
Expand All @@ -25,4 +30,6 @@ dependencies {
implementation(libs.protobuf.kotlin.lite)

implementation(libs.jakewharton.timber)

testImplementation(libs.glean.forUnitTests)
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import org.koin.core.module.dsl.singleOf
import org.koin.dsl.module
import social.firefly.core.analytics.core.Analytics
import social.firefly.core.analytics.core.DummyAnalytics
import social.firefly.core.analytics.glean.GleanAnalytics
import social.firefly.core.datastore.dataStoreModule

val analyticsModule =
Expand All @@ -12,7 +13,11 @@ val analyticsModule =
dataStoreModule,
)
single<Analytics> {
DummyAnalytics()
if (BuildConfig.DEBUG) {
DummyAnalytics()
} else {
GleanAnalytics(get())
}
}

singleOf(::AppAnalytics)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package social.firefly.core.analytics.glean

import android.content.Context
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import mozilla.telemetry.glean.BuildInfo
import mozilla.telemetry.glean.Glean
import social.firefly.common.Version
import social.firefly.core.analytics.GleanMetrics.Identifiers
import social.firefly.core.analytics.GleanMetrics.Mobile
import social.firefly.core.analytics.GleanMetrics.Ui
import social.firefly.core.analytics.core.Analytics
import social.firefly.core.analytics.core.EngagementType
import social.firefly.core.datastore.AppPreferencesDatastore
import java.util.Calendar

internal class GleanAnalytics(
private val appPreferencesDatastore: AppPreferencesDatastore,
) : Analytics {
@OptIn(DelicateCoroutinesApi::class)
override fun initialize(context: Context) {
val buildInfo = BuildInfo(Version.name, Version.code.toString(), Calendar.getInstance())

Glean.setLogPings(true)

CoroutineScope(Main).launch {
appPreferencesDatastore.allowAnalytics.collectLatest {
Glean.initialize(
applicationContext = context,
uploadEnabled = it,
buildInfo = buildInfo,
)
}
}

GlobalScope.launch {
appPreferencesDatastore.allowAnalytics.collectLatest {
Glean.setUploadEnabled(it)
}
}
}

override fun uiEngagement(
engagementType: EngagementType?,
engagementValue: String?,
recommendationId: String?,
uiAdditionalDetail: String?,
uiIdentifier: String?,
) {
Ui.engagement.record(
extra =
Ui.EngagementExtra(
engagementType = engagementType?.value,
engagementValue = engagementValue,
recommendationId = recommendationId,
uiAdditionalDetail = uiAdditionalDetail,
uiIdentifier = uiIdentifier,
),
)
}

override fun uiImpression(
recommendationId: String?,
uiAdditionalDetail: String?,
uiIdentifier: String?,
) {
Ui.impression.record(
extra =
Ui.ImpressionExtra(
recommendationId = recommendationId,
uiAdditionalDetail = uiAdditionalDetail,
uiIdentifier = uiIdentifier,
),
)
}

override fun setAdjustDeviceId(adjustDeviceId: String) {
Identifiers.adjustDeviceId.set(adjustDeviceId)
}

override fun setFxaAccountId(fxaAccountId: String) {
Identifiers.fxaAccountId.set(fxaAccountId)
}

override fun setMastodonAccountId(mastodonAccountId: String) {
Identifiers.mastodonAccountId.set(mastodonAccountId)
}

override fun setUserAgent(userAgent: String) {
Identifiers.userAgent.set(userAgent)
}

override fun clearLoggedInIdentifiers() {
Identifiers.mastodonAccountId.set("")
}


override fun appOpened() {
Mobile.appOpen.record()
}

override fun appBackgrounded() {
Mobile.appBackground.record()
}
}
6 changes: 6 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ coil = "2.5.0"
detekt = "1.23.4"
espresso-core = "3.5.1"
espresso-intents = "3.5.1"
glean = "54.0.0"
google-truth = "1.3.0"
junit = "4.13.2"
koin = "3.5.3"
Expand Down Expand Up @@ -65,6 +66,8 @@ coil = { module = "io.coil-kt:coil-compose", version.ref = "coil" }
coil-gif = { module = "io.coil-kt:coil-gif", version.ref = "coil" }
coil-video = { module = "io.coil-kt:coil-video", version.ref = "coil" }
espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espresso-core" }
glean = { module = "org.mozilla.telemetry:glean", version.ref = "glean" }
glean-forUnitTests = { module = "org.mozilla.telemetry:glean-native-forUnitTests", version.ref = "glean" }
google-truth = { module = "com.google.truth:truth", version.ref = "google-truth" }
google-material = { module = "com.google.android.material:material", version = "1.11.0" }
jakewharton-timber = { module = "com.jakewharton.timber:timber", version = "5.0.1" }
Expand All @@ -84,6 +87,7 @@ kotlinx-serialization-converter = { module = "com.jakewharton.retrofit:retrofit2
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version = "1.6.2" }
kotlinx-collections-immutable = { module = "org.jetbrains.kotlinx:kotlinx-collections-immutable", version.ref = "kotlinx-collections-immutable" }
mockk = { module = "io.mockk:mockk", version = "1.13.9" }
mozilla-components-service-glean = { module = "org.mozilla.components:service-glean", version = "118.0" }
protobuf-kotlin-lite = { module = "com.google.protobuf:protobuf-kotlin-lite", version.ref = "protobuf" }
protobuf-protoc = { module = "com.google.protobuf:protoc", version.ref = "protobuf" }
retrofit = { module = "com.squareup.retrofit2:retrofit", version = "2.9.0" }
Expand All @@ -103,6 +107,8 @@ android-application = { id = "com.android.application", version.ref = "android-g
android-library = { id = "com.android.library", version.ref = "android-gradle-plugin" }
android-secrets = { id = "com.google.android.libraries.mapsplatform.secrets-gradle-plugin", version.ref = "android-secrets-plugin" }
detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" }
glean = { id = "org.mozilla.telemetry.glean-gradle-plugin", version.ref = "glean" }
jetbrains-python = { id = "com.jetbrains.python.envs", version = "0.0.31" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlin-ksp = { id = "com.google.devtools.ksp", version.ref = "kotlin-ksp" }
kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin"}
Expand Down
10 changes: 10 additions & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,16 @@ pluginManagement {
maven { url = uri("https://maven.mozilla.org/maven2") }
gradlePluginPortal()
}
resolutionStrategy {
eachPlugin {
// Manually resolve Glean plugin ID to Maven coordinates,
// because the Maven repository is missing plugin marker artifacts.
// See: https://docs.gradle.org/current/userguide/plugins.html#sec:plugin_resolution_rules
if (requested.id.id == "org.mozilla.telemetry.glean-gradle-plugin") {
useModule("org.mozilla.telemetry:glean-gradle-plugin:${requested.version}")
}
}
}
}

dependencyResolutionManagement {
Expand Down

0 comments on commit 96d6de6

Please sign in to comment.