diff options
Diffstat (limited to 'src/com/android/providers/media/util/PermissionUtils.java')
-rw-r--r-- | src/com/android/providers/media/util/PermissionUtils.java | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/com/android/providers/media/util/PermissionUtils.java b/src/com/android/providers/media/util/PermissionUtils.java index fc10b78c5..adbe0e210 100644 --- a/src/com/android/providers/media/util/PermissionUtils.java +++ b/src/com/android/providers/media/util/PermissionUtils.java @@ -185,6 +185,20 @@ public class PermissionUtils { generateAppOpMessage(packageName, sOpDescription.get())); } + /** + * Returns {@code true} if the given package has write images or write video app op, which + * indicates the package is a system gallery. + */ + public static boolean checkWriteImagesOrVideoAppOps(@NonNull Context context, int uid, + @NonNull String packageName, @Nullable String attributionTag) { + return checkAppOp( + context, OPSTR_WRITE_MEDIA_IMAGES, uid, packageName, attributionTag, + generateAppOpMessage(packageName, sOpDescription.get())) + || checkAppOp( + context, OPSTR_WRITE_MEDIA_VIDEO, uid, packageName, attributionTag, + generateAppOpMessage(packageName, sOpDescription.get())); + } + @VisibleForTesting static boolean checkNoIsolatedStorageGranted(@NonNull Context context, int uid, @NonNull String packageName, @Nullable String attributionTag) { @@ -223,6 +237,27 @@ public class PermissionUtils { } /** + * Checks *only* App Ops. + */ + private static boolean checkAppOp(@NonNull Context context, + @NonNull String op, int uid, @NonNull String packageName, + @Nullable String attributionTag, @Nullable String opMessage) { + final AppOpsManager appOps = context.getSystemService(AppOpsManager.class); + final int mode = appOps.noteOpNoThrow(op, uid, packageName, attributionTag, opMessage); + switch (mode) { + case AppOpsManager.MODE_ALLOWED: + return true; + case AppOpsManager.MODE_DEFAULT: + case AppOpsManager.MODE_IGNORED: + case AppOpsManager.MODE_ERRORED: + return false; + default: + throw new IllegalStateException(op + " has unknown mode " + mode); + } + } + + + /** * Checks *only* App Ops, also returns true for legacy apps. */ private static boolean checkAppOpAllowingLegacy(@NonNull Context context, |