From 947de6c7c9bf9f23d989efc247d112bd3c60a982 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Tue, 11 Mar 2025 08:44:55 +0200 Subject: [PATCH] Fix tags highlighting --- .../koitharu/kotatsu/core/ui/widgets/ChipsView.kt | 12 ++++++++++++ .../koitharu/kotatsu/details/ui/DetailsActivity.kt | 12 ++++-------- .../koitharu/kotatsu/details/ui/DetailsViewModel.kt | 4 ++++ 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/widgets/ChipsView.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/widgets/ChipsView.kt index 2805778ed..599879360 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/widgets/ChipsView.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/widgets/ChipsView.kt @@ -6,6 +6,7 @@ import android.view.View import androidx.annotation.ColorRes import androidx.annotation.DrawableRes import androidx.annotation.StringRes +import androidx.core.content.ContextCompat import androidx.core.view.children import coil3.ImageLoader import coil3.request.Disposable @@ -125,6 +126,9 @@ class ChipsView @JvmOverloads constructor( private var model: ChipModel? = null private var imageRequest: Disposable? = null + private val defaultStrokeColor = chipStrokeColor + private val defaultTextColor = textColors + init { val drawable = ChipDrawable.createFromAttributes(context, null, 0, chipStyle) setChipDrawable(drawable) @@ -154,6 +158,14 @@ class ChipsView @JvmOverloads constructor( isChecked = false isCheckable = false } + if (model.tint == 0) { + chipStrokeColor = defaultStrokeColor + setTextColor(defaultTextColor) + } else { + val tint = ContextCompat.getColorStateList(context, model.tint) + chipStrokeColor = tint + setTextColor(tint) + } bindIcon(model) isCheckedIconVisible = model.isChecked isCloseIconVisible = if (model.isCloseable || model.isDropdown) { diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsActivity.kt b/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsActivity.kt index 6f9a81804..48545d13e 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsActivity.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsActivity.kt @@ -94,7 +94,6 @@ import org.koitharu.kotatsu.details.ui.model.HistoryInfo import org.koitharu.kotatsu.details.ui.scrobbling.ScrobblingItemDecoration import org.koitharu.kotatsu.details.ui.scrobbling.ScrollingInfoAdapter import org.koitharu.kotatsu.download.ui.worker.DownloadStartedObserver -import org.koitharu.kotatsu.list.domain.MangaListMapper import org.koitharu.kotatsu.list.domain.ReadingProgress import org.koitharu.kotatsu.list.ui.adapter.ListItemType import org.koitharu.kotatsu.list.ui.adapter.mangaGridItemAD @@ -124,9 +123,6 @@ class DetailsActivity : @Inject lateinit var coil: ImageLoader - @Inject - lateinit var listMapper: MangaListMapper - private val viewModel: DetailsViewModel by viewModels() private lateinit var menuProvider: DetailsMenuProvider private lateinit var infoBinding: LayoutDetailsTableBinding @@ -184,6 +180,7 @@ class DetailsActivity : val menuInvalidator = MenuInvalidator(this) viewModel.isStatsAvailable.observe(this, menuInvalidator) viewModel.remoteManga.observe(this, menuInvalidator) + viewModel.tags.observe(this, ::onTagsChanged) viewModel.branches.observe(this) { val branch = it.singleOrNull() infoBinding.textViewTranslation.textAndVisible = branch?.name @@ -457,7 +454,6 @@ class DetailsActivity : .allowRgb565(true) .enqueueWith(coil) } - bindTags(manga) title = manga.title invalidateOptionsMenu() } @@ -501,9 +497,9 @@ class DetailsActivity : progress.isVisible = info.history != null } - private fun bindTags(manga: Manga) { - viewBinding.chipsTags.isVisible = manga.tags.isNotEmpty() - viewBinding.chipsTags.setChips(listMapper.mapTags(manga.tags)) + private fun onTagsChanged(tags: Collection) { + viewBinding.chipsTags.isVisible = tags.isNotEmpty() + viewBinding.chipsTags.setChips(tags) } private fun loadCover(imageUrl: String?) { diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsViewModel.kt b/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsViewModel.kt index 0eb38cd40..48ef798b1 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsViewModel.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/DetailsViewModel.kt @@ -152,6 +152,10 @@ class DetailsViewModel @Inject constructor( } }.stateIn(viewModelScope + Dispatchers.Default, SharingStarted.Lazily, emptyList()) + val tags = manga.mapLatest { + mangaListMapper.mapTags(it?.tags.orEmpty()) + }.stateIn(viewModelScope + Dispatchers.Default, SharingStarted.Eagerly, emptyList()) + val branches: StateFlow> = combine( mangaDetails, selectedBranch,