From 0b43dd2a62a1f90308fc422978c3120760a1b396 Mon Sep 17 00:00:00 2001 From: Hatake Kakashri Date: Tue, 13 Jan 2026 22:12:50 +0530 Subject: [PATCH 1/2] Bump minimum SDK version to API 23 - Updated the `minSdk` in `app/build.gradle.kts`. - Adjusted the api-level for the test-android min sdk CI workflow in `.github/workflows/ci.yml`. - Simplified the `getOsString()` method in `ErrorActivity.java` by removing the conditional check for `Build.VERSION_CODES.M`, as API 23 is now the minimum. --- .github/workflows/ci.yml | 2 +- app/build.gradle.kts | 2 +- app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d42c5a0b4..91d0e8f76 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -69,7 +69,7 @@ jobs: strategy: matrix: include: - - api-level: 21 + - api-level: 23 target: default arch: x86 - api-level: 35 diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 03841a7b2..517fb9ce5 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -44,7 +44,7 @@ android { defaultConfig { applicationId = "org.schabi.newpipe" resValue("string", "app_name", "NewPipe") - minSdk = 21 + minSdk = 23 targetSdk = 35 versionCode = System.getProperty("versionCodeOverride")?.toInt() ?: 1005 diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java index 160dcca4d..94a2157fe 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java +++ b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java @@ -307,8 +307,7 @@ public class ErrorActivity extends AppCompatActivity { } private String getOsString() { - final String osBase = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M - ? Build.VERSION.BASE_OS : "Android"; + final String osBase = Build.VERSION.BASE_OS; return System.getProperty("os.name") + " " + (osBase.isEmpty() ? "Android" : osBase) + " " + Build.VERSION.RELEASE From b84395dea0330b0496c268070b9651873729ca8e Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Mon, 19 Jan 2026 14:39:33 +0800 Subject: [PATCH 2/2] Remove non-required API M version checks Signed-off-by: Aayush Gupta --- .../newpipe/player/ui/VideoPlayerUi.java | 24 +++++++------------ .../settings/VideoAudioSettingsFragment.java | 4 +--- .../schabi/newpipe/util/PermissionHelper.java | 5 +--- 3 files changed, 11 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/ui/VideoPlayerUi.java b/app/src/main/java/org/schabi/newpipe/player/ui/VideoPlayerUi.java index 61f9dfa3f..263bc71a2 100644 --- a/app/src/main/java/org/schabi/newpipe/player/ui/VideoPlayerUi.java +++ b/app/src/main/java/org/schabi/newpipe/player/ui/VideoPlayerUi.java @@ -24,7 +24,6 @@ import android.graphics.Color; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.net.Uri; -import android.os.Build; import android.os.Handler; import android.os.Looper; import android.util.Log; @@ -1587,19 +1586,15 @@ public abstract class VideoPlayerUi extends PlayerUi implements SeekBar.OnSeekBa // make sure there is nothing left over from previous calls clearVideoSurface(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // >=API23 - surfaceHolderCallback = new SurfaceHolderCallback(context, player.getExoPlayer()); - binding.surfaceView.getHolder().addCallback(surfaceHolderCallback); + surfaceHolderCallback = new SurfaceHolderCallback(context, player.getExoPlayer()); + binding.surfaceView.getHolder().addCallback(surfaceHolderCallback); - // ensure player is using an unreleased surface, which the surfaceView might not be - // when starting playback on background or during player switching - if (binding.surfaceView.getHolder().getSurface().isValid()) { - // initially set the surface manually otherwise - // onRenderedFirstFrame() will not be called - player.getExoPlayer().setVideoSurfaceHolder(binding.surfaceView.getHolder()); - } - } else { - player.getExoPlayer().setVideoSurfaceView(binding.surfaceView); + // ensure player is using an unreleased surface, which the surfaceView might not be + // when starting playback on background or during player switching + if (binding.surfaceView.getHolder().getSurface().isValid()) { + // initially set the surface manually otherwise + // onRenderedFirstFrame() will not be called + player.getExoPlayer().setVideoSurfaceHolder(binding.surfaceView.getHolder()); } surfaceIsSetup = true; @@ -1607,8 +1602,7 @@ public abstract class VideoPlayerUi extends PlayerUi implements SeekBar.OnSeekBa } private void clearVideoSurface() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M // >=API23 - && surfaceHolderCallback != null) { + if (surfaceHolderCallback != null) { binding.surfaceView.getHolder().removeCallback(surfaceHolderCallback); surfaceHolderCallback.release(); surfaceHolderCallback = null; diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java index c5c4c480c..a4d52592f 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java @@ -2,7 +2,6 @@ package org.schabi.newpipe.settings; import android.content.SharedPreferences; import android.content.res.Resources; -import android.os.Build; import android.os.Bundle; import android.provider.Settings; import android.text.format.DateUtils; @@ -33,8 +32,7 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment { // on M and above, if user chooses to minimise to popup player on exit // and the app doesn't have display over other apps permission, // show a snackbar to let the user give permission - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M - && getString(R.string.minimize_on_exit_key).equals(key)) { + if (getString(R.string.minimize_on_exit_key).equals(key)) { final String newSetting = sharedPreferences.getString(key, null); if (newSetting != null && newSetting.equals(getString(R.string.minimize_on_exit_popup_key)) diff --git a/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java b/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java index 2defbdc5b..77dc472f7 100644 --- a/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java @@ -12,7 +12,6 @@ import android.provider.Settings; import android.text.Html; import android.widget.Toast; -import androidx.annotation.RequiresApi; import androidx.appcompat.app.AlertDialog; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; @@ -116,7 +115,6 @@ public final class PermissionHelper { * @param context {@link Context} * @return {@link Settings#canDrawOverlays(Context)} **/ - @RequiresApi(api = Build.VERSION_CODES.M) public static boolean checkSystemAlertWindowPermission(final Context context) { if (!Settings.canDrawOverlays(context)) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) { @@ -174,8 +172,7 @@ public final class PermissionHelper { * @return whether the popup is enabled */ public static boolean isPopupEnabledElseAsk(final Context context) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M - || checkSystemAlertWindowPermission(context)) { + if (checkSystemAlertWindowPermission(context)) { return true; } else { Toast.makeText(context, R.string.msg_popup_permission, Toast.LENGTH_LONG).show();