Replace `App.applicationScope` with `processLifecycleScope`

master
Zakhar Timoshenko 2 years ago
parent af01156bdc
commit c6268d92d1
Signed by: Xtimms
SSH Key Fingerprint: SHA256:wH6spYepK/A5erBh7ZyAnr1ru9H4eaMVBEuiw6DSpxI

@ -1,6 +1,5 @@
package org.xtimms.tokusho package org.xtimms.tokusho
import android.annotation.SuppressLint
import android.app.Application import android.app.Application
import android.content.Context import android.content.Context
import android.content.pm.PackageInfo import android.content.pm.PackageInfo
@ -10,15 +9,14 @@ import android.os.StrictMode
import com.google.android.material.color.DynamicColors import com.google.android.material.color.DynamicColors
import com.tencent.mmkv.MMKV import com.tencent.mmkv.MMKV
import dagger.hilt.android.HiltAndroidApp import dagger.hilt.android.HiltAndroidApp
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.xtimms.tokusho.core.database.MangaDatabase import org.xtimms.tokusho.core.database.MangaDatabase
import org.xtimms.tokusho.core.updates.Updater import org.xtimms.tokusho.core.updates.Updater
import org.xtimms.tokusho.crash.CrashActivity import org.xtimms.tokusho.crash.CrashActivity
import org.xtimms.tokusho.crash.GlobalExceptionHandler import org.xtimms.tokusho.crash.GlobalExceptionHandler
import org.xtimms.tokusho.utils.lang.processLifecycleScope
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Provider import javax.inject.Provider
@ -31,18 +29,16 @@ class App : Application() {
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
MMKV.initialize(this) MMKV.initialize(this)
context = applicationContext
packageInfo = packageManager.run { packageInfo = packageManager.run {
if (Build.VERSION.SDK_INT >= 33) getPackageInfo( if (Build.VERSION.SDK_INT >= 33) getPackageInfo(
packageName, PackageManager.PackageInfoFlags.of(0) packageName, PackageManager.PackageInfoFlags.of(0)
) else getPackageInfo(packageName, 0) ) else getPackageInfo(packageName, 0)
} }
applicationScope = CoroutineScope(SupervisorJob())
DynamicColors.applyToActivitiesIfAvailable(this) DynamicColors.applyToActivitiesIfAvailable(this)
applicationScope.launch((Dispatchers.IO)) { processLifecycleScope.launch((Dispatchers.IO)) {
try { try {
Updater.deleteOutdatedApk() Updater.deleteOutdatedApk(this@App)
} catch (_: Throwable) { } catch (_: Throwable) {
} }
@ -76,9 +72,9 @@ class App : Application() {
companion object { companion object {
lateinit var applicationScope: CoroutineScope
lateinit var packageInfo: PackageInfo lateinit var packageInfo: PackageInfo
@Suppress("DEPRECATION")
fun getVersionReport(): String { fun getVersionReport(): String {
val versionName = packageInfo.versionName val versionName = packageInfo.versionName
val versionCode = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { val versionCode = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
@ -95,9 +91,6 @@ class App : Application() {
.append("Device information: Android $release (API ${Build.VERSION.SDK_INT})\n") .append("Device information: Android $release (API ${Build.VERSION.SDK_INT})\n")
.append("Supported ABIs: ${Build.SUPPORTED_ABIS.contentToString()}\n").toString() .append("Supported ABIs: ${Build.SUPPORTED_ABIS.contentToString()}\n").toString()
} }
@SuppressLint("StaticFieldLeak")
lateinit var context: Context
} }
} }

@ -44,6 +44,7 @@ import org.xtimms.tokusho.core.Navigation
import org.xtimms.tokusho.core.components.BottomNavBar import org.xtimms.tokusho.core.components.BottomNavBar
import org.xtimms.tokusho.core.components.TopAppBar import org.xtimms.tokusho.core.components.TopAppBar
import org.xtimms.tokusho.ui.theme.TokushoTheme import org.xtimms.tokusho.ui.theme.TokushoTheme
import org.xtimms.tokusho.utils.lang.processLifecycleScope
import javax.inject.Inject import javax.inject.Inject
@OptIn(ExperimentalMaterial3WindowSizeClassApi::class) @OptIn(ExperimentalMaterial3WindowSizeClassApi::class)
@ -83,7 +84,7 @@ class MainActivity : ComponentActivity() {
val localeListCompat = val localeListCompat =
if (locale.isEmpty()) LocaleListCompat.getEmptyLocaleList() if (locale.isEmpty()) LocaleListCompat.getEmptyLocaleList()
else LocaleListCompat.forLanguageTags(locale) else LocaleListCompat.forLanguageTags(locale)
App.applicationScope.launch(Dispatchers.Main) { processLifecycleScope.launch(Dispatchers.Main) {
AppCompatDelegate.setApplicationLocales(localeListCompat) AppCompatDelegate.setApplicationLocales(localeListCompat)
} }
} }

@ -13,9 +13,9 @@ import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.xtimms.shiki.ui.theme.SEED import org.xtimms.shiki.ui.theme.SEED
import org.xtimms.tokusho.App.Companion.applicationScope
import org.xtimms.tokusho.R import org.xtimms.tokusho.R
import org.xtimms.tokusho.ui.monet.PaletteStyle import org.xtimms.tokusho.ui.monet.PaletteStyle
import org.xtimms.tokusho.utils.lang.processLifecycleScope
import org.xtimms.tokusho.utils.system.languageMap import org.xtimms.tokusho.utils.system.languageMap
private const val DYNAMIC_COLOR = "dynamic_color" private const val DYNAMIC_COLOR = "dynamic_color"
@ -85,7 +85,7 @@ object AppSettings {
fun encodeString(key: String, string: String) = key.updateString(string) fun encodeString(key: String, string: String) = key.updateString(string)
fun containsKey(key: String) = kv.containsKey(key) fun containsKey(key: String) = kv.containsKey(key)
fun isAutoUpdateEnabled() = AUTO_UPDATE.getBoolean(true) fun isAutoUpdateEnabled() = AUTO_UPDATE.getBoolean(false)
fun getLanguageConfiguration(languageNumber: Int = kv.decodeInt(LANGUAGE)) = fun getLanguageConfiguration(languageNumber: Int = kv.decodeInt(LANGUAGE)) =
languageMap.getOrElse(languageNumber) { "" } languageMap.getOrElse(languageNumber) { "" }
@ -129,7 +129,7 @@ object AppSettings {
darkThemeValue: Int = AppSettingsStateFlow.value.darkTheme.darkThemeValue, darkThemeValue: Int = AppSettingsStateFlow.value.darkTheme.darkThemeValue,
isHighContrastModeEnabled: Boolean = AppSettingsStateFlow.value.darkTheme.isHighContrastModeEnabled isHighContrastModeEnabled: Boolean = AppSettingsStateFlow.value.darkTheme.isHighContrastModeEnabled
) { ) {
applicationScope.launch(Dispatchers.IO) { processLifecycleScope.launch(Dispatchers.IO) {
mutableAppSettingsStateFlow.update { mutableAppSettingsStateFlow.update {
it.copy( it.copy(
darkTheme = AppSettingsStateFlow.value.darkTheme.copy( darkTheme = AppSettingsStateFlow.value.darkTheme.copy(
@ -144,7 +144,7 @@ object AppSettings {
} }
fun modifyThemeSeedColor(colorArgb: Int, paletteStyleIndex: Int) { fun modifyThemeSeedColor(colorArgb: Int, paletteStyleIndex: Int) {
applicationScope.launch(Dispatchers.IO) { processLifecycleScope.launch(Dispatchers.IO) {
mutableAppSettingsStateFlow.update { mutableAppSettingsStateFlow.update {
it.copy(seedColor = colorArgb, paletteStyleIndex = paletteStyleIndex) it.copy(seedColor = colorArgb, paletteStyleIndex = paletteStyleIndex)
} }
@ -154,7 +154,7 @@ object AppSettings {
} }
fun switchDynamicColor(enabled: Boolean = !mutableAppSettingsStateFlow.value.isDynamicColorEnabled) { fun switchDynamicColor(enabled: Boolean = !mutableAppSettingsStateFlow.value.isDynamicColorEnabled) {
applicationScope.launch(Dispatchers.IO) { processLifecycleScope.launch(Dispatchers.IO) {
mutableAppSettingsStateFlow.update { mutableAppSettingsStateFlow.update {
it.copy(isDynamicColorEnabled = enabled) it.copy(isDynamicColorEnabled = enabled)
} }

@ -5,7 +5,7 @@ import android.widget.Toast
import androidx.annotation.StringRes import androidx.annotation.StringRes
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.xtimms.tokusho.App.Companion.applicationScope import org.xtimms.tokusho.utils.lang.processLifecycleScope
fun Context.toast(message: String) { fun Context.toast(message: String) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show() Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
@ -16,7 +16,7 @@ fun Context.toast(@StringRes stringRes: Int) {
} }
fun Context.suspendToast(@StringRes stringRes: Int) { fun Context.suspendToast(@StringRes stringRes: Int) {
applicationScope.launch(Dispatchers.Main) { processLifecycleScope.launch(Dispatchers.Main) {
toast(getString(stringRes)) toast(getString(stringRes))
} }
} }

Loading…
Cancel
Save