summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/content/pm/PackageParser.java46
-rw-r--r--core/java/android/os/storage/StorageManager.java9
2 files changed, 55 insertions, 0 deletions
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index d3b37ff08d0b..4708ea48cb6e 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -228,6 +228,24 @@ public class PackageParser {
CHILD_PACKAGE_TAGS.add(TAG_EAT_COMMENT);
}
+ // STOPSHIP(b/112545973): remove once feature enabled by default
+ private static final Set<String> FORCE_AUDIO_PACKAGES;
+ private static final Set<String> FORCE_VIDEO_PACKAGES;
+ private static final Set<String> FORCE_IMAGES_PACKAGES;
+ static {
+ FORCE_AUDIO_PACKAGES = parsePackageList(
+ SystemProperties.get(StorageManager.PROP_FORCE_AUDIO));
+ FORCE_VIDEO_PACKAGES = parsePackageList(
+ SystemProperties.get(StorageManager.PROP_FORCE_VIDEO));
+ FORCE_IMAGES_PACKAGES = parsePackageList(
+ SystemProperties.get(StorageManager.PROP_FORCE_IMAGES));
+ }
+
+ private static Set<String> parsePackageList(String pkgs) {
+ if (TextUtils.isEmpty(pkgs)) return Collections.emptySet();
+ return new ArraySet<String>(Arrays.asList(pkgs.split(",")));
+ }
+
private static final boolean LOG_UNSAFE_BROADCASTS = false;
/**
@@ -2534,6 +2552,34 @@ public class PackageParser {
}
}
}
+ } else {
+ if (FORCE_AUDIO_PACKAGES.contains(pkg.packageName)) {
+ pkg.requestedPermissions.add(android.Manifest.permission.READ_MEDIA_AUDIO);
+ pkg.requestedPermissions.add(android.Manifest.permission.WRITE_MEDIA_AUDIO);
+ }
+ if (FORCE_VIDEO_PACKAGES.contains(pkg.packageName)) {
+ pkg.requestedPermissions.add(android.Manifest.permission.READ_MEDIA_VIDEO);
+ pkg.requestedPermissions.add(android.Manifest.permission.WRITE_MEDIA_VIDEO);
+ }
+ if (FORCE_IMAGES_PACKAGES.contains(pkg.packageName)) {
+ pkg.requestedPermissions.add(android.Manifest.permission.READ_MEDIA_IMAGES);
+ pkg.requestedPermissions.add(android.Manifest.permission.WRITE_MEDIA_IMAGES);
+ }
+
+ if (SystemProperties.getBoolean(StorageManager.PROP_FORCE_LEGACY, false)) {
+ if (pkg.requestedPermissions
+ .contains(android.Manifest.permission.READ_EXTERNAL_STORAGE)) {
+ pkg.requestedPermissions.add(android.Manifest.permission.READ_MEDIA_AUDIO);
+ pkg.requestedPermissions.add(android.Manifest.permission.READ_MEDIA_VIDEO);
+ pkg.requestedPermissions.add(android.Manifest.permission.READ_MEDIA_IMAGES);
+ }
+ if (pkg.requestedPermissions
+ .contains(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
+ pkg.requestedPermissions.add(android.Manifest.permission.WRITE_MEDIA_AUDIO);
+ pkg.requestedPermissions.add(android.Manifest.permission.WRITE_MEDIA_VIDEO);
+ pkg.requestedPermissions.add(android.Manifest.permission.WRITE_MEDIA_IMAGES);
+ }
+ }
}
return pkg;
diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java
index df771df5de0d..c91cda689703 100644
--- a/core/java/android/os/storage/StorageManager.java
+++ b/core/java/android/os/storage/StorageManager.java
@@ -132,6 +132,15 @@ public class StorageManager {
public static final String PROP_ISOLATED_STORAGE = "persist.sys.isolated_storage";
/** {@hide} */
+ public static final String PROP_FORCE_AUDIO = "persist.fw.force_audio";
+ /** {@hide} */
+ public static final String PROP_FORCE_VIDEO = "persist.fw.force_video";
+ /** {@hide} */
+ public static final String PROP_FORCE_IMAGES = "persist.fw.force_images";
+ /** {@hide} */
+ public static final String PROP_FORCE_LEGACY = "persist.fw.force_legacy";
+
+ /** {@hide} */
public static final String UUID_PRIVATE_INTERNAL = null;
/** {@hide} */
public static final String UUID_PRIMARY_PHYSICAL = "primary_physical";