Merge "Add maxTargetSdk to @UnsupportedAppUsage annotation." am: 29f955559a am: 06cd1d260b
am: f66e5e16a1
Change-Id: I40be27d55f258c95f4f5373329c924e192110e0e
diff --git a/core/java/android/annotation/UnsupportedAppUsage.java b/core/java/android/annotation/UnsupportedAppUsage.java
index 05de3e8..fbba6da 100644
--- a/core/java/android/annotation/UnsupportedAppUsage.java
+++ b/core/java/android/annotation/UnsupportedAppUsage.java
@@ -51,6 +51,39 @@
long trackingBug() default 0;
/**
+ * Indicates that usage of this API is limited to apps based on their target SDK version.
+ *
+ * Access to the API is allowed if the targetSdkVersion in the apps manifest is no greater than
+ * this value. Access checks are performed at runtime.
+ *
+ * This is used to give app developers a grace period to migrate off a non-SDK interface. When
+ * making Android version N, existing APIs can have a maxTargetSdk of N-1 added to them.
+ * Developers must then migrate off the API when their app is updated in future, but it will
+ * continue working in the meantime.
+ *
+ * Possible values are:
+ * <ul>
+ * <li>
+ * {@link android.os.Build.VERSION_CODES#O} or {@link android.os.Build.VERSION_CODES#P},
+ * to limit access to apps targeting these SDKs (or earlier).
+ * </li>
+ * <li>
+ * absent (default value) - All apps can access this API, but doing so may result in
+ * warnings in the log, UI warnings (on developer builds) and/or strictmode violations.
+ * The API is likely to be further restricted in future.
+ * </li>
+ *
+ * </ul>
+ *
+ * Note, if this is set to {@link android.os.Build.VERSION_CODES#O}, apps targeting O
+ * maintenance releases will also be allowed to use the API, and similarly for any future
+ * maintenance releases of P.
+ *
+ * @return The maximum value for an apps targetSdkVersion in order to access this API.
+ */
+ int maxTargetSdk() default Integer.MAX_VALUE;
+
+ /**
* For debug use only. The expected dex signature to be generated for this API, used to verify
* parts of the build process.
*