Added icons to main screen menu items

This commit is contained in:
Juha Heinanen
2026-07-24 09:49:36 +03:00
parent 8f83345575
commit fbffa5cb69
2 changed files with 57 additions and 9 deletions

View File

@ -72,6 +72,7 @@ import androidx.compose.ui.platform.SoftwareKeyboardController
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.input.KeyboardType 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.PasswordVisualTransformation
import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.text.style.TextAlign 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.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import androidx.compose.ui.window.DialogProperties import androidx.compose.ui.window.DialogProperties
import kotlin.jvm.JvmName
data class MenuItem(
val text: String,
val icon: ImageVector? = null
)
object CustomElements { object CustomElements {
@ -118,28 +125,53 @@ object CustomElements {
} }
@Composable @Composable
@JvmName("DropdownMenuString")
fun DropdownMenu( fun DropdownMenu(
expanded: Boolean, expanded: Boolean,
onDismissRequest: () -> Unit, onDismissRequest: () -> Unit,
items: List<String>, items: List<String>,
onItemClick: (String) -> Unit onItemClick: (String) -> Unit
) {
DropdownMenu(
expanded = expanded,
onDismissRequest = onDismissRequest,
menuItems = items.map { MenuItem(it) },
onItemClick = onItemClick
)
}
@Composable
fun DropdownMenu(
expanded: Boolean,
onDismissRequest: () -> Unit,
menuItems: List<MenuItem>,
onItemClick: (String) -> Unit
) { ) {
DropdownMenu( DropdownMenu(
expanded = expanded, expanded = expanded,
onDismissRequest = onDismissRequest, onDismissRequest = onDismissRequest,
containerColor = MaterialTheme.colorScheme.surfaceVariant containerColor = MaterialTheme.colorScheme.surfaceVariant
) { ) {
val itemsIterator = items.iterator() val itemsIterator = menuItems.iterator()
while (itemsIterator.hasNext()) { while (itemsIterator.hasNext()) {
val item = itemsIterator.next() val menuItem = itemsIterator.next()
DropdownMenuItem( DropdownMenuItem(
text = { text = {
Text( Text(
text = item, text = menuItem.text,
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant,
fontSize = 16.sp 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()) if (itemsIterator.hasNext())
HorizontalDivider(color = MaterialTheme.colorScheme.outlineVariant) HorizontalDivider(color = MaterialTheme.colorScheme.outlineVariant)

View File

@ -62,6 +62,8 @@ import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.Chat 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.AddIcCall
import androidx.compose.material.icons.filled.Call import androidx.compose.material.icons.filled.Call
import androidx.compose.material.icons.filled.CallEnd 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.filled.Voicemail
import androidx.compose.material.icons.outlined.ArrowCircleRight import androidx.compose.material.icons.outlined.ArrowCircleRight
import androidx.compose.material.icons.outlined.Clear 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.Info
import androidx.compose.material.icons.outlined.ManageAccounts
import androidx.compose.material.icons.outlined.PauseCircle 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.BasicAlertDialog
import androidx.compose.material3.ButtonColors import androidx.compose.material3.ButtonColors
import androidx.compose.material3.Card import androidx.compose.material3.Card
@ -673,10 +683,16 @@ private fun TopAppBar(
DropdownMenu( DropdownMenu(
expanded = menuExpanded, expanded = menuExpanded,
onDismissRequest = { menuExpanded = false }, onDismissRequest = { menuExpanded = false },
items = if (VERSION.SDK_INT >= 29) menuItems = listOfNotNull(
listOf(about, settings, accounts, backup, restore, logcat, restart, quit) MenuItem(about, Icons.Outlined.Info),
else MenuItem(settings, Icons.Outlined.Settings),
listOf(about, settings, accounts, backup, restore, restart, quit), 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 -> onItemClick = { selectedItem ->
menuExpanded = false menuExpanded = false
when (selectedItem) { when (selectedItem) {