From 654d968c727922f1393164924f28e0c811880e78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Santos?= Date: Tue, 11 Nov 2025 15:58:26 +0000 Subject: [PATCH] Don't show Install & Run when installing expired tests --- .../models/InstalledTestDescriptorModel.kt | 3 ++ .../ui/descriptor/add/AddDescriptorScreen.kt | 54 ++++++++++++------- gradle/libs.versions.toml | 2 +- 3 files changed, 40 insertions(+), 19 deletions(-) diff --git a/composeApp/src/commonMain/kotlin/org/ooni/probe/data/models/InstalledTestDescriptorModel.kt b/composeApp/src/commonMain/kotlin/org/ooni/probe/data/models/InstalledTestDescriptorModel.kt index 7ab66ba56..4083f670b 100644 --- a/composeApp/src/commonMain/kotlin/org/ooni/probe/data/models/InstalledTestDescriptorModel.kt +++ b/composeApp/src/commonMain/kotlin/org/ooni/probe/data/models/InstalledTestDescriptorModel.kt @@ -21,6 +21,7 @@ import org.ooni.engine.models.SummaryType import org.ooni.probe.data.TestDescriptor import org.ooni.probe.shared.InstalledDescriptorIcons import org.ooni.probe.shared.hexToColor +import org.ooni.probe.shared.now import org.ooni.probe.shared.stringMonthArrayResource import org.ooni.probe.shared.toEpoch @@ -61,6 +62,8 @@ data class InstalledTestDescriptorModel( val previousRevisions get() = if (revision <= 1) emptyList() else (1 until revision).toList().reversed() + + val isExpired get() = expirationDate != null && expirationDate < LocalDateTime.now() } fun InstalledTestDescriptorModel.toDescriptor(updateStatus: UpdateStatus = UpdateStatus.Unknown) = diff --git a/composeApp/src/commonMain/kotlin/org/ooni/probe/ui/descriptor/add/AddDescriptorScreen.kt b/composeApp/src/commonMain/kotlin/org/ooni/probe/ui/descriptor/add/AddDescriptorScreen.kt index 02904b21d..59c2864e5 100644 --- a/composeApp/src/commonMain/kotlin/org/ooni/probe/ui/descriptor/add/AddDescriptorScreen.kt +++ b/composeApp/src/commonMain/kotlin/org/ooni/probe/ui/descriptor/add/AddDescriptorScreen.kt @@ -28,6 +28,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.semantics.Role import androidx.compose.ui.state.ToggleableState import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import ooniprobe.composeapp.generated.resources.AddDescriptor_AutoRun import ooniprobe.composeapp.generated.resources.AddDescriptor_AutoUpdate @@ -174,26 +175,43 @@ fun AddDescriptorScreen( .padding(horizontal = 16.dp) .padding(WindowInsets.navigationBars.asPaddingValues()) .fillMaxWidth(), - horizontalArrangement = Arrangement.SpaceBetween, + horizontalArrangement = + if (!descriptor.isExpired) Arrangement.SpaceBetween else Arrangement.Center, ) { - TextButton( - onClick = { onEvent(AddDescriptorViewModel.Event.InstallClicked) }, - ) { - Text(stringResource(Res.string.AddDescriptor_InstallForLater)) - } + if (!descriptor.isExpired) { + TextButton( + onClick = { onEvent(AddDescriptorViewModel.Event.InstallClicked) }, + ) { + Text( + stringResource(Res.string.AddDescriptor_InstallForLater), + textAlign = TextAlign.Center, + ) + } - Button( - onClick = { onEvent(AddDescriptorViewModel.Event.RunClicked) }, - ) { - Text( - stringResource(Res.string.AddDescriptor_InstallAndRun), - style = MaterialTheme.typography.titleLarge, - ) - Icon( - painterResource(Res.drawable.ic_timer), - contentDescription = null, - modifier = Modifier.padding(start = 8.dp), - ) + Button( + onClick = { onEvent(AddDescriptorViewModel.Event.RunClicked) }, + ) { + Text( + stringResource(Res.string.AddDescriptor_InstallAndRun), + style = MaterialTheme.typography.titleLarge, + textAlign = TextAlign.Center, + ) + Icon( + painterResource(Res.drawable.ic_timer), + contentDescription = null, + modifier = Modifier.padding(start = 8.dp), + ) + } + } else { + Button( + onClick = { onEvent(AddDescriptorViewModel.Event.InstallClicked) }, + ) { + Text( + stringResource(Res.string.AddDescriptor_InstallForLater), + style = MaterialTheme.typography.titleLarge, + textAlign = TextAlign.Center, + ) + } } } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a32a5ed14..72091209c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -22,7 +22,7 @@ jetbrainsComposeCompiler = { id = "org.jetbrains.kotlin.plugin.compose", version kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } kotlinSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } cocoapods = { id = "org.jetbrains.kotlin.native.cocoapods", version.ref = "kotlin" } -ktlint = { id = "org.jlleitschuh.gradle.ktlint", version = "13.1.0" } +ktlint = { id = "org.jlleitschuh.gradle.ktlint", version = "14.0.1" } sqldelight = { id = "app.cash.sqldelight", version.ref = "sqldelight" } javafx = { id = "org.openjfx.javafxplugin", version = "0.1.0" }