From 93112a0c9a03a55ee9dbe60719b3c90540d00424 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?HAL=C4=B0L=20=C4=B0BRAH=C4=B0M=20=C3=96ZDEM=C4=B0R?= <94225244+halibiram@users.noreply.github.com> Date: Fri, 10 Apr 2026 16:06:14 +0300 Subject: [PATCH] fix(updater): auto-resume installation after unknown sources permission is granted --- .../com/nuvio/tv/updater/UpdateViewModel.kt | 1 + .../nuvio/tv/updater/ui/UpdatePromptDialog.kt | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/app/src/main/java/com/nuvio/tv/updater/UpdateViewModel.kt b/app/src/main/java/com/nuvio/tv/updater/UpdateViewModel.kt index b143407d..99b89b49 100644 --- a/app/src/main/java/com/nuvio/tv/updater/UpdateViewModel.kt +++ b/app/src/main/java/com/nuvio/tv/updater/UpdateViewModel.kt @@ -158,6 +158,7 @@ class UpdateViewModel @Inject constructor( return } + _uiState.update { it.copy(showUnknownSourcesDialog = false) } ApkInstaller.launchInstall(context, apkFile) } diff --git a/app/src/main/java/com/nuvio/tv/updater/ui/UpdatePromptDialog.kt b/app/src/main/java/com/nuvio/tv/updater/ui/UpdatePromptDialog.kt index f09b3a78..82fb4e37 100644 --- a/app/src/main/java/com/nuvio/tv/updater/ui/UpdatePromptDialog.kt +++ b/app/src/main/java/com/nuvio/tv/updater/ui/UpdatePromptDialog.kt @@ -77,6 +77,10 @@ import com.nuvio.tv.ui.theme.NuvioColors import com.nuvio.tv.updater.UpdateUiState import kotlinx.coroutines.delay import androidx.compose.ui.res.stringResource +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleEventObserver +import androidx.compose.ui.platform.LocalLifecycleOwner +import androidx.compose.runtime.DisposableEffect import com.nuvio.tv.R @OptIn(ExperimentalTvMaterial3Api::class) @@ -114,6 +118,19 @@ fun UpdatePromptDialog( } } + val lifecycleOwner = LocalLifecycleOwner.current + DisposableEffect(lifecycleOwner, state.showUnknownSourcesDialog) { + val observer = LifecycleEventObserver { _, event -> + if (event == Lifecycle.Event.ON_RESUME) { + if (state.showUnknownSourcesDialog) { + onInstall() + } + } + } + lifecycleOwner.lifecycle.addObserver(observer) + onDispose { lifecycleOwner.lifecycle.removeObserver(observer) } + } + Dialog( onDismissRequest = onDismiss, properties = androidx.compose.ui.window.DialogProperties(usePlatformDefaultWidth = false)