From 9219796c6b6a464dfe9da22ae009fe720e5cdbc0 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Sat, 17 Sep 2022 00:29:41 -0500 Subject: [PATCH] Restore trailing icon on tag row --- .../com/todoroo/astrid/tags/TagsControlSet.kt | 6 ++- app/src/main/java/org/tasks/compose/Chip.kt | 41 ++++++++++++++++++- .../java/org/tasks/compose/edit/TagsRow.kt | 8 +++- 3 files changed, 51 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.kt b/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.kt index 2d9c54e60..cc38e0bd9 100644 --- a/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.kt +++ b/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.kt @@ -7,6 +7,7 @@ import android.view.ViewGroup import androidx.compose.ui.platform.ComposeView import com.google.android.material.composethemeadapter.MdcTheme import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.flow.update import org.tasks.R import org.tasks.compose.collectAsStateLifecycleAware import org.tasks.compose.edit.TagsRow @@ -32,7 +33,10 @@ class TagsControlSet : TaskEditControlFragment() { TagsRow( tags = viewModel.selectedTags.collectAsStateLifecycleAware().value, colorProvider = { chipProvider.getColor(it) }, - onClick = this@TagsControlSet::onRowClick + onClick = this@TagsControlSet::onRowClick, + onClear = { tag -> + viewModel.selectedTags.update { ArrayList(it.minus(tag)) } + }, ) } } diff --git a/app/src/main/java/org/tasks/compose/Chip.kt b/app/src/main/java/org/tasks/compose/Chip.kt index 0a4307841..70f904c7f 100644 --- a/app/src/main/java/org/tasks/compose/Chip.kt +++ b/app/src/main/java/org/tasks/compose/Chip.kt @@ -3,19 +3,25 @@ package org.tasks.compose import android.content.res.Configuration import androidx.annotation.DrawableRes import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.defaultMinSize import androidx.compose.foundation.layout.size import androidx.compose.material.* +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Cancel import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.google.android.material.composethemeadapter.MdcTheme +import org.tasks.R import org.tasks.themes.CustomIcons @Composable @@ -27,12 +33,14 @@ fun Chip( showIcon: Boolean, onClick: () -> Unit, colorProvider: (Int) -> Int, + clear: (() -> Unit)? = null, ) { Chip( color = Color(colorProvider(theme)), text = if (showText) name else null, icon = if (showIcon && icon != null) icon else null, onClick = onClick, + clear = clear, ) } @@ -43,11 +51,13 @@ fun Chip( icon: Int? = null, color: Color, onClick: () -> Unit = {}, + clear: (() -> Unit)? = null, ) { CompositionLocalProvider( LocalMinimumTouchTargetEnforcement provides false ) { - Chip( + FilterChip( + selected = false, onClick = onClick, border = BorderStroke(1.dp, color = color), leadingIcon = { @@ -55,8 +65,20 @@ fun Chip( ChipIcon(iconRes = icon) } }, + trailingIcon = { + clear?.let { onClearClick -> + Icon( + imageVector = Icons.Outlined.Cancel, + modifier = Modifier + .size(16.dp) + .alpha(ContentAlpha.medium) + .clickable { onClearClick() }, + contentDescription = stringResource(id = R.string.delete), + ) + } + }, modifier = Modifier.defaultMinSize(minHeight = 26.dp), - colors = ChipDefaults.chipColors( + colors = ChipDefaults.outlinedFilterChipColors( backgroundColor = color.copy(alpha = .1f), contentColor = MaterialTheme.colors.onSurface ), @@ -101,6 +123,21 @@ fun TasksChipIconAndTextPreview() { } } +@ExperimentalComposeUiApi +@Preview(showBackground = true) +@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) +@Composable +fun TasksChipIconTextAndClearPreview() { + MdcTheme { + Chip( + text = "Home", + icon = CustomIcons.getIconResId(CustomIcons.LABEL), + color = Color.Red, + clear = {}, + ) + } +} + @ExperimentalComposeUiApi @Preview(showBackground = true) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) diff --git a/app/src/main/java/org/tasks/compose/edit/TagsRow.kt b/app/src/main/java/org/tasks/compose/edit/TagsRow.kt index 065905e4b..4a889f5bd 100644 --- a/app/src/main/java/org/tasks/compose/edit/TagsRow.kt +++ b/app/src/main/java/org/tasks/compose/edit/TagsRow.kt @@ -22,6 +22,7 @@ fun TagsRow( tags: List, colorProvider: (Int) -> Int, onClick: () -> Unit, + onClear: (TagData) -> Unit, ) { TaskEditRow( iconRes = R.drawable.ic_outline_label_24px, @@ -42,6 +43,7 @@ fun TagsRow( showIcon = true, onClick = onClick, colorProvider = colorProvider, + clear = { onClear(tag) }, ) } } @@ -60,6 +62,7 @@ fun NoTags() { tags = emptyList(), colorProvider = { 0 }, onClick = {}, + onClear = {}, ) } } @@ -78,6 +81,7 @@ fun SingleTag() { ), colorProvider = { it }, onClick = {}, + onClear = {}, ) } } @@ -95,7 +99,8 @@ fun BunchOfTags() { TagData("Five"), ), colorProvider = { it }, - onClick = {} + onClick = {}, + onClear = {}, ) } } @@ -113,6 +118,7 @@ fun TagWithReallyLongName() { ), colorProvider = { it }, onClick = {}, + onClear = {}, ) } }