From 54205b00c63180d593c54838ba8703071e1fc929 Mon Sep 17 00:00:00 2001 From: Chirayu Desai Date: Thu, 14 Jul 2022 05:02:30 +0530 Subject: [PATCH] Handle API 33 split-permissions * https://developer.android.com/about/versions/13/behavior-changes-13#body-sensors-background-permission * https://developer.android.com/about/versions/13/behavior-changes-13#granular-media-permissions 13 Beta4 GSI: * https://dumps.tadiphone.dev/dumps/google/generic/-/blob/gsi_gms_arm64-user-13-TPB4.220624.005-8812298-release-keys/system/system/etc/permissions/platform.xml TODO: Wait for android13 source drop for link to fw/b Issue: calyxos#1088 Change-Id: I7c3cd17f2a99b667ff085e7cb0a8ec34010c9289 --- .../main/java/org/fdroid/fdroid/data/Apk.java | 17 +++++++++++++++++ .../org/fdroid/fdroid/data/RepoXMLHandler.java | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) 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();