summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/com/android/providers/media/AccessChecker.java12
-rw-r--r--src/com/android/providers/media/LocalCallingIdentity.java58
-rw-r--r--src/com/android/providers/media/MediaProvider.java8
-rw-r--r--src/com/android/providers/media/PermissionActivity.java13
-rw-r--r--src/com/android/providers/media/util/PermissionUtils.java51
-rw-r--r--tests/src/com/android/providers/media/PermissionActivityTest.java9
-rw-r--r--tests/src/com/android/providers/media/util/PermissionUtilsTest.java70
7 files changed, 136 insertions, 85 deletions
diff --git a/src/com/android/providers/media/AccessChecker.java b/src/com/android/providers/media/AccessChecker.java
index 4dea3c487..ba16cdf77 100644
--- a/src/com/android/providers/media/AccessChecker.java
+++ b/src/com/android/providers/media/AccessChecker.java
@@ -107,19 +107,22 @@ public class AccessChecker {
case AUDIO_GENRES_ALL_MEMBERS:
case AUDIO_PLAYLISTS_ID_MEMBERS_ID:
case AUDIO_PLAYLISTS_ID_MEMBERS: {
- return callingIdentity.checkCallingPermissionAudio(forWrite);
+ return callingIdentity.checkCallingPermissionAudio(forWrite,
+ /* forDataDelivery */ true);
}
case IMAGES_MEDIA:
case IMAGES_MEDIA_ID:
case IMAGES_THUMBNAILS_ID:
case IMAGES_THUMBNAILS: {
- return callingIdentity.checkCallingPermissionImages(forWrite);
+ return callingIdentity.checkCallingPermissionImages(forWrite,
+ /* forDataDelivery */ true);
}
case VIDEO_MEDIA_ID:
case VIDEO_MEDIA:
case VIDEO_THUMBNAILS_ID:
case VIDEO_THUMBNAILS: {
- return callingIdentity.checkCallingPermissionVideo(forWrite);
+ return callingIdentity.checkCallingPermissionVideo(forWrite,
+ /* forDataDelivery */ true);
}
case DOWNLOADS_ID:
case DOWNLOADS:
@@ -166,7 +169,8 @@ public class AccessChecker {
case DOWNLOADS:
case FILES_ID:
case FILES: {
- return callingIdentity.checkCallingPermissionUserSelected();
+ return callingIdentity.checkCallingPermissionUserSelected(
+ /* forDataDelivery */ true);
}
default: return false;
}
diff --git a/src/com/android/providers/media/LocalCallingIdentity.java b/src/com/android/providers/media/LocalCallingIdentity.java
index e30a68ca1..ef98544ec 100644
--- a/src/com/android/providers/media/LocalCallingIdentity.java
+++ b/src/com/android/providers/media/LocalCallingIdentity.java
@@ -358,8 +358,16 @@ public class LocalCallingIdentity {
private volatile int hasPermissionResolved;
public boolean hasPermission(int permission) {
+ return hasPermission(permission, /* forDataDelivery */ true);
+ }
+
+ /**
+ * Checks the package for the input permission and if the param
+ * forDataDelivery is true then makes a note of it.
+ */
+ public boolean hasPermission(int permission, boolean forDataDelivery) {
if ((hasPermissionResolved & permission) == 0) {
- if (hasPermissionInternal(permission)) {
+ if (hasPermissionInternal(permission, forDataDelivery)) {
hasPermission |= permission;
}
hasPermissionResolved |= permission;
@@ -367,7 +375,7 @@ public class LocalCallingIdentity {
return (hasPermission & permission) != 0;
}
- private boolean hasPermissionInternal(int permission) {
+ private boolean hasPermissionInternal(int permission, boolean forDataDelivery) {
boolean targetSdkIsAtLeastT = getTargetSdkVersion() > Build.VERSION_CODES.S_V2;
// While we're here, enforce any broad user-level restrictions
if ((uid == Process.SHELL_UID) && context.getSystemService(UserManager.class)
@@ -401,22 +409,25 @@ public class LocalCallingIdentity {
case PERMISSION_READ_AUDIO:
return checkPermissionReadAudio(
- context, pid, uid, getPackageName(), attributionTag, targetSdkIsAtLeastT);
+ context, pid, uid, getPackageName(), attributionTag, targetSdkIsAtLeastT,
+ forDataDelivery);
case PERMISSION_READ_VIDEO:
return checkPermissionReadVideo(
- context, pid, uid, getPackageName(), attributionTag, targetSdkIsAtLeastT);
+ context, pid, uid, getPackageName(), attributionTag, targetSdkIsAtLeastT,
+ forDataDelivery);
case PERMISSION_READ_IMAGES:
return checkPermissionReadImages(
- context, pid, uid, getPackageName(), attributionTag, targetSdkIsAtLeastT);
+ context, pid, uid, getPackageName(), attributionTag, targetSdkIsAtLeastT,
+ forDataDelivery);
case PERMISSION_WRITE_AUDIO:
return checkPermissionWriteAudio(
- context, pid, uid, getPackageName(), attributionTag);
+ context, pid, uid, getPackageName(), attributionTag, forDataDelivery);
case PERMISSION_WRITE_VIDEO:
return checkPermissionWriteVideo(
- context, pid, uid, getPackageName(), attributionTag);
+ context, pid, uid, getPackageName(), attributionTag, forDataDelivery);
case PERMISSION_WRITE_IMAGES:
return checkPermissionWriteImages(
- context, pid, uid, getPackageName(), attributionTag);
+ context, pid, uid, getPackageName(), attributionTag, forDataDelivery);
case PERMISSION_IS_SYSTEM_GALLERY:
return checkWriteImagesOrVideoAppOps(
context, uid, getPackageName(), attributionTag);
@@ -431,7 +442,7 @@ public class LocalCallingIdentity {
context, pid, uid, getPackageName(), attributionTag);
case PERMISSION_READ_MEDIA_VISUAL_USER_SELECTED:
return checkPermissionReadVisualUserSelected(context, pid, uid, getPackageName(),
- attributionTag, targetSdkIsAtLeastT);
+ attributionTag, targetSdkIsAtLeastT, forDataDelivery);
case PERMISSION_QUERY_ALL_PACKAGES:
return checkPermissionQueryAllPackages(
context, pid, uid, getPackageName(), attributionTag);
@@ -684,37 +695,39 @@ public class LocalCallingIdentity {
/**
* Returns {@code true} if this package has Audio read/write permissions.
*/
- public boolean checkCallingPermissionAudio(boolean forWrite) {
+ public boolean checkCallingPermissionAudio(boolean forWrite, boolean forDataDelivery) {
if (forWrite) {
- return hasPermission(PERMISSION_WRITE_AUDIO);
+ return hasPermission(PERMISSION_WRITE_AUDIO, forDataDelivery);
} else {
// write permission should be enough for reading as well
- return hasPermission(PERMISSION_READ_AUDIO)
- || hasPermission(PERMISSION_WRITE_AUDIO);
+ return hasPermission(PERMISSION_READ_AUDIO, forDataDelivery)
+ || hasPermission(PERMISSION_WRITE_AUDIO, forDataDelivery);
}
}
/**
* Returns {@code true} if this package has Video read/write permissions.
*/
- public boolean checkCallingPermissionVideo(boolean forWrite) {
+ public boolean checkCallingPermissionVideo(boolean forWrite, boolean forDataDelivery) {
if (forWrite) {
- return hasPermission(PERMISSION_WRITE_VIDEO);
+ return hasPermission(PERMISSION_WRITE_VIDEO, forDataDelivery);
} else {
// write permission should be enough for reading as well
- return hasPermission(PERMISSION_READ_VIDEO) || hasPermission(PERMISSION_WRITE_VIDEO);
+ return hasPermission(PERMISSION_READ_VIDEO, forDataDelivery) || hasPermission(
+ PERMISSION_WRITE_VIDEO, forDataDelivery);
}
}
/**
* Returns {@code true} if this package has Image read/write permissions.
*/
- public boolean checkCallingPermissionImages(boolean forWrite) {
+ public boolean checkCallingPermissionImages(boolean forWrite, boolean forDataDelivery) {
if (forWrite) {
- return hasPermission(PERMISSION_WRITE_IMAGES);
+ return hasPermission(PERMISSION_WRITE_IMAGES, forDataDelivery);
} else {
// write permission should be enough for reading as well
- return hasPermission(PERMISSION_READ_IMAGES) || hasPermission(PERMISSION_WRITE_IMAGES);
+ return hasPermission(PERMISSION_READ_IMAGES, forDataDelivery) || hasPermission(
+ PERMISSION_WRITE_IMAGES, forDataDelivery);
}
}
@@ -752,11 +765,12 @@ public class LocalCallingIdentity {
/**
* Return {@code true} if this package has user selected access on images/videos.
*/
- public boolean checkCallingPermissionUserSelected() {
+ public boolean checkCallingPermissionUserSelected(boolean forDataDelivery) {
// For user select mode READ_MEDIA_VISUAL_USER_SELECTED == true &&
// READ_MEDIA_IMAGES == false && READ_MEDIA_VIDEO == false
- return hasPermission(PERMISSION_READ_MEDIA_VISUAL_USER_SELECTED)
- && !hasPermission(PERMISSION_READ_IMAGES) && !hasPermission(PERMISSION_READ_VIDEO);
+ return hasPermission(PERMISSION_READ_MEDIA_VISUAL_USER_SELECTED, forDataDelivery)
+ && !hasPermission(PERMISSION_READ_IMAGES, forDataDelivery) && !hasPermission(
+ PERMISSION_READ_VIDEO, forDataDelivery);
}
protected void dump(PrintWriter writer) {
diff --git a/src/com/android/providers/media/MediaProvider.java b/src/com/android/providers/media/MediaProvider.java
index 8d075220b..a220c19c6 100644
--- a/src/com/android/providers/media/MediaProvider.java
+++ b/src/com/android/providers/media/MediaProvider.java
@@ -735,7 +735,7 @@ public class MediaProvider extends ContentProvider {
packageManager.getPackageUidAsUser(
packageName, PackageManager.PackageInfoFlags.of(0), userId);
LocalCallingIdentity lci = LocalCallingIdentity.fromExternal(context, mUserCache, uid);
- if (!lci.checkCallingPermissionUserSelected()) {
+ if (!lci.checkCallingPermissionUserSelected(/* forDataDelivery */ false)) {
String[] packages = lci.getSharedPackageNamesArray();
mMediaGrants.removeAllMediaGrantsForPackages(
packages, /* reason= */ "Mode changed: " + op, userId);
@@ -3360,11 +3360,13 @@ public class MediaProvider extends ContentProvider {
private ArrayList<String> getIncludedDefaultDirectories() {
final ArrayList<String> includedDefaultDirs = new ArrayList<>();
- if (mCallingIdentity.get().checkCallingPermissionVideo(/* forWrite */ true)) {
+ if (mCallingIdentity.get().checkCallingPermissionVideo(/* forWrite */
+ true, /* forDataDelivery */ true)) {
includedDefaultDirs.add(Environment.DIRECTORY_DCIM);
includedDefaultDirs.add(Environment.DIRECTORY_PICTURES);
includedDefaultDirs.add(Environment.DIRECTORY_MOVIES);
- } else if (mCallingIdentity.get().checkCallingPermissionImages(/* forWrite */ true)) {
+ } else if (mCallingIdentity.get().checkCallingPermissionImages(/* forWrite */
+ true, /* forDataDelivery */ true)) {
includedDefaultDirs.add(Environment.DIRECTORY_DCIM);
includedDefaultDirs.add(Environment.DIRECTORY_PICTURES);
}
diff --git a/src/com/android/providers/media/PermissionActivity.java b/src/com/android/providers/media/PermissionActivity.java
index ac38fe30f..5ebe51fa8 100644
--- a/src/com/android/providers/media/PermissionActivity.java
+++ b/src/com/android/providers/media/PermissionActivity.java
@@ -512,21 +512,24 @@ public class PermissionActivity extends Activity {
if (shouldCheckMediaPermissions) {
// check READ_MEDIA_AUDIO
if (shouldCheckReadAudio && !checkPermissionReadAudio(context, pid, uid,
- packageName, attributionTag, isTargetSdkAtLeastT)) {
+ packageName, attributionTag, isTargetSdkAtLeastT,
+ /* forDataDelivery */ true)) {
Log.d(TAG, "No permission READ_MEDIA_AUDIO or MANAGE_EXTERNAL_STORAGE");
return true;
}
// check READ_MEDIA_IMAGES
if (shouldCheckReadImages && !checkPermissionReadImages(context, pid, uid,
- packageName, attributionTag, isTargetSdkAtLeastT)) {
+ packageName, attributionTag, isTargetSdkAtLeastT,
+ /* forDataDelivery */ true)) {
Log.d(TAG, "No permission READ_MEDIA_IMAGES or MANAGE_EXTERNAL_STORAGE");
return true;
}
// check READ_MEDIA_VIDEO
if (shouldCheckReadVideo && !checkPermissionReadVideo(context, pid, uid,
- packageName, attributionTag, isTargetSdkAtLeastT)) {
+ packageName, attributionTag, isTargetSdkAtLeastT,
+ /* forDataDelivery */ true)) {
Log.d(TAG, "No permission READ_MEDIA_VIDEO or MANAGE_EXTERNAL_STORAGE");
return true;
}
@@ -534,9 +537,9 @@ public class PermissionActivity extends Activity {
// For subtitle case, check READ_MEDIA_AUDIO or READ_MEDIA_VIDEO
if (mShouldCheckReadAudioOrReadVideo
&& !checkPermissionReadAudio(context, pid, uid, packageName, attributionTag,
- isTargetSdkAtLeastT)
+ isTargetSdkAtLeastT, /* forDataDelivery */ true)
&& !checkPermissionReadVideo(context, pid, uid, packageName, attributionTag,
- isTargetSdkAtLeastT)) {
+ isTargetSdkAtLeastT, /* forDataDelivery */ true)) {
Log.d(TAG, "No permission READ_MEDIA_AUDIO, READ_MEDIA_VIDEO or "
+ "MANAGE_EXTERNAL_STORAGE");
return true;
diff --git a/src/com/android/providers/media/util/PermissionUtils.java b/src/com/android/providers/media/util/PermissionUtils.java
index 3a272eee0..3dcdc1150 100644
--- a/src/com/android/providers/media/util/PermissionUtils.java
+++ b/src/com/android/providers/media/util/PermissionUtils.java
@@ -191,7 +191,8 @@ public class PermissionUtils {
}
return amlRequested && userSelectedImplicit && checkPermissionReadVisualUserSelected(
- context, pid, uid, packageName, attributionTag, isTargetSdkAtLeastT);
+ context, pid, uid, packageName, attributionTag, isTargetSdkAtLeastT,
+ /* forDataDelivery */ true);
} catch (PackageManager.NameNotFoundException e) {
return false;
}
@@ -223,7 +224,8 @@ public class PermissionUtils {
int uid,
@NonNull String packageName,
@Nullable String attributionTag,
- boolean targetSdkIsAtLeastT) {
+ boolean targetSdkIsAtLeastT,
+ boolean forDataDelivery) {
String permission = targetSdkIsAtLeastT && SdkLevel.isAtLeastT()
? READ_MEDIA_AUDIO : READ_EXTERNAL_STORAGE;
@@ -233,18 +235,18 @@ public class PermissionUtils {
}
return checkAppOpAllowingLegacy(context, OPSTR_READ_MEDIA_AUDIO, pid,
uid, packageName, attributionTag,
- generateAppOpMessage(packageName, sOpDescription.get()));
+ generateAppOpMessage(packageName, sOpDescription.get()), forDataDelivery);
}
public static boolean checkPermissionWriteAudio(@NonNull Context context, int pid, int uid,
- @NonNull String packageName, @Nullable String attributionTag) {
+ @NonNull String packageName, @Nullable String attributionTag, boolean forDataDelivery) {
if (!checkPermissionAllowingNonLegacy(
context, WRITE_EXTERNAL_STORAGE, pid, uid, packageName)) {
return false;
}
return checkAppOpAllowingLegacy(context, OPSTR_WRITE_MEDIA_AUDIO, pid,
uid, packageName, attributionTag,
- generateAppOpMessage(packageName, sOpDescription.get()));
+ generateAppOpMessage(packageName, sOpDescription.get()), forDataDelivery);
}
public static boolean checkPermissionReadVideo(
@@ -253,7 +255,8 @@ public class PermissionUtils {
int uid,
@NonNull String packageName,
@Nullable String attributionTag,
- boolean targetSdkIsAtLeastT) {
+ boolean targetSdkIsAtLeastT,
+ boolean forDataDelivery) {
String permission = targetSdkIsAtLeastT && SdkLevel.isAtLeastT()
? READ_MEDIA_VIDEO : READ_EXTERNAL_STORAGE;
@@ -263,18 +266,18 @@ public class PermissionUtils {
return checkAppOpAllowingLegacy(context, OPSTR_READ_MEDIA_VIDEO, pid,
uid, packageName, attributionTag,
- generateAppOpMessage(packageName, sOpDescription.get()));
+ generateAppOpMessage(packageName, sOpDescription.get()), forDataDelivery);
}
public static boolean checkPermissionWriteVideo(@NonNull Context context, int pid, int uid,
- @NonNull String packageName, @Nullable String attributionTag) {
+ @NonNull String packageName, @Nullable String attributionTag, boolean forDataDelivery) {
if (!checkPermissionAllowingNonLegacy(
context, WRITE_EXTERNAL_STORAGE, pid, uid, packageName)) {
return false;
}
return checkAppOpAllowingLegacy(context, OPSTR_WRITE_MEDIA_VIDEO, pid,
uid, packageName, attributionTag,
- generateAppOpMessage(packageName, sOpDescription.get()));
+ generateAppOpMessage(packageName, sOpDescription.get()), forDataDelivery);
}
public static boolean checkPermissionReadImages(
@@ -283,7 +286,7 @@ public class PermissionUtils {
int uid,
@NonNull String packageName,
@Nullable String attributionTag,
- boolean targetSdkIsAtLeastT) {
+ boolean targetSdkIsAtLeastT, boolean forDataDelivery) {
String permission = targetSdkIsAtLeastT && SdkLevel.isAtLeastT()
? READ_MEDIA_IMAGES : READ_EXTERNAL_STORAGE;
@@ -293,18 +296,18 @@ public class PermissionUtils {
return checkAppOpAllowingLegacy(context, OPSTR_READ_MEDIA_IMAGES, pid,
uid, packageName, attributionTag,
- generateAppOpMessage(packageName, sOpDescription.get()));
+ generateAppOpMessage(packageName, sOpDescription.get()), forDataDelivery);
}
public static boolean checkPermissionWriteImages(@NonNull Context context, int pid, int uid,
- @NonNull String packageName, @Nullable String attributionTag) {
+ @NonNull String packageName, @Nullable String attributionTag, boolean forDataDelivery) {
if (!checkPermissionAllowingNonLegacy(
context, WRITE_EXTERNAL_STORAGE, pid, uid, packageName)) {
return false;
}
return checkAppOpAllowingLegacy(context, OPSTR_WRITE_MEDIA_IMAGES, pid,
uid, packageName, attributionTag,
- generateAppOpMessage(packageName, sOpDescription.get()));
+ generateAppOpMessage(packageName, sOpDescription.get()), forDataDelivery);
}
/**
@@ -317,13 +320,21 @@ public class PermissionUtils {
int uid,
@NonNull String packageName,
@Nullable String attributionTag,
- boolean targetSdkIsAtLeastT) {
+ boolean targetSdkIsAtLeastT,
+ boolean forDataDelivery) {
if (!SdkLevel.isAtLeastU() || !targetSdkIsAtLeastT) {
return false;
}
- return checkPermissionForDataDelivery(context, READ_MEDIA_VISUAL_USER_SELECTED, pid, uid,
- packageName, attributionTag,
- generateAppOpMessage(packageName, sOpDescription.get()));
+ if (forDataDelivery) {
+ return checkPermissionForDataDelivery(context, READ_MEDIA_VISUAL_USER_SELECTED, pid,
+ uid,
+ packageName, attributionTag,
+ generateAppOpMessage(packageName, sOpDescription.get()));
+ } else {
+ return checkPermissionForPreflight(context, READ_MEDIA_VISUAL_USER_SELECTED, pid,
+ uid,
+ packageName);
+ }
}
/**
@@ -476,9 +487,11 @@ public class PermissionUtils {
*/
private static boolean checkAppOpAllowingLegacy(@NonNull Context context,
@NonNull String op, int pid, int uid, @NonNull String packageName,
- @Nullable String attributionTag, @Nullable String opMessage) {
+ @Nullable String attributionTag, @Nullable String opMessage, boolean forDataDelivery) {
final AppOpsManager appOps = context.getSystemService(AppOpsManager.class);
- final int mode = appOps.noteOpNoThrow(op, uid, packageName, attributionTag, opMessage);
+ final int mode = forDataDelivery
+ ? appOps.noteOpNoThrow(op, uid, packageName, attributionTag, opMessage)
+ : appOps.unsafeCheckOpNoThrow(op, uid, packageName);
switch (mode) {
case AppOpsManager.MODE_ALLOWED:
return true;
diff --git a/tests/src/com/android/providers/media/PermissionActivityTest.java b/tests/src/com/android/providers/media/PermissionActivityTest.java
index 1e8b1cd10..984c9c2ca 100644
--- a/tests/src/com/android/providers/media/PermissionActivityTest.java
+++ b/tests/src/com/android/providers/media/PermissionActivityTest.java
@@ -529,13 +529,16 @@ public class PermissionActivityTest {
/* attributionTag= */ null);
} else if (TextUtils.equals(op, OP_READ_MEDIA_IMAGES)) {
return expected == checkPermissionReadImages(
- context, pid, uid, packageName, /* attributionTag= */ null, /* isAtleastT */ true);
+ context, pid, uid, packageName, /* attributionTag= */ null, /* isAtleastT */ true,
+ /* forDataDelivery */ true);
} else if (TextUtils.equals(op, OP_READ_MEDIA_AUDIO)) {
return expected == checkPermissionReadAudio(
- context, pid, uid, packageName, /* attributionTag= */ null, /* isAtleastT */ true);
+ context, pid, uid, packageName, /* attributionTag= */ null, /* isAtleastT */ true,
+ /* forDataDelivery */ true);
} else if (TextUtils.equals(op, OP_READ_MEDIA_VIDEO)) {
return expected == checkPermissionReadVideo(
- context, pid, uid, packageName, /* attributionTag= */ null, /* isAtleastT */ true);
+ context, pid, uid, packageName, /* attributionTag= */ null, /* isAtleastT */ true,
+ /* forDataDelivery */ true);
} else if (TextUtils.equals(op, OP_MANAGE_EXTERNAL_STORAGE)) {
return expected == checkPermissionManager(context, pid, uid, packageName,
/* attributionTag= */ null);
diff --git a/tests/src/com/android/providers/media/util/PermissionUtilsTest.java b/tests/src/com/android/providers/media/util/PermissionUtilsTest.java
index 93def1738..eafc383a4 100644
--- a/tests/src/com/android/providers/media/util/PermissionUtilsTest.java
+++ b/tests/src/com/android/providers/media/util/PermissionUtilsTest.java
@@ -139,12 +139,18 @@ public class PermissionUtilsTest {
assertThat(checkPermissionReadStorage(context, pid, uid, packageName, null)).isTrue();
assertThat(checkPermissionWriteStorage(context, pid, uid, packageName, null)).isTrue();
- assertThat(checkPermissionReadAudio(context, pid, uid, packageName, null, false)).isTrue();
- assertThat(checkPermissionWriteAudio(context, pid, uid, packageName, null)).isFalse();
- assertThat(checkPermissionReadVideo(context, pid, uid, packageName, null, false)).isTrue();
- assertThat(checkPermissionWriteVideo(context, pid, uid, packageName, null)).isFalse();
- assertThat(checkPermissionReadImages(context, pid, uid, packageName, null, false)).isTrue();
- assertThat(checkPermissionWriteImages(context, pid, uid, packageName, null)).isFalse();
+ assertThat(checkPermissionReadAudio(context, pid, uid, packageName, null, false,
+ /* forDataDelivery */ true)).isTrue();
+ assertThat(checkPermissionWriteAudio(context, pid, uid, packageName, null,
+ /* forDataDelivery */ true)).isFalse();
+ assertThat(checkPermissionReadVideo(context, pid, uid, packageName, null, false,
+ /* forDataDelivery */ true)).isTrue();
+ assertThat(checkPermissionWriteVideo(context, pid, uid, packageName, null,
+ /* forDataDelivery */ true)).isFalse();
+ assertThat(checkPermissionReadImages(context, pid, uid, packageName, null, false,
+ /* forDataDelivery */ true)).isTrue();
+ assertThat(checkPermissionWriteImages(context, pid, uid, packageName, null,
+ /* forDataDelivery */ true)).isFalse();
assertThat(checkPermissionInstallPackages(context, pid, uid, packageName, null)).isFalse();
}
@@ -291,9 +297,9 @@ public class PermissionUtilsTest {
assertMediaReadPermissions(TEST_APP_PID, testAppUid, packageName,
true /* targetSdkIsAtLeastT */, false /* expected */);
assertThat(checkPermissionReadVisualUserSelected(getContext(), TEST_APP_PID, testAppUid,
- packageName, null, false)).isFalse();
+ packageName, null, false, /* forDataDelivery */ true)).isFalse();
assertThat(checkPermissionReadVisualUserSelected(getContext(), TEST_APP_PID, testAppUid,
- packageName, null, true)).isFalse();
+ packageName, null, true, /* forDataDelivery */ true)).isFalse();
} finally {
dropShellPermission();
}
@@ -462,19 +468,19 @@ public class PermissionUtilsTest {
try {
assertThat(checkPermissionReadVisualUserSelected(getApplicationContext(), TEST_APP_PID,
testAppUid,
- packageName, null, targetSdkIsAtLeastT)).isTrue();
+ packageName, null, targetSdkIsAtLeastT, /* forDataDelivery */ true)).isTrue();
modifyAppOp(testAppUid, OPSTR_READ_MEDIA_VISUAL_USER_SELECTED,
AppOpsManager.MODE_ERRORED);
assertThat(checkPermissionReadVisualUserSelected(getApplicationContext(), TEST_APP_PID,
testAppUid,
- packageName, null, targetSdkIsAtLeastT)).isFalse();
+ packageName, null, targetSdkIsAtLeastT, /* forDataDelivery */ true)).isFalse();
modifyAppOp(testAppUid, OPSTR_READ_MEDIA_VISUAL_USER_SELECTED,
AppOpsManager.MODE_ALLOWED);
assertThat(checkPermissionReadVisualUserSelected(getApplicationContext(), TEST_APP_PID,
testAppUid,
- packageName, null, targetSdkIsAtLeastT)).isTrue();
+ packageName, null, targetSdkIsAtLeastT, /* forDataDelivery */ true)).isTrue();
} finally {
dropShellPermission();
}
@@ -487,15 +493,15 @@ public class PermissionUtilsTest {
adoptShellPermission(UPDATE_APP_OPS_STATS, MANAGE_APP_OPS_MODES);
try {
assertThat(checkPermissionReadVideo(getContext(), TEST_APP_PID, testAppUid,
- packageName, null, isAtLeastT)).isTrue();
+ packageName, null, isAtLeastT, /* forDataDelivery */ true)).isTrue();
modifyAppOp(testAppUid, OPSTR_READ_MEDIA_VIDEO, AppOpsManager.MODE_ERRORED);
assertThat(checkPermissionReadVideo(getContext(), TEST_APP_PID, testAppUid,
- packageName, null, isAtLeastT)).isFalse();
+ packageName, null, isAtLeastT, /* forDataDelivery */ true)).isFalse();
modifyAppOp(testAppUid, OPSTR_READ_MEDIA_VIDEO, AppOpsManager.MODE_ALLOWED);
// Adding sleep before appops check to allow appops change to propagate
SystemClock.sleep(200);
assertThat(checkPermissionReadVideo(getContext(), TEST_APP_PID, testAppUid,
- packageName, null, isAtLeastT)).isTrue();
+ packageName, null, isAtLeastT, /* forDataDelivery */ true)).isTrue();
} finally {
dropShellPermission();
}
@@ -511,17 +517,17 @@ public class PermissionUtilsTest {
try {
assertThat(
checkPermissionWriteAudio(getContext(), TEST_APP_PID, testAppUid, packageName,
- null)).isFalse();
+ null, /* forDataDelivery */ true)).isFalse();
modifyAppOp(testAppUid, OPSTR_WRITE_MEDIA_AUDIO, AppOpsManager.MODE_ALLOWED);
assertThat(
checkPermissionWriteAudio(getContext(), TEST_APP_PID, testAppUid, packageName,
- null)).isTrue();
+ null, /* forDataDelivery */ true)).isTrue();
modifyAppOp(testAppUid, OPSTR_WRITE_MEDIA_AUDIO, AppOpsManager.MODE_ERRORED);
assertThat(
checkPermissionWriteAudio(getContext(), TEST_APP_PID, testAppUid, packageName,
- null)).isFalse();
+ null, /* forDataDelivery */ true)).isFalse();
} finally {
dropShellPermission();
}
@@ -545,17 +551,17 @@ public class PermissionUtilsTest {
adoptShellPermission(UPDATE_APP_OPS_STATS, MANAGE_APP_OPS_MODES);
try {
assertThat(checkPermissionReadAudio(getContext(), TEST_APP_PID, testAppUid,
- packageName, null, isAtLeastT)).isTrue();
+ packageName, null, isAtLeastT, /* forDataDelivery */ true)).isTrue();
modifyAppOp(testAppUid, OPSTR_READ_MEDIA_AUDIO, AppOpsManager.MODE_ERRORED);
assertThat(checkPermissionReadAudio(getContext(), TEST_APP_PID, testAppUid,
- packageName, null, isAtLeastT)).isFalse();
+ packageName, null, isAtLeastT, /* forDataDelivery */ true)).isFalse();
modifyAppOp(testAppUid, OPSTR_READ_MEDIA_AUDIO, AppOpsManager.MODE_ALLOWED);
// Adding sleep before appops check to allow appops change to propagate
SystemClock.sleep(200);
assertThat(checkPermissionReadAudio(getContext(), TEST_APP_PID, testAppUid,
- packageName, null, isAtLeastT)).isTrue();
+ packageName, null, isAtLeastT, /* forDataDelivery */ true)).isTrue();
} finally {
dropShellPermission();
}
@@ -579,17 +585,17 @@ public class PermissionUtilsTest {
adoptShellPermission(UPDATE_APP_OPS_STATS, MANAGE_APP_OPS_MODES);
try {
assertThat(checkPermissionReadImages(getContext(), TEST_APP_PID, testAppUid,
- packageName, null, isAtLeastT)).isTrue();
+ packageName, null, isAtLeastT, /* forDataDelivery */ true)).isTrue();
modifyAppOp(testAppUid, OPSTR_READ_MEDIA_IMAGES, AppOpsManager.MODE_ERRORED);
assertThat(checkPermissionReadImages(getContext(), TEST_APP_PID, testAppUid,
- packageName, null, isAtLeastT)).isFalse();
+ packageName, null, isAtLeastT, /* forDataDelivery */ true)).isFalse();
modifyAppOp(testAppUid, OPSTR_READ_MEDIA_IMAGES, AppOpsManager.MODE_ALLOWED);
// Adding sleep before appops check to allow appops change to propagate
SystemClock.sleep(200);
assertThat(checkPermissionReadImages(getContext(), TEST_APP_PID, testAppUid,
- packageName, null, isAtLeastT)).isTrue();
+ packageName, null, isAtLeastT, /* forDataDelivery */ true)).isTrue();
} finally {
dropShellPermission();
}
@@ -685,11 +691,14 @@ public class PermissionUtilsTest {
assertEquals(expected,
checkWriteImagesOrVideoAppOps(getContext(), uid, packageName, null));
assertEquals(expected,
- checkPermissionWriteImages(getContext(), pid, uid, packageName, null));
+ checkPermissionWriteImages(getContext(), pid, uid, packageName, null,
+ /* forDataDelivery */ true));
assertEquals(expected,
- checkPermissionWriteVideo(getContext(), pid, uid, packageName, null));
+ checkPermissionWriteVideo(getContext(), pid, uid, packageName, null,
+ /* forDataDelivery */ true));
assertThat(
- checkPermissionWriteAudio(getContext(), pid, uid, packageName, null))
+ checkPermissionWriteAudio(getContext(), pid, uid, packageName, null,
+ /* forDataDelivery */ true))
.isFalse();
}
@@ -698,14 +707,17 @@ public class PermissionUtilsTest {
assertEquals(
expected,
checkPermissionReadAudio(
- getContext(), pid, uid, packageName, null, targetSdkIsAtLeastT));
+ getContext(), pid, uid, packageName, null, targetSdkIsAtLeastT,
+ /* forDataDelivery */ true));
assertEquals(
expected,
checkPermissionReadImages(
- getContext(), pid, uid, packageName, null, targetSdkIsAtLeastT));
+ getContext(), pid, uid, packageName, null, targetSdkIsAtLeastT,
+ /* forDataDelivery */ true));
assertEquals(
expected,
checkPermissionReadVideo(
- getContext(), pid, uid, packageName, null, targetSdkIsAtLeastT));
+ getContext(), pid, uid, packageName, null, targetSdkIsAtLeastT,
+ /* forDataDelivery */ true));
}
}