From e80bedf44558a04a79e066ce12735dd7ebae6625 Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Thu, 6 Nov 2025 14:39:37 -0700 Subject: [PATCH 1/2] Expandable tags --- .../ui/result/ResultFragmentPhone.kt | 2 +- .../lagradost/cloudstream3/utils/UIHelper.kt | 49 +++++++++++-------- 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt index 847b452e8ca..f15d2d3e502 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt @@ -808,7 +808,7 @@ open class ResultFragmentPhone : FullScreenPlayer() { } } - populateChips(resultTag, d.tags) + populateChips(resultTag, d.tags, expandable = true) resultComingSoon.isVisible = d.comingSoon resultDataHolder.isGone = d.comingSoon diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt index 0a7181881d2..87397490797 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt @@ -105,29 +105,38 @@ object UIHelper { fun populateChips( view: ChipGroup?, tags: List, - @StyleRes style: Int = R.style.ChipFilled + @StyleRes style: Int = R.style.ChipFilled, + expandable: Boolean = false ) { if (view == null) return - view.removeAllViews() val context = view.context ?: return - val maxTags = tags.take(10) // Limited because they are too much - - maxTags.forEach { tag -> - val chip = Chip(context) - val chipDrawable = ChipDrawable.createFromAttributes( - context, - null, - 0, - style - ) - chip.setChipDrawable(chipDrawable) - chip.text = tag - chip.isChecked = false - chip.isCheckable = false - chip.isFocusable = false - chip.isClickable = false - chip.setTextColor(context.colorFromAttribute(R.attr.white)) - view.addView(chip) + val maxVisible = 10 + var expanded = false + + fun render() { + view.removeAllViews() + val visibleTags = if (expanded) tags else tags.take(maxVisible) + + visibleTags.forEach { tag -> + val chip = Chip(context).apply { + setChipDrawable(ChipDrawable.createFromAttributes(context, null, 0, style)) + text = tag + isChecked = false + isCheckable = false + isFocusable = false + isClickable = false + setTextColor(context.colorFromAttribute(R.attr.white)) + } + view.addView(chip) + } + } + + render() + if (expandable && tags.size > maxVisible) { + view.setOnClickListener { + expanded = !expanded + render() + } } } From 164662740ba838562f579d0d32efd62d56d819d2 Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Sun, 21 Dec 2025 11:36:47 -0700 Subject: [PATCH 2/2] Use 15 tags on TV and emulator and make expandable on emulator --- .../ui/home/HomeParentItemAdapterPreview.kt | 8 ++++--- .../ui/result/ResultFragmentPhone.kt | 7 +++++- .../ui/result/ResultFragmentTv.kt | 8 ++++++- .../lagradost/cloudstream3/utils/UIHelper.kt | 23 ++++++++----------- 4 files changed, 28 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt index e6b82e47382..40e6da3e801 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt @@ -345,9 +345,11 @@ class HomeParentItemAdapterPreview( homePreviewText.text = item.name.html() populateChips( - homePreviewTags, - item.tags?.take(6) ?: emptyList(), - R.style.ChipFilledSemiTransparent + view = homePreviewTags, + tags = item.tags ?: emptyList(), + expandable = false, + initialVisibleLimit = 6, + style = R.style.ChipFilledSemiTransparent ) homePreviewTags.isGone = diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt index da400ae85c4..e45f9c7c598 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt @@ -811,7 +811,12 @@ open class ResultFragmentPhone : FullScreenPlayer() { } } - populateChips(resultTag, d.tags, expandable = true) + populateChips( + view = resultTag, + tags = d.tags, + expandable = true, + initialVisibleLimit = 10 + ) resultComingSoon.isVisible = d.comingSoon resultDataHolder.isGone = d.comingSoon diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt index af2fe254dd0..fa8c315cede 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt @@ -912,7 +912,13 @@ class ResultFragmentTv : BaseFragment( comingSoon = d.comingSoon resultTvComingSoon.isVisible = d.comingSoon - populateChips(resultTag, d.tags) + populateChips( + view = resultTag, + tags = d.tags, + expandable = isLayout(EMULATOR), + initialVisibleLimit = 15 + ) + resultCastItems.isGone = d.actors.isNullOrEmpty() (resultCastItems.adapter as? ActorAdaptor)?.submitList( d.actors diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt index a1ca38d9c5f..decc5c3711f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt @@ -101,36 +101,33 @@ object UIHelper { } fun populateChips( - view: ChipGroup?, + view: ChipGroup, tags: List, - @StyleRes style: Int = R.style.ChipFilled, - expandable: Boolean = false + expandable: Boolean, + initialVisibleLimit: Int, + @StyleRes style: Int = R.style.ChipFilled ) { - if (view == null) return - val context = view.context ?: return - val maxVisible = 10 var expanded = false - fun render() { view.removeAllViews() - val visibleTags = if (expanded) tags else tags.take(maxVisible) + val visibleTags = if (expanded) tags else tags.take(initialVisibleLimit) visibleTags.forEach { tag -> - val chip = Chip(context).apply { - setChipDrawable(ChipDrawable.createFromAttributes(context, null, 0, style)) + val chip = Chip(view.context).apply { + setChipDrawable(ChipDrawable.createFromAttributes(view.context, null, 0, style)) text = tag isChecked = false isCheckable = false isFocusable = false isClickable = false - setTextColor(context.colorFromAttribute(R.attr.white)) + setTextColor(view.context.colorFromAttribute(R.attr.white)) } view.addView(chip) } } render() - if (expandable && tags.size > maxVisible) { + if (expandable && tags.size > initialVisibleLimit) { view.setOnClickListener { expanded = !expanded render() @@ -688,4 +685,4 @@ private class CutoutOverlayDrawable( @Suppress("OVERRIDE_DEPRECATION") override fun getOpacity() = PixelFormat.OPAQUE -} \ No newline at end of file +}