wulkanowy-mod/app/src/main/java/io/github/wulkanowy/WulkanowyApp.kt

80 lines
2.5 KiB
Kotlin
Raw Normal View History

2018-07-18 14:13:57 -05:00
package io.github.wulkanowy
2018-08-22 15:31:17 -05:00
import android.content.Context
import android.util.Log.INFO
import android.util.Log.VERBOSE
2018-10-20 13:59:46 -05:00
import androidx.multidex.MultiDex
import androidx.work.Configuration
import androidx.work.WorkManager
2018-07-18 14:13:57 -05:00
import com.jakewharton.threetenabp.AndroidThreeTen
import dagger.android.AndroidInjector
import dagger.android.support.DaggerApplication
import eu.davidea.flexibleadapter.FlexibleAdapter
2018-10-03 14:28:23 -05:00
import eu.davidea.flexibleadapter.utils.Log
2018-07-18 14:13:57 -05:00
import io.github.wulkanowy.di.DaggerAppComponent
import io.github.wulkanowy.services.sync.SyncWorkerFactory
import io.github.wulkanowy.utils.ActivityLifecycleLogger
import io.github.wulkanowy.utils.AppInfo
2018-10-03 14:28:23 -05:00
import io.github.wulkanowy.utils.CrashlyticsTree
import io.github.wulkanowy.utils.DebugLogTree
2019-06-03 07:12:48 -05:00
import io.github.wulkanowy.utils.initCrashlytics
import io.reactivex.exceptions.UndeliverableException
import io.reactivex.plugins.RxJavaPlugins
2018-07-18 14:13:57 -05:00
import timber.log.Timber
import java.io.IOException
import javax.inject.Inject
2018-07-18 14:13:57 -05:00
class WulkanowyApp : DaggerApplication() {
@Inject
lateinit var workerFactory: SyncWorkerFactory
@Inject
lateinit var appInfo: AppInfo
2018-08-22 15:31:17 -05:00
override fun attachBaseContext(base: Context?) {
super.attachBaseContext(base)
MultiDex.install(this)
}
2018-07-18 14:13:57 -05:00
override fun onCreate() {
super.onCreate()
AndroidThreeTen.init(this)
RxJavaPlugins.setErrorHandler(::onError)
2019-04-19 16:52:34 -05:00
initWorkManager()
2019-04-19 16:52:34 -05:00
initLogging()
initCrashlytics(this, appInfo)
}
private fun initWorkManager() {
WorkManager.initialize(this,
Configuration.Builder()
.setWorkerFactory(workerFactory)
.setMinimumLoggingLevel(if (appInfo.isDebug) VERBOSE else INFO)
.build())
2018-07-18 14:13:57 -05:00
}
2019-04-19 16:52:34 -05:00
private fun initLogging() {
if (appInfo.isDebug) {
2019-04-19 16:52:34 -05:00
Timber.plant(DebugLogTree())
FlexibleAdapter.enableLogs(Log.Level.DEBUG)
} else {
Timber.plant(CrashlyticsTree())
}
registerActivityLifecycleCallbacks(ActivityLifecycleLogger())
2018-07-18 14:13:57 -05:00
}
2019-04-19 16:52:34 -05:00
private fun onError(error: Throwable) {
//RxJava's too deep stack traces may cause SOE on older android devices
val cause = error.cause
if (error is UndeliverableException && cause is IOException || cause is InterruptedException || cause is StackOverflowError) {
Timber.e(cause, "An undeliverable error occurred")
2019-04-19 16:52:34 -05:00
} else throw error
}
2018-10-03 14:28:23 -05:00
override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
2019-04-18 09:38:49 -05:00
return DaggerAppComponent.factory().create(this)
2018-10-03 14:28:23 -05:00
}
2018-07-18 14:13:57 -05:00
}