diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index f6708fa83..a184dd83d 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -72,8 +72,8 @@ jobs:
- api-level: 21
target: default
arch: x86
- - api-level: 33
- target: google_apis # emulator API 33 only exists with Google APIs
+ - api-level: 35
+ target: default
arch: x86_64
permissions:
diff --git a/app/build.gradle b/app/build.gradle
index 0841086ad..02146c5f8 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -17,14 +17,14 @@ plugins {
}
android {
- compileSdk 35
+ compileSdk 36
namespace 'org.schabi.newpipe'
defaultConfig {
applicationId "org.schabi.newpipe"
resValue "string", "app_name", "NewPipe"
minSdk 21
- targetSdk 33
+ targetSdk 35
if (System.properties.containsKey('versionCodeOverride')) {
versionCode System.getProperty('versionCodeOverride') as Integer
} else {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d8e491abc..0ac368898 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,6 +10,7 @@
+
@@ -104,7 +105,10 @@
android:name="androidx.work.impl.foreground.SystemForegroundService"
android:foregroundServiceType="dataSync"
tools:node="merge" />
-
+
+
-
+
menuItemToFilterName = new SparseArrayCompat<>();
private StreamingService service;
+ @Nullable
private Page nextPage;
private boolean showLocalSuggestions = true;
private boolean showRemoteSuggestions = true;
@@ -1096,7 +1097,7 @@ public class SearchFragment extends BaseListFragment flag and REQUESTED_PERMISSION_GRANTED != 0 }
- .mapTo(mutableSetOf()) { (permission, _) -> permission }
+ .filter { (permission, flag) -> flag and REQUESTED_PERMISSION_GRANTED != 0 }
+ .mapTo(mutableSetOf()) { (permission, flag) -> permission }
- return CallerPackageInfo(appName, callingPackage, uid, signature, activePermissions)
+ return CallerPackageInfo(appName, callingPackage, uid, signature, activePermissions.toSet())
}
/**
@@ -186,16 +185,15 @@ internal class PackageValidator(context: Context) {
* returns `null` as the signature.
*/
@Suppress("deprecation")
- private fun getSignature(packageInfo: PackageInfo): String? {
- val signatures = packageInfo.signatures
- return if (signatures == null || signatures.size != 1) {
+ private fun getSignature(packageInfo: PackageInfo): String? =
+ if (packageInfo.signatures == null || packageInfo.signatures!!.size != 1) {
// Security best practices dictate that an app should be signed with exactly one (1)
// signature. Because of this, if there are multiple signatures, reject it.
null
} else {
- getSignatureSha256(signatures[0].toByteArray())
+ val certificate = packageInfo.signatures!![0].toByteArray()
+ getSignatureSha256(certificate)
}
- }
/**
* Finds the Android platform signing key signature. This key is never null.
diff --git a/app/src/main/java/org/schabi/newpipe/player/playqueue/AbstractInfoPlayQueue.java b/app/src/main/java/org/schabi/newpipe/player/playqueue/AbstractInfoPlayQueue.java
index dbfac5cca..02bb6b5ba 100644
--- a/app/src/main/java/org/schabi/newpipe/player/playqueue/AbstractInfoPlayQueue.java
+++ b/app/src/main/java/org/schabi/newpipe/player/playqueue/AbstractInfoPlayQueue.java
@@ -3,6 +3,7 @@ package org.schabi.newpipe.player.playqueue;
import android.util.Log;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.extractor.ListExtractor;
@@ -23,6 +24,7 @@ abstract class AbstractInfoPlayQueue>
final int serviceId;
final String baseUrl;
+ @Nullable
Page nextPage;
private transient Disposable fetchReactor;
diff --git a/app/src/main/res/values-v35/styles.xml b/app/src/main/res/values-v35/styles.xml
new file mode 100644
index 000000000..beb16bcdf
--- /dev/null
+++ b/app/src/main/res/values-v35/styles.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+