package eu.kanade.presentation.components import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material.ContentAlpha import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.CheckBox import androidx.compose.material.icons.rounded.CheckBoxOutlineBlank import androidx.compose.material.icons.rounded.DisabledByDefault import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.ExposedDropdownMenuBox import androidx.compose.material3.ExposedDropdownMenuDefaults import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedTextField 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.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import tachiyomi.domain.manga.model.TriStateFilter import tachiyomi.presentation.core.components.SettingsItemsPaddings @Composable fun TriStateItem( label: String, state: TriStateFilter, enabled: Boolean = true, onClick: ((TriStateFilter) -> Unit)?, ) { Row( modifier = Modifier .clickable( enabled = enabled && onClick != null, onClick = { when (state) { TriStateFilter.DISABLED -> onClick?.invoke(TriStateFilter.ENABLED_IS) TriStateFilter.ENABLED_IS -> onClick?.invoke(TriStateFilter.ENABLED_NOT) TriStateFilter.ENABLED_NOT -> onClick?.invoke(TriStateFilter.DISABLED) } }, ) .fillMaxWidth() .padding(horizontal = SettingsItemsPaddings.Horizontal, vertical = SettingsItemsPaddings.Vertical), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(24.dp), ) { val stateAlpha = if (enabled && onClick != null) 1f else ContentAlpha.disabled Icon( imageVector = when (state) { TriStateFilter.DISABLED -> Icons.Rounded.CheckBoxOutlineBlank TriStateFilter.ENABLED_IS -> Icons.Rounded.CheckBox TriStateFilter.ENABLED_NOT -> Icons.Rounded.DisabledByDefault }, contentDescription = null, tint = if (!enabled || state == TriStateFilter.DISABLED) { MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = stateAlpha) } else { when (onClick) { null -> MaterialTheme.colorScheme.onSurface.copy(alpha = ContentAlpha.disabled) else -> MaterialTheme.colorScheme.primary } }, ) Text( text = label, color = MaterialTheme.colorScheme.onSurface.copy(alpha = stateAlpha), style = MaterialTheme.typography.bodyMedium, ) } } @Composable fun SelectItem( label: String, options: Array, selectedIndex: Int, onSelect: (Int) -> Unit, ) { var expanded by remember { mutableStateOf(false) } ExposedDropdownMenuBox( expanded = expanded, onExpandedChange = { expanded = !expanded }, ) { OutlinedTextField( modifier = Modifier .menuAnchor() .fillMaxWidth() .padding(horizontal = SettingsItemsPaddings.Horizontal, vertical = SettingsItemsPaddings.Vertical), label = { Text(text = label) }, value = options[selectedIndex].toString(), onValueChange = {}, readOnly = true, singleLine = true, trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon( expanded = expanded, ) }, colors = ExposedDropdownMenuDefaults.textFieldColors(), ) ExposedDropdownMenu( modifier = Modifier.exposedDropdownSize(matchTextFieldWidth = true), expanded = expanded, onDismissRequest = { expanded = false }, ) { options.forEachIndexed { index, text -> DropdownMenuItem( text = { Text(text.toString()) }, onClick = { onSelect(index) expanded = false }, ) } } } }