You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tasks/app/src/main/java/org/tasks/compose/edit/PriorityRow.kt

156 lines
4.5 KiB
Kotlin

package org.tasks.compose.edit
import android.content.res.Configuration
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material.LocalMinimumInteractiveComponentEnforcement
import androidx.compose.material.MaterialTheme
import androidx.compose.material.RadioButton
import androidx.compose.material.RadioButtonDefaults
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Alignment
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.google.android.material.composethemeadapter.MdcTheme
import com.todoroo.astrid.data.Task
import org.tasks.R
import org.tasks.compose.TaskEditRow
import org.tasks.themes.ColorProvider.Companion.priorityColor
@Composable
fun PriorityRow(
priority: Int,
onChangePriority: (Int) -> Unit,
desaturate: Boolean,
) {
TaskEditRow(
iconRes = R.drawable.ic_outline_flag_24px,
content = {
Priority(
selected = priority,
onClick = { onChangePriority(it) },
desaturate = desaturate,
)
},
)
}
@Composable
fun Priority(
selected: Int,
onClick: (Int) -> Unit = {},
desaturate: Boolean,
) {
Row(
modifier = Modifier
.fillMaxWidth()
.wrapContentHeight()
.padding(
end = dimensionResource(id = R.dimen.keyline_first)
),
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = stringResource(id = R.string.TEA_importance_label),
style = MaterialTheme.typography.body1,
modifier = Modifier.padding(end = 16.dp)
)
Spacer(modifier = Modifier.weight(1f))
Row(horizontalArrangement = Arrangement.SpaceBetween) {
for (i in Task.Priority.NONE downTo Task.Priority.HIGH) {
PriorityButton(
priority = i,
selected = selected,
onClick = onClick,
desaturate = desaturate,
)
}
}
}
}
@OptIn(ExperimentalMaterialApi::class)
@Composable
fun RowScope.PriorityButton(
@Task.Priority priority: Int,
selected: Int,
desaturate: Boolean,
onClick: (Int) -> Unit,
) {
val color = Color(
priorityColor(
priority = priority,
isDarkMode = isSystemInDarkTheme(),
desaturate = desaturate,
)
)
CompositionLocalProvider(
LocalMinimumInteractiveComponentEnforcement provides false,
) {
RadioButton(
selected = priority == selected,
onClick = { onClick(priority) },
colors = RadioButtonDefaults.colors(
selectedColor = color,
unselectedColor = color,
),
modifier = Modifier
.weight(1f)
.padding(vertical = 20.dp)
)
}
}
@ExperimentalComposeUiApi
@Preview(showBackground = true)
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
fun PriorityPreview() {
MdcTheme {
PriorityRow(
priority = Task.Priority.MEDIUM,
onChangePriority = {},
desaturate = true,
)
}
}
@ExperimentalComposeUiApi
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
fun PriorityPreviewNoDesaturate() {
MdcTheme {
PriorityRow(
priority = Task.Priority.MEDIUM,
onChangePriority = {},
desaturate = false,
)
}
}
@ExperimentalComposeUiApi
@Preview(locale = "de", widthDp = 320, showBackground = true)
@Composable
fun PriorityNarrowWidth() {
MdcTheme {
PriorityRow(
priority = Task.Priority.MEDIUM,
onChangePriority = {},
desaturate = false,
)
}
}