diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/AboutScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/AboutScreen.kt
index a381dae90..e4e26b285 100644
--- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/AboutScreen.kt
+++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/AboutScreen.kt
@@ -1,12 +1,15 @@
package eu.kanade.presentation.more.settings.screen
import android.content.Context
+import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Public
+import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
@@ -67,6 +70,7 @@ object AboutScreen : Screen() {
val uriHandler = LocalUriHandler.current
val handleBack = LocalBackPress.current
val navigator = LocalNavigator.currentOrThrow
+ var isCheckingUpdates by remember { mutableStateOf(false) }
// SY -->
var showWhatsNewDialog by remember { mutableStateOf(false) }
@@ -103,22 +107,41 @@ object AboutScreen : Screen() {
item {
TextPreferenceWidget(
title = stringResource(R.string.check_for_updates),
+ widget = {
+ AnimatedVisibility(visible = isCheckingUpdates) {
+ CircularProgressIndicator(
+ modifier = Modifier.size(28.dp),
+ strokeWidth = 3.dp,
+ )
+ }
+ },
onPreferenceClick = {
- scope.launch {
- checkVersion(context) { result ->
- val updateScreen = NewUpdateScreen(
- versionName = result.release.version,
- changelogInfo = result.release.info,
- releaseLink = result.release.releaseLink,
- downloadLink = result.release.getDownloadLink(),
+ if (!isCheckingUpdates) {
+ scope.launch {
+ isCheckingUpdates = true
+
+ checkVersion(
+ context = context,
+ onAvailableUpdate = { result ->
+ val updateScreen = NewUpdateScreen(
+ versionName = result.release.version,
+ changelogInfo = result.release.info,
+ releaseLink = result.release.releaseLink,
+ downloadLink = result.release.getDownloadLink(),
+ )
+ navigator.push(updateScreen)
+ },
+ onFinish = {
+ isCheckingUpdates = false
+ },
)
- navigator.push(updateScreen)
}
}
},
)
}
}
+
if (!BuildConfig.DEBUG) {
item {
TextPreferenceWidget(
@@ -205,10 +228,13 @@ object AboutScreen : Screen() {
/**
* Checks version and shows a user prompt if an update is available.
*/
- private suspend fun checkVersion(context: Context, onAvailableUpdate: (GetApplicationRelease.Result.NewUpdate) -> Unit) {
+ private suspend fun checkVersion(
+ context: Context,
+ onAvailableUpdate: (GetApplicationRelease.Result.NewUpdate) -> Unit,
+ onFinish: () -> Unit,
+ ) {
val updateChecker = AppUpdateChecker()
withUIContext {
- context.toast(R.string.update_check_look_for_updates)
try {
when (val result = withIOContext { updateChecker.checkForUpdate(context, forceCheck = true) }) {
is GetApplicationRelease.Result.NewUpdate -> {
@@ -222,6 +248,8 @@ object AboutScreen : Screen() {
} catch (e: Exception) {
context.toast(e.message)
logcat(LogPriority.ERROR, e)
+ } finally {
+ onFinish()
}
}
}
diff --git a/i18n/src/main/res/values/strings.xml b/i18n/src/main/res/values/strings.xml
index 310fcca5e..c3a408382 100755
--- a/i18n/src/main/res/values/strings.xml
+++ b/i18n/src/main/res/values/strings.xml
@@ -899,7 +899,6 @@
This Android version is no longer supported
No new updates available
- Searching for updates…
Downloading…