Restore trailing icon on tag row

pull/2004/head
Alex Baker 3 years ago
parent f68ef7cbe5
commit 9219796c6b

@ -7,6 +7,7 @@ import android.view.ViewGroup
import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.ComposeView
import com.google.android.material.composethemeadapter.MdcTheme import com.google.android.material.composethemeadapter.MdcTheme
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.update
import org.tasks.R import org.tasks.R
import org.tasks.compose.collectAsStateLifecycleAware import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.compose.edit.TagsRow import org.tasks.compose.edit.TagsRow
@ -32,7 +33,10 @@ class TagsControlSet : TaskEditControlFragment() {
TagsRow( TagsRow(
tags = viewModel.selectedTags.collectAsStateLifecycleAware().value, tags = viewModel.selectedTags.collectAsStateLifecycleAware().value,
colorProvider = { chipProvider.getColor(it) }, colorProvider = { chipProvider.getColor(it) },
onClick = this@TagsControlSet::onRowClick onClick = this@TagsControlSet::onRowClick,
onClear = { tag ->
viewModel.selectedTags.update { ArrayList(it.minus(tag)) }
},
) )
} }
} }

@ -3,19 +3,25 @@ package org.tasks.compose
import android.content.res.Configuration import android.content.res.Configuration
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.defaultMinSize import androidx.compose.foundation.layout.defaultMinSize
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.* 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.Composable
import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.google.android.material.composethemeadapter.MdcTheme import com.google.android.material.composethemeadapter.MdcTheme
import org.tasks.R
import org.tasks.themes.CustomIcons import org.tasks.themes.CustomIcons
@Composable @Composable
@ -27,12 +33,14 @@ fun Chip(
showIcon: Boolean, showIcon: Boolean,
onClick: () -> Unit, onClick: () -> Unit,
colorProvider: (Int) -> Int, colorProvider: (Int) -> Int,
clear: (() -> Unit)? = null,
) { ) {
Chip( Chip(
color = Color(colorProvider(theme)), color = Color(colorProvider(theme)),
text = if (showText) name else null, text = if (showText) name else null,
icon = if (showIcon && icon != null) icon else null, icon = if (showIcon && icon != null) icon else null,
onClick = onClick, onClick = onClick,
clear = clear,
) )
} }
@ -43,11 +51,13 @@ fun Chip(
icon: Int? = null, icon: Int? = null,
color: Color, color: Color,
onClick: () -> Unit = {}, onClick: () -> Unit = {},
clear: (() -> Unit)? = null,
) { ) {
CompositionLocalProvider( CompositionLocalProvider(
LocalMinimumTouchTargetEnforcement provides false LocalMinimumTouchTargetEnforcement provides false
) { ) {
Chip( FilterChip(
selected = false,
onClick = onClick, onClick = onClick,
border = BorderStroke(1.dp, color = color), border = BorderStroke(1.dp, color = color),
leadingIcon = { leadingIcon = {
@ -55,8 +65,20 @@ fun Chip(
ChipIcon(iconRes = icon) 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), modifier = Modifier.defaultMinSize(minHeight = 26.dp),
colors = ChipDefaults.chipColors( colors = ChipDefaults.outlinedFilterChipColors(
backgroundColor = color.copy(alpha = .1f), backgroundColor = color.copy(alpha = .1f),
contentColor = MaterialTheme.colors.onSurface 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 @ExperimentalComposeUiApi
@Preview(showBackground = true) @Preview(showBackground = true)
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)

@ -22,6 +22,7 @@ fun TagsRow(
tags: List<TagData>, tags: List<TagData>,
colorProvider: (Int) -> Int, colorProvider: (Int) -> Int,
onClick: () -> Unit, onClick: () -> Unit,
onClear: (TagData) -> Unit,
) { ) {
TaskEditRow( TaskEditRow(
iconRes = R.drawable.ic_outline_label_24px, iconRes = R.drawable.ic_outline_label_24px,
@ -42,6 +43,7 @@ fun TagsRow(
showIcon = true, showIcon = true,
onClick = onClick, onClick = onClick,
colorProvider = colorProvider, colorProvider = colorProvider,
clear = { onClear(tag) },
) )
} }
} }
@ -60,6 +62,7 @@ fun NoTags() {
tags = emptyList(), tags = emptyList(),
colorProvider = { 0 }, colorProvider = { 0 },
onClick = {}, onClick = {},
onClear = {},
) )
} }
} }
@ -78,6 +81,7 @@ fun SingleTag() {
), ),
colorProvider = { it }, colorProvider = { it },
onClick = {}, onClick = {},
onClear = {},
) )
} }
} }
@ -95,7 +99,8 @@ fun BunchOfTags() {
TagData("Five"), TagData("Five"),
), ),
colorProvider = { it }, colorProvider = { it },
onClick = {} onClick = {},
onClear = {},
) )
} }
} }
@ -113,6 +118,7 @@ fun TagWithReallyLongName() {
), ),
colorProvider = { it }, colorProvider = { it },
onClick = {}, onClick = {},
onClear = {},
) )
} }
} }

Loading…
Cancel
Save