Show URI's label (if exists) in the list of selectable contact URIs
This commit is contained in:
@ -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
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -95,34 +95,29 @@ sealed class Contact {
|
||||
return null
|
||||
}
|
||||
|
||||
fun contactUris(name: String, tel: Boolean = false): ArrayList<String> {
|
||||
val uris = ArrayList<String>()
|
||||
fun contactContactUris(name: String, tel: Boolean = false): List<ContactUri> {
|
||||
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? {
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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
|
||||
|
||||
Reference in New Issue
Block a user