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.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
|
import androidx.core.net.toUri
|
||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
import androidx.lifecycle.LifecycleEventObserver
|
import androidx.lifecycle.LifecycleEventObserver
|
||||||
import androidx.lifecycle.compose.LocalLifecycleOwner
|
import androidx.lifecycle.compose.LocalLifecycleOwner
|
||||||
@ -71,9 +72,7 @@ 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 androidx.core.net.toUri
|
|
||||||
import com.tutpro.baresip.CustomElements.AlertDialog
|
import com.tutpro.baresip.CustomElements.AlertDialog
|
||||||
import com.tutpro.baresip.CustomElements.SelectableAlertDialog
|
|
||||||
import com.tutpro.baresip.CustomElements.verticalScrollbar
|
import com.tutpro.baresip.CustomElements.verticalScrollbar
|
||||||
|
|
||||||
fun NavGraphBuilder.callsScreenRoute(navController: NavController, viewModel: ViewModel) {
|
fun NavGraphBuilder.callsScreenRoute(navController: NavController, viewModel: ViewModel) {
|
||||||
@ -311,15 +310,6 @@ private fun Calls(
|
|||||||
lastButtonText = stringResource(R.string.ok),
|
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()
|
val lazyListState = rememberLazyListState()
|
||||||
LazyColumn(
|
LazyColumn(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
|
|||||||
@ -593,7 +593,7 @@ private fun NewChatPeer(ctx: Context, navController: NavController, account: Acc
|
|||||||
showSuggestions = false
|
showSuggestions = false
|
||||||
val peerText = newPeer.trim()
|
val peerText = newPeer.trim()
|
||||||
if (peerText.isNotEmpty()) {
|
if (peerText.isNotEmpty()) {
|
||||||
val uris = Contact.contactUris(peerText, account.isMobile)
|
val uris = Contact.contactContactUris(peerText, account.isMobile)
|
||||||
if (uris.isEmpty()) {
|
if (uris.isEmpty()) {
|
||||||
if (Contact.nameExists(peerText, BaresipService.contacts, true)) {
|
if (Contact.nameExists(peerText, BaresipService.contacts, true)) {
|
||||||
alertTitle.value = ctx.getString(R.string.notice)
|
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)
|
makeChat(ctx, navController, account, peerText)
|
||||||
}
|
}
|
||||||
} else if (uris.size == 1)
|
} else if (uris.size == 1)
|
||||||
makeChat(ctx, navController, account, uris[0])
|
makeChat(ctx, navController, account, uris[0].uri)
|
||||||
else {
|
else {
|
||||||
items.value = uris
|
items.value = uris.map { it.label.ifEmpty { it.uri.substringAfter(":") } }
|
||||||
itemAction.value = { index ->
|
itemAction.value = { index ->
|
||||||
makeChat(ctx, navController, account, uris[index])
|
makeChat(ctx, navController, account, uris[index].uri)
|
||||||
}
|
}
|
||||||
showDialog.value = true
|
showDialog.value = true
|
||||||
}
|
}
|
||||||
|
|||||||
@ -95,34 +95,29 @@ sealed class Contact {
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
fun contactUris(name: String, tel: Boolean = false): ArrayList<String> {
|
fun contactContactUris(name: String, tel: Boolean = false): List<ContactUri> {
|
||||||
val uris = ArrayList<String>()
|
|
||||||
synchronized(BaresipService.contacts) {
|
synchronized(BaresipService.contacts) {
|
||||||
for (c in BaresipService.contacts)
|
for (c in BaresipService.contacts)
|
||||||
when (c) {
|
when (c) {
|
||||||
is BaresipContact -> {
|
is BaresipContact -> {
|
||||||
if (c.name.equals(name, ignoreCase = true)) {
|
if (c.name.equals(name, ignoreCase = true)) {
|
||||||
for (u in c.uris) {
|
return if (tel)
|
||||||
if (tel && !u.uri.startsWith("tel:"))
|
c.uris.filter { it.uri.startsWith("tel:") }
|
||||||
continue
|
else
|
||||||
uris.add(u.uri)
|
c.uris
|
||||||
}
|
|
||||||
return uris
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
is AndroidContact -> {
|
is AndroidContact -> {
|
||||||
if (c.name == name) {
|
if (c.name == name) {
|
||||||
for (u in c.uris) {
|
return if (tel)
|
||||||
if (tel && !u.uri.startsWith("tel:"))
|
c.uris.filter { it.uri.startsWith("tel:") }
|
||||||
continue
|
else
|
||||||
uris.add(u.uri)
|
c.uris
|
||||||
}
|
|
||||||
return uris
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return uris
|
return emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun findContact(uri: String): Contact? {
|
fun findContact(uri: String): Contact? {
|
||||||
|
|||||||
@ -648,7 +648,10 @@ private fun UrisSection(
|
|||||||
modifier = Modifier.fillMaxWidth(),
|
modifier = Modifier.fillMaxWidth(),
|
||||||
textStyle = androidx.compose.ui.text.TextStyle(fontSize = 18.sp),
|
textStyle = androidx.compose.ui.text.TextStyle(fontSize = 18.sp),
|
||||||
label = { Text(stringResource(R.string.label)) },
|
label = { Text(stringResource(R.string.label)) },
|
||||||
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text)
|
keyboardOptions = KeyboardOptions(
|
||||||
|
capitalization = KeyboardCapitalization.Words,
|
||||||
|
keyboardType = KeyboardType.Text
|
||||||
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
if (uris.size > 1) {
|
if (uris.size > 1) {
|
||||||
|
|||||||
@ -81,7 +81,6 @@ import androidx.navigation.NavGraphBuilder
|
|||||||
import androidx.navigation.compose.composable
|
import androidx.navigation.compose.composable
|
||||||
import coil.compose.AsyncImage
|
import coil.compose.AsyncImage
|
||||||
import com.tutpro.baresip.CustomElements.AlertDialog
|
import com.tutpro.baresip.CustomElements.AlertDialog
|
||||||
import com.tutpro.baresip.CustomElements.SelectableAlertDialog
|
|
||||||
import com.tutpro.baresip.CustomElements.TextAvatar
|
import com.tutpro.baresip.CustomElements.TextAvatar
|
||||||
import com.tutpro.baresip.CustomElements.verticalScrollbar
|
import com.tutpro.baresip.CustomElements.verticalScrollbar
|
||||||
import java.io.ByteArrayOutputStream
|
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(
|
Scaffold(
|
||||||
modifier = Modifier.fillMaxSize().imePadding(),
|
modifier = Modifier.fillMaxSize().imePadding(),
|
||||||
containerColor = MaterialTheme.colorScheme.background,
|
containerColor = MaterialTheme.colorScheme.background,
|
||||||
|
|||||||
@ -1830,11 +1830,11 @@ private fun CallRow(
|
|||||||
call.showSuggestions.value = false
|
call.showSuggestions.value = false
|
||||||
var uriText = transferUri.trim()
|
var uriText = transferUri.trim()
|
||||||
if (uriText.isNotEmpty()) {
|
if (uriText.isNotEmpty()) {
|
||||||
val uris = Contact.contactUris(uriText)
|
val uris = Contact.contactContactUris(uriText)
|
||||||
if (uris.size > 1) {
|
if (uris.size > 1) {
|
||||||
selectItems.value = uris
|
selectItems.value = uris.map { it.label.ifEmpty { it.uri.substringAfter(":") } }
|
||||||
selectItemAction.value = { index ->
|
selectItemAction.value = { index ->
|
||||||
val uri = uris[index]
|
val uri = uris[index].uri
|
||||||
transfer(
|
transfer(
|
||||||
ctx,
|
ctx,
|
||||||
viewModel,
|
viewModel,
|
||||||
@ -1847,7 +1847,7 @@ private fun CallRow(
|
|||||||
showSelectItemDialog.value = true
|
showSelectItemDialog.value = true
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (uris.size == 1) uriText = uris[0]
|
if (uris.size == 1) uriText = uris[0].uri
|
||||||
transfer(
|
transfer(
|
||||||
ctx,
|
ctx,
|
||||||
viewModel,
|
viewModel,
|
||||||
@ -2062,7 +2062,7 @@ private fun callClick(ctx: Context, viewModel: ViewModel, dialerState: ViewModel
|
|||||||
uriText == Utils.friendlyUri(ctx, dialerState.redialUri, ua!!.account))
|
uriText == Utils.friendlyUri(ctx, dialerState.redialUri, ua!!.account))
|
||||||
dialerState.redialUri
|
dialerState.redialUri
|
||||||
else {
|
else {
|
||||||
val uris = Contact.contactUris(uriText, ua?.account?.isMobile ?: false)
|
val uris = Contact.contactContactUris(uriText, ua?.account?.isMobile ?: false)
|
||||||
if (uris.isEmpty()) {
|
if (uris.isEmpty()) {
|
||||||
if (Contact.nameExists(uriText, BaresipService.contacts, true)) {
|
if (Contact.nameExists(uriText, BaresipService.contacts, true)) {
|
||||||
alertTitle.value = ctx.getString(R.string.notice)
|
alertTitle.value = ctx.getString(R.string.notice)
|
||||||
@ -2076,11 +2076,11 @@ private fun callClick(ctx: Context, viewModel: ViewModel, dialerState: ViewModel
|
|||||||
uriText
|
uriText
|
||||||
}
|
}
|
||||||
else if (uris.size == 1)
|
else if (uris.size == 1)
|
||||||
uris[0]
|
uris[0].uri
|
||||||
else {
|
else {
|
||||||
selectItems.value = uris
|
selectItems.value = uris.map { it.label.ifEmpty { it.uri.substringAfter(":") } }
|
||||||
selectItemAction.value = { index ->
|
selectItemAction.value = { index ->
|
||||||
makeCall(ctx, viewModel, uris[index], dialerState)
|
makeCall(ctx, viewModel, uris[index].uri, dialerState)
|
||||||
}
|
}
|
||||||
showSelectItemDialog.value = true
|
showSelectItemDialog.value = true
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user