diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/model/QuickFilter.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/model/QuickFilter.kt index c91e32810..59250e2ba 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/model/QuickFilter.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/model/QuickFilter.kt @@ -9,5 +9,6 @@ fun ListFilterOption.toChipModel(isChecked: Boolean) = ChipsView.ChipModel( icon = iconResId, iconData = getIconData(), isChecked = isChecked, + counter = if (this is ListFilterOption.Branch) chaptersCount else 0, data = this, ) 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 0552599cf..4b4c33540 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 @@ -1,12 +1,17 @@ package org.koitharu.kotatsu.core.ui.widgets import android.content.Context +import android.graphics.Color +import android.text.style.ForegroundColorSpan +import android.text.style.RelativeSizeSpan import android.util.AttributeSet import android.view.View import androidx.annotation.ColorRes import androidx.annotation.DrawableRes import androidx.annotation.StringRes import androidx.core.content.ContextCompat +import androidx.core.text.buildSpannedString +import androidx.core.text.inSpans import androidx.core.view.children import androidx.lifecycle.findViewTreeLifecycleOwner import coil3.ImageLoader @@ -27,6 +32,7 @@ import dagger.hilt.android.AndroidEntryPoint import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.ui.image.ChipIconTarget import org.koitharu.kotatsu.core.util.ext.enqueueWith +import org.koitharu.kotatsu.core.util.ext.getThemeColor import org.koitharu.kotatsu.core.util.ext.setProgressIcon import org.koitharu.kotatsu.parsers.util.ifZero import javax.inject.Inject @@ -116,6 +122,7 @@ class ChipsView @JvmOverloads constructor( @DrawableRes val icon: Int = 0, val iconData: Any? = null, @ColorRes val tint: Int = 0, + val counter: Int = 0, val isChecked: Boolean = false, val isLoading: Boolean = false, val isDropdown: Boolean = false, @@ -147,7 +154,28 @@ class ChipsView @JvmOverloads constructor( } this.model = model - if (model.titleResId == 0) { + if (model.counter > 0) { + text = buildSpannedString { + if (model.titleResId == 0) { + append(model.title) + } else { + append(context.getString(model.titleResId)) + } + append(' ') + append(' ') + inSpans( + ForegroundColorSpan( + context.getThemeColor( + android.R.attr.textColorSecondary, + Color.LTGRAY, + ), + ), + RelativeSizeSpan(0.74f), + ) { + append(model.counter.toString()) + } + } + } else if (model.titleResId == 0) { text = model.title } else { setText(model.titleResId) diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/pager/ChaptersPagesViewModel.kt b/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/pager/ChaptersPagesViewModel.kt index 1bf211756..88b743d79 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/pager/ChaptersPagesViewModel.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/details/ui/pager/ChaptersPagesViewModel.kt @@ -134,9 +134,14 @@ abstract class ChaptersPagesViewModel( mangaDetails, selectedBranch, ) { details, branch -> - val branches = details?.chapters?.keys?.sortedWithSafe(LocaleStringComparator()).orEmpty() + val branches = details?.chapters?.toList()?.sortedWithSafe( + compareBy(LocaleStringComparator()) { it.first }, + ).orEmpty() if (branches.size > 1) { - branches.map { ListFilterOption.Branch(it).toChipModel(it == branch) } + branches.map { + val option = ListFilterOption.Branch(titleText = it.first, chaptersCount = it.second.size) + option.toChipModel(isChecked = it.first == branch) + } } else { emptyList() } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/list/domain/ListFilterOption.kt b/app/src/main/kotlin/org/koitharu/kotatsu/list/domain/ListFilterOption.kt index 8239ca66c..38752e50e 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/list/domain/ListFilterOption.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/list/domain/ListFilterOption.kt @@ -62,6 +62,7 @@ sealed interface ListFilterOption { data class Branch( override val titleText: String?, + val chaptersCount: Int, ) : ListFilterOption { override val titleResId: Int