From c536d4d5e0d0bb0680581e7131f5bfec5c30dea0 Mon Sep 17 00:00:00 2001 From: AryanMir15 Date: Wed, 22 Apr 2026 15:07:37 +0500 Subject: [PATCH 1/4] Added Library Poster Size Slider --- .gitignore | 4 ++++ .../cloudstream3/ui/library/PageAdapter.kt | 17 +++++++++++++++++ .../cloudstream3/ui/library/ViewpagerAdapter.kt | 7 +++++-- .../cloudstream3/ui/settings/SettingsUI.kt | 14 ++++++++++++++ .../main/res/values/donottranslate-strings.xml | 1 + app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/settings_ui.xml | 14 +++++++++++++- 7 files changed, 56 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 5fc9f0870b6..787e09ab9e2 100644 --- a/.gitignore +++ b/.gitignore @@ -225,4 +225,8 @@ fabric.properties !/gradle/wrapper/gradle-wrapper.jar +# Ignore release APK folders +app/prerelease/ +app/stable/ + # End of https://www.toptal.com/developers/gitignore/api/kotlin,java,android,androidstudio,visualstudiocode diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt index 066cf468d20..eef85cd4632 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt @@ -1,9 +1,12 @@ package com.lagradost.cloudstream3.ui.library +import android.content.Context +import android.preference.PreferenceManager import android.view.LayoutInflater import android.view.ViewGroup import android.widget.FrameLayout import androidx.core.view.isVisible +import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.databinding.SearchResultGridExpandedBinding import com.lagradost.cloudstream3.syncproviders.SyncAPI import com.lagradost.cloudstream3.ui.AutofitRecyclerView @@ -12,6 +15,7 @@ import com.lagradost.cloudstream3.ui.NoStateAdapter import com.lagradost.cloudstream3.ui.ViewHolderState import com.lagradost.cloudstream3.ui.search.SearchClickCallback import com.lagradost.cloudstream3.ui.search.SearchResultBuilder +import com.lagradost.cloudstream3.utils.UIHelper.getSpanCount import kotlin.math.roundToInt class PageAdapter( @@ -27,6 +31,19 @@ class PageAdapter( })) { private val coverHeight: Int get() = (resView.itemWidth / 0.68).roundToInt() + companion object { + fun updatePosterSize(resView: AutofitRecyclerView, context: Context, value: Int? = null) { + val scale = value ?: PreferenceManager.getDefaultSharedPreferences(context) + ?.getInt(context.getString(R.string.library_poster_size_key), 0) ?: 0 + // Adjust spanCount to control poster size + // Higher scale = fewer columns = larger posters + val baseSpanCount = context.getSpanCount() + val adjustedSpanCount = maxOf(1, (baseSpanCount / (1.0f + scale * 0.1f)).roundToInt()) + // Update the RecyclerView's spanCount + resView.spanCount = adjustedSpanCount + } + } + override fun onCreateContent(parent: ViewGroup): ViewHolderState { return ViewHolderState( SearchResultGridExpandedBinding.inflate( diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt index 68b6eb2735a..3e13bba7655 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/ViewpagerAdapter.kt @@ -82,10 +82,13 @@ class ViewpagerAdapter( // Which is only determined after the recyclerview is attached. // If this fails then item height becomes 0 when there is only one item doOnAttach { - adapter = PageAdapter( + val pageAdapter = PageAdapter( this, clickCallback - ).apply { + ) + // Initialize poster size for this page + PageAdapter.updatePosterSize(this, this.context) + adapter = pageAdapter.apply { submitList(item.items) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt index f4c522bf981..67a9e6f78a5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt @@ -65,6 +65,20 @@ class SettingsUI : BasePreferenceFragmentCompat() { true } + getPref(R.string.library_poster_size_key)?.setOnPreferenceChangeListener { _, newValue -> + context?.let { + // Reload library to apply new poster size + (it.getActivity() as? MainActivity)?.let { activity -> + activity.supportFragmentManager.findFragmentById(R.id.navigation_library)?.let { fragment -> + if (fragment is com.lagradost.cloudstream3.ui.library.LibraryFragment) { + activity.recreate() + } + } + } + } + true + } + getPref(R.string.poster_ui_key)?.setOnPreferenceClickListener { val prefNames = resources.getStringArray(R.array.poster_ui_options) val keys = resources.getStringArray(R.array.poster_ui_options_values) diff --git a/app/src/main/res/values/donottranslate-strings.xml b/app/src/main/res/values/donottranslate-strings.xml index 0b7aab4cb7b..c8f9c5644ac 100644 --- a/app/src/main/res/values/donottranslate-strings.xml +++ b/app/src/main/res/values/donottranslate-strings.xml @@ -67,6 +67,7 @@ poster_ui_key overscan_key poster_size_key + library_poster_size subtitles_encoding_key override_site_key redo_setup_key diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e41c01fda69..439c2405abc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -745,6 +745,8 @@ Overscan Changes size of posters Poster size + Changes size of library posters + Library poster size LongPress Speed Toggle Hold to get 2x speed Edit Profile Image diff --git a/app/src/main/res/xml/settings_ui.xml b/app/src/main/res/xml/settings_ui.xml index 1b516ffa304..c52966c4fa9 100644 --- a/app/src/main/res/xml/settings_ui.xml +++ b/app/src/main/res/xml/settings_ui.xml @@ -35,7 +35,7 @@ app:showSeekBarValue="true" /> + + From 0fd233bf5f1dc172b8be24039cce92e27b4f74d2 Mon Sep 17 00:00:00 2001 From: AryanMir15 Date: Thu, 23 Apr 2026 12:19:03 +0500 Subject: [PATCH 2/4] Fix: Refactor library poster size to use direct span count - Replace deprecated PreferenceManager with androidx version - Change slider to directly control grid columns (1-10) - Remove unnecessary activity.recreate() call - Update slider defaults: min=1, max=10, default=3 - Remove incorrect .gitignore entries --- .gitignore | 4 ---- .../cloudstream3/ui/library/PageAdapter.kt | 13 ++++--------- .../cloudstream3/ui/settings/SettingsUI.kt | 10 ---------- app/src/main/res/xml/settings_ui.xml | 6 +++--- 4 files changed, 7 insertions(+), 26 deletions(-) diff --git a/.gitignore b/.gitignore index 787e09ab9e2..5fc9f0870b6 100644 --- a/.gitignore +++ b/.gitignore @@ -225,8 +225,4 @@ fabric.properties !/gradle/wrapper/gradle-wrapper.jar -# Ignore release APK folders -app/prerelease/ -app/stable/ - # End of https://www.toptal.com/developers/gitignore/api/kotlin,java,android,androidstudio,visualstudiocode diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt index eef85cd4632..9e65be100c3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt @@ -1,8 +1,8 @@ package com.lagradost.cloudstream3.ui.library import android.content.Context -import android.preference.PreferenceManager import android.view.LayoutInflater +import androidx.preference.PreferenceManager import android.view.ViewGroup import android.widget.FrameLayout import androidx.core.view.isVisible @@ -33,14 +33,9 @@ class PageAdapter( companion object { fun updatePosterSize(resView: AutofitRecyclerView, context: Context, value: Int? = null) { - val scale = value ?: PreferenceManager.getDefaultSharedPreferences(context) - ?.getInt(context.getString(R.string.library_poster_size_key), 0) ?: 0 - // Adjust spanCount to control poster size - // Higher scale = fewer columns = larger posters - val baseSpanCount = context.getSpanCount() - val adjustedSpanCount = maxOf(1, (baseSpanCount / (1.0f + scale * 0.1f)).roundToInt()) - // Update the RecyclerView's spanCount - resView.spanCount = adjustedSpanCount + val spanCount = value ?: PreferenceManager.getDefaultSharedPreferences(context) + .getInt(context.getString(R.string.library_poster_size_key), 3) + resView.spanCount = spanCount } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt index 67a9e6f78a5..8753d249961 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt @@ -66,16 +66,6 @@ class SettingsUI : BasePreferenceFragmentCompat() { } getPref(R.string.library_poster_size_key)?.setOnPreferenceChangeListener { _, newValue -> - context?.let { - // Reload library to apply new poster size - (it.getActivity() as? MainActivity)?.let { activity -> - activity.supportFragmentManager.findFragmentById(R.id.navigation_library)?.let { fragment -> - if (fragment is com.lagradost.cloudstream3.ui.library.LibraryFragment) { - activity.recreate() - } - } - } - } true } diff --git a/app/src/main/res/xml/settings_ui.xml b/app/src/main/res/xml/settings_ui.xml index c52966c4fa9..2daef18d335 100644 --- a/app/src/main/res/xml/settings_ui.xml +++ b/app/src/main/res/xml/settings_ui.xml @@ -47,14 +47,14 @@ app:showSeekBarValue="true" /> From c6215eb98bc6780e87e28cbbb98f399a2db71f80 Mon Sep 17 00:00:00 2001 From: AryanMir15 Date: Thu, 23 Apr 2026 12:58:18 +0500 Subject: [PATCH 3/4] Removed the Unnecessary block of code --- .../java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt index 8753d249961..f4c522bf981 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt @@ -65,10 +65,6 @@ class SettingsUI : BasePreferenceFragmentCompat() { true } - getPref(R.string.library_poster_size_key)?.setOnPreferenceChangeListener { _, newValue -> - true - } - getPref(R.string.poster_ui_key)?.setOnPreferenceClickListener { val prefNames = resources.getStringArray(R.array.poster_ui_options) val keys = resources.getStringArray(R.array.poster_ui_options_values) From 2f5128a045447d46e6343b2c27b903dff100d3e3 Mon Sep 17 00:00:00 2001 From: AryanMir15 Date: Fri, 24 Apr 2026 22:12:21 +0500 Subject: [PATCH 4/4] Adderessed the Reviewers Comments --- .../com/lagradost/cloudstream3/ui/library/PageAdapter.kt | 4 ++-- .../com/lagradost/cloudstream3/ui/settings/SettingsUI.kt | 6 ++++++ app/src/main/res/values/strings.xml | 8 ++++---- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt index 9e65be100c3..737d0b9afa3 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/library/PageAdapter.kt @@ -32,10 +32,10 @@ class PageAdapter( private val coverHeight: Int get() = (resView.itemWidth / 0.68).roundToInt() companion object { - fun updatePosterSize(resView: AutofitRecyclerView, context: Context, value: Int? = null) { + fun updatePosterSize(resView: AutofitRecyclerView?, context: Context, value: Int? = null) { val spanCount = value ?: PreferenceManager.getDefaultSharedPreferences(context) .getInt(context.getString(R.string.library_poster_size_key), 3) - resView.spanCount = spanCount + resView?.spanCount = spanCount } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt index f4c522bf981..136ea3e89e8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsUI.kt @@ -15,6 +15,7 @@ import com.lagradost.cloudstream3.ui.BasePreferenceFragmentCompat import com.lagradost.cloudstream3.ui.clear import com.lagradost.cloudstream3.ui.home.HomeChildItemAdapter import com.lagradost.cloudstream3.ui.home.ParentItemAdapter +import com.lagradost.cloudstream3.ui.library.PageAdapter import com.lagradost.cloudstream3.ui.search.SearchAdapter import com.lagradost.cloudstream3.ui.search.SearchResultBuilder import com.lagradost.cloudstream3.ui.settings.Globals.EMULATOR @@ -65,6 +66,11 @@ class SettingsUI : BasePreferenceFragmentCompat() { true } + getPref(R.string.library_poster_size_key)?.setOnPreferenceChangeListener { _, newValue -> + context?.let { PageAdapter.updatePosterSize(null, it, newValue as? Int) } + true + } + getPref(R.string.poster_ui_key)?.setOnPreferenceClickListener { val prefNames = resources.getStringArray(R.array.poster_ui_options) val keys = resources.getStringArray(R.array.poster_ui_options_values) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 439c2405abc..a72e6dd3160 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -743,10 +743,10 @@ Changes the bounds of the screen Overscan - Changes size of posters - Poster size - Changes size of library posters - Library poster size + Changes the number of poster columns + Poster columns + Changes the number of library poster columns + Library poster columns LongPress Speed Toggle Hold to get 2x speed Edit Profile Image