Show a progress indicator while checking for updates in the about screen (#9641)

* Show a progress indicator while checking for updates.

* Remove a unused import.

* Remove the initial toast.

(cherry picked from commit 2a7cca6ea43f88e10db313f3361184d90ae80c4c)
This commit is contained in:
Alessandro Jean 2023-06-27 23:14:31 -03:00 committed by Jobobby04
parent adccbbb166
commit 137a205f4b
2 changed files with 38 additions and 11 deletions

View File

@ -1,12 +1,15 @@
package eu.kanade.presentation.more.settings.screen package eu.kanade.presentation.more.settings.screen
import android.content.Context import android.content.Context
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Public import androidx.compose.material.icons.outlined.Public
import androidx.compose.material3.CircularProgressIndicator
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
@ -67,6 +70,7 @@ object AboutScreen : Screen() {
val uriHandler = LocalUriHandler.current val uriHandler = LocalUriHandler.current
val handleBack = LocalBackPress.current val handleBack = LocalBackPress.current
val navigator = LocalNavigator.currentOrThrow val navigator = LocalNavigator.currentOrThrow
var isCheckingUpdates by remember { mutableStateOf(false) }
// SY --> // SY -->
var showWhatsNewDialog by remember { mutableStateOf(false) } var showWhatsNewDialog by remember { mutableStateOf(false) }
@ -103,9 +107,22 @@ object AboutScreen : Screen() {
item { item {
TextPreferenceWidget( TextPreferenceWidget(
title = stringResource(R.string.check_for_updates), title = stringResource(R.string.check_for_updates),
widget = {
AnimatedVisibility(visible = isCheckingUpdates) {
CircularProgressIndicator(
modifier = Modifier.size(28.dp),
strokeWidth = 3.dp,
)
}
},
onPreferenceClick = { onPreferenceClick = {
if (!isCheckingUpdates) {
scope.launch { scope.launch {
checkVersion(context) { result -> isCheckingUpdates = true
checkVersion(
context = context,
onAvailableUpdate = { result ->
val updateScreen = NewUpdateScreen( val updateScreen = NewUpdateScreen(
versionName = result.release.version, versionName = result.release.version,
changelogInfo = result.release.info, changelogInfo = result.release.info,
@ -113,12 +130,18 @@ object AboutScreen : Screen() {
downloadLink = result.release.getDownloadLink(), downloadLink = result.release.getDownloadLink(),
) )
navigator.push(updateScreen) navigator.push(updateScreen)
},
onFinish = {
isCheckingUpdates = false
},
)
} }
} }
}, },
) )
} }
} }
if (!BuildConfig.DEBUG) { if (!BuildConfig.DEBUG) {
item { item {
TextPreferenceWidget( TextPreferenceWidget(
@ -205,10 +228,13 @@ object AboutScreen : Screen() {
/** /**
* Checks version and shows a user prompt if an update is available. * 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() val updateChecker = AppUpdateChecker()
withUIContext { withUIContext {
context.toast(R.string.update_check_look_for_updates)
try { try {
when (val result = withIOContext { updateChecker.checkForUpdate(context, forceCheck = true) }) { when (val result = withIOContext { updateChecker.checkForUpdate(context, forceCheck = true) }) {
is GetApplicationRelease.Result.NewUpdate -> { is GetApplicationRelease.Result.NewUpdate -> {
@ -222,6 +248,8 @@ object AboutScreen : Screen() {
} catch (e: Exception) { } catch (e: Exception) {
context.toast(e.message) context.toast(e.message)
logcat(LogPriority.ERROR, e) logcat(LogPriority.ERROR, e)
} finally {
onFinish()
} }
} }
} }

View File

@ -899,7 +899,6 @@
<!-- reserved for future use --> <!-- reserved for future use -->
<string name="update_check_eol">This Android version is no longer supported</string> <string name="update_check_eol">This Android version is no longer supported</string>
<string name="update_check_no_new_updates">No new updates available</string> <string name="update_check_no_new_updates">No new updates available</string>
<string name="update_check_look_for_updates">Searching for updates…</string>
<!--UpdateCheck Notifications--> <!--UpdateCheck Notifications-->
<string name="update_check_notification_download_in_progress">Downloading…</string> <string name="update_check_notification_download_in_progress">Downloading…</string>