diff options
| author | Jeff Sharkey <jsharkey@google.com> | 2017-06-06 15:48:24 +0000 |
|---|---|---|
| committer | android-build-merger <android-build-merger@google.com> | 2017-06-06 15:48:24 +0000 |
| commit | ec68b46bc85b2317053da7e2933876fc6e51ac2f (patch) | |
| tree | 2255e80e732a2b4ea68c50685d1dfc8a3956509f /core/java/android/app | |
| parent | 811e9d6ee820b84922ff6a9794a91c1ebfa958f2 (diff) | |
| parent | 7a2e4a848602ddb861f9f35cb93edbdca32a7db1 (diff) | |
Merge "Annotate @SystemApi with required permissions." into oc-dev am: c1406978a4
am: 7a2e4a8486
Change-Id: Ib629e25dbf047c110feaf03e4ff744b5c6df9aeb
Diffstat (limited to 'core/java/android/app')
20 files changed, 96 insertions, 73 deletions
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index dec5f4ffc439..199e856e7a22 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -22,6 +22,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SystemApi; +import android.annotation.SystemService; import android.annotation.TestApi; import android.content.pm.ActivityInfo; import android.content.res.Configuration; @@ -117,6 +118,7 @@ import java.util.List; * be used for testing and debugging purposes only. * </p> */ +@SystemService(Context.ACTIVITY_SERVICE) public class ActivityManager { private static String TAG = "ActivityManager"; @@ -3626,6 +3628,7 @@ public class ActivityManager { * @hide */ @SystemApi @TestApi + @RequiresPermission(Manifest.permission.PACKAGE_USAGE_STATS) public void addOnUidImportanceListener(OnUidImportanceListener listener, @RunningAppProcessInfo.Importance int importanceCutpoint) { synchronized (this) { @@ -3654,6 +3657,7 @@ public class ActivityManager { * @hide */ @SystemApi @TestApi + @RequiresPermission(Manifest.permission.PACKAGE_USAGE_STATS) public void removeOnUidImportanceListener(OnUidImportanceListener listener) { synchronized (this) { UidObserver observer = mImportanceListeners.remove(listener); @@ -4021,6 +4025,10 @@ public class ActivityManager { * @hide */ @SystemApi + @RequiresPermission(anyOf = { + "android.permission.INTERACT_ACROSS_USERS", + "android.permission.INTERACT_ACROSS_USERS_FULL" + }) public static int getCurrentUser() { UserInfo ui; try { diff --git a/core/java/android/app/AlarmManager.java b/core/java/android/app/AlarmManager.java index 620e5cf374ca..d497db0a0023 100644 --- a/core/java/android/app/AlarmManager.java +++ b/core/java/android/app/AlarmManager.java @@ -19,6 +19,7 @@ package android.app; import android.annotation.IntDef; import android.annotation.SdkConstant; import android.annotation.SystemApi; +import android.annotation.SystemService; import android.content.Context; import android.content.Intent; import android.os.Build; @@ -72,12 +73,8 @@ import java.lang.annotation.RetentionPolicy; * {@link #setExact(int, long, PendingIntent)}. Applications whose {@code targetSdkVersion} * is earlier than API 19 will continue to see the previous behavior in which all * alarms are delivered exactly when requested. - * - * <p>You do not - * instantiate this class directly; instead, retrieve it through - * {@link android.content.Context#getSystemService - * Context.getSystemService(Context.ALARM_SERVICE)}. */ +@SystemService(Context.ALARM_SERVICE) public class AlarmManager { private static final String TAG = "AlarmManager"; diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index 82921524457f..e672ada3cbb4 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -17,7 +17,9 @@ package android.app; import android.Manifest; +import android.annotation.RequiresPermission; import android.annotation.SystemApi; +import android.annotation.SystemService; import android.app.usage.UsageStatsManager; import android.content.Context; import android.media.AudioAttributes.AttributeUsage; @@ -42,10 +44,9 @@ import java.util.List; * API for interacting with "application operation" tracking. * * <p>This API is not generally intended for third party application developers; most - * features are only available to system applications. Obtain an instance of it through - * {@link Context#getSystemService(String) Context.getSystemService} with - * {@link Context#APP_OPS_SERVICE Context.APP_OPS_SERVICE}.</p> + * features are only available to system applications. */ +@SystemService(Context.APP_OPS_SERVICE) public class AppOpsManager { /** * <p>App ops allows callers to:</p> @@ -1409,6 +1410,7 @@ public class AppOpsManager { * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.UPDATE_APP_OPS_STATS) public void setUidMode(String appOp, int uid, int mode) { try { mService.setUidMode(AppOpsManager.strOpToOp(appOp), uid, mode); diff --git a/core/java/android/app/BroadcastOptions.java b/core/java/android/app/BroadcastOptions.java index 175b9799c5db..b6cff385d752 100644 --- a/core/java/android/app/BroadcastOptions.java +++ b/core/java/android/app/BroadcastOptions.java @@ -16,6 +16,7 @@ package android.app; +import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.os.Build; import android.os.Bundle; @@ -72,6 +73,7 @@ public class BroadcastOptions { * power whitelist when this broadcast is being delivered to it. * @param duration The duration in milliseconds; 0 means to not place on whitelist. */ + @RequiresPermission(android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST) public void setTemporaryAppWhitelistDuration(long duration) { mTemporaryAppWhitelistDuration = duration; } diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java index b89c16539b4c..5baaeb30e233 100644 --- a/core/java/android/app/DownloadManager.java +++ b/core/java/android/app/DownloadManager.java @@ -19,6 +19,7 @@ package android.app; import android.annotation.Nullable; import android.annotation.SdkConstant; import android.annotation.SystemApi; +import android.annotation.SystemService; import android.annotation.SdkConstant.SdkConstantType; import android.content.ContentResolver; import android.content.ContentUris; @@ -51,18 +52,15 @@ import java.util.List; * request that a URI be downloaded to a particular destination file. The download manager will * conduct the download in the background, taking care of HTTP interactions and retrying downloads * after failures or across connectivity changes and system reboots. - * - * Instances of this class should be obtained through - * {@link android.content.Context#getSystemService(String)} by passing - * {@link android.content.Context#DOWNLOAD_SERVICE}. - * + * <p> * Apps that request downloads through this API should register a broadcast receiver for * {@link #ACTION_NOTIFICATION_CLICKED} to appropriately handle when the user clicks on a running * download in a notification or from the downloads UI. - * + * <p> * Note that the application must have the {@link android.Manifest.permission#INTERNET} * permission to use this class. */ +@SystemService(Context.DOWNLOAD_SERVICE) public class DownloadManager { /** diff --git a/core/java/android/app/KeyguardManager.java b/core/java/android/app/KeyguardManager.java index 4a0b644d758a..16b21f15353e 100644 --- a/core/java/android/app/KeyguardManager.java +++ b/core/java/android/app/KeyguardManager.java @@ -20,6 +20,7 @@ import android.Manifest; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; +import android.annotation.SystemService; import android.app.trust.ITrustManager; import android.content.Context; import android.content.Intent; @@ -46,12 +47,11 @@ import com.android.internal.widget.LockPatternUtils; import java.util.List; /** - * Class that can be used to lock and unlock the keyboard. Get an instance of this - * class by calling {@link android.content.Context#getSystemService(java.lang.String)} - * with argument {@link android.content.Context#KEYGUARD_SERVICE}. The + * Class that can be used to lock and unlock the keyboard. The * actual class to control the keyboard locking is * {@link android.app.KeyguardManager.KeyguardLock}. */ +@SystemService(Context.KEYGUARD_SERVICE) public class KeyguardManager { private static final String TAG = "KeyguardManager"; diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index df9b64cb7b86..03e9c0a1c9f7 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -22,6 +22,7 @@ import android.annotation.ColorInt; import android.annotation.DrawableRes; import android.annotation.IntDef; import android.annotation.NonNull; +import android.annotation.RequiresPermission; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemApi; @@ -1009,6 +1010,7 @@ public class Notification implements Parcelable * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.NOTIFICATION_DURING_SETUP) public static final String EXTRA_ALLOW_DURING_SETUP = "android.allowDuringSetup"; /** @@ -1110,6 +1112,7 @@ public class Notification implements Parcelable /** @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.SUBSTITUTE_NOTIFICATION_APP_NAME) public static final String EXTRA_SUBSTITUTE_APP_NAME = "android.substName"; /** diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java index 6c55548c2ea4..235b8d445b1c 100644 --- a/core/java/android/app/NotificationManager.java +++ b/core/java/android/app/NotificationManager.java @@ -20,6 +20,7 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SdkConstant; +import android.annotation.SystemService; import android.annotation.TestApi; import android.app.Notification.Builder; import android.content.ComponentName; @@ -81,10 +82,6 @@ import java.util.Objects; * to the {@link #cancel(int)} or {@link #cancel(String, int)} method to clear * this notification. * - * <p> - * You do not instantiate this class directly; instead, retrieve it through - * {@link android.content.Context#getSystemService}. - * * <div class="special reference"> * <h3>Developer Guides</h3> * <p>For a guide to creating notifications, read the @@ -93,10 +90,9 @@ import java.util.Objects; * </div> * * @see android.app.Notification - * @see android.content.Context#getSystemService */ -public class NotificationManager -{ +@SystemService(Context.NOTIFICATION_SERVICE) +public class NotificationManager { private static String TAG = "NotificationManager"; private static boolean localLOGV = false; diff --git a/core/java/android/app/SearchManager.java b/core/java/android/app/SearchManager.java index c529e4ba1678..ea990ad2924e 100644 --- a/core/java/android/app/SearchManager.java +++ b/core/java/android/app/SearchManager.java @@ -16,6 +16,7 @@ package android.app; +import android.annotation.SystemService; import android.content.ActivityNotFoundException; import android.content.ComponentName; import android.content.ContentResolver; @@ -46,10 +47,6 @@ import java.util.List; * services are provided through methods in {@link android.app.Activity Activity} * and the {@link android.content.Intent#ACTION_SEARCH ACTION_SEARCH} * {@link android.content.Intent Intent}. - * If you do require direct access to the SearchManager, do not instantiate - * this class directly. Instead, retrieve it through - * {@link android.content.Context#getSystemService - * context.getSystemService(Context.SEARCH_SERVICE)}. * * <div class="special reference"> * <h3>Developer Guides</h3> @@ -58,9 +55,9 @@ import java.util.List; * <a href="{@docRoot}guide/topics/search/index.html">Search</a> developer guide.</p> * </div> */ +@SystemService(Context.SEARCH_SERVICE) public class SearchManager - implements DialogInterface.OnDismissListener, DialogInterface.OnCancelListener -{ + implements DialogInterface.OnDismissListener, DialogInterface.OnCancelListener { private static final boolean DBG = false; private static final String TAG = "SearchManager"; diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java index ab301bdedcac..4a092140ed78 100644 --- a/core/java/android/app/StatusBarManager.java +++ b/core/java/android/app/StatusBarManager.java @@ -18,6 +18,7 @@ package android.app; import android.annotation.IntDef; +import android.annotation.SystemService; import android.content.Context; import android.os.Binder; import android.os.RemoteException; @@ -36,6 +37,7 @@ import java.lang.annotation.RetentionPolicy; * * @hide */ +@SystemService(Context.STATUS_BAR_SERVICE) public class StatusBarManager { public static final int DISABLE_EXPAND = View.STATUS_BAR_DISABLE_EXPAND; diff --git a/core/java/android/app/UiModeManager.java b/core/java/android/app/UiModeManager.java index 07e257083fa2..bc616686eced 100644 --- a/core/java/android/app/UiModeManager.java +++ b/core/java/android/app/UiModeManager.java @@ -17,6 +17,7 @@ package android.app; import android.annotation.IntDef; +import android.annotation.SystemService; import android.annotation.TestApi; import android.content.Context; import android.content.res.Configuration; @@ -49,11 +50,8 @@ import java.lang.annotation.RetentionPolicy; * displayed allowing the user to exit dock mode. Thus the dock mode * represented here may be different than the current state of the underlying * dock event broadcast. - * - * <p>You do not instantiate this class directly; instead, retrieve it through - * {@link android.content.Context#getSystemService - * Context.getSystemService(Context.UI_MODE_SERVICE)}. */ +@SystemService(Context.UI_MODE_SERVICE) public class UiModeManager { private static final String TAG = "UiModeManager"; diff --git a/core/java/android/app/VrManager.java b/core/java/android/app/VrManager.java index 8014ecafa9a2..b40c96c6f0c8 100644 --- a/core/java/android/app/VrManager.java +++ b/core/java/android/app/VrManager.java @@ -1,19 +1,20 @@ package android.app; +import android.annotation.RequiresPermission; import android.annotation.SystemApi; +import android.annotation.SystemService; import android.content.ComponentName; +import android.content.Context; import android.os.RemoteException; import android.service.vr.IVrManager; /** * Used to control aspects of a devices Virtual Reality (VR) capabilities. - * <p> - * You do not instantiate this class directly; instead, retrieve it through - * {@link android.content.Context#getSystemService}. * @hide */ @SystemApi +@SystemService(Context.VR_SERVICE) public class VrManager { private final IVrManager mService; @@ -29,11 +30,10 @@ public class VrManager { * remain in VR mode even if the foreground does not specify Vr mode being enabled. Mainly used * by VR viewers to indicate that a device is placed in a VR viewer. * - * <p>Requires {@link android.Manifest.permission#ACCESS_VR_MANAGER} permission.</p> - * * @see Activity#setVrModeEnabled(boolean, ComponentName) * @param enabled true if the device should be placed in persistent VR mode. */ + @RequiresPermission(android.Manifest.permission.RESTRICTED_VR_ACCESS) public void setPersistentVrModeEnabled(boolean enabled) { try { mService.setPersistentVrModeEnabled(enabled); @@ -46,13 +46,12 @@ public class VrManager { * Sets the resolution and DPI of the vr2d virtual display used to display 2D * applications in VR mode. * - * <p>Requires {@link android.Manifest.permission#ACCESS_VR_MANAGER} permission.</p> - * * @param vr2dDisplayProp properties to be set to the virtual display for * 2D applications in VR mode. * * {@hide} */ + @RequiresPermission(android.Manifest.permission.RESTRICTED_VR_ACCESS) public void setVr2dDisplayProperties( Vr2dDisplayProperties vr2dDisplayProp) { try { diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java index 8a33791adfdb..dfcbfc4f8e09 100644 --- a/core/java/android/app/WallpaperManager.java +++ b/core/java/android/app/WallpaperManager.java @@ -20,8 +20,10 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RawRes; +import android.annotation.RequiresPermission; import android.annotation.SdkConstant; import android.annotation.SystemApi; +import android.annotation.SystemService; import android.annotation.SdkConstant.SdkConstantType; import android.content.ComponentName; import android.content.ContentResolver; @@ -80,13 +82,13 @@ import java.util.concurrent.TimeUnit; /** * Provides access to the system wallpaper. With WallpaperManager, you can * get the current wallpaper, get the desired dimensions for the wallpaper, set - * the wallpaper, and more. Get an instance of WallpaperManager with - * {@link #getInstance(android.content.Context) getInstance()}. + * the wallpaper, and more. * * <p> An app can check whether wallpapers are supported for the current user, by calling * {@link #isWallpaperSupported()}, and whether setting of wallpapers is allowed, by calling * {@link #isSetWallpaperAllowed()}. */ +@SystemService(Context.WALLPAPER_SERVICE) public class WallpaperManager { private static String TAG = "WallpaperManager"; private static boolean DEBUG = false; @@ -1485,6 +1487,7 @@ public class WallpaperManager { * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.SET_WALLPAPER_HINTS) public void setDisplayPadding(Rect padding) { try { if (sGlobals.mService == null) { @@ -1525,6 +1528,7 @@ public class WallpaperManager { * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public void clearWallpaper() { clearWallpaper(FLAG_LOCK, mContext.getUserId()); clearWallpaper(FLAG_SYSTEM, mContext.getUserId()); @@ -1537,6 +1541,7 @@ public class WallpaperManager { * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public void clearWallpaper(@SetWallpaperFlags int which, int userId) { if (sGlobals.mService == null) { Log.w(TAG, "WallpaperService not running"); @@ -1552,12 +1557,10 @@ public class WallpaperManager { /** * Set the live wallpaper. * - * This can only be called by packages with android.permission.SET_WALLPAPER_COMPONENT - * permission. - * * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.SET_WALLPAPER_COMPONENT) public boolean setWallpaperComponent(ComponentName name) { return setWallpaperComponent(name, UserHandle.myUserId()); } diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 9e0d4e7b23c7..37fde6f8191e 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -20,9 +20,12 @@ import android.annotation.ColorInt; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.RequiresPermission; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; +import android.annotation.SuppressLint; import android.annotation.SystemApi; +import android.annotation.SystemService; import android.annotation.TestApi; import android.annotation.UserIdInt; import android.annotation.WorkerThread; @@ -98,6 +101,7 @@ import java.util.Set; * "{@docRoot}guide/topics/admin/device-admin.html">Device Administration</a> developer * guide. </div> */ +@SystemService(Context.DEVICE_POLICY_SERVICE) public class DevicePolicyManager { private static String TAG = "DevicePolicyManager"; @@ -4673,6 +4677,7 @@ public class DevicePolicyManager { */ @Deprecated @SystemApi + @SuppressLint("Doclava125") public @Nullable String getDeviceInitializerApp() { return null; } @@ -4684,6 +4689,7 @@ public class DevicePolicyManager { */ @Deprecated @SystemApi + @SuppressLint("Doclava125") public @Nullable ComponentName getDeviceInitializerComponent() { return null; } @@ -4706,6 +4712,7 @@ public class DevicePolicyManager { */ @Deprecated @SystemApi + @RequiresPermission(android.Manifest.permission.MANAGE_DEVICE_ADMINS) public boolean setActiveProfileOwner(@NonNull ComponentName admin, @Deprecated String ownerName) throws IllegalArgumentException { throwIfParentInstance("setActiveProfileOwner"); @@ -6793,8 +6800,7 @@ public class DevicePolicyManager { * Called by the system update service to notify device and profile owners of pending system * updates. * - * The caller must hold {@link android.Manifest.permission#NOTIFY_PENDING_SYSTEM_UPDATE} - * permission. This method should only be used when it is unknown whether the pending system + * This method should only be used when it is unknown whether the pending system * update is a security patch. Otherwise, use * {@link #notifyPendingSystemUpdate(long, boolean)}. * @@ -6805,6 +6811,7 @@ public class DevicePolicyManager { * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.NOTIFY_PENDING_SYSTEM_UPDATE) public void notifyPendingSystemUpdate(long updateReceivedTime) { throwIfParentInstance("notifyPendingSystemUpdate"); if (mService != null) { @@ -6820,8 +6827,7 @@ public class DevicePolicyManager { * Called by the system update service to notify device and profile owners of pending system * updates. * - * The caller must hold {@link android.Manifest.permission#NOTIFY_PENDING_SYSTEM_UPDATE} - * permission. This method should be used instead of {@link #notifyPendingSystemUpdate(long)} + * This method should be used instead of {@link #notifyPendingSystemUpdate(long)} * when it is known whether the pending system update is a security patch. * * @param updateReceivedTime The time as given by {@link System#currentTimeMillis()} @@ -6833,6 +6839,7 @@ public class DevicePolicyManager { * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.NOTIFY_PENDING_SYSTEM_UPDATE) public void notifyPendingSystemUpdate(long updateReceivedTime, boolean isSecurityPatch) { throwIfParentInstance("notifyPendingSystemUpdate"); if (mService != null) { @@ -7731,6 +7738,7 @@ public class DevicePolicyManager { * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public void setDeviceProvisioningConfigApplied() { try { mService.setDeviceProvisioningConfigApplied(); diff --git a/core/java/android/app/backup/BackupManager.java b/core/java/android/app/backup/BackupManager.java index 9d02f53b13bd..9f9b217069d8 100644 --- a/core/java/android/app/backup/BackupManager.java +++ b/core/java/android/app/backup/BackupManager.java @@ -16,6 +16,7 @@ package android.app.backup; +import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.content.ComponentName; import android.content.Context; @@ -324,6 +325,7 @@ public class BackupManager { * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.BACKUP) public RestoreSession beginRestoreSession() { RestoreSession session = null; checkServiceBinder(); @@ -348,11 +350,10 @@ public class BackupManager { * mechanism was disabled will still be backed up properly if it is enabled * at some point in the future. * - * <p>Callers must hold the android.permission.BACKUP permission to use this method. - * * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.BACKUP) public void setBackupEnabled(boolean isEnabled) { checkServiceBinder(); if (sService != null) { @@ -367,11 +368,10 @@ public class BackupManager { /** * Report whether the backup mechanism is currently enabled. * - * <p>Callers must hold the android.permission.BACKUP permission to use this method. - * * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.BACKUP) public boolean isBackupEnabled() { checkServiceBinder(); if (sService != null) { @@ -390,11 +390,10 @@ public class BackupManager { * the archival restore dataset (if any). When disabled, no such attempt will * be made. * - * <p>Callers must hold the android.permission.BACKUP permission to use this method. - * * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.BACKUP) public void setAutoRestore(boolean isEnabled) { checkServiceBinder(); if (sService != null) { @@ -407,14 +406,14 @@ public class BackupManager { } /** - * Identify the currently selected transport. Callers must hold the - * android.permission.BACKUP permission to use this method. + * Identify the currently selected transport. * @return The name of the currently active backup transport. In case of * failure or if no transport is currently active, this method returns {@code null}. * * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.BACKUP) public String getCurrentTransport() { checkServiceBinder(); if (sService != null) { @@ -428,12 +427,12 @@ public class BackupManager { } /** - * Request a list of all available backup transports' names. Callers must - * hold the android.permission.BACKUP permission to use this method. + * Request a list of all available backup transports' names. * * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.BACKUP) public String[] listAllTransports() { checkServiceBinder(); if (sService != null) { @@ -449,8 +448,6 @@ public class BackupManager { /** * Specify the current backup transport. * - * <p> Callers must hold the android.permission.BACKUP permission to use this method. - * * @param transport The name of the transport to select. This should be one * of the names returned by {@link #listAllTransports()}. This is the String returned by * {@link BackupTransport#name()} for the particular transport. @@ -462,6 +459,7 @@ public class BackupManager { */ @Deprecated @SystemApi + @RequiresPermission(android.Manifest.permission.BACKUP) public String selectBackupTransport(String transport) { checkServiceBinder(); if (sService != null) { @@ -479,8 +477,6 @@ public class BackupManager { * This method is async because BackupManager might need to bind to the specified transport * which is in a separate process. * - * <p>Callers must hold the android.permission.BACKUP permission to use this method. - * * @param transport ComponentName of the service hosting the transport. This is different from * the transport's name that is returned by {@link BackupTransport#name()}. * @param listener A listener object to get a callback on the transport being selected. @@ -488,6 +484,7 @@ public class BackupManager { * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.BACKUP) public void selectBackupTransport(ComponentName transport, SelectBackupTransportCallback listener) { checkServiceBinder(); @@ -510,11 +507,10 @@ public class BackupManager { * transport will still be asked to confirm via the usual requestBackupTime() * method. * - * <p>Callers must hold the android.permission.BACKUP permission to use this method. - * * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.BACKUP) public void backupNow() { checkServiceBinder(); if (sService != null) { @@ -530,8 +526,6 @@ public class BackupManager { * Ask the framework which dataset, if any, the given package's data would be * restored from if we were to install it right now. * - * <p>Callers must hold the android.permission.BACKUP permission to use this method. - * * @param packageName The name of the package whose most-suitable dataset we * wish to look up * @return The dataset token from which a restore should be attempted, or zero if @@ -540,6 +534,7 @@ public class BackupManager { * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.BACKUP) public long getAvailableRestoreToken(String packageName) { checkServiceBinder(); if (sService != null) { @@ -555,14 +550,13 @@ public class BackupManager { /** * Ask the framework whether this app is eligible for backup. * - * <p>Callers must hold the android.permission.BACKUP permission to use this method. - * * @param packageName The name of the package. * @return Whether this app is eligible for backup. * * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.BACKUP) public boolean isAppEligibleForBackup(String packageName) { checkServiceBinder(); if (sService != null) { @@ -592,6 +586,7 @@ public class BackupManager { * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.BACKUP) public int requestBackup(String[] packages, BackupObserver observer) { return requestBackup(packages, observer, null, 0); } @@ -615,6 +610,7 @@ public class BackupManager { * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.BACKUP) public int requestBackup(String[] packages, BackupObserver observer, BackupManagerMonitor monitor, int flags) { checkServiceBinder(); @@ -638,11 +634,10 @@ public class BackupManager { * Cancel all running backups. After this call returns, no currently running backups will * interact with the selected transport. * - * <p>Callers must hold the android.permission.BACKUP permission to use this method. - * * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.BACKUP) public void cancelBackups() { checkServiceBinder(); if (sService != null) { diff --git a/core/java/android/app/job/JobScheduler.java b/core/java/android/app/job/JobScheduler.java index 1768828eb76c..3868439f092f 100644 --- a/core/java/android/app/job/JobScheduler.java +++ b/core/java/android/app/job/JobScheduler.java @@ -19,8 +19,11 @@ package android.app.job; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.RequiresPermission; import android.annotation.SystemApi; +import android.annotation.SystemService; import android.content.ClipData; +import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.PersistableBundle; @@ -53,6 +56,7 @@ import java.util.List; * {@link android.content.Context#getSystemService * Context.getSystemService(Context.JOB_SCHEDULER_SERVICE)}. */ +@SystemService(Context.JOB_SCHEDULER_SERVICE) public abstract class JobScheduler { /** @hide */ @IntDef(prefix = { "RESULT_" }, value = { @@ -132,6 +136,7 @@ public abstract class JobScheduler { * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public abstract @Result int scheduleAsPackage(@NonNull JobInfo job, @NonNull String packageName, int userId, String tag); diff --git a/core/java/android/app/trust/TrustManager.java b/core/java/android/app/trust/TrustManager.java index 3c681f26f5c6..852cb8e09ddb 100644 --- a/core/java/android/app/trust/TrustManager.java +++ b/core/java/android/app/trust/TrustManager.java @@ -18,6 +18,8 @@ package android.app.trust; import android.Manifest; import android.annotation.RequiresPermission; +import android.annotation.SystemService; +import android.content.Context; import android.os.Handler; import android.os.IBinder; import android.os.Looper; @@ -29,6 +31,7 @@ import android.util.ArrayMap; * See {@link com.android.server.trust.TrustManagerService} * @hide */ +@SystemService(Context.TRUST_SERVICE) public class TrustManager { private static final int MSG_TRUST_CHANGED = 1; diff --git a/core/java/android/app/usage/NetworkStatsManager.java b/core/java/android/app/usage/NetworkStatsManager.java index 6cd4e92383b2..ef262e046021 100644 --- a/core/java/android/app/usage/NetworkStatsManager.java +++ b/core/java/android/app/usage/NetworkStatsManager.java @@ -19,6 +19,7 @@ package android.app.usage; import static com.android.internal.util.Preconditions.checkNotNull; import android.annotation.Nullable; +import android.annotation.SystemService; import android.app.usage.NetworkStats.Bucket; import android.content.Context; import android.net.ConnectivityManager; @@ -82,6 +83,7 @@ import android.util.Log; * the above permission, even to access an app's own data usage, and carrier-privileged apps were * not included. */ +@SystemService(Context.NETWORK_STATS_SERVICE) public class NetworkStatsManager { private static final String TAG = "NetworkStatsManager"; private static final boolean DBG = false; diff --git a/core/java/android/app/usage/StorageStatsManager.java b/core/java/android/app/usage/StorageStatsManager.java index 0b2b1900c4e0..7c680794d140 100644 --- a/core/java/android/app/usage/StorageStatsManager.java +++ b/core/java/android/app/usage/StorageStatsManager.java @@ -20,6 +20,7 @@ import static android.os.storage.StorageManager.convert; import android.annotation.BytesLong; import android.annotation.NonNull; +import android.annotation.SystemService; import android.annotation.TestApi; import android.annotation.WorkerThread; import android.content.Context; @@ -50,6 +51,7 @@ import java.util.UUID; * application. * </p> */ +@SystemService(Context.STORAGE_STATS_SERVICE) public class StorageStatsManager { private final Context mContext; private final IStorageStatsManager mService; diff --git a/core/java/android/app/usage/UsageStatsManager.java b/core/java/android/app/usage/UsageStatsManager.java index 75a4a535186e..1f939f996c68 100644 --- a/core/java/android/app/usage/UsageStatsManager.java +++ b/core/java/android/app/usage/UsageStatsManager.java @@ -16,7 +16,9 @@ package android.app.usage; +import android.annotation.RequiresPermission; import android.annotation.SystemApi; +import android.annotation.SystemService; import android.content.Context; import android.content.pm.ParceledListSlice; import android.os.RemoteException; @@ -51,6 +53,7 @@ import java.util.Map; * the permission implies intention to use the API and the user of the device can grant permission * through the Settings application. */ +@SystemService(Context.USAGE_STATS_SERVICE) public final class UsageStatsManager { /** @@ -252,7 +255,6 @@ public final class UsageStatsManager { * Temporarily whitelist the specified app for a short duration. This is to allow an app * receiving a high priority message to be able to access the network and acquire wakelocks * even if the device is in power-save mode or the app is currently considered inactive. - * The caller must hold the CHANGE_DEVICE_IDLE_TEMP_WHITELIST permission. * @param packageName The package name of the app to whitelist. * @param duration Duration to whitelist the app for, in milliseconds. It is recommended that * this be limited to 10s of seconds. Requested duration will be clamped to a few minutes. @@ -261,6 +263,7 @@ public final class UsageStatsManager { * @see #isAppInactive(String) */ @SystemApi + @RequiresPermission(android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST) public void whitelistAppTemporarily(String packageName, long duration, UserHandle user) { try { mService.whitelistAppTemporarily(packageName, duration, user.getIdentifier()); |
