Remove `App.context`

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

@ -39,11 +39,14 @@ fun UpdateDialog(
onConfirmUpdate = { onConfirmUpdate = {
scope.launch(Dispatchers.IO) { scope.launch(Dispatchers.IO) {
runCatching { runCatching {
Updater.downloadApk(latestRelease = latestRelease) Updater.downloadApk(
context = context,
latestRelease = latestRelease
)
.collect { downloadStatus -> .collect { downloadStatus ->
currentDownloadStatus = downloadStatus currentDownloadStatus = downloadStatus
if (downloadStatus is Updater.DownloadStatus.Finished) { if (downloadStatus is Updater.DownloadStatus.Finished) {
Updater.installLatestApk() Updater.installLatestApk(context)
} }
} }
}.onFailure { }.onFailure {

@ -58,7 +58,7 @@ object Updater {
latestRelease latestRelease
} }
suspend fun checkForUpdate(context: Context = App.context): LatestRelease? { suspend fun checkForUpdate(context: Context): LatestRelease? {
val currentVersion = context.getCurrentVersion() val currentVersion = context.getCurrentVersion()
val latestRelease = getLatestRelease() val latestRelease = getLatestRelease()
val latestVersion = latestRelease.name.toVersion() val latestVersion = latestRelease.name.toVersion()
@ -80,7 +80,7 @@ object Updater {
private fun Context.getLatestApk() = private fun Context.getLatestApk() =
File(getExternalFilesDir("apk"), "latest.apk") File(getExternalFilesDir("apk"), "latest.apk")
fun installLatestApk(context: Context = App.context) = context.run { fun installLatestApk(context: Context) = context.run {
kotlin.runCatching { kotlin.runCatching {
val contentUri = FileProvider.getUriForFile(this, getFileProvider(), getLatestApk()) val contentUri = FileProvider.getUriForFile(this, getFileProvider(), getLatestApk())
val intent = Intent(Intent.ACTION_VIEW).apply { val intent = Intent(Intent.ACTION_VIEW).apply {
@ -96,7 +96,7 @@ object Updater {
} }
suspend fun deleteOutdatedApk( suspend fun deleteOutdatedApk(
context: Context = App.context, context: Context,
) = context.runCatching { ) = context.runCatching {
val apkFile = getLatestApk() val apkFile = getLatestApk()
if (apkFile.exists()) { if (apkFile.exists()) {
@ -110,7 +110,7 @@ object Updater {
} }
suspend fun downloadApk( suspend fun downloadApk(
context: Context = App.context, context: Context,
latestRelease: LatestRelease latestRelease: LatestRelease
): Flow<DownloadStatus> = withContext(Dispatchers.IO) { ): Flow<DownloadStatus> = withContext(Dispatchers.IO) {
val apkVersion = context.packageManager.getPackageArchiveInfo( val apkVersion = context.packageManager.getPackageArchiveInfo(

@ -3,8 +3,10 @@ package org.xtimms.tokusho.sections.settings.about
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Description
import androidx.compose.material.icons.outlined.Info import androidx.compose.material.icons.outlined.Info
import androidx.compose.material.icons.outlined.Update import androidx.compose.material.icons.outlined.Update
import androidx.compose.material.icons.outlined.UpdateDisabled
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
@ -13,6 +15,7 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.AnnotatedString
import org.xtimms.tokusho.App import org.xtimms.tokusho.App
@ -27,6 +30,7 @@ import org.xtimms.tokusho.utils.system.toast
const val ABOUT_DESTINATION = "about" const val ABOUT_DESTINATION = "about"
private const val repoUrl = "https://git.kotatsu.app/Xtimms/Tokusho"
const val weblate = "https://hosted.weblate.org/engage/tokusho/" const val weblate = "https://hosted.weblate.org/engage/tokusho/"
@Composable @Composable
@ -42,6 +46,11 @@ fun AboutView(
val info = App.getVersionReport() val info = App.getVersionReport()
val versionName = packageInfo.versionName val versionName = packageInfo.versionName
val uriHandler = LocalUriHandler.current
fun openUrl(url: String) {
uriHandler.openUri(url)
}
ScaffoldWithTopAppBar( ScaffoldWithTopAppBar(
title = stringResource(R.string.about), title = stringResource(R.string.about),
navigateBack = navigateBack navigateBack = navigateBack
@ -50,13 +59,19 @@ fun AboutView(
modifier = Modifier modifier = Modifier
.padding(padding) .padding(padding)
) { ) {
item {
PreferenceItem(
title = stringResource(R.string.readme),
description = stringResource(R.string.readme_desc),
icon = Icons.Outlined.Description,
) { openUrl(repoUrl) }
}
item { item {
PreferenceSwitchWithDivider( PreferenceSwitchWithDivider(
title = stringResource(R.string.auto_update), title = stringResource(R.string.auto_update),
description = stringResource(R.string.check_for_updates_desc), description = stringResource(R.string.check_for_updates_desc),
icon = Icons.Outlined.Update, icon = if (isAutoUpdateEnabled) Icons.Outlined.Update else Icons.Outlined.UpdateDisabled,
isChecked = isAutoUpdateEnabled, isChecked = isAutoUpdateEnabled,
isSwitchEnabled = true,
onClick = navigateToUpdatePage, onClick = navigateToUpdatePage,
onChecked = { onChecked = {
isAutoUpdateEnabled = !isAutoUpdateEnabled isAutoUpdateEnabled = !isAutoUpdateEnabled

@ -131,7 +131,7 @@ fun UpdateView(
runCatching { runCatching {
isLoading = true isLoading = true
withContext(Dispatchers.IO) { withContext(Dispatchers.IO) {
Updater.checkForUpdate()?.let { Updater.checkForUpdate(context)?.let {
latestRelease = it latestRelease = it
showUpdateDialog = true showUpdateDialog = true
} }

@ -25,7 +25,7 @@
<string name="off">Off</string> <string name="off">Off</string>
<string name="open_settings">Open settings</string> <string name="open_settings">Open settings</string>
<string name="auto_update">Automatic updates</string> <string name="auto_update">Automatic updates</string>
<string name="check_for_updates_desc">Automatically check for the latest version on GitHub</string> <string name="check_for_updates_desc">Automatically check for the latest version on Gitea</string>
<string name="version">Version</string> <string name="version">Version</string>
<string name="info_copied">Info copied to clipboard</string> <string name="info_copied">Info copied to clipboard</string>
<string name="enable_auto_update">Enable auto update</string> <string name="enable_auto_update">Enable auto update</string>
@ -57,4 +57,6 @@
<string name="no_results_found">No results found</string> <string name="no_results_found">No results found</string>
<string name="error_no_match">No matches</string> <string name="error_no_match">No matches</string>
<string name="information_no_manga_category">No manga in this category</string> <string name="information_no_manga_category">No manga in this category</string>
<string name="readme">README</string>
<string name="readme_desc">Check the Gitea repository and the README</string>
</resources> </resources>
Loading…
Cancel
Save