Loading core/api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -10386,6 +10386,7 @@ package android.content { method @CheckResult(suggest="#enforceCallingPermission(String,String)") public abstract int checkCallingPermission(@NonNull String); method @CheckResult(suggest="#enforceCallingUriPermission(Uri,int,String)") public abstract int checkCallingUriPermission(android.net.Uri, int); method @NonNull public int[] checkCallingUriPermissions(@NonNull java.util.List<android.net.Uri>, int); method @FlaggedApi("android.security.content_uri_permission_apis") public int checkContentUriPermissionFull(@NonNull android.net.Uri, int, int, int); method @CheckResult(suggest="#enforcePermission(String,int,int,String)") public abstract int checkPermission(@NonNull String, int, int); method public abstract int checkSelfPermission(@NonNull String); method @CheckResult(suggest="#enforceUriPermission(Uri,int,int,String)") public abstract int checkUriPermission(android.net.Uri, int, int, int); core/java/android/app/ContextImpl.java +11 −0 Original line number Diff line number Diff line Loading @@ -2409,6 +2409,17 @@ class ContextImpl extends Context { } } @Override public int checkContentUriPermissionFull(Uri uri, int pid, int uid, int modeFlags) { try { return ActivityManager.getService().checkContentUriPermissionFull( ContentProvider.getUriWithoutUserId(uri), pid, uid, modeFlags, resolveUserId(uri)); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } @NonNull @Override public int[] checkUriPermissions(@NonNull List<Uri> uris, int pid, int uid, Loading core/java/android/app/IActivityManager.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -274,6 +274,7 @@ interface IActivityManager { int getProcessLimit(); int checkUriPermission(in Uri uri, int pid, int uid, int mode, int userId, in IBinder callerToken); int checkContentUriPermissionFull(in Uri uri, int pid, int uid, int mode, int userId); int[] checkUriPermissions(in List<Uri> uris, int pid, int uid, int mode, int userId, in IBinder callerToken); void grantUriPermission(in IApplicationThread caller, in String targetPkg, in Uri uri, Loading core/java/android/content/Context.java +37 −6 Original line number Diff line number Diff line Loading @@ -6758,7 +6758,7 @@ public abstract class Context { @Intent.AccessUriMode int modeFlags); /** * Determine whether a particular process and user ID has been granted * Determine whether a particular process and uid has been granted * permission to access a specific URI. This only checks for permissions * that have been explicitly granted -- if the given process/uid has * more general access to the URI's content provider then this check will Loading @@ -6782,7 +6782,38 @@ public abstract class Context { @Intent.AccessUriMode int modeFlags); /** * Determine whether a particular process and user ID has been granted * Determine whether a particular process and uid has been granted * permission to access a specific content URI. * * <p>Unlike {@link #checkUriPermission(Uri, int, int, int)}, this method * checks for general access to the URI's content provider, as well as * explicitly granted permissions.</p> * * <p>Note, this check will throw an {@link IllegalArgumentException} * for non-content URIs.</p> * * @param uri The content uri that is being checked. * @param pid (Optional) The process ID being checked against. If the * pid is unknown, pass -1. * @param uid The UID being checked against. A uid of 0 is the root * user, which will pass every permission check. * @param modeFlags The access modes to check. * * @return {@link PackageManager#PERMISSION_GRANTED} if the given * pid/uid is allowed to access that uri, or * {@link PackageManager#PERMISSION_DENIED} if it is not. * * @see #checkUriPermission(Uri, int, int, int) */ @FlaggedApi(android.security.Flags.FLAG_CONTENT_URI_PERMISSION_APIS) @PackageManager.PermissionResult public int checkContentUriPermissionFull(@NonNull Uri uri, int pid, int uid, @Intent.AccessUriMode int modeFlags) { throw new RuntimeException("Not implemented. Must override in a subclass."); } /** * Determine whether a particular process and uid has been granted * permission to access a list of URIs. This only checks for permissions * that have been explicitly granted -- if the given process/uid has * more general access to the URI's content provider then this check will Loading Loading @@ -6818,7 +6849,7 @@ public abstract class Context { @Intent.AccessUriMode int modeFlags, IBinder callerToken); /** * Determine whether the calling process and user ID has been * Determine whether the calling process and uid has been * granted permission to access a specific URI. This is basically * the same as calling {@link #checkUriPermission(Uri, int, int, * int)} with the pid and uid returned by {@link Loading @@ -6841,7 +6872,7 @@ public abstract class Context { public abstract int checkCallingUriPermission(Uri uri, @Intent.AccessUriMode int modeFlags); /** * Determine whether the calling process and user ID has been * Determine whether the calling process and uid has been * granted permission to access a list of URIs. This is basically * the same as calling {@link #checkUriPermissions(List, int, int, int)} * with the pid and uid returned by {@link Loading Loading @@ -6935,7 +6966,7 @@ public abstract class Context { @Intent.AccessUriMode int modeFlags); /** * If a particular process and user ID has not been granted * If a particular process and uid has not been granted * permission to access a specific URI, throw {@link * SecurityException}. This only checks for permissions that have * been explicitly granted -- if the given process/uid has more Loading @@ -6955,7 +6986,7 @@ public abstract class Context { Uri uri, int pid, int uid, @Intent.AccessUriMode int modeFlags, String message); /** * If the calling process and user ID has not been granted * If the calling process and uid has not been granted * permission to access a specific URI, throw {@link * SecurityException}. This is basically the same as calling * {@link #enforceUriPermission(Uri, int, int, int, String)} with Loading core/java/android/content/ContextWrapper.java +7 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package android.content; import android.annotation.CallbackExecutor; import android.annotation.FlaggedApi; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; Loading Loading @@ -1003,6 +1004,12 @@ public class ContextWrapper extends Context { return mBase.checkUriPermission(uri, pid, uid, modeFlags); } @FlaggedApi(android.security.Flags.FLAG_CONTENT_URI_PERMISSION_APIS) @Override public int checkContentUriPermissionFull(@NonNull Uri uri, int pid, int uid, int modeFlags) { return mBase.checkContentUriPermissionFull(uri, pid, uid, modeFlags); } @NonNull @Override public int[] checkUriPermissions(@NonNull List<Uri> uris, int pid, int uid, Loading Loading
core/api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -10386,6 +10386,7 @@ package android.content { method @CheckResult(suggest="#enforceCallingPermission(String,String)") public abstract int checkCallingPermission(@NonNull String); method @CheckResult(suggest="#enforceCallingUriPermission(Uri,int,String)") public abstract int checkCallingUriPermission(android.net.Uri, int); method @NonNull public int[] checkCallingUriPermissions(@NonNull java.util.List<android.net.Uri>, int); method @FlaggedApi("android.security.content_uri_permission_apis") public int checkContentUriPermissionFull(@NonNull android.net.Uri, int, int, int); method @CheckResult(suggest="#enforcePermission(String,int,int,String)") public abstract int checkPermission(@NonNull String, int, int); method public abstract int checkSelfPermission(@NonNull String); method @CheckResult(suggest="#enforceUriPermission(Uri,int,int,String)") public abstract int checkUriPermission(android.net.Uri, int, int, int);
core/java/android/app/ContextImpl.java +11 −0 Original line number Diff line number Diff line Loading @@ -2409,6 +2409,17 @@ class ContextImpl extends Context { } } @Override public int checkContentUriPermissionFull(Uri uri, int pid, int uid, int modeFlags) { try { return ActivityManager.getService().checkContentUriPermissionFull( ContentProvider.getUriWithoutUserId(uri), pid, uid, modeFlags, resolveUserId(uri)); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } @NonNull @Override public int[] checkUriPermissions(@NonNull List<Uri> uris, int pid, int uid, Loading
core/java/android/app/IActivityManager.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -274,6 +274,7 @@ interface IActivityManager { int getProcessLimit(); int checkUriPermission(in Uri uri, int pid, int uid, int mode, int userId, in IBinder callerToken); int checkContentUriPermissionFull(in Uri uri, int pid, int uid, int mode, int userId); int[] checkUriPermissions(in List<Uri> uris, int pid, int uid, int mode, int userId, in IBinder callerToken); void grantUriPermission(in IApplicationThread caller, in String targetPkg, in Uri uri, Loading
core/java/android/content/Context.java +37 −6 Original line number Diff line number Diff line Loading @@ -6758,7 +6758,7 @@ public abstract class Context { @Intent.AccessUriMode int modeFlags); /** * Determine whether a particular process and user ID has been granted * Determine whether a particular process and uid has been granted * permission to access a specific URI. This only checks for permissions * that have been explicitly granted -- if the given process/uid has * more general access to the URI's content provider then this check will Loading @@ -6782,7 +6782,38 @@ public abstract class Context { @Intent.AccessUriMode int modeFlags); /** * Determine whether a particular process and user ID has been granted * Determine whether a particular process and uid has been granted * permission to access a specific content URI. * * <p>Unlike {@link #checkUriPermission(Uri, int, int, int)}, this method * checks for general access to the URI's content provider, as well as * explicitly granted permissions.</p> * * <p>Note, this check will throw an {@link IllegalArgumentException} * for non-content URIs.</p> * * @param uri The content uri that is being checked. * @param pid (Optional) The process ID being checked against. If the * pid is unknown, pass -1. * @param uid The UID being checked against. A uid of 0 is the root * user, which will pass every permission check. * @param modeFlags The access modes to check. * * @return {@link PackageManager#PERMISSION_GRANTED} if the given * pid/uid is allowed to access that uri, or * {@link PackageManager#PERMISSION_DENIED} if it is not. * * @see #checkUriPermission(Uri, int, int, int) */ @FlaggedApi(android.security.Flags.FLAG_CONTENT_URI_PERMISSION_APIS) @PackageManager.PermissionResult public int checkContentUriPermissionFull(@NonNull Uri uri, int pid, int uid, @Intent.AccessUriMode int modeFlags) { throw new RuntimeException("Not implemented. Must override in a subclass."); } /** * Determine whether a particular process and uid has been granted * permission to access a list of URIs. This only checks for permissions * that have been explicitly granted -- if the given process/uid has * more general access to the URI's content provider then this check will Loading Loading @@ -6818,7 +6849,7 @@ public abstract class Context { @Intent.AccessUriMode int modeFlags, IBinder callerToken); /** * Determine whether the calling process and user ID has been * Determine whether the calling process and uid has been * granted permission to access a specific URI. This is basically * the same as calling {@link #checkUriPermission(Uri, int, int, * int)} with the pid and uid returned by {@link Loading @@ -6841,7 +6872,7 @@ public abstract class Context { public abstract int checkCallingUriPermission(Uri uri, @Intent.AccessUriMode int modeFlags); /** * Determine whether the calling process and user ID has been * Determine whether the calling process and uid has been * granted permission to access a list of URIs. This is basically * the same as calling {@link #checkUriPermissions(List, int, int, int)} * with the pid and uid returned by {@link Loading Loading @@ -6935,7 +6966,7 @@ public abstract class Context { @Intent.AccessUriMode int modeFlags); /** * If a particular process and user ID has not been granted * If a particular process and uid has not been granted * permission to access a specific URI, throw {@link * SecurityException}. This only checks for permissions that have * been explicitly granted -- if the given process/uid has more Loading @@ -6955,7 +6986,7 @@ public abstract class Context { Uri uri, int pid, int uid, @Intent.AccessUriMode int modeFlags, String message); /** * If the calling process and user ID has not been granted * If the calling process and uid has not been granted * permission to access a specific URI, throw {@link * SecurityException}. This is basically the same as calling * {@link #enforceUriPermission(Uri, int, int, int, String)} with Loading
core/java/android/content/ContextWrapper.java +7 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package android.content; import android.annotation.CallbackExecutor; import android.annotation.FlaggedApi; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; Loading Loading @@ -1003,6 +1004,12 @@ public class ContextWrapper extends Context { return mBase.checkUriPermission(uri, pid, uid, modeFlags); } @FlaggedApi(android.security.Flags.FLAG_CONTENT_URI_PERMISSION_APIS) @Override public int checkContentUriPermissionFull(@NonNull Uri uri, int pid, int uid, int modeFlags) { return mBase.checkContentUriPermissionFull(uri, pid, uid, modeFlags); } @NonNull @Override public int[] checkUriPermissions(@NonNull List<Uri> uris, int pid, int uid, Loading