diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 23e565fee..93b327696 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,3 +1,4 @@ +import mihon.buildlogic.Config import mihon.buildlogic.getBuildTime import mihon.buildlogic.getCommitCount import mihon.buildlogic.getGitSha @@ -11,16 +12,6 @@ plugins { id("com.github.ben-manes.versions") } -class ConfigClass { - val includeAnalytics: Boolean = project.hasProperty("include-analytics") - val enableUpdater: Boolean = project.hasProperty("enable-updater") - val enableCodeShrink: Boolean = !project.hasProperty("disable-code-shrink") - val includeDependencyInfo: Boolean = project.hasProperty("include-dependency-info") -} - -@Suppress("PropertyName") -val Config = ConfigClass() - if (Config.includeAnalytics) { pluginManager.apply { apply(libs.plugins.google.services.get().pluginId) @@ -102,8 +93,6 @@ android { } sourceSets { - val analyticsDir = if (Config.includeAnalytics) "analytics-firebase" else "analytics-firebase-noop" - getByName("main").kotlin.srcDirs("src/$analyticsDir/kotlin") getByName("preview").res.srcDirs("src/beta/res") getByName("benchmark").res.srcDirs("src/debug/res") } @@ -202,6 +191,7 @@ dependencies { implementation(projects.domain) implementation(projects.presentationCore) implementation(projects.presentationWidget) + implementation(projects.telemetry) // Compose implementation(compose.activity) @@ -307,13 +297,6 @@ dependencies { implementation(libs.timber) implementation(libs.logcat) - // Crash reports/analytics - if (Config.includeAnalytics) { - implementation(platform(libs.firebase.bom)) - implementation(libs.firebase.analytics) - implementation(libs.firebase.crashlytics) - } - // Shizuku implementation(libs.bundles.shizuku) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0b3e1577a..b722e3071 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -43,23 +43,6 @@ - - - - - - - - - - - - - - - - - - - - - .onCreate() patchInjekt() - FirebaseConfig.init(applicationContext) + TelemetryConfig.init(applicationContext) // KMK --> if (isDebugBuildType) Timber.plant(Timber.DebugTree()) @@ -181,12 +181,12 @@ class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factor privacyPreferences.analytics() .changes() - .onEach(FirebaseConfig::setAnalyticsEnabled) + .onEach(TelemetryConfig::setAnalyticsEnabled) .launchIn(scope) privacyPreferences.crashlytics() .changes() - .onEach(FirebaseConfig::setCrashlyticsEnabled) + .onEach(TelemetryConfig::setCrashlyticsEnabled) .launchIn(scope) basePreferences.hardwareBitmapThreshold().let { preference -> diff --git a/buildSrc/src/main/kotlin/mihon/buildlogic/BuildConfig.kt b/buildSrc/src/main/kotlin/mihon/buildlogic/BuildConfig.kt new file mode 100644 index 000000000..cb608a460 --- /dev/null +++ b/buildSrc/src/main/kotlin/mihon/buildlogic/BuildConfig.kt @@ -0,0 +1,17 @@ +package mihon.buildlogic + +import org.gradle.api.Project + +interface BuildConfig { + val includeAnalytics: Boolean + val enableUpdater: Boolean + val enableCodeShrink: Boolean + val includeDependencyInfo: Boolean +} + +val Project.Config: BuildConfig get() = object : BuildConfig { + override val includeAnalytics: Boolean = project.hasProperty("include-analytics") + override val enableUpdater: Boolean = project.hasProperty("enable-updater") + override val enableCodeShrink: Boolean = !project.hasProperty("disable-code-shrink") + override val includeDependencyInfo: Boolean = project.hasProperty("include-dependency-info") +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 100d02c60..4d2f78b75 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -60,3 +60,4 @@ include(":presentation-core") include(":presentation-widget") include(":source-api") include(":source-local") +include(":telemetry") diff --git a/telemetry/build.gradle.kts b/telemetry/build.gradle.kts new file mode 100644 index 000000000..1382b9324 --- /dev/null +++ b/telemetry/build.gradle.kts @@ -0,0 +1,29 @@ +import mihon.buildlogic.Config + +plugins { + id("mihon.library") + kotlin("android") +} + +android { + namespace = "mihon.telemetry" + + sourceSets { + getByName("main") { + val dir = if (Config.includeAnalytics) "firebase" else "noop" + kotlin.srcDirs("src/$dir/kotlin") + manifest.srcFile("src/$dir/AndroidManifext.xml") + } + } +} + +dependencies { + if (Config.includeAnalytics) { + implementation(platform(libs.firebase.bom)) + implementation(libs.firebase.analytics) + implementation(libs.firebase.crashlytics) + } + + // Better logging (EH) + implementation(sylibs.xlog) +} diff --git a/telemetry/src/firebase/AndroidManifest.xml b/telemetry/src/firebase/AndroidManifest.xml new file mode 100644 index 000000000..9d0be9170 --- /dev/null +++ b/telemetry/src/firebase/AndroidManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/analytics-firebase/kotlin/exh/log/CrashlyticsPrinter.kt b/telemetry/src/firebase/kotlin/exh/log/CrashlyticsPrinter.kt similarity index 100% rename from app/src/analytics-firebase/kotlin/exh/log/CrashlyticsPrinter.kt rename to telemetry/src/firebase/kotlin/exh/log/CrashlyticsPrinter.kt diff --git a/app/src/analytics-firebase/kotlin/mihon/core/firebase/FirebaseConfig.kt b/telemetry/src/firebase/kotlin/mihon/telemetry/TelemetryConfig.kt similarity index 95% rename from app/src/analytics-firebase/kotlin/mihon/core/firebase/FirebaseConfig.kt rename to telemetry/src/firebase/kotlin/mihon/telemetry/TelemetryConfig.kt index 99f93c4ce..99df12b8a 100644 --- a/app/src/analytics-firebase/kotlin/mihon/core/firebase/FirebaseConfig.kt +++ b/telemetry/src/firebase/kotlin/mihon/telemetry/TelemetryConfig.kt @@ -1,4 +1,4 @@ -package mihon.core.firebase +package mihon.telemetry import android.content.Context import com.google.firebase.FirebaseApp @@ -7,7 +7,7 @@ import com.google.firebase.crashlytics.FirebaseCrashlytics import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.util.system.isPreviewBuildType -object FirebaseConfig { +object TelemetryConfig { private lateinit var analytics: FirebaseAnalytics private lateinit var crashlytics: FirebaseCrashlytics diff --git a/telemetry/src/noop/AndroidManifest.xml b/telemetry/src/noop/AndroidManifest.xml new file mode 100644 index 000000000..8072ee00d --- /dev/null +++ b/telemetry/src/noop/AndroidManifest.xml @@ -0,0 +1,2 @@ + + diff --git a/app/src/analytics-firebase-noop/kotlin/exh/log/CrashlyticsPrinter.kt b/telemetry/src/noop/kotlin/exh/log/CrashlyticsPrinter.kt similarity index 100% rename from app/src/analytics-firebase-noop/kotlin/exh/log/CrashlyticsPrinter.kt rename to telemetry/src/noop/kotlin/exh/log/CrashlyticsPrinter.kt diff --git a/app/src/analytics-firebase-noop/kotlin/mihon/core/firebase/FirebaseConfig.kt b/telemetry/src/noop/kotlin/mihon/telemetry/TelemetryConfig.kt similarity index 69% rename from app/src/analytics-firebase-noop/kotlin/mihon/core/firebase/FirebaseConfig.kt rename to telemetry/src/noop/kotlin/mihon/telemetry/TelemetryConfig.kt index 820543bd0..e238db049 100644 --- a/app/src/analytics-firebase-noop/kotlin/mihon/core/firebase/FirebaseConfig.kt +++ b/telemetry/src/noop/kotlin/mihon/telemetry/TelemetryConfig.kt @@ -1,8 +1,9 @@ -package mihon.core.firebase +package mihon.telemetry import android.content.Context -object FirebaseConfig { +@Suppress("UNUSED_PARAMETER") +object TelemetryConfig { fun init(context: Context) = Unit fun setAnalyticsEnabled(enabled: Boolean) = Unit