package eu.kanade.presentation.components import androidx.compose.foundation.layout.Column import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.MoreVert import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import eu.kanade.tachiyomi.R @Composable fun AppBarTitle( title: String?, subtitle: String? = null, ) { val subtitleTextStyle = MaterialTheme.typography.bodyMedium Column { title?.let { Text( text = it, maxLines = 1, overflow = TextOverflow.Ellipsis, ) } subtitle?.let { Text( text = it, style = subtitleTextStyle, maxLines = 1, overflow = TextOverflow.Ellipsis, ) } } } @Composable fun AppBarActions( actions: List, ) { var showMenu by remember { mutableStateOf(false) } actions.filterIsInstance().map { IconButton( onClick = it.onClick, enabled = it.isEnabled, ) { Icon( imageVector = it.icon, contentDescription = it.title, ) } } val overflowActions = actions.filterIsInstance() if (overflowActions.isNotEmpty()) { IconButton(onClick = { showMenu = !showMenu }) { Icon(Icons.Default.MoreVert, contentDescription = stringResource(R.string.label_more)) } DropdownMenu( expanded = showMenu, onDismissRequest = { showMenu = false } ) { overflowActions.map { DropdownMenuItem( onClick = { it.onClick() showMenu = false }, text = { Text(it.title) }, ) } } } } object AppBar { interface AppBarAction data class Action( val title: String, val icon: ImageVector, val onClick: () -> Unit, val isEnabled: Boolean = true, ) : AppBarAction data class OverflowAction( val title: String, val onClick: () -> Unit, ) : AppBarAction }