mihon/app/src/main/java/eu/kanade/tachiyomi/App.kt

115 lines
3.6 KiB
Kotlin
Raw Normal View History

package eu.kanade.tachiyomi
import android.app.ActivityManager
import android.app.Application
2016-10-15 11:12:16 +02:00
import android.content.Context
import android.content.res.Configuration
import android.os.Build
import androidx.core.content.getSystemService
2020-02-22 04:58:19 +01:00
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent
import androidx.lifecycle.ProcessLifecycleOwner
import androidx.multidex.MultiDex
import coil.ImageLoader
import coil.ImageLoaderFactory
import coil.decode.GifDecoder
import coil.decode.ImageDecoderDecoder
import eu.kanade.tachiyomi.data.coil.ByteBufferFetcher
import eu.kanade.tachiyomi.data.coil.MangaCoverFetcher
import eu.kanade.tachiyomi.data.notification.Notifications
2020-02-22 04:58:19 +01:00
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.network.NetworkHelper
2020-02-22 19:30:36 +01:00
import eu.kanade.tachiyomi.ui.security.SecureActivityDelegate
2020-02-03 04:22:54 +01:00
import eu.kanade.tachiyomi.util.system.LocaleHelper
import org.acra.ACRA
2020-04-16 04:57:34 +02:00
import org.acra.annotation.AcraCore
import org.acra.annotation.AcraHttpSender
import org.acra.sender.HttpSender
import org.conscrypt.Conscrypt
import timber.log.Timber
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
2020-02-22 04:58:19 +01:00
import uy.kohesive.injekt.injectLazy
import java.security.Security
2020-04-16 04:57:34 +02:00
@AcraCore(
2020-04-25 20:24:45 +02:00
buildConfigClass = BuildConfig::class,
excludeMatchingSharedPreferencesKeys = [".*username.*", ".*password.*", ".*token.*"]
)
2020-04-16 04:57:34 +02:00
@AcraHttpSender(
uri = BuildConfig.ACRA_URI,
2020-04-25 20:24:45 +02:00
httpMethod = HttpSender.Method.PUT
2020-04-16 04:57:34 +02:00
)
open class App : Application(), LifecycleObserver, ImageLoaderFactory {
private val preferences: PreferencesHelper by injectLazy()
override fun onCreate() {
super.onCreate()
if (BuildConfig.DEBUG) Timber.plant(Timber.DebugTree())
// TLS 1.3 support for Android < 10
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
Security.insertProviderAt(Conscrypt.newProvider(), 1)
}
Injekt.importModule(AppModule(this))
setupAcra()
setupNotificationChannels()
LocaleHelper.updateConfiguration(this, resources.configuration)
2020-02-22 04:58:19 +01:00
ProcessLifecycleOwner.get().lifecycle.addObserver(this)
// Reset Incognito Mode on relaunch
preferences.incognitoMode().set(false)
}
2016-10-15 11:12:16 +02:00
override fun attachBaseContext(base: Context) {
super.attachBaseContext(base)
2019-04-13 15:10:44 +02:00
MultiDex.install(this)
2016-10-15 11:12:16 +02:00
}
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
LocaleHelper.updateConfiguration(this, newConfig, true)
}
override fun newImageLoader(): ImageLoader {
return ImageLoader.Builder(this).apply {
componentRegistry {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
add(ImageDecoderDecoder(this@App))
} else {
add(GifDecoder())
}
add(ByteBufferFetcher())
add(MangaCoverFetcher())
}
okHttpClient(Injekt.get<NetworkHelper>().coilClient)
crossfade(300)
allowRgb565(getSystemService<ActivityManager>()!!.isLowRamDevice)
}.build()
}
2020-02-22 04:58:19 +01:00
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
2020-04-14 23:13:45 +02:00
@Suppress("unused")
2020-02-22 04:58:19 +01:00
fun onAppBackgrounded() {
if (preferences.lockAppAfter().get() >= 0) {
2020-02-22 19:30:36 +01:00
SecureActivityDelegate.locked = true
2020-02-22 04:58:19 +01:00
}
}
protected open fun setupAcra() {
2021-01-27 15:17:40 +01:00
if (BuildConfig.FLAVOR != "dev") {
ACRA.init(this)
}
}
protected open fun setupNotificationChannels() {
Notifications.createChannels(this)
}
}