diff options
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)); } } |