summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/current.txt1
-rw-r--r--core/java/android/app/AppOpsManager.java36
-rw-r--r--core/res/AndroidManifest.xml17
3 files changed, 53 insertions, 1 deletions
diff --git a/core/api/current.txt b/core/api/current.txt
index 41375d56f30c..2b5196b3b5f7 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -99,6 +99,7 @@ package android {
field public static final String LOCATION_HARDWARE = "android.permission.LOCATION_HARDWARE";
field public static final String MANAGE_DOCUMENTS = "android.permission.MANAGE_DOCUMENTS";
field public static final String MANAGE_EXTERNAL_STORAGE = "android.permission.MANAGE_EXTERNAL_STORAGE";
+ field public static final String MANAGE_MEDIA = "android.permission.MANAGE_MEDIA";
field public static final String MANAGE_ONGOING_CALLS = "android.permission.MANAGE_ONGOING_CALLS";
field public static final String MANAGE_OWN_CALLS = "android.permission.MANAGE_OWN_CALLS";
field public static final String MASTER_CLEAR = "android.permission.MASTER_CLEAR";
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index d310e8f0ef5c..1c487e5fc6e1 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -90,6 +90,7 @@ import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.BitSet;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -1207,9 +1208,21 @@ public class AppOpsManager {
*/
public static final int OP_COARSE_LOCATION_SOURCE = AppProtoEnums.APP_OP_COARSE_LOCATION_SOURCE;
+ /**
+ * Allow apps to create the requests to manage the media files without user confirmation.
+ *
+ * @see android.Manifest.permission#MANAGE_MEDIA
+ * @see android.provider.MediaStore#createDeleteRequest(ContentResolver, Collection)
+ * @see android.provider.MediaStore#createTrashRequest(ContentResolver, Collection, boolean)
+ * @see android.provider.MediaStore#createWriteRequest(ContentResolver, Collection)
+ *
+ * @hide
+ */
+ public static final int OP_MANAGE_MEDIA = AppProtoEnums.APP_OP_MANAGE_MEDIA;
+
/** @hide */
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
- public static final int _NUM_OP = 110;
+ public static final int _NUM_OP = 111;
/** Access to coarse location information. */
public static final String OPSTR_COARSE_LOCATION = "android:coarse_location";
@@ -1607,6 +1620,18 @@ public class AppOpsManager {
*/
public static final String OPSTR_COARSE_LOCATION_SOURCE = "android:coarse_location_source";
+ /**
+ * Allow apps to create the requests to manage the media files without user confirmation.
+ *
+ * @see android.Manifest.permission#MANAGE_MEDIA
+ * @see android.provider.MediaStore#createDeleteRequest(ContentResolver, Collection)
+ * @see android.provider.MediaStore#createTrashRequest(ContentResolver, Collection, boolean)
+ * @see android.provider.MediaStore#createWriteRequest(ContentResolver, Collection)
+ *
+ * @hide
+ */
+ public static final String OPSTR_MANAGE_MEDIA = "android:manage_media";
+
/** {@link #sAppOpsToNote} not initialized yet for this op */
private static final byte SHOULD_COLLECT_NOTE_OP_NOT_INITIALIZED = 0;
/** Should not collect noting of this app-op in {@link #sAppOpsToNote} */
@@ -1688,6 +1713,7 @@ public class AppOpsManager {
OP_MANAGE_ONGOING_CALLS,
OP_USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER,
OP_SCHEDULE_EXACT_ALARM,
+ OP_MANAGE_MEDIA,
};
/**
@@ -1809,6 +1835,7 @@ public class AppOpsManager {
OP_SCHEDULE_EXACT_ALARM, // SCHEDULE_EXACT_ALARM
OP_FINE_LOCATION, // OP_FINE_LOCATION_SOURCE
OP_COARSE_LOCATION, // OP_COARSE_LOCATION_SOURCE
+ OP_MANAGE_MEDIA, // MANAGE_MEDIA
};
/**
@@ -1925,6 +1952,7 @@ public class AppOpsManager {
OPSTR_SCHEDULE_EXACT_ALARM,
OPSTR_FINE_LOCATION_SOURCE,
OPSTR_COARSE_LOCATION_SOURCE,
+ OPSTR_MANAGE_MEDIA,
};
/**
@@ -2042,6 +2070,7 @@ public class AppOpsManager {
"SCHEDULE_EXACT_ALARM",
"FINE_LOCATION_SOURCE",
"COARSE_LOCATION_SOURCE",
+ "MANAGE_MEDIA",
};
/**
@@ -2160,6 +2189,7 @@ public class AppOpsManager {
Manifest.permission.SCHEDULE_EXACT_ALARM,
null, // no permission for OP_ACCESS_FINE_LOCATION_SOURCE,
null, // no permission for OP_ACCESS_COARSE_LOCATION_SOURCE,
+ Manifest.permission.MANAGE_MEDIA,
};
/**
@@ -2278,6 +2308,7 @@ public class AppOpsManager {
null, // SCHEDULE_EXACT_ALARM
null, // ACCESS_FINE_LOCATION_SOURCE
null, // ACCESS_COARSE_LOCATION_SOURCE
+ null, // MANAGE_MEDIA
};
/**
@@ -2395,6 +2426,7 @@ public class AppOpsManager {
null, // SCHEDULE_EXACT_ALARM
null, // ACCESS_FINE_LOCATION_SOURCE
null, // ACCESS_COARSE_LOCATION_SOURCE
+ null, // MANAGE_MEDIA
};
/**
@@ -2511,6 +2543,7 @@ public class AppOpsManager {
AppOpsManager.MODE_DEFAULT, // SCHEDULE_EXACT_ALARM
AppOpsManager.MODE_ALLOWED, // ACCESS_FINE_LOCATION_SOURCE
AppOpsManager.MODE_ALLOWED, // ACCESS_COARSE_LOCATION_SOURCE
+ AppOpsManager.MODE_DEFAULT, // MANAGE_MEDIA
};
/**
@@ -2631,6 +2664,7 @@ public class AppOpsManager {
false, // SCHEDULE_EXACT_ALARM
false, // ACCESS_FINE_LOCATION_SOURCE
false, // ACCESS_COARSE_LOCATION_SOURCE
+ false, // MANAGE_MEDIA
};
/**
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 68127e3e3eb4..521d246dc0dc 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -987,6 +987,23 @@
android:permissionGroup="android.permission-group.UNDEFINED"
android:protectionLevel="signature|appop|preinstalled" />
+ <!-- Allows an application to modify and delete media files on this device or any connected
+ storage device without user confirmation. Applications must already be granted the
+ {@link #READ_EXTERNAL_STORAGE} or {@link #MANAGE_EXTERNAL_STORAGE}} permissions for this
+ permission to take effect.
+ <p>Even if applications are granted this permission, if applications want to modify or
+ delete media files, they also must get the access by calling
+ {@link android.provider.MediaStore#createWriteRequest(ContentResolver, Collection)},
+ {@link android.provider.MediaStore#createDeleteRequest(ContentResolver, Collection)}, or
+ {@link android.provider.MediaStore#createTrashRequest(ContentResolver, Collection, boolean)}.
+ <p>This permission doesn't give read or write access directly. It only prevents the user
+ confirmation dialog for these requests.
+ <p>If applications are not granted {@link #ACCESS_MEDIA_LOCATION}, the system also pops up
+ the user confirmation dialog for the write request.
+ <p>Protection level: signature|appop|preinstalled -->
+ <permission android:name="android.permission.MANAGE_MEDIA"
+ android:protectionLevel="signature|appop|preinstalled" />
+
<!-- ====================================================================== -->
<!-- Permissions for accessing the device location -->
<!-- ====================================================================== -->