diff --git a/app/src/main/java/org/fdroid/fdroid/data/Apk.java b/app/src/main/java/org/fdroid/fdroid/data/Apk.java index 37c746904..f544d5d27 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/Apk.java +++ b/app/src/main/java/org/fdroid/fdroid/data/Apk.java @@ -568,6 +568,23 @@ public class Apk extends ValueObject implements Comparable, Parcelable { } } } + if (Build.VERSION.SDK_INT >= 33) { + if (targetSdkVersion >= 33) { + // Do nothing. The targetSdk for the below split-permissions is set to 33, + // so we don't make any changes for apps targetting 33 or above + } else { + // TODO: Change the strings below to Manifest.permission once we target SDK 31. + if (set.contains(Manifest.permission.BODY_SENSORS)) { + set.add("android.permission.BODY_SENSORS_BACKGROUND"); + } + if (set.contains(Manifest.permission.READ_EXTERNAL_STORAGE) || + set.contains(Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + set.add("android.permission.READ_MEDIA_AUDIO"); + set.add("android.permission.READ_MEDIA_VIDEO"); + set.add("android.permission.READ_MEDIA_IMAGES"); + } + } + } requestedPermissions = set.toArray(new String[set.size()]); } diff --git a/app/src/main/java/org/fdroid/fdroid/data/RepoXMLHandler.java b/app/src/main/java/org/fdroid/fdroid/data/RepoXMLHandler.java index 8c337a001..c39cf2f39 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/RepoXMLHandler.java +++ b/app/src/main/java/org/fdroid/fdroid/data/RepoXMLHandler.java @@ -139,6 +139,23 @@ public class RepoXMLHandler extends DefaultHandler { } } } + if (Build.VERSION.SDK_INT >= 33) { + if (curapk.targetSdkVersion >= 33) { + // Do nothing. The targetSdk for the below split-permissions is set to 33, + // so we don't make any changes for apps targetting 33 or above + } else { + // TODO: Change the strings below to Manifest.permission once we target SDK 33. + if (requestedPermissionsSet.contains(Manifest.permission.BODY_SENSORS)) { + requestedPermissionsSet.add("android.permission.BODY_SENSORS_BACKGROUND"); + } + if (requestedPermissionsSet.contains(Manifest.permission.READ_EXTERNAL_STORAGE) || + requestedPermissionsSet.contains(Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + requestedPermissionsSet.add("android.permission.READ_MEDIA_AUDIO"); + requestedPermissionsSet.add("android.permission.READ_MEDIA_VIDEO"); + requestedPermissionsSet.add("android.permission.READ_MEDIA_IMAGES"); + } + } + } int size = requestedPermissionsSet.size(); curapk.requestedPermissions = requestedPermissionsSet.toArray(new String[size]); requestedPermissionsSet.clear();