On calls screen there is no need to to select URI of the peer from contacts

This commit is contained in:
Juha Heinanen
2026-05-18 18:57:00 +03:00
parent e7734b1b60
commit b12d657ee1
2 changed files with 34 additions and 97 deletions
@@ -90,7 +90,7 @@ fun NavGraphBuilder.callsScreenRoute(navController: NavController, viewModel: Vi
@Composable @Composable
private fun CallsScreen(navController: NavController, viewModel: ViewModel, aor: String) { private fun CallsScreen(navController: NavController, viewModel: ViewModel, aor: String) {
val account = Account.ofAor(aor)!! val ua = UserAgent.ofAor(aor)!!
val callHistory: MutableState<List<CallRow>> = remember { mutableStateOf(emptyList()) } val callHistory: MutableState<List<CallRow>> = remember { mutableStateOf(emptyList()) }
var isHistoryLoaded by remember { mutableStateOf(false) } var isHistoryLoaded by remember { mutableStateOf(false) }
@@ -115,7 +115,7 @@ private fun CallsScreen(navController: NavController, viewModel: ViewModel, aor:
} }
BackHandler(enabled = true) { BackHandler(enabled = true) {
account.missedCalls = false ua.account.missedCalls = false
navController.navigateUp() navController.navigateUp()
} }
@@ -129,7 +129,7 @@ private fun CallsScreen(navController: NavController, viewModel: ViewModel, aor:
.background(MaterialTheme.colorScheme.background) .background(MaterialTheme.colorScheme.background)
.padding(top = WindowInsets.statusBars.asPaddingValues().calculateTopPadding()) .padding(top = WindowInsets.statusBars.asPaddingValues().calculateTopPadding())
) { ) {
TopAppBar(navController, account, callHistory) TopAppBar(navController, ua, callHistory)
} }
}, },
content = { contentPadding -> content = { contentPadding ->
@@ -139,7 +139,7 @@ private fun CallsScreen(navController: NavController, viewModel: ViewModel, aor:
navController, navController,
viewModel, viewModel,
contentPadding, contentPadding,
account, ua,
callHistory callHistory
) )
}, },
@@ -148,7 +148,7 @@ private fun CallsScreen(navController: NavController, viewModel: ViewModel, aor:
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
private fun TopAppBar(navController: NavController, account: Account, callHistory: MutableState<List<CallRow>>) { private fun TopAppBar(navController: NavController, ua: UserAgent, callHistory: MutableState<List<CallRow>>) {
var expanded by remember { mutableStateOf(false) } var expanded by remember { mutableStateOf(false) }
@@ -160,6 +160,8 @@ private fun TopAppBar(navController: NavController, account: Account, callHistor
val showDialog = remember { mutableStateOf(false) } val showDialog = remember { mutableStateOf(false) }
val lastAction = remember { mutableStateOf({}) } val lastAction = remember { mutableStateOf({}) }
val account = ua.account
AlertDialog( AlertDialog(
showDialog = showDialog, showDialog = showDialog,
title = stringResource(R.string.confirmation), title = stringResource(R.string.confirmation),
@@ -240,7 +242,7 @@ private fun CallsContent(
navController: NavController, navController: NavController,
viewModel: ViewModel, viewModel: ViewModel,
contentPadding: PaddingValues, contentPadding: PaddingValues,
account: Account, ua: UserAgent,
callHistory: MutableState<List<CallRow>> callHistory: MutableState<List<CallRow>>
) { ) {
Column( Column(
@@ -250,8 +252,8 @@ private fun CallsContent(
.padding(bottom = 16.dp), .padding(bottom = 16.dp),
verticalArrangement = Arrangement.spacedBy(12.dp) verticalArrangement = Arrangement.spacedBy(12.dp)
) { ) {
Account(account) Account(ua.account)
Calls(ctx, navController, viewModel, account, callHistory) Calls(ctx, navController, viewModel, ua, callHistory)
} }
} }
@@ -272,7 +274,7 @@ private fun Calls(
ctx: Context, ctx: Context,
navController: NavController, navController: NavController,
viewModel: ViewModel, viewModel: ViewModel,
account: Account, ua: UserAgent,
callHistory: MutableState<List<CallRow>> callHistory: MutableState<List<CallRow>>
) { ) {
@@ -340,16 +342,10 @@ private fun Calls(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.combinedClickable( modifier = Modifier.combinedClickable(
onClick = { onClick = {
val aor = account.aor
val ua = UserAgent.ofAor(aor)
val intent = Intent(ctx, MainActivity::class.java) val intent = Intent(ctx, MainActivity::class.java)
if (ua != null) { intent.putExtra("uap", ua.uap)
intent.putExtra("uap", ua.uap) intent.putExtra("peer", peerUri)
intent.putExtra("peer", peerUri) val peerName = Utils.friendlyUri(ctx, peerUri, ua.account)
}
else
Log.w(TAG, "onClickListener did not find UA for $aor")
val peerName = Utils.friendlyUri(ctx, peerUri, account)
val contact = Contact.findContact(peerUri) val contact = Contact.findContact(peerUri)
if (contact is Contact.BaresipContact && contact.email.isNotEmpty()) if (contact is Contact.BaresipContact && contact.email.isNotEmpty())
message.value = String.format( message.value = String.format(
@@ -363,87 +359,29 @@ private fun Calls(
) )
secondButtonText.value = ctx.getString(R.string.call) secondButtonText.value = ctx.getString(R.string.call)
secondAction.value = { secondAction.value = {
if (ua != null) { handleIntent(ctx, viewModel, intent, "call")
val uris = if (contact is Contact.BaresipContact) { navController.navigate("main") {
if (ua.account.isMobile) popUpTo("main")
contact.uris.filter { it.startsWith("tel:") } launchSingleTop = true
else
contact.uris
} else {
listOf(peerUri)
}
if (uris.size > 1) {
CustomElements.selectItems.value = uris
CustomElements.selectItemAction.value = { index ->
intent.putExtra("peer", uris[index])
handleIntent(ctx, viewModel, intent, "call")
navController.navigate("main") {
popUpTo("main")
launchSingleTop = true
}
CustomElements.showSelectItemDialog.value = false
}
CustomElements.showSelectItemDialog.value = true
} else if (uris.size == 1) {
intent.putExtra("peer", uris[0])
handleIntent(ctx, viewModel, intent, "call")
navController.navigate("main") {
popUpTo("main")
launchSingleTop = true
}
}
} }
} }
thirdButtonText.value = ctx.getString(R.string.send_message) thirdButtonText.value = ctx.getString(R.string.send_message)
thirdAction.value = { thirdAction.value = {
if (ua != null) { if (ua.account.isMobile) {
val uris = if (contact is Contact.BaresipContact) { if (!Utils.isDefaultSmsApp(ctx)) {
if (ua.account.isMobile) alertTitle.value = ctx.getString(R.string.notice)
contact.uris.filter { it.startsWith("tel:") } alertMessage.value = ctx.getString(R.string.enable_default_messaging)
else showAlert.value = true
contact.uris
} else {
listOf(peerUri)
} }
else {
if (uris.size > 1) { handleIntent(ctx, viewModel, intent, "message")
CustomElements.selectItems.value = uris navController.navigateUp()
CustomElements.selectItemAction.value = { index ->
intent.putExtra("peer", uris[index])
if (ua.account.isMobile) {
if (!Utils.isDefaultSmsApp(ctx)) {
alertTitle.value = ctx.getString(R.string.notice)
alertMessage.value = ctx.getString(R.string.enable_default_messaging)
showAlert.value = true
} else {
handleIntent(ctx, viewModel, intent, "message")
navController.navigateUp()
}
} else {
handleIntent(ctx, viewModel, intent, "message")
navController.navigateUp()
}
CustomElements.showSelectItemDialog.value = false
}
CustomElements.showSelectItemDialog.value = true
} else if (uris.size == 1) {
intent.putExtra("peer", uris[0])
if (ua.account.isMobile) {
if (!Utils.isDefaultSmsApp(ctx)) {
alertTitle.value = ctx.getString(R.string.notice)
alertMessage.value = ctx.getString(R.string.enable_default_messaging)
showAlert.value = true
} else {
handleIntent(ctx, viewModel, intent, "message")
navController.navigateUp()
}
} else {
handleIntent(ctx, viewModel, intent, "message")
navController.navigateUp()
}
} }
} }
else {
handleIntent(ctx, viewModel, intent, "message")
navController.navigateUp()
}
} }
if (contact is Contact.BaresipContact && contact.email.isNotEmpty()) { if (contact is Contact.BaresipContact && contact.email.isNotEmpty()) {
lastButtonText.value = ctx.getString(R.string.send_email) lastButtonText.value = ctx.getString(R.string.send_email)
@@ -457,13 +395,13 @@ private fun Calls(
Log.e(TAG, "Failed to start email activity: ${e.message}") Log.e(TAG, "Failed to start email activity: ${e.message}")
} }
} }
} else {
lastButtonText.value = ""
} }
else
lastButtonText.value = ""
showDialog.value = true showDialog.value = true
}, },
onLongClick = { onLongClick = {
val peerName = Utils.friendlyUri(ctx, peerUri, account) val peerName = Utils.friendlyUri(ctx, peerUri, ua.account)
val callText: String = if (callRow.details.size > 1) val callText: String = if (callRow.details.size > 1)
ctx.getString(R.string.calls_calls) ctx.getString(R.string.calls_calls)
else else
@@ -550,7 +488,7 @@ private fun Calls(
} }
if (count > 3) if (count > 3)
Text("...", color = MaterialTheme.colorScheme.onBackground) Text("...", color = MaterialTheme.colorScheme.onBackground)
Text(text = Utils.friendlyUri(ctx, peerUri, account), Text(text = Utils.friendlyUri(ctx, peerUri, ua.account),
modifier = Modifier.padding(start = 8.dp), modifier = Modifier.padding(start = 8.dp),
fontSize = 18.sp, fontSize = 18.sp,
maxLines = 1, maxLines = 1,
@@ -664,7 +664,6 @@ private fun ContactsContent(
contact.uris.filter { it.startsWith("tel:") } contact.uris.filter { it.startsWith("tel:") }
else else
contact.uris contact.uris
if (uris.size > 1) { if (uris.size > 1) {
CustomElements.selectItems.value = uris CustomElements.selectItems.value = uris
CustomElements.selectItemAction.value = { index: Int -> CustomElements.selectItemAction.value = { index: Int ->