secant-android-wallet/app/src/main/java/co/electriccoin/zcash/app/ZcashApplication.kt

59 lines
1.9 KiB
Kotlin

package co.electriccoin.zcash.app
import co.electriccoin.zcash.crash.android.GlobalCrashReporter
import co.electriccoin.zcash.spackle.StrictModeCompat
import co.electriccoin.zcash.spackle.Twig
import co.electriccoin.zcash.ui.preference.StandardPreferenceKeys
import co.electriccoin.zcash.ui.preference.StandardPreferenceSingleton
import kotlinx.coroutines.launch
@Suppress("unused")
class ZcashApplication : CoroutineApplication() {
override fun onCreate() {
super.onCreate()
configureLogging()
configureStrictMode()
// Since analytics will need disk IO internally, we want this to be registered after strict
// mode is configured to ensure none of that IO happens on the main thread
configureAnalytics()
}
private fun configureLogging() {
Twig.initialize(applicationContext)
Twig.info { "Starting application…" }
if (BuildConfig.DEBUG) {
// This is an internal API to the Zcash SDK to enable logging; it could change in the future
cash.z.ecc.android.sdk.internal.Twig.enabled(true)
} else {
// In release builds, logs should be stripped by R8 rules
Twig.assertLoggingStripped()
}
}
private fun configureStrictMode() {
if (BuildConfig.DEBUG) {
StrictModeCompat.enableStrictMode(BuildConfig.IS_STRICT_MODE_CRASH_ENABLED)
}
}
private fun configureAnalytics() {
if (GlobalCrashReporter.register(this)) {
applicationScope.launch {
val prefs = StandardPreferenceSingleton.getInstance(applicationContext)
StandardPreferenceKeys.IS_ANALYTICS_ENABLED.observe(prefs).collect {
if (it) {
GlobalCrashReporter.enable()
} else {
GlobalCrashReporter.disableAndDelete()
}
}
}
}
}
}