From b2a0d17cad2206877f7ed3149c37a9abec65fd71 Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Sun, 12 Oct 2025 17:08:59 -0600 Subject: [PATCH 01/17] Upgrade to targetSdk 36 --- app/src/main/AndroidManifest.xml | 3 ++- .../com/lagradost/cloudstream3/MainActivity.kt | 17 +++++++++++++++++ app/src/main/res/values/styles.xml | 3 --- gradle/libs.versions.toml | 2 +- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4dda33a7e9..019436058b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,11 +45,12 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:largeHeap="true" + android:pageSizeCompat="enabled" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" android:usesCleartextTraffic="true" - tools:targetApi="35"> + tools:targetApi="36"> = Build.VERSION_CODES.VANILLA_ICE_CREAM) { // Android 15+ + binding?.root?.setOnApplyWindowInsetsListener { view, insets -> + val systemBars = insets.getInsets(WindowInsets.Type.systemBars()) + view.updatePadding( + left = systemBars.left, + right = systemBars.right, + bottom = systemBars.bottom + ) + + WindowInsets.CONSUMED + } + } + // overscan val padding = settingsManager.getInt(getString(R.string.overscan_key), 0).toPx binding?.homeRoot?.setPadding(padding, padding, padding, padding) diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 29ab0fcac1..14d32b3747 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -5,9 +5,6 @@ ?attr/primaryBlackBackground ?attr/textColor - - - true ?attr/iconGrayBackground diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 56b4b775f3..8103a0c61a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -48,7 +48,7 @@ workRuntimeKtx = "2.10.5" jvmTarget = "1.8" minSdk = "21" compileSdk = "36" -targetSdk = "35" +targetSdk = "36" [libraries] acra-core = { module = "ch.acra:acra-core", version.ref = "acraCore" } From 7ae53f15288cbafcafc0a06d7e0a6b8610d1572b Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Mon, 13 Oct 2025 12:19:15 -0600 Subject: [PATCH 02/17] Fix in player and use manifestPlaceholders --- app/build.gradle.kts | 2 ++ app/src/main/AndroidManifest.xml | 2 +- .../com/lagradost/cloudstream3/MainActivity.kt | 18 ++---------------- .../cloudstream3/ui/player/GeneratorPlayer.kt | 5 +++++ .../lagradost/cloudstream3/utils/UIHelper.kt | 18 ++++++++++++++++++ 5 files changed, 28 insertions(+), 17 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7258b8120e..d314d5f8f4 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -69,6 +69,8 @@ android { resValue("string", "commit_hash", getGitCommitHash()) resValue("bool", "is_prerelease", "false") + manifestPlaceholders["target_sdk_version"] = libs.versions.targetSdk.get() + // Reads local.properties val localProperties = gradleLocalProperties(rootDir, project.providers) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 019436058b..437891f75d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,7 +50,7 @@ android:supportsRtl="true" android:theme="@style/AppTheme" android:usesCleartextTraffic="true" - tools:targetApi="36"> + tools:targetApi="${target_sdk_version}"> = Build.VERSION_CODES.VANILLA_ICE_CREAM) { // Android 15+ - binding?.root?.setOnApplyWindowInsetsListener { view, insets -> - val systemBars = insets.getInsets(WindowInsets.Type.systemBars()) - view.updatePadding( - left = systemBars.left, - right = systemBars.right, - bottom = systemBars.bottom - ) - - WindowInsets.CONSUMED - } - } + fixPaddingSystemBars(binding?.root) // overscan val padding = settingsManager.getInt(getString(R.string.overscan_key), 0).toPx diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index 4c34640bf9..efb384906a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -116,6 +116,8 @@ import com.lagradost.cloudstream3.utils.txt import com.lagradost.cloudstream3.utils.UIHelper.clipboardHelper import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe +import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar +import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingSystemBars import com.lagradost.cloudstream3.utils.UIHelper.hideSystemUI import com.lagradost.cloudstream3.utils.UIHelper.popCurrentPage import com.lagradost.cloudstream3.utils.UIHelper.toPx @@ -1043,6 +1045,9 @@ class GeneratorPlayer : FullScreenPlayer() { PlayerSelectSourceAndSubsBinding.inflate(LayoutInflater.from(ctx), null, false) sourceDialog.setContentView(binding.root) + fixPaddingStatusbar(binding.root) + fixPaddingSystemBars(binding.root) + selectSourceDialog = sourceDialog sourceDialog.show() 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 557bb1ea5e..05a8da421d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/UIHelper.kt @@ -47,6 +47,7 @@ import androidx.core.view.marginLeft import androidx.core.view.marginRight import androidx.core.view.marginTop import androidx.core.view.updateLayoutParams +import androidx.core.view.updatePadding import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity import androidx.navigation.NavOptions @@ -411,6 +412,23 @@ object UIHelper { v.layoutParams = params } + fun fixPaddingSystemBars(v: View?) { + if (v == null) return + // Handle Android 15+ edge-to-edge design + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) { // Android 15+ + v.setOnApplyWindowInsetsListener { view, insets -> + val systemBars = insets.getInsets(WindowInsets.Type.systemBars()) + view.updatePadding( + left = systemBars.left, + right = systemBars.right, + bottom = systemBars.bottom + ) + + WindowInsets.CONSUMED + } + } + } + fun Context.getNavigationBarHeight(): Int { var result = 0 val resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android") From a558ae9027a26dfa0a6daf4897b2d697b15b571f Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Mon, 13 Oct 2025 15:20:26 -0600 Subject: [PATCH 03/17] Fix more padding and nav style --- .../lagradost/cloudstream3/ui/player/FullScreenPlayer.kt | 5 +++++ .../lagradost/cloudstream3/ui/player/GeneratorPlayer.kt | 7 ++++++- .../ui/player/source_priority/QualityProfileDialog.kt | 4 ++++ .../ui/player/source_priority/SourcePriorityDialog.kt | 4 ++++ .../cloudstream3/ui/subtitles/SubtitlesFragment.kt | 2 ++ app/src/main/res/values/styles.xml | 3 ++- 6 files changed, 23 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/FullScreenPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/FullScreenPlayer.kt index f6f68eaf28..f5b463364e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/FullScreenPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/FullScreenPlayer.kt @@ -73,6 +73,8 @@ import com.lagradost.cloudstream3.utils.BackPressedCallbackHelper.detachBackPres import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe +import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar +import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingSystemBars import com.lagradost.cloudstream3.utils.UIHelper.getNavigationBarHeight import com.lagradost.cloudstream3.utils.UIHelper.getStatusBarHeight import com.lagradost.cloudstream3.utils.UIHelper.hideSystemUI @@ -555,6 +557,9 @@ open class FullScreenPlayer : AbstractPlayerFragment() { } dialog.show() + fixPaddingStatusbar(binding.root) + fixPaddingSystemBars(binding.root) + val beforeOffset = subtitleDelay binding.apply { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt index efb384906a..ae4068719a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/GeneratorPlayer.kt @@ -623,10 +623,12 @@ class GeneratorPlayer : FullScreenPlayer() { DialogOnlineSubtitlesBinding.inflate(LayoutInflater.from(context), null, false) dialog.setContentView(binding.root) + fixPaddingStatusbar(binding.root) + fixPaddingSystemBars(binding.root) + var currentSubtitles: List = emptyList() var currentSubtitle: AbstractSubtitleEntities.SubtitleEntity? = null - val layout = R.layout.sort_bottom_single_choice_double_text val arrayAdapter = object : ArrayAdapter(dialog.context, layout) { @@ -1404,6 +1406,9 @@ class GeneratorPlayer : FullScreenPlayer() { trackDialog.setContentView(binding.root) trackDialog.show() + fixPaddingStatusbar(binding.root) + fixPaddingSystemBars(binding.root) + // selectTracksDialog = tracksDialog val videosList = binding.videoTracksList diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityProfileDialog.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityProfileDialog.kt index 19e98138cb..36289b5fec 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityProfileDialog.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/QualityProfileDialog.kt @@ -11,6 +11,8 @@ import com.lagradost.cloudstream3.utils.txt import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe +import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar +import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingSystemBars class QualityProfileDialog( val activity: FragmentActivity, @@ -24,6 +26,8 @@ class QualityProfileDialog( val binding = PlayerQualityProfileDialogBinding.inflate(this.layoutInflater, null, false) setContentView(binding.root)//R.layout.player_quality_profile_dialog) + fixPaddingStatusbar(binding.root) + fixPaddingSystemBars(binding.root) /*val profilesRecyclerView: RecyclerView = profiles_recyclerview val useBtt: View = use_btt val editBtt: View = edit_btt diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/SourcePriorityDialog.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/SourcePriorityDialog.kt index 4c74ec80f3..7de8c2ce23 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/SourcePriorityDialog.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/source_priority/SourcePriorityDialog.kt @@ -11,6 +11,8 @@ import com.lagradost.cloudstream3.utils.txt import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.Qualities import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe +import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar +import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingSystemBars class SourcePriorityDialog( val ctx: Context, @@ -26,6 +28,8 @@ class SourcePriorityDialog( override fun show() { val binding = PlayerSelectSourcePriorityBinding.inflate(LayoutInflater.from(ctx), null, false) setContentView(binding.root) + fixPaddingStatusbar(binding.root) + fixPaddingSystemBars(binding.root) val sourcesRecyclerView = binding.sortSources val qualitiesRecyclerView = binding.sortQualities val profileText = binding.profileTextEditable diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt index b59dd63b6b..de9cbdad46 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt @@ -48,6 +48,7 @@ import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog import com.lagradost.cloudstream3.utils.SubtitleHelper.fromCodeToLangTagIETF import com.lagradost.cloudstream3.utils.SubtitleHelper.languages import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar +import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingSystemBars import com.lagradost.cloudstream3.utils.UIHelper.hideSystemUI import com.lagradost.cloudstream3.utils.UIHelper.navigate import com.lagradost.cloudstream3.utils.UIHelper.popCurrentPage @@ -384,6 +385,7 @@ class SubtitlesFragment : DialogFragment() { ) fixPaddingStatusbar(binding?.subsRoot) + fixPaddingSystemBars(binding?.subsRoot) state = getCurrentSavedStyle() context?.updateState() diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 14d32b3747..074d012a93 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -170,8 +170,8 @@ @color/lightGrayTextColor @color/black @color/white - @color/blackText + true @@ -198,6 +199,7 @@ @color/LavenderTextColor @color/LavenderPrimaryGrayBackground @color/LavenderTextColor + true true @@ -562,6 +564,17 @@ true + +