Allow mobile calling when device is in airplane mode and wifi calling is enabled

This commit is contained in:
Juha Heinanen
2026-06-13 08:25:43 +03:00
parent f10d1f4e81
commit d4c5eab8cf
5 changed files with 28 additions and 18 deletions
@@ -2144,17 +2144,19 @@ class BaresipService: Service() {
private fun updateMobileStatus(newStatus: Int? = null) { private fun updateMobileStatus(newStatus: Int? = null) {
uas.value.find { it.account.isMobile }?.let { ua -> uas.value.find { it.account.isMobile }?.let { ua ->
val isAirplaneModeOn = Utils.isAirplaneModeOn(this) val isAirplaneModeOn = Utils.isAirplaneModeOn(this)
val status = newStatus val status = newStatus ?: if (isAirplaneModeOn) {
?: if (isAirplaneModeOn) { if (ua.status == circleGreen.getValue(colorblind))
ua.status
else
R.drawable.circle_white R.drawable.circle_white
} else {
if (ua.status == R.drawable.circle_white) {
// Show "Red" (not yet in service)
circleRed.getValue(colorblind)
} else { } else {
if (ua.status == R.drawable.circle_white) { ua.status
// Show "Red" (not yet in service)
circleRed.getValue(colorblind)
} else {
ua.status
}
} }
}
if (ua.status != status) { if (ua.status != status) {
Log.d(TAG, "Updating Mobile status to $status") Log.d(TAG, "Updating Mobile status to $status")
ua.updateStatus(status) ua.updateStatus(status)
@@ -2167,13 +2169,13 @@ class BaresipService: Service() {
private fun updateMobileStatusFromServiceState(state: Int) { private fun updateMobileStatusFromServiceState(state: Int) {
val isAirplaneModeOn = Utils.isAirplaneModeOn(this) val isAirplaneModeOn = Utils.isAirplaneModeOn(this)
val status = if (isAirplaneModeOn) val status = if (state == ServiceState.STATE_IN_SERVICE)
R.drawable.circle_white
else if (state == ServiceState.STATE_IN_SERVICE)
circleGreen.getValue(colorblind) circleGreen.getValue(colorblind)
else if (isAirplaneModeOn)
R.drawable.circle_white
else else
circleRed.getValue(colorblind) circleRed.getValue(colorblind)
Log.d(TAG, "Mobile service state changed: $state, updating status to $status") Log.d(TAG, "Mobile service state changed: $state, updating status to $status (Airplane=$isAirplaneModeOn)")
updateMobileStatus(status) updateMobileStatus(status)
} }
@@ -72,6 +72,8 @@ import androidx.navigation.NavType
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
import androidx.navigation.navArgument import androidx.navigation.navArgument
import coil.compose.AsyncImage import coil.compose.AsyncImage
import com.tutpro.baresip.BaresipService.Companion.circleGreen
import com.tutpro.baresip.BaresipService.Companion.colorblind
import com.tutpro.baresip.CustomElements.AlertDialog import com.tutpro.baresip.CustomElements.AlertDialog
import com.tutpro.baresip.CustomElements.verticalScrollbar import com.tutpro.baresip.CustomElements.verticalScrollbar
@@ -349,7 +351,7 @@ private fun Calls(
) )
secondButtonText.value = ctx.getString(R.string.call) secondButtonText.value = ctx.getString(R.string.call)
secondAction.value = { secondAction.value = {
if (ua.account.isMobile && Utils.isAirplaneModeOn(ctx)) { if (ua.account.isMobile && ua.status != circleGreen.getValue(colorblind)) {
alertTitle.value = ctx.getString(R.string.notice) alertTitle.value = ctx.getString(R.string.notice)
alertMessage.value = ctx.getString(R.string.airplane_mode) alertMessage.value = ctx.getString(R.string.airplane_mode)
showAlert.value = true showAlert.value = true
@@ -364,7 +366,7 @@ private fun Calls(
thirdButtonText.value = ctx.getString(R.string.send_message) thirdButtonText.value = ctx.getString(R.string.send_message)
thirdAction.value = { thirdAction.value = {
if (ua.account.isMobile) { if (ua.account.isMobile) {
if (Utils.isAirplaneModeOn(ctx)) { if (ua.status != circleGreen.getValue(colorblind)) {
alertTitle.value = ctx.getString(R.string.notice) alertTitle.value = ctx.getString(R.string.notice)
alertMessage.value = ctx.getString(R.string.airplane_mode) alertMessage.value = ctx.getString(R.string.airplane_mode)
showAlert.value = true showAlert.value = true
@@ -85,6 +85,8 @@ import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavType import androidx.navigation.NavType
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
import androidx.navigation.navArgument import androidx.navigation.navArgument
import com.tutpro.baresip.BaresipService.Companion.circleGreen
import com.tutpro.baresip.BaresipService.Companion.colorblind
import com.tutpro.baresip.CustomElements.AlertDialog import com.tutpro.baresip.CustomElements.AlertDialog
import com.tutpro.baresip.CustomElements.verticalScrollbar import com.tutpro.baresip.CustomElements.verticalScrollbar
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -583,7 +585,7 @@ private fun NewMessage(
var msgUri = "" var msgUri = ""
addMessage(msg) addMessage(msg)
if (ua.account.isMobile) { if (ua.account.isMobile) {
if (Utils.isAirplaneModeOn(ctx)) { if (ua.status != circleGreen.getValue(colorblind)) {
dialogMessage.value = ctx.getString(R.string.airplane_mode) dialogMessage.value = ctx.getString(R.string.airplane_mode)
showDialog.value = true showDialog.value = true
} else { } else {
@@ -93,6 +93,8 @@ import androidx.navigation.NavType
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
import androidx.navigation.navArgument import androidx.navigation.navArgument
import coil.compose.rememberAsyncImagePainter import coil.compose.rememberAsyncImagePainter
import com.tutpro.baresip.BaresipService.Companion.circleGreen
import com.tutpro.baresip.BaresipService.Companion.colorblind
import com.tutpro.baresip.CustomElements.AlertDialog import com.tutpro.baresip.CustomElements.AlertDialog
import java.io.ByteArrayOutputStream import java.io.ByteArrayOutputStream
import java.io.File import java.io.File
@@ -729,7 +731,7 @@ private fun UrisSection(
!ua.account.isMobile)) !ua.account.isMobile))
IconButton( IconButton(
onClick = { onClick = {
if (ua.account.isMobile && Utils.isAirplaneModeOn(ctx)) { if (ua.account.isMobile && ua.status != circleGreen.getValue(colorblind)) {
alertTitle.value = ctx.getString(R.string.notice) alertTitle.value = ctx.getString(R.string.notice)
alertMessage.value = ctx.getString(R.string.airplane_mode) alertMessage.value = ctx.getString(R.string.airplane_mode)
showAlert.value = true showAlert.value = true
@@ -764,7 +766,7 @@ private fun UrisSection(
!ua.account.isMobile)) !ua.account.isMobile))
IconButton( IconButton(
onClick = { onClick = {
if (ua.account.isMobile && Utils.isAirplaneModeOn(ctx)) { if (ua.account.isMobile && ua.status != circleGreen.getValue(colorblind)) {
alertTitle.value = ctx.getString(R.string.notice) alertTitle.value = ctx.getString(R.string.notice)
alertMessage.value = ctx.getString(R.string.airplane_mode) alertMessage.value = ctx.getString(R.string.airplane_mode)
showAlert.value = true showAlert.value = true
@@ -152,6 +152,8 @@ import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.navigation.NavController import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder import androidx.navigation.NavGraphBuilder
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
import com.tutpro.baresip.BaresipService.Companion.circleGreen
import com.tutpro.baresip.BaresipService.Companion.colorblind
import com.tutpro.baresip.BaresipService.Companion.contactNames import com.tutpro.baresip.BaresipService.Companion.contactNames
import com.tutpro.baresip.BaresipService.Companion.uas import com.tutpro.baresip.BaresipService.Companion.uas
import com.tutpro.baresip.BaresipService.Companion.uasStatus import com.tutpro.baresip.BaresipService.Companion.uasStatus
@@ -2139,7 +2141,7 @@ private fun makeCall(ctx: Context, viewModel: ViewModel, uriText: String,
showAlert.value = true showAlert.value = true
return return
} }
else if (ua.account.isMobile && Utils.isAirplaneModeOn(ctx)) { else if (ua.account.isMobile && ua.status != circleGreen.getValue(colorblind)) {
alertTitle.value = ctx.getString(R.string.notice) alertTitle.value = ctx.getString(R.string.notice)
alertMessage.value = ctx.getString(R.string.airplane_mode) alertMessage.value = ctx.getString(R.string.airplane_mode)
showAlert.value = true showAlert.value = true