From a8b1c7f05e542a81815601356befbe83733243e4 Mon Sep 17 00:00:00 2001 From: Ahmad Ansori Palembani Date: Thu, 13 Jun 2024 18:52:47 +0700 Subject: [PATCH] refactor: Implement the log writer myself Kermit's official crashlytics integration enable firebase way too early. --- .../dev/yokai/core/CrashlyticsLogWriter.kt | 24 +++++++++++++++++++ app/src/main/java/eu/kanade/tachiyomi/App.kt | 4 +--- gradle/libs.versions.toml | 3 +-- 3 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/dev/yokai/core/CrashlyticsLogWriter.kt diff --git a/app/src/main/java/dev/yokai/core/CrashlyticsLogWriter.kt b/app/src/main/java/dev/yokai/core/CrashlyticsLogWriter.kt new file mode 100644 index 0000000000..16c3508d86 --- /dev/null +++ b/app/src/main/java/dev/yokai/core/CrashlyticsLogWriter.kt @@ -0,0 +1,24 @@ +package dev.yokai.core + +import co.touchlab.kermit.DefaultFormatter +import co.touchlab.kermit.LogWriter +import co.touchlab.kermit.Message +import co.touchlab.kermit.Severity +import co.touchlab.kermit.Tag +import com.google.firebase.crashlytics.ktx.crashlytics +import com.google.firebase.ktx.Firebase + +class CrashlyticsLogWriter : LogWriter() { + override fun isLoggable(tag: String, severity: Severity): Boolean = severity >= Severity.Info + + override fun log(severity: Severity, message: String, tag: String, throwable: Throwable?) { + try { + Firebase.crashlytics.log(DefaultFormatter.formatMessage(severity, Tag(tag), Message(message))) + if (throwable != null && severity >= Severity.Warn) { + Firebase.crashlytics.recordException(throwable) + } + } catch (_: Exception) { + // Probably crashlytics not yet initialized or disabled + } + } +} diff --git a/app/src/main/java/eu/kanade/tachiyomi/App.kt b/app/src/main/java/eu/kanade/tachiyomi/App.kt index 39d3b618b8..543510a6d1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/App.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/App.kt @@ -22,9 +22,7 @@ import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.ProcessLifecycleOwner import androidx.lifecycle.lifecycleScope import androidx.multidex.MultiDex -import co.touchlab.kermit.ExperimentalKermitApi import co.touchlab.kermit.Logger -import co.touchlab.kermit.crashlytics.CrashlyticsLogWriter import coil3.ImageLoader import coil3.PlatformContext import coil3.SingletonImageLoader @@ -36,6 +34,7 @@ import coil3.request.crossfade import coil3.util.DebugLogger import com.google.firebase.crashlytics.ktx.crashlytics import com.google.firebase.ktx.Firebase +import dev.yokai.core.CrashlyticsLogWriter import dev.yokai.core.di.AppModule import dev.yokai.core.di.DomainModule import dev.yokai.core.di.PreferenceModule @@ -73,7 +72,6 @@ open class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.F private val disableIncognitoReceiver = DisableIncognitoReceiver() - @OptIn(ExperimentalKermitApi::class) @SuppressLint("LaunchActivityFromNotification") override fun onCreate() { super.onCreate() diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 27b981b559..6ef3370c25 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -43,7 +43,6 @@ image-decoder = { module = "com.github.tachiyomiorg:image-decoder", version = "e injekt-core = { module = "com.github.inorichi.injekt:injekt-core", version = "65b0440" } kermit = { module = "co.touchlab:kermit", version.ref = "kermit" } -kermit-crashlytics = { module = "co.touchlab:kermit-crashlytics", version.ref = "kermit" } material = { module = "com.google.android.material:material", version = "1.12.0" } material-design-dimens = { module = "com.dmitrymalkovich.android:material-design-dimens", version = "1.4" } @@ -101,7 +100,7 @@ gradle-versions = { id = "com.github.ben-manes.versions", version = "0.42.0" } archive = [ "common-compress", "junrar" ] db = [ "sqldelight-android-driver", "sqldelight-android-paging", "sqldelight-coroutines" ] coil = [ "coil3", "coil3-svg", "coil3-gif", "coil3-okhttp" ] -logging = [ "kermit", "kermit-crashlytics" ] +logging = [ "kermit" ] sqlite = [ "sqlite-framework", "sqlite-ktx" ] test = [ "junit-api", "mockk" ] test-android = [ "junit-android" ]