From 7fd6722cef326c55f2f69fb48863a4a22629588f Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Fri, 26 Jun 2026 16:21:29 +0300 Subject: [PATCH] Include Battery Optiomizations setting only when baresip it noe default calling or messaging app Allow default messaging app role also when baresip is not default calling app --- app/src/main/AndroidManifest.xml | 2 ++ .../com/tutpro/baresip/SettingsScreen.kt | 31 ++++++++++++++----- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3fdd3417..86cd169c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,6 +11,8 @@ + diff --git a/app/src/main/kotlin/com/tutpro/baresip/SettingsScreen.kt b/app/src/main/kotlin/com/tutpro/baresip/SettingsScreen.kt index 047caed8..1baeccf7 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/SettingsScreen.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/SettingsScreen.kt @@ -1,6 +1,7 @@ package com.tutpro.baresip import android.Manifest +import android.annotation.SuppressLint import android.app.Activity import android.app.Activity.RESULT_OK import android.app.role.RoleManager @@ -86,6 +87,7 @@ import com.tutpro.baresip.Utils.copyInputStreamToFile import java.io.File import java.io.FileInputStream import java.util.Locale +import androidx.core.net.toUri private var restart = false private val showRestartDialog = mutableStateOf(false) @@ -244,6 +246,9 @@ private fun SettingsContent( Config.save() } } + val powerManager = ctx.getSystemService(POWER_SERVICE) as PowerManager + viewModel.batteryOptimizations.value = + !powerManager.isIgnoringBatteryOptimizations(ctx.packageName) } } lifecycleOwner.lifecycle.addObserver(observer) @@ -789,6 +794,7 @@ private fun SettingsContent( } } + @SuppressLint("BatteryLife") @Composable fun BatteryOptimizations() { val batteryOptimizationsTitle = stringResource(R.string.battery_optimizations) @@ -821,8 +827,17 @@ private fun SettingsContent( checked = battery, onCheckedChange = { viewModel.batteryOptimizations.value = it - batterySettingsLauncher.launch( - Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS)) + if (it) + batterySettingsLauncher.launch( + Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS) + ) + else { + val intent = + Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply { + data = "package:${ctx.packageName}".toUri() + } + batterySettingsLauncher.launch(intent) + } } ) } @@ -998,8 +1013,7 @@ private fun SettingsContent( dialerRoleRequest.launch(roleManager.createRequestRoleIntent(RoleManager.ROLE_DIALER)) } else { - viewModel.defaultMessaging.value = false - try { + try { dialerRoleRequest.launch(Intent("android.settings.MANAGE_DEFAULT_APPS_SETTINGS")) } catch (e: ActivityNotFoundException) { Log.e(TAG, "ActivityNotFound exception: ${e.message}") @@ -1184,11 +1198,14 @@ private fun SettingsContent( AudioSettings(navController) if (VERSION.SDK_INT >= 29) { DefaultDialer() + DefaultMessaging() val defaultDialer by viewModel.defaultDialer.collectAsState() - if (defaultDialer) - DefaultMessaging() + val defaultMessaging by viewModel.defaultMessaging.collectAsState() + if (!defaultDialer && !defaultMessaging) + BatteryOptimizations() } - BatteryOptimizations() + else + BatteryOptimizations() DarkTheme() if (VERSION.SDK_INT >= 31) DynamicColors()