feat(update): UpToDate-Status mit temporärem Feedback anzeigen
- Neuer UpdateStatus.UpToDate State - Button zeigt 'Keine Updates gefunden' für 5 Sekunden - Mindestens 1s Checking-Anzeige (vermeidet Flicker bei schneller Antwort) - UpdateBanner blendet UpToDate-Status aus
This commit is contained in:
parent
f93b4d0b72
commit
e43c0ebbb5
4 changed files with 27 additions and 2 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 -> {
|
||||
|
|
|
|||
Loading…
Reference in a new issue