From 2184780eb4ce16b2f87dbec4c4361ae495862d43 Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Sun, 26 Apr 2026 09:16:36 +0300 Subject: [PATCH] No need to select Start Automatically again after permission is allowed Dependencies upgrade --- app/build.gradle.kts | 1 + .../com/tutpro/baresip/SettingsScreen.kt | 24 +++++++++++++++++++ gradle/libs.versions.toml | 18 +++++++------- 3 files changed, 35 insertions(+), 8 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 27ff8b82..9ec97911 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -82,6 +82,7 @@ dependencies { implementation(libs.androidx.navigation.compose) implementation(libs.androidx.navigation.runtime.android) implementation(libs.androidx.lifecycle.process) + implementation(libs.androidx.lifecycle.runtime.compose) implementation(libs.androidx.lifecycle.viewmodel.ktx) implementation(libs.androidx.compose.material.icons.core) implementation(libs.androidx.compose.material.icons.extended) diff --git a/app/src/main/kotlin/com/tutpro/baresip/SettingsScreen.kt b/app/src/main/kotlin/com/tutpro/baresip/SettingsScreen.kt index dae9a79e..06f25a26 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/SettingsScreen.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/SettingsScreen.kt @@ -58,6 +58,7 @@ import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBarDefaults 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 @@ -69,6 +70,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext +import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.KeyboardType @@ -76,6 +78,8 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.core.app.ActivityCompat.shouldShowRequestPermissionRationale import androidx.core.net.toUri +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder @@ -239,6 +243,25 @@ private fun SettingsContent( activity: Activity, onRestartApp: () -> Unit ) { + val ctx = LocalContext.current + val lifecycleOwner = LocalLifecycleOwner.current + var pendingAutoStart by remember { mutableStateOf(false) } + + DisposableEffect(lifecycleOwner) { + val observer = LifecycleEventObserver { _, event -> + if (event == Lifecycle.Event.ON_RESUME) { + if (pendingAutoStart && isAppearOnTopPermissionGranted(ctx)) { + viewModel.autoStart.value = true + pendingAutoStart = false + } + } + } + lifecycleOwner.lifecycle.addObserver(observer) + onDispose { + lifecycleOwner.lifecycle.removeObserver(observer) + } + } + val alertTitleText = stringResource(R.string.alert) val errorTitleText = stringResource(R.string.error) val noticeTitleText = stringResource(R.string.notice) @@ -303,6 +326,7 @@ private fun SettingsContent( lastButtonText.value = okButtonText onLastClicked.value = { val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION) + pendingAutoStart = true ctx.startActivity(intent) } showDialog.value = true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d349a611..7e9a0a79 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] activityCompose = "1.13.0" coilCompose = "2.7.0" -composeBom = "2026.03.01" +composeBom = "2026.04.01" coreKtx = "1.18.0" exifinterface = "1.4.2" fragmentKtx = "1.8.9" @@ -12,19 +12,20 @@ kotlinSerializationPlugin = "2.3.20" kotlinxCoroutinesAndroid = "1.10.2" kotlinxSerializationJson = "1.11.0" lifecycleProcess = "2.10.0" +lifecycleRuntimeCompose = "2.10.0" lifecycleViewmodelKtx = "2.10.0" material = "1.13.0" media = "1.7.1" -navigationCompose = "2.9.7" +navigationCompose = "2.9.8" preferenceKtx = "1.2.1" -ui = "1.10.6" -foundationAndroid = "1.10.6" -runtimeLivedata = "1.10.6" +ui = "1.11.0" +foundationAndroid = "1.11.0" +runtimeLivedata = "1.11.0" composeMaterial3 = "1.4.0" -navigationRuntimeAndroid = "2.9.7" +navigationRuntimeAndroid = "2.9.8" composeMaterialIcons = "1.7.8" -runtime = "1.10.6" -uiText = "1.10.6" +runtime = "1.11.0" +uiText = "1.11.0" [libraries] androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "activityCompose" } @@ -34,6 +35,7 @@ androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "coreKtx" androidx-exifinterface = { module = "androidx.exifinterface:exifinterface", version.ref = "exifinterface" } androidx-fragment-ktx = { module = "androidx.fragment:fragment-ktx", version.ref = "fragmentKtx" } androidx-lifecycle-process = { group = "androidx.lifecycle", name = "lifecycle-process", version.ref = "lifecycleProcess" } +androidx-lifecycle-runtime-compose = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "lifecycleRuntimeCompose" } androidx-lifecycle-viewmodel-ktx = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "lifecycleViewmodelKtx" } androidx-media = { module = "androidx.media:media", version.ref = "media" } androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version.ref = "navigationCompose" }