diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ef559311..e69c436a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,9 @@ The format is a modified version of [Keep a Changelog](https://keepachangelog.co - `Other` - for technical stuff. ## [Unreleased] +### Changed +- Don't prompt users to enable Google Play services if disabled or unavailable ([@leodyversemilla07](https://github.com/leodyversemilla07)) ([#3152](https://github.com/mihonapp/mihon/pull/3152)) + ### Improved - Show informative error when trying to add unapproved titles to list on MAL ([@MajorTanya](https://github.com/MajorTanya)) ([#3155](https://github.com/mihonapp/mihon/pull/3155)) diff --git a/telemetry/build.gradle.kts b/telemetry/build.gradle.kts index d59adc406..7a7455e0e 100644 --- a/telemetry/build.gradle.kts +++ b/telemetry/build.gradle.kts @@ -21,6 +21,8 @@ android { } dependencies { + implementation(projects.core.common) + if (Config.includeTelemetry) { implementation(platform(libs.firebase.bom)) implementation(libs.firebase.analytics) diff --git a/telemetry/src/firebase/kotlin/mihon/telemetry/TelemetryConfig.kt b/telemetry/src/firebase/kotlin/mihon/telemetry/TelemetryConfig.kt index b3b22f6ee..86a21ddc9 100644 --- a/telemetry/src/firebase/kotlin/mihon/telemetry/TelemetryConfig.kt +++ b/telemetry/src/firebase/kotlin/mihon/telemetry/TelemetryConfig.kt @@ -1,9 +1,13 @@ package mihon.telemetry import android.content.Context +import com.google.android.gms.common.ConnectionResult +import com.google.android.gms.common.GoogleApiAvailability import com.google.firebase.FirebaseApp import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.crashlytics.FirebaseCrashlytics +import logcat.LogPriority +import tachiyomi.core.common.util.system.logcat object TelemetryConfig { private var analytics: FirebaseAnalytics? = null @@ -13,9 +17,30 @@ object TelemetryConfig { // To stop forks/test builds from polluting our data if (!context.isMihonProductionApp()) return - analytics = FirebaseAnalytics.getInstance(context) - FirebaseApp.initializeApp(context) - crashlytics = FirebaseCrashlytics.getInstance() + // Check if Google Play Services is available before initializing Firebase + if (!isGooglePlayServicesAvailable(context)) { + logcat(LogPriority.WARN) { "Google Play Services not available, skipping Firebase initialization" } + return + } + + try { + analytics = FirebaseAnalytics.getInstance(context) + FirebaseApp.initializeApp(context) + crashlytics = FirebaseCrashlytics.getInstance() + } catch (e: Exception) { + logcat(LogPriority.ERROR, e) { "Failed to initialize Firebase" } + } + } + + private fun isGooglePlayServicesAvailable(context: Context): Boolean { + return try { + val availability = GoogleApiAvailability.getInstance() + val resultCode = availability.isGooglePlayServicesAvailable(context) + resultCode == ConnectionResult.SUCCESS + } catch (e: Exception) { + logcat(LogPriority.WARN, e) { "Unable to check Google Play Services availability" } + false + } } fun setAnalyticsEnabled(enabled: Boolean) {