diff options
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/content/pm/PackageParser.java | 46 | ||||
| -rw-r--r-- | core/java/android/os/storage/StorageManager.java | 9 |
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"; |
