From 269373f25951c447a09591a5f680abf4cf4d778a Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Sun, 31 May 2026 17:46:30 +0300 Subject: [PATCH] Show URI's label (if exists) in the list of selectable contact URIs --- .../kotlin/com/tutpro/baresip/CallsScreen.kt | 12 +-------- .../kotlin/com/tutpro/baresip/ChatsScreen.kt | 8 +++--- .../main/kotlin/com/tutpro/baresip/Contact.kt | 25 ++++++++----------- .../com/tutpro/baresip/ContactScreen.kt | 5 +++- .../com/tutpro/baresip/ContactsScreen.kt | 10 -------- .../kotlin/com/tutpro/baresip/MainScreen.kt | 16 ++++++------ 6 files changed, 27 insertions(+), 49 deletions(-) diff --git a/app/src/main/kotlin/com/tutpro/baresip/CallsScreen.kt b/app/src/main/kotlin/com/tutpro/baresip/CallsScreen.kt index 34ee5471..70d6ec6e 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/CallsScreen.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/CallsScreen.kt @@ -62,6 +62,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import androidx.core.net.toUri import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.compose.LocalLifecycleOwner @@ -71,9 +72,7 @@ import androidx.navigation.NavType import androidx.navigation.compose.composable import androidx.navigation.navArgument import coil.compose.AsyncImage -import androidx.core.net.toUri import com.tutpro.baresip.CustomElements.AlertDialog -import com.tutpro.baresip.CustomElements.SelectableAlertDialog import com.tutpro.baresip.CustomElements.verticalScrollbar fun NavGraphBuilder.callsScreenRoute(navController: NavController, viewModel: ViewModel) { @@ -311,15 +310,6 @@ private fun Calls( lastButtonText = stringResource(R.string.ok), ) - SelectableAlertDialog( - openDialog = CustomElements.showSelectItemDialog, - title = stringResource(R.string.choose_destination_uri), - items = CustomElements.selectItems.value, - onItemClicked = CustomElements.selectItemAction.value, - neutralButtonText = stringResource(R.string.cancel), - onNeutralClicked = {} - ) - val lazyListState = rememberLazyListState() LazyColumn( modifier = Modifier diff --git a/app/src/main/kotlin/com/tutpro/baresip/ChatsScreen.kt b/app/src/main/kotlin/com/tutpro/baresip/ChatsScreen.kt index 4015430d..fa1b7188 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/ChatsScreen.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/ChatsScreen.kt @@ -593,7 +593,7 @@ private fun NewChatPeer(ctx: Context, navController: NavController, account: Acc showSuggestions = false val peerText = newPeer.trim() if (peerText.isNotEmpty()) { - val uris = Contact.contactUris(peerText, account.isMobile) + val uris = Contact.contactContactUris(peerText, account.isMobile) if (uris.isEmpty()) { if (Contact.nameExists(peerText, BaresipService.contacts, true)) { alertTitle.value = ctx.getString(R.string.notice) @@ -606,11 +606,11 @@ private fun NewChatPeer(ctx: Context, navController: NavController, account: Acc makeChat(ctx, navController, account, peerText) } } else if (uris.size == 1) - makeChat(ctx, navController, account, uris[0]) + makeChat(ctx, navController, account, uris[0].uri) else { - items.value = uris + items.value = uris.map { it.label.ifEmpty { it.uri.substringAfter(":") } } itemAction.value = { index -> - makeChat(ctx, navController, account, uris[index]) + makeChat(ctx, navController, account, uris[index].uri) } showDialog.value = true } diff --git a/app/src/main/kotlin/com/tutpro/baresip/Contact.kt b/app/src/main/kotlin/com/tutpro/baresip/Contact.kt index 866ac52f..e8cc5ddc 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Contact.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Contact.kt @@ -95,34 +95,29 @@ sealed class Contact { return null } - fun contactUris(name: String, tel: Boolean = false): ArrayList { - val uris = ArrayList() + fun contactContactUris(name: String, tel: Boolean = false): List { synchronized(BaresipService.contacts) { for (c in BaresipService.contacts) when (c) { is BaresipContact -> { if (c.name.equals(name, ignoreCase = true)) { - for (u in c.uris) { - if (tel && !u.uri.startsWith("tel:")) - continue - uris.add(u.uri) - } - return uris + return if (tel) + c.uris.filter { it.uri.startsWith("tel:") } + else + c.uris } } is AndroidContact -> { if (c.name == name) { - for (u in c.uris) { - if (tel && !u.uri.startsWith("tel:")) - continue - uris.add(u.uri) - } - return uris + return if (tel) + c.uris.filter { it.uri.startsWith("tel:") } + else + c.uris } } } } - return uris + return emptyList() } fun findContact(uri: String): Contact? { diff --git a/app/src/main/kotlin/com/tutpro/baresip/ContactScreen.kt b/app/src/main/kotlin/com/tutpro/baresip/ContactScreen.kt index dda83a8c..36d0d102 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/ContactScreen.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/ContactScreen.kt @@ -648,7 +648,10 @@ private fun UrisSection( modifier = Modifier.fillMaxWidth(), textStyle = androidx.compose.ui.text.TextStyle(fontSize = 18.sp), label = { Text(stringResource(R.string.label)) }, - keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text) + keyboardOptions = KeyboardOptions( + capitalization = KeyboardCapitalization.Words, + keyboardType = KeyboardType.Text + ) ) } if (uris.size > 1) { diff --git a/app/src/main/kotlin/com/tutpro/baresip/ContactsScreen.kt b/app/src/main/kotlin/com/tutpro/baresip/ContactsScreen.kt index 79e9db59..064e1b29 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/ContactsScreen.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/ContactsScreen.kt @@ -81,7 +81,6 @@ import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.composable import coil.compose.AsyncImage import com.tutpro.baresip.CustomElements.AlertDialog -import com.tutpro.baresip.CustomElements.SelectableAlertDialog import com.tutpro.baresip.CustomElements.TextAvatar import com.tutpro.baresip.CustomElements.verticalScrollbar import java.io.ByteArrayOutputStream @@ -397,15 +396,6 @@ private fun ContactsScreen(navController: NavController) { } ) - SelectableAlertDialog( - openDialog = CustomElements.showSelectItemDialog, - title = stringResource(R.string.choose_destination_uri), - items = CustomElements.selectItems.value, - onItemClicked = CustomElements.selectItemAction.value, - neutralButtonText = stringResource(R.string.cancel), - onNeutralClicked = {} - ) - Scaffold( modifier = Modifier.fillMaxSize().imePadding(), containerColor = MaterialTheme.colorScheme.background, diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainScreen.kt b/app/src/main/kotlin/com/tutpro/baresip/MainScreen.kt index 79d87769..3c0941f9 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainScreen.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainScreen.kt @@ -1830,11 +1830,11 @@ private fun CallRow( call.showSuggestions.value = false var uriText = transferUri.trim() if (uriText.isNotEmpty()) { - val uris = Contact.contactUris(uriText) + val uris = Contact.contactContactUris(uriText) if (uris.size > 1) { - selectItems.value = uris + selectItems.value = uris.map { it.label.ifEmpty { it.uri.substringAfter(":") } } selectItemAction.value = { index -> - val uri = uris[index] + val uri = uris[index].uri transfer( ctx, viewModel, @@ -1847,7 +1847,7 @@ private fun CallRow( showSelectItemDialog.value = true } else { - if (uris.size == 1) uriText = uris[0] + if (uris.size == 1) uriText = uris[0].uri transfer( ctx, viewModel, @@ -2062,7 +2062,7 @@ private fun callClick(ctx: Context, viewModel: ViewModel, dialerState: ViewModel uriText == Utils.friendlyUri(ctx, dialerState.redialUri, ua!!.account)) dialerState.redialUri else { - val uris = Contact.contactUris(uriText, ua?.account?.isMobile ?: false) + val uris = Contact.contactContactUris(uriText, ua?.account?.isMobile ?: false) if (uris.isEmpty()) { if (Contact.nameExists(uriText, BaresipService.contacts, true)) { alertTitle.value = ctx.getString(R.string.notice) @@ -2076,11 +2076,11 @@ private fun callClick(ctx: Context, viewModel: ViewModel, dialerState: ViewModel uriText } else if (uris.size == 1) - uris[0] + uris[0].uri else { - selectItems.value = uris + selectItems.value = uris.map { it.label.ifEmpty { it.uri.substringAfter(":") } } selectItemAction.value = { index -> - makeCall(ctx, viewModel, uris[index], dialerState) + makeCall(ctx, viewModel, uris[index].uri, dialerState) } showSelectItemDialog.value = true return