diff --git a/app/src/main/java/de/bollwerk/app/ui/settings/SettingsScreen.kt b/app/src/main/java/de/bollwerk/app/ui/settings/SettingsScreen.kt index 7cf2572..8205053 100644 --- a/app/src/main/java/de/bollwerk/app/ui/settings/SettingsScreen.kt +++ b/app/src/main/java/de/bollwerk/app/ui/settings/SettingsScreen.kt @@ -458,6 +458,21 @@ internal fun SettingsScreen( Text("Suche nach Updates…") } } + is UpdateStatus.UpToDate -> { + OutlinedButton( + onClick = {}, + enabled = false, + modifier = Modifier.fillMaxWidth() + ) { + Icon( + imageVector = Icons.Default.SystemUpdate, + contentDescription = null, + modifier = Modifier.size(18.dp) + ) + Spacer(modifier = Modifier.width(8.dp)) + Text("Keine Updates gefunden") + } + } is UpdateStatus.Available -> { Button( onClick = updateViewModel::startDownload, diff --git a/app/src/main/java/de/bollwerk/app/ui/update/UpdateBanner.kt b/app/src/main/java/de/bollwerk/app/ui/update/UpdateBanner.kt index 2ae67eb..470787e 100644 --- a/app/src/main/java/de/bollwerk/app/ui/update/UpdateBanner.kt +++ b/app/src/main/java/de/bollwerk/app/ui/update/UpdateBanner.kt @@ -32,7 +32,8 @@ internal fun UpdateBanner( onDismiss: () -> Unit, modifier: Modifier = Modifier ) { - val isVisible = status !is UpdateStatus.Hidden && status !is UpdateStatus.Checking && status !is UpdateStatus.Available + val isVisible = status !is UpdateStatus.Hidden && status !is UpdateStatus.Checking + && status !is UpdateStatus.Available && status !is UpdateStatus.UpToDate AnimatedVisibility( visible = isVisible, diff --git a/app/src/main/java/de/bollwerk/app/ui/update/UpdateUiState.kt b/app/src/main/java/de/bollwerk/app/ui/update/UpdateUiState.kt index 4c7457b..b32d1e0 100644 --- a/app/src/main/java/de/bollwerk/app/ui/update/UpdateUiState.kt +++ b/app/src/main/java/de/bollwerk/app/ui/update/UpdateUiState.kt @@ -7,6 +7,7 @@ internal data class UpdateUiState( internal sealed interface UpdateStatus { data object Hidden : UpdateStatus data object Checking : UpdateStatus + data object UpToDate : UpdateStatus data class Available(val versionName: String, val versionCode: Int, val apkUrl: String) : UpdateStatus data class Downloading(val progress: Float) : UpdateStatus data class ReadyToInstall(val versionName: String, val versionCode: Int) : UpdateStatus diff --git a/app/src/main/java/de/bollwerk/app/ui/update/UpdateViewModel.kt b/app/src/main/java/de/bollwerk/app/ui/update/UpdateViewModel.kt index c785cf2..cb8c7d9 100644 --- a/app/src/main/java/de/bollwerk/app/ui/update/UpdateViewModel.kt +++ b/app/src/main/java/de/bollwerk/app/ui/update/UpdateViewModel.kt @@ -10,6 +10,7 @@ import de.bollwerk.app.domain.model.UpdateCheckResult import de.bollwerk.app.domain.repository.UpdateRepository import de.bollwerk.app.domain.usecase.ApkInstaller import de.bollwerk.app.domain.usecase.CheckForUpdateUseCase +import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow @@ -36,7 +37,12 @@ internal class UpdateViewModel @Inject constructor( fun checkForUpdate() { viewModelScope.launch { _uiState.update { it.copy(status = UpdateStatus.Checking) } - when (val result = checkForUpdateUseCase(BuildConfig.VERSION_CODE)) { + val startTime = System.currentTimeMillis() + val result = checkForUpdateUseCase(BuildConfig.VERSION_CODE) + val elapsed = System.currentTimeMillis() - startTime + if (elapsed < 1000) delay(1000 - elapsed) + + when (result) { is UpdateCheckResult.UpdateAvailable -> { _uiState.update { it.copy( @@ -50,6 +56,8 @@ internal class UpdateViewModel @Inject constructor( } is UpdateCheckResult.UpToDate, is UpdateCheckResult.NotConfigured -> { + _uiState.update { it.copy(status = UpdateStatus.UpToDate) } + delay(5000) _uiState.update { it.copy(status = UpdateStatus.Hidden) } } is UpdateCheckResult.Error -> {