From c433891d352cbf5ff0ca7915f8a89fd4a4ca8002 Mon Sep 17 00:00:00 2001 From: jacquarg Date: Wed, 12 Feb 2025 21:50:30 +0100 Subject: [PATCH 1/2] chore: upgrade to sdk35. --- build.gradle | 4 ++-- .../main/java/android/app/AppOpsManager.java | 10 +++++----- .../java/android/app/NotificationChannel.java | 2 +- .../android/content/pm/PackageManager.java | 20 +++++++++---------- .../java/android/content/pm/UserInfo.java | 4 ++-- .../src/main/java/android/net/VpnManager.java | 12 +++++------ .../main/java/android/os/ServiceManager.java | 4 ++-- .../src/main/java/android/os/UserHandle.java | 4 ++-- .../src/main/java/android/os/UserManager.java | 8 ++++---- 9 files changed, 34 insertions(+), 34 deletions(-) diff --git a/build.gradle b/build.gradle index 4b2cc33f..58421836 100644 --- a/build.gradle +++ b/build.gradle @@ -19,9 +19,9 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext.buildConfig = [ - 'compileSdk': 34, + 'compileSdk': 35, 'minSdk' : 30, - 'targetSdk' : 34, + 'targetSdk' : 35, 'version' : [ 'major': 2, 'minor': 7, diff --git a/permissionseos/libs/hidden-apis-stub/src/main/java/android/app/AppOpsManager.java b/permissionseos/libs/hidden-apis-stub/src/main/java/android/app/AppOpsManager.java index 1bd64e51..4df0da19 100644 --- a/permissionseos/libs/hidden-apis-stub/src/main/java/android/app/AppOpsManager.java +++ b/permissionseos/libs/hidden-apis-stub/src/main/java/android/app/AppOpsManager.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 - 2024 E FOUNDATION + * Copyright (C) 2022 - 2025 E FOUNDATION * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,8 +31,8 @@ public class AppOpsManager { @TargetApi(29) @DeprecatedSinceApi( - api = 35, - message = "Check availability in SDK35" + api = 36, + message = "Check availability in SDK36" ) public static int strOpToOp(@NonNull String op) { return 0; @@ -40,8 +40,8 @@ public class AppOpsManager { @TargetApi(29) @DeprecatedSinceApi( - api = 35, - message = "Check availability in SDK35" + api = 36, + message = "Check availability in SDK36" ) @RequiresPermission("android.permission.MANAGE_APP_OPS_MODES") public void setMode(int code, int uid, String packageName, int mode) {} diff --git a/permissionseos/libs/hidden-apis-stub/src/main/java/android/app/NotificationChannel.java b/permissionseos/libs/hidden-apis-stub/src/main/java/android/app/NotificationChannel.java index 66be7183..996e12e9 100644 --- a/permissionseos/libs/hidden-apis-stub/src/main/java/android/app/NotificationChannel.java +++ b/permissionseos/libs/hidden-apis-stub/src/main/java/android/app/NotificationChannel.java @@ -32,6 +32,6 @@ public class NotificationChannel { // Public in API 33. @TargetApi(30) - public void setBlockable(boolean blockableSystem) {} + public void setBlockable(boolean blockable) {} } diff --git a/permissionseos/libs/hidden-apis-stub/src/main/java/android/content/pm/PackageManager.java b/permissionseos/libs/hidden-apis-stub/src/main/java/android/content/pm/PackageManager.java index be45c770..97fb7e1f 100644 --- a/permissionseos/libs/hidden-apis-stub/src/main/java/android/content/pm/PackageManager.java +++ b/permissionseos/libs/hidden-apis-stub/src/main/java/android/content/pm/PackageManager.java @@ -35,8 +35,8 @@ public abstract class PackageManager { @TargetApi(29) @DeprecatedSinceApi( - api = 35, - message = "Check availability in SDK35" + api = 36, + message = "Check availability in SDK36" ) public static class NameNotFoundException extends AndroidException { public NameNotFoundException() { @@ -50,8 +50,8 @@ public abstract class PackageManager { @TargetApi(29) @DeprecatedSinceApi( - api = 35, - message = "Check availability in SDK35" + api = 36, + message = "Check availability in SDK36" ) @RequiresPermission("android.permission.GRANT_RUNTIME_PERMISSIONS") public abstract void grantRuntimePermission( @@ -62,8 +62,8 @@ public abstract class PackageManager { @TargetApi(29) @DeprecatedSinceApi( - api = 35, - message = "Check availability in SDK35" + api = 36, + message = "Check availability in SDK36" ) @RequiresPermission("android.permission.REVOKE_RUNTIME_PERMISSIONS") public abstract void revokeRuntimePermission( @@ -74,8 +74,8 @@ public abstract class PackageManager { @TargetApi(29) @DeprecatedSinceApi( - api = 35, - message = "Check availability in SDK35, since SDK33, " + + api = 36, + message = "Check availability in SDK36, since SDK33, " + "Use {@link #getApplicationInfoAsUser(String, ApplicationInfoFlags, int)} " + "when long flags are needed." ) @@ -88,8 +88,8 @@ public abstract class PackageManager { @TargetApi(29) @DeprecatedSinceApi( - api = 35, - message = "Check availability in SDK35, since SDK33, " + + api = 36, + message = "Check availability in SDK36, since SDK33, " + "Use {@link #getInstalledPackagesAsUser(PackageInfoFlags, int)} " + "when long flags are needed." ) diff --git a/permissionseos/libs/hidden-apis-stub/src/main/java/android/content/pm/UserInfo.java b/permissionseos/libs/hidden-apis-stub/src/main/java/android/content/pm/UserInfo.java index 827fb8a8..77462399 100644 --- a/permissionseos/libs/hidden-apis-stub/src/main/java/android/content/pm/UserInfo.java +++ b/permissionseos/libs/hidden-apis-stub/src/main/java/android/content/pm/UserInfo.java @@ -28,8 +28,8 @@ public class UserInfo { @TargetApi(29) @DeprecatedSinceApi( - api = 35, - message = "Check availability in SDK35" + api = 36, + message = "Check availability in SDK36" ) public UserHandle getUserHandle() { return null; diff --git a/permissionseos/libs/hidden-apis-stub/src/main/java/android/net/VpnManager.java b/permissionseos/libs/hidden-apis-stub/src/main/java/android/net/VpnManager.java index 2854e2e6..043f0049 100644 --- a/permissionseos/libs/hidden-apis-stub/src/main/java/android/net/VpnManager.java +++ b/permissionseos/libs/hidden-apis-stub/src/main/java/android/net/VpnManager.java @@ -30,8 +30,8 @@ public class VpnManager { @TargetApi(31) @DeprecatedSinceApi( - api = 35, - message = "Check availability in SDK35" + api = 36, + message = "Check availability in SDK36" ) public boolean prepareVpn( @Nullable String oldPackage, @@ -43,8 +43,8 @@ public class VpnManager { @TargetApi(31) @DeprecatedSinceApi( - api = 35, - message = "Check availability in SDK35" + api = 36, + message = "Check availability in SDK36" ) public void setVpnPackageAuthorization( String packageName, @@ -54,8 +54,8 @@ public class VpnManager { @TargetApi(31) @DeprecatedSinceApi( - api = 35, - message = "Check availability in SDK35" + api = 36, + message = "Check availability in SDK36" ) @RequiresPermission("android.permission.CONTROL_ALWAYS_ON_VPN") public String getAlwaysOnVpnPackageForUser(int userId) { diff --git a/permissionseos/libs/hidden-apis-stub/src/main/java/android/os/ServiceManager.java b/permissionseos/libs/hidden-apis-stub/src/main/java/android/os/ServiceManager.java index 901dfce6..cbf68267 100644 --- a/permissionseos/libs/hidden-apis-stub/src/main/java/android/os/ServiceManager.java +++ b/permissionseos/libs/hidden-apis-stub/src/main/java/android/os/ServiceManager.java @@ -26,8 +26,8 @@ import androidx.annotation.DeprecatedSinceApi; public class ServiceManager { @TargetApi(30) @DeprecatedSinceApi( - api = 35, - message = "Check availability in SDK35" + api = 36, + message = "Check availability in SDK36" ) public static IBinder getService(String name) { return null; diff --git a/permissionseos/libs/hidden-apis-stub/src/main/java/android/os/UserHandle.java b/permissionseos/libs/hidden-apis-stub/src/main/java/android/os/UserHandle.java index 52794413..cf30aa6b 100644 --- a/permissionseos/libs/hidden-apis-stub/src/main/java/android/os/UserHandle.java +++ b/permissionseos/libs/hidden-apis-stub/src/main/java/android/os/UserHandle.java @@ -27,8 +27,8 @@ public class UserHandle { @TargetApi(30) @DeprecatedSinceApi( - api = 35, - message = "Check availability in SDK35" + api = 36, + message = "Check availability in SDK36" ) public static /*@UserIdInt*/ int myUserId() { return 0; diff --git a/permissionseos/libs/hidden-apis-stub/src/main/java/android/os/UserManager.java b/permissionseos/libs/hidden-apis-stub/src/main/java/android/os/UserManager.java index 01410d98..fb6d1a94 100644 --- a/permissionseos/libs/hidden-apis-stub/src/main/java/android/os/UserManager.java +++ b/permissionseos/libs/hidden-apis-stub/src/main/java/android/os/UserManager.java @@ -33,8 +33,8 @@ public class UserManager { // to "android.permission.MANAGE_USERS" @TargetApi(29) @DeprecatedSinceApi( - api = 35, - message = "Check availability in SDK35" + api = 36, + message = "Check availability in SDK36" ) @RequiresPermission("android.permission.MANAGE_USERS") public List getProfiles(int userHandle) { @@ -45,8 +45,8 @@ public class UserManager { // to "android.permission.MANAGE_USERS" @TargetApi(29) @DeprecatedSinceApi( - api = 35, - message = "Check availability in SDK35" + api = 36, + message = "Check availability in SDK36" ) @RequiresPermission("android.permission.MANAGE_USERS") public boolean isManagedProfile(int userId) { -- GitLab From fc7d5c4a5f16e1946d7d066234d9e3839f926fd6 Mon Sep 17 00:00:00 2001 From: jacquarg Date: Thu, 13 Feb 2025 09:00:23 +0100 Subject: [PATCH 2/2] chore: upgrade dependencies --- app/build.gradle | 1 - build.gradle | 1 - core/build.gradle | 1 - .../core/utils/CoroutinesUtils.kt | 10 +++--- .../data/repositories/AppListRepository.kt | 11 ++++--- gradle/libs.versions.toml | 33 +++++++++---------- gradle/wrapper/gradle-wrapper.properties | 6 ++-- .../PermissionsPrivacyModuleImpl.kt | 14 ++++---- trackersserviceeos/build.gradle | 1 + 9 files changed, 39 insertions(+), 39 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index fb261186..4e24ecb8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -19,7 +19,6 @@ plugins { id 'com.android.application' id 'kotlin-android' - id 'kotlin-kapt' id 'androidx.navigation.safeargs.kotlin' } diff --git a/build.gradle b/build.gradle index 58421836..c617f243 100644 --- a/build.gradle +++ b/build.gradle @@ -48,7 +48,6 @@ plugins { alias libs.plugins.benmanes.versions alias libs.plugins.kotlin.android apply false alias libs.plugins.android.application apply false - alias libs.plugins.kotlin.kapt apply false alias libs.plugins.androidx.navigation.safeargs apply false alias libs.plugins.android.library apply false } diff --git a/core/build.gradle b/core/build.gradle index 2796f299..1e6ad4fc 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -19,7 +19,6 @@ plugins { id 'com.android.library' id 'kotlin-android' - id 'kotlin-kapt' id 'kotlin-parcelize' } diff --git a/core/src/main/java/foundation/e/advancedprivacy/core/utils/CoroutinesUtils.kt b/core/src/main/java/foundation/e/advancedprivacy/core/utils/CoroutinesUtils.kt index cbc77872..725b13e0 100644 --- a/core/src/main/java/foundation/e/advancedprivacy/core/utils/CoroutinesUtils.kt +++ b/core/src/main/java/foundation/e/advancedprivacy/core/utils/CoroutinesUtils.kt @@ -18,15 +18,15 @@ package foundation.e.advancedprivacy.core.utils import kotlin.contracts.ExperimentalContracts -import kotlin.contracts.InvocationKind -import kotlin.contracts.contract import kotlinx.coroutines.CancellationException @OptIn(ExperimentalContracts::class) inline fun runSuspendCatching(block: () -> T): Result { - contract { - callsInPlace(block, InvocationKind.EXACTLY_ONCE) - } + // Deactivated because it causes falls positive warnings: https://stackoverflow.com/a/78915097 + // https://youtrack.jetbrains.com/issue/KT-63414, https://youtrack.jetbrains.com/issue/KT-63416 +// contract { +// callsInPlace(block, InvocationKind.EXACTLY_ONCE) +// } return runCatching(block).onFailure { if (it is CancellationException) { diff --git a/core/src/main/java/foundation/e/advancedprivacy/data/repositories/AppListRepository.kt b/core/src/main/java/foundation/e/advancedprivacy/data/repositories/AppListRepository.kt index 9000fdcf..c0a7909f 100644 --- a/core/src/main/java/foundation/e/advancedprivacy/data/repositories/AppListRepository.kt +++ b/core/src/main/java/foundation/e/advancedprivacy/data/repositories/AppListRepository.kt @@ -116,6 +116,7 @@ class AppListRepository( permissionsModule.getApplications().forEach { (appDesc: ApplicationDescription, pkgInfo: PackageInfo) -> val hasInternetPermission = hasInternetPermission(pkgInfo) val hasLocationPermission = hasLocationPermission(pkgInfo) + val applicationInfo = pkgInfo.applicationInfo when { pkgInfo.packageName in compatibilityPNames -> { @@ -129,7 +130,9 @@ class AppListRepository( appDescs.add(appDesc) } - !isNotHiddenSystemApp(pkgInfo.applicationInfo, launcherPackageNames) -> { + applicationInfo == null -> {} // Skip apps with missing applicationInfo. + + !isNotHiddenSystemApp(applicationInfo, launcherPackageNames) -> { if (hasInternetPermission) { systemInternetApps.add(appDesc) } @@ -159,7 +162,7 @@ class AppListRepository( val (label, icon) = resources onResourcesReady(label, icon) } else { - fetchResourcesJobs.add(fetchResources(appDesc, pkgInfo, onResourcesReady)) + fetchResourcesJobs.add(fetchResources(appDesc, applicationInfo, onResourcesReady)) } } @@ -187,12 +190,12 @@ class AppListRepository( private fun fetchResources( appDesc: ApplicationDescription, - pkgInfo: PackageInfo, + applicationInfo: ApplicationInfo, onResourcesReady: (CharSequence, Drawable) -> Unit ): Job { val id = appDesc.apId return backgroundScope.launch { - val label = permissionsModule.getApplicationLabel(pkgInfo.applicationInfo) + val label = permissionsModule.getApplicationLabel(applicationInfo) val icon = permissionsModule.getApplicationIcon(appDesc) if (icon != null) { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 71989aa0..4c3c9d20 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,38 +1,36 @@ [versions] -agp = "8.2.0" +agp = "8.8.0" detekt = "1.23.1" -koin = "3.4.3" -kotlinx-coroutines = "1.7.3" -kotlin = "1.9.21" -androidx-navigation = "2.7.6" -androidx-lifecycle = "2.6.2" +koin = "3.5.6" +kotlinx-coroutines = "1.8.1" +kotlin = "2.1.10" +androidx-navigation = "2.8.7" +androidx-lifecycle = "2.8.7" orbotservice = "orbot-17.2.1-2" -retrofit = "2.9.0" +retrofit = "2.11.0" pcap4j = "1.8.2" [libraries] -androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version = "1.6.1" } -androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version = "1.12.0" } -androidx-datastore-preferences = { group = "androidx.datastore", name="datastore-preferences", version = "1.1.1" } -androidx-fragment-ktx = { group = "androidx.fragment", name = "fragment-ktx", version = "1.6.2" } +androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version = "1.7.0" } +androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version = "1.15.0" } +androidx-datastore-preferences = { group = "androidx.datastore", name="datastore-preferences", version = "1.1.2" } +androidx-fragment-ktx = { group = "androidx.fragment", name = "fragment-ktx", version = "1.8.6" } androidx-lifecycle-runtime = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "androidx-lifecycle" } androidx-lifecycle-viewmodel = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-ktx", version.ref = "androidx-lifecycle" } androidx-localbroadcast = { group = "androidx.localbroadcastmanager", name = "localbroadcastmanager", version = "1.1.0" } androidx-navigation-fragment = { group = "androidx.navigation", name = "navigation-fragment-ktx", version.ref = "androidx-navigation" } androidx-navigation-ui = { group = "androidx.navigation", name = "navigation-ui-ktx", version.ref = "androidx-navigation" } -androidx-palette = { group = "androidx.palette", name = "palette", version = "1.0.0" } -androidx-viewpager2 = { group = "androidx.viewpager2", name = "viewpager2", version = "1.0.0" } -androidx-work-ktx = { group = "androidx.work", name = "work-runtime-ktx", version = "2.9.0" } +androidx-viewpager2 = { group = "androidx.viewpager2", name = "viewpager2", version = "1.1.0" } +androidx-work-ktx = { group = "androidx.work", name = "work-runtime-ktx", version = "2.10.0" } eos-elib = { group = "foundation.e", name = "elib", version = "0.0.1-alpha11" } eos-orbotservice = { group = "foundation.e", name = "orbotservice", version.ref = "orbotservice" } -eos-telemetry = { group = "foundation.e.lib", name = "telemetry", version = "0.0.8-alpha" } -google-material = { group = "com.google.android.material", name = "material", version = "1.11.0" } +eos-telemetry = { group = "foundation.e.lib", name = "telemetry", version = "0.0.11-alpha" } +google-material = { group = "com.google.android.material", name = "material", version = "1.12.0" } google-gson = { group = "com.google.code.gson", name = "gson", version = "2.10.1" } junit = { group = "junit", name = "junit", version = "4.13.2" } koin-core = { group = "io.insert-koin", name = "koin-core", version.ref = "koin" } koin-android = { group = "io.insert-koin", name = "koin-android", version.ref = "koin" } -kotlinx-coroutines-android = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "kotlinx-coroutines" } kotlinx-coroutines = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" } leakcanary = { group = "com.squareup.leakcanary", name = "leakcanary-android", version = "2.10" } maplibre = { group = "org.maplibre.gl", name = "android-sdk", version = "10.2.0" } @@ -57,5 +55,4 @@ androidx-navigation-safeargs = { id = "androidx.navigation.safeargs.kotlin", ver benmanes-versions = { id = "com.github.ben-manes.versions", version = "0.38.0" } detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } -kotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" } spotless = { id = "com.diffplug.spotless", version = "6.23.3" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 16a3dd54..bc0b0df8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sat Jul 16 09:07:59 CEST 2022 +#Thu Feb 13 08:33:45 CET 2025 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip distributionPath=wrapper/dists -zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/permissionseos/src/main/java/foundation/e/advancedprivacy/externalinterfaces/permissions/PermissionsPrivacyModuleImpl.kt b/permissionseos/src/main/java/foundation/e/advancedprivacy/externalinterfaces/permissions/PermissionsPrivacyModuleImpl.kt index 43e33520..4c96a02a 100644 --- a/permissionseos/src/main/java/foundation/e/advancedprivacy/externalinterfaces/permissions/PermissionsPrivacyModuleImpl.kt +++ b/permissionseos/src/main/java/foundation/e/advancedprivacy/externalinterfaces/permissions/PermissionsPrivacyModuleImpl.kt @@ -93,12 +93,14 @@ class PermissionsPrivacyModuleImpl(context: Context) : PermissionsPrivacyModuleB val userIds = listOf(mainUserId, workProfileId).filterNotNull() return userIds.map { profileId -> pm.getInstalledPackagesAsUser(PackageManager.GET_PERMISSIONS, profileId) - .map { pkgInfo: PackageInfo -> - buildApplicationDescription( - appInfo = pkgInfo.applicationInfo, - profileId = profileId, - profileType = if (profileId == mainUserId) MAIN else WORK - ) to pkgInfo + .mapNotNull { pkgInfo: PackageInfo -> + pkgInfo.applicationInfo?.let { applicationInfo -> + buildApplicationDescription( + appInfo = applicationInfo, + profileId = profileId, + profileType = if (profileId == mainUserId) MAIN else WORK + ) to pkgInfo + } } }.flatten() } diff --git a/trackersserviceeos/build.gradle b/trackersserviceeos/build.gradle index 08913811..6d67b582 100644 --- a/trackersserviceeos/build.gradle +++ b/trackersserviceeos/build.gradle @@ -36,6 +36,7 @@ dependencies { libs.androidx.core.ktx, libs.bundles.koin, libs.kotlinx.coroutines, + libs.pcap4j, libs.timber, ) } -- GitLab