From a2345dae28669c35d17252b440d17426493cc848 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Tue, 25 Nov 2025 08:17:11 -0600 Subject: [PATCH] feat: Keep screen on during firmware update (#3806) Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com> --- .../feature/firmware/FirmwareUpdateScreen.kt | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/feature/firmware/src/main/kotlin/org/meshtastic/feature/firmware/FirmwareUpdateScreen.kt b/feature/firmware/src/main/kotlin/org/meshtastic/feature/firmware/FirmwareUpdateScreen.kt index 46143f47b..cf0496596 100644 --- a/feature/firmware/src/main/kotlin/org/meshtastic/feature/firmware/FirmwareUpdateScreen.kt +++ b/feature/firmware/src/main/kotlin/org/meshtastic/feature/firmware/FirmwareUpdateScreen.kt @@ -74,6 +74,7 @@ import androidx.compose.material3.SingleChoiceSegmentedButtonRow import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue @@ -85,6 +86,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalView import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel @@ -140,6 +142,17 @@ fun FirmwareUpdateScreen( uri?.let { viewModel.startUpdateFromFile(it) } } + val shouldKeepScreenOn = + when (state) { + is FirmwareUpdateState.Downloading, + is FirmwareUpdateState.Processing, + is FirmwareUpdateState.Updating, + -> true + else -> false + } + + KeepScreenOn(shouldKeepScreenOn) + Scaffold( modifier = modifier, topBar = { @@ -566,3 +579,18 @@ private fun ColumnScope.SuccessState(onDone: () -> Unit) { Text(stringResource(Res.string.firmware_update_done)) } } + +@Composable +private fun KeepScreenOn(enabled: Boolean) { + val view = LocalView.current + DisposableEffect(enabled) { + if (enabled) { + view.keepScreenOn = true + } + onDispose { + if (enabled) { + view.keepScreenOn = false + } + } + } +}