From 8295d524dd9e34bca2841fb7413a24ace8e1993f Mon Sep 17 00:00:00 2001 From: Kyle Corry Date: Thu, 9 Jan 2025 16:35:48 -0500 Subject: [PATCH] Show multiple tags on a list item Signed-off-by: Kyle Corry --- build.gradle.kts | 2 +- .../andromeda/views/list/AndromedaListView.kt | 41 +++++++++++++------ .../res/layout/andromeda_view_list_item.xml | 12 +++--- 3 files changed, 36 insertions(+), 19 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index ffe9c26b..3ac32d75 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,7 @@ import com.vanniktech.maven.publish.AndroidSingleVariantLibrary import com.vanniktech.maven.publish.SonatypeHost -val versionName = "12.2.0" +val versionName = "12.3.0" val groupId = "com.kylecorry.andromeda" buildscript { diff --git a/views/src/main/java/com/kylecorry/andromeda/views/list/AndromedaListView.kt b/views/src/main/java/com/kylecorry/andromeda/views/list/AndromedaListView.kt index 91a51a02..a037b605 100644 --- a/views/src/main/java/com/kylecorry/andromeda/views/list/AndromedaListView.kt +++ b/views/src/main/java/com/kylecorry/andromeda/views/list/AndromedaListView.kt @@ -7,10 +7,12 @@ import android.view.View import androidx.core.view.isVisible import androidx.recyclerview.widget.RecyclerView import com.google.android.flexbox.FlexboxLayout +import com.kylecorry.andromeda.core.system.Resources import com.kylecorry.andromeda.core.ui.Colors import com.kylecorry.andromeda.list.ListView import com.kylecorry.andromeda.pickers.Pickers import com.kylecorry.andromeda.views.R +import com.kylecorry.andromeda.views.badge.Badge import com.kylecorry.andromeda.views.databinding.AndromedaViewListItemBinding class AndromedaListView(context: Context, attrs: AttributeSet?) : RecyclerView(context, attrs) { @@ -36,21 +38,34 @@ class AndromedaListView(context: Context, attrs: AttributeSet?) : RecyclerView(c binding.description.isVisible = listItem.subtitle != null if (listItem.tags.isNotEmpty()) { - // TODO: Allow multiple - val tag = listItem.tags.first() - binding.tag.isVisible = true - val foregroundColor = - Colors.mostContrastingColor(Color.WHITE, Color.BLACK, tag.color) - binding.tag.statusImage.isVisible = tag.icon != null - tag.icon?.let { - it.apply(binding.tag.statusImage) - Colors.setImageColor(binding.tag.statusImage, foregroundColor) + binding.tags.isVisible = true + val margin = Resources.dp(context, 8f).toInt() + val tagViews = listItem.tags.map { + Badge(view.context, null).apply { + val foregroundColor = + Colors.mostContrastingColor(Color.WHITE, Color.BLACK, it.color) + statusImage.isVisible = it.icon != null + it.icon?.let { + it.apply(statusImage) + Colors.setImageColor(statusImage, foregroundColor) + } + setStatusText(it.text) + statusText.setTextColor(foregroundColor) + setBackgroundTint(it.color) + layoutParams = FlexboxLayout.LayoutParams( + FlexboxLayout.LayoutParams.WRAP_CONTENT, + FlexboxLayout.LayoutParams.WRAP_CONTENT + ).apply { + setMargins(0, 0, margin, margin) + } + } + } + binding.tags.removeAllViews() + tagViews.forEach { + binding.tags.addView(it) } - binding.tag.setStatusText(tag.text) - binding.tag.statusText.setTextColor(foregroundColor) - binding.tag.setBackgroundTint(tag.color) } else { - binding.tag.isVisible = false + binding.tags.isVisible = false } binding.trailingText.isVisible = listItem.trailingText != null diff --git a/views/src/main/res/layout/andromeda_view_list_item.xml b/views/src/main/res/layout/andromeda_view_list_item.xml index 253fbe44..8e970874 100644 --- a/views/src/main/res/layout/andromeda_view_list_item.xml +++ b/views/src/main/res/layout/andromeda_view_list_item.xml @@ -32,13 +32,15 @@ app:flexDirection="column" app:layout_flexGrow="1"> - + tools:visibility="visible" + app:alignItems="center" + app:flexDirection="row" + app:flexWrap="wrap" />