From fbffa5cb696dcd1c16db046b7126c799704b72ca Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Fri, 24 Jul 2026 09:49:36 +0300 Subject: [PATCH] Added icons to main screen menu items --- .../com/tutpro/baresip/CustomElements.kt | 42 ++++++++++++++++--- .../kotlin/com/tutpro/baresip/MainScreen.kt | 24 +++++++++-- 2 files changed, 57 insertions(+), 9 deletions(-) diff --git a/app/src/main/kotlin/com/tutpro/baresip/CustomElements.kt b/app/src/main/kotlin/com/tutpro/baresip/CustomElements.kt index c407696f..f6426dd5 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/CustomElements.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/CustomElements.kt @@ -72,6 +72,7 @@ import androidx.compose.ui.platform.SoftwareKeyboardController import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.TextAlign @@ -79,6 +80,12 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.window.DialogProperties +import kotlin.jvm.JvmName + +data class MenuItem( + val text: String, + val icon: ImageVector? = null +) object CustomElements { @@ -118,28 +125,53 @@ object CustomElements { } @Composable + @JvmName("DropdownMenuString") fun DropdownMenu( expanded: Boolean, onDismissRequest: () -> Unit, items: List, onItemClick: (String) -> Unit + ) { + DropdownMenu( + expanded = expanded, + onDismissRequest = onDismissRequest, + menuItems = items.map { MenuItem(it) }, + onItemClick = onItemClick + ) + } + + @Composable + fun DropdownMenu( + expanded: Boolean, + onDismissRequest: () -> Unit, + menuItems: List, + onItemClick: (String) -> Unit ) { DropdownMenu( expanded = expanded, onDismissRequest = onDismissRequest, containerColor = MaterialTheme.colorScheme.surfaceVariant ) { - val itemsIterator = items.iterator() + val itemsIterator = menuItems.iterator() while (itemsIterator.hasNext()) { - val item = itemsIterator.next() + val menuItem = itemsIterator.next() DropdownMenuItem( text = { Text( - text = item, + text = menuItem.text, color = MaterialTheme.colorScheme.onSurfaceVariant, fontSize = 16.sp - ) }, - onClick = { onItemClick(item) } + ) + }, + leadingIcon = { + if (menuItem.icon != null) + Icon( + imageVector = menuItem.icon, + contentDescription = null, + tint = MaterialTheme.colorScheme.onSurfaceVariant + ) + }, + onClick = { onItemClick(menuItem.text) } ) if (itemsIterator.hasNext()) HorizontalDivider(color = MaterialTheme.colorScheme.outlineVariant) diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainScreen.kt b/app/src/main/kotlin/com/tutpro/baresip/MainScreen.kt index 0ce67fa5..b72a1c80 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainScreen.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainScreen.kt @@ -62,6 +62,8 @@ import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.Chat +import androidx.compose.material.icons.automirrored.filled.Logout +import androidx.compose.material.icons.automirrored.outlined.ReceiptLong import androidx.compose.material.icons.filled.AddIcCall import androidx.compose.material.icons.filled.Call import androidx.compose.material.icons.filled.CallEnd @@ -81,8 +83,16 @@ import androidx.compose.material.icons.filled.VoiceOverOff import androidx.compose.material.icons.filled.Voicemail import androidx.compose.material.icons.outlined.ArrowCircleRight import androidx.compose.material.icons.outlined.Clear +import androidx.compose.material.icons.outlined.Download import androidx.compose.material.icons.outlined.Info +import androidx.compose.material.icons.outlined.ManageAccounts import androidx.compose.material.icons.outlined.PauseCircle +import androidx.compose.material.icons.outlined.Receipt +import androidx.compose.material.icons.outlined.ReceiptLong +import androidx.compose.material.icons.outlined.RestartAlt +import androidx.compose.material.icons.outlined.Settings +import androidx.compose.material.icons.outlined.Terminal +import androidx.compose.material.icons.outlined.Upload import androidx.compose.material3.BasicAlertDialog import androidx.compose.material3.ButtonColors import androidx.compose.material3.Card @@ -673,10 +683,16 @@ private fun TopAppBar( DropdownMenu( expanded = menuExpanded, onDismissRequest = { menuExpanded = false }, - items = if (VERSION.SDK_INT >= 29) - listOf(about, settings, accounts, backup, restore, logcat, restart, quit) - else - listOf(about, settings, accounts, backup, restore, restart, quit), + menuItems = listOfNotNull( + MenuItem(about, Icons.Outlined.Info), + MenuItem(settings, Icons.Outlined.Settings), + MenuItem(accounts, Icons.Outlined.ManageAccounts), + MenuItem(backup, Icons.Outlined.Upload), + MenuItem(restore, Icons.Outlined.Download), + if (VERSION.SDK_INT >= 29) MenuItem(logcat, Icons.AutoMirrored.Outlined.ReceiptLong) else null, + MenuItem(restart, Icons.Outlined.RestartAlt), + MenuItem(quit, Icons.AutoMirrored.Filled.Logout) + ), onItemClick = { selectedItem -> menuExpanded = false when (selectedItem) {