Add @ResourceInt annotations on APIs

Change-Id: I119cc059c2f8bd98fd585fc84ac2b1b7d5892a08
diff --git a/core/java/android/animation/AnimatorInflater.java b/core/java/android/animation/AnimatorInflater.java
index 6ef3da8..d5ae6c6 100644
--- a/core/java/android/animation/AnimatorInflater.java
+++ b/core/java/android/animation/AnimatorInflater.java
@@ -15,6 +15,7 @@
  */
 package android.animation;
 
+import android.annotation.AnimatorRes;
 import android.content.Context;
 import android.content.res.ConfigurationBoundResourceCache;
 import android.content.res.ConstantState;
@@ -82,7 +83,7 @@
      * @return The animator object reference by the specified id
      * @throws android.content.res.Resources.NotFoundException when the animation cannot be loaded
      */
-    public static Animator loadAnimator(Context context, int id)
+    public static Animator loadAnimator(Context context, @AnimatorRes int id)
             throws NotFoundException {
         return loadAnimator(context.getResources(), context.getTheme(), id);
     }
diff --git a/core/java/android/app/ActionBar.java b/core/java/android/app/ActionBar.java
index 014a7af..4cdd397 100644
--- a/core/java/android/app/ActionBar.java
+++ b/core/java/android/app/ActionBar.java
@@ -16,9 +16,12 @@
 
 package android.app;
 
+import android.annotation.DrawableRes;
 import android.annotation.IntDef;
+import android.annotation.LayoutRes;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.StringRes;
 import android.content.Context;
 import android.content.res.Configuration;
 import android.content.res.TypedArray;
@@ -256,7 +259,7 @@
      *
      * @see #setDisplayOptions(int, int)
      */
-    public abstract void setCustomView(int resId);
+    public abstract void setCustomView(@LayoutRes int resId);
 
     /**
      * Set the icon to display in the 'home' section of the action bar.
@@ -271,7 +274,7 @@
      * @see #setDisplayUseLogoEnabled(boolean)
      * @see #setDisplayShowHomeEnabled(boolean)
      */
-    public abstract void setIcon(int resId);
+    public abstract void setIcon(@DrawableRes int resId);
 
     /**
      * Set the icon to display in the 'home' section of the action bar.
@@ -301,7 +304,7 @@
      * @see #setDisplayUseLogoEnabled(boolean)
      * @see #setDisplayShowHomeEnabled(boolean)
      */
-    public abstract void setLogo(int resId);
+    public abstract void setLogo(@DrawableRes int resId);
 
     /**
      * Set the logo to display in the 'home' section of the action bar.
@@ -397,7 +400,7 @@
      * @see #setTitle(CharSequence)
      * @see #setDisplayOptions(int, int)
      */
-    public abstract void setTitle(int resId);
+    public abstract void setTitle(@StringRes int resId);
 
     /**
      * Set the action bar's subtitle. This will only be displayed if
@@ -420,7 +423,7 @@
      * @see #setSubtitle(CharSequence)
      * @see #setDisplayOptions(int, int)
      */
-    public abstract void setSubtitle(int resId);
+    public abstract void setSubtitle(@StringRes int resId);
 
     /**
      * Set display options. This changes all display option bits at once. To change
@@ -892,7 +895,7 @@
      * @see #setDisplayHomeAsUpEnabled(boolean)
      * @see #setHomeActionContentDescription(int)
      */
-    public void setHomeAsUpIndicator(int resId) { }
+    public void setHomeAsUpIndicator(@DrawableRes int resId) { }
 
     /**
      * Set an alternate description for the Home/Up action, when enabled.
@@ -931,7 +934,7 @@
      * @see #setHomeAsUpIndicator(int)
      * @see #setHomeAsUpIndicator(android.graphics.drawable.Drawable)
      */
-    public void setHomeActionContentDescription(int resId) { }
+    public void setHomeActionContentDescription(@StringRes int resId) { }
 
     /**
      * Enable hiding the action bar on content scroll.
@@ -1154,7 +1157,7 @@
          * @param resId Resource ID referring to the drawable to use as an icon
          * @return The current instance for call chaining
          */
-        public abstract Tab setIcon(int resId);
+        public abstract Tab setIcon(@DrawableRes int resId);
 
         /**
          * Set the text displayed on this tab. Text may be truncated if there is not
@@ -1172,7 +1175,7 @@
          * @param resId A resource ID referring to the text that should be displayed
          * @return The current instance for call chaining
          */
-        public abstract Tab setText(int resId);
+        public abstract Tab setText(@StringRes int resId);
 
         /**
          * Set a custom view to be used for this tab. This overrides values set by
@@ -1190,7 +1193,7 @@
          * @param layoutResId A layout resource to inflate and use as a custom tab view
          * @return The current instance for call chaining
          */
-        public abstract Tab setCustomView(int layoutResId);
+        public abstract Tab setCustomView(@LayoutRes int layoutResId);
 
         /**
          * Retrieve a previously set custom view for this tab.
@@ -1235,7 +1238,7 @@
          * @see #setContentDescription(CharSequence)
          * @see #getContentDescription()
          */
-        public abstract Tab setContentDescription(int resId);
+        public abstract Tab setContentDescription(@StringRes int resId);
 
         /**
          * Set a description of this tab's content for use in accessibility support.
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index aa1c70e..f0d98f8 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -16,7 +16,13 @@
 
 package android.app;
 
+import android.annotation.DrawableRes;
+import android.annotation.IdRes;
+import android.annotation.IntDef;
+import android.annotation.LayoutRes;
 import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.StyleRes;
 import android.os.PersistableBundle;
 import android.transition.Scene;
 import android.transition.TransitionManager;
@@ -2070,7 +2076,7 @@
      * @return The view if found or null otherwise.
      */
     @Nullable
-    public View findViewById(int id) {
+    public View findViewById(@IdRes int id) {
         return getWindow().findViewById(id);
     }
 
@@ -2143,7 +2149,7 @@
      * @see #setContentView(android.view.View)
      * @see #setContentView(android.view.View, android.view.ViewGroup.LayoutParams)
      */
-    public void setContentView(int layoutResID) {
+    public void setContentView(@LayoutRes int layoutResID) {
         getWindow().setContentView(layoutResID);
         initWindowDecorActionBar();
     }
@@ -3611,7 +3617,7 @@
      * Convenience for calling
      * {@link android.view.Window#setFeatureDrawableResource}.
      */
-    public final void setFeatureDrawableResource(int featureId, int resId) {
+    public final void setFeatureDrawableResource(int featureId, @DrawableRes int resId) {
         getWindow().setFeatureDrawableResource(featureId, resId);
     }
 
@@ -3666,7 +3672,7 @@
     }
 
     @Override
-    protected void onApplyThemeResource(Resources.Theme theme, int resid,
+    protected void onApplyThemeResource(Resources.Theme theme, @StyleRes int resid,
             boolean first) {
         if (mParent == null) {
             super.onApplyThemeResource(theme, resid, first);
diff --git a/core/java/android/app/AlertDialog.java b/core/java/android/app/AlertDialog.java
index 3c6458f..c8f58c6 100644
--- a/core/java/android/app/AlertDialog.java
+++ b/core/java/android/app/AlertDialog.java
@@ -18,6 +18,10 @@
 
 import com.android.internal.app.AlertController;
 
+import android.annotation.ArrayRes;
+import android.annotation.AttrRes;
+import android.annotation.DrawableRes;
+import android.annotation.StringRes;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.database.Cursor;
@@ -117,7 +121,7 @@
      * or one of the constants {@link #THEME_TRADITIONAL},
      * {@link #THEME_HOLO_DARK}, or {@link #THEME_HOLO_LIGHT}.
      */
-    protected AlertDialog(Context context, int theme) {
+    protected AlertDialog(Context context, @AttrRes int theme) {
         this(context, theme, true);
     }
 
@@ -327,7 +331,7 @@
      * @param resId the resourceId of the drawable to use as the icon or 0
      * if you don't want an icon.
      */
-    public void setIcon(int resId) {
+    public void setIcon(@DrawableRes int resId) {
         mAlert.setIcon(resId);
     }
     
@@ -340,7 +344,7 @@
      *
      * @param attrId ID of a theme attribute that points to a drawable resource.
      */
-    public void setIconAttribute(int attrId) {
+    public void setIconAttribute(@AttrRes int attrId) {
         TypedValue out = new TypedValue();
         mContext.getTheme().resolveAttribute(attrId, out, true);
         mAlert.setIcon(out.resourceId);
@@ -413,7 +417,7 @@
          *
          * @return This Builder object to allow for chaining of calls to set methods
          */
-        public Builder setTitle(int titleId) {
+        public Builder setTitle(@StringRes int titleId) {
             P.mTitle = P.mContext.getText(titleId);
             return this;
         }
@@ -449,7 +453,7 @@
          *
          * @return This Builder object to allow for chaining of calls to set methods
          */
-        public Builder setMessage(int messageId) {
+        public Builder setMessage(@StringRes int messageId) {
             P.mMessage = P.mContext.getText(messageId);
             return this;
         }
@@ -471,7 +475,7 @@
          *
          * @return This Builder object to allow for chaining of calls to set methods
          */
-        public Builder setIcon(int iconId) {
+        public Builder setIcon(@DrawableRes int iconId) {
             P.mIconId = iconId;
             return this;
         }
@@ -495,7 +499,7 @@
          *
          * @param attrId ID of a theme attribute that points to a drawable resource.
          */
-        public Builder setIconAttribute(int attrId) {
+        public Builder setIconAttribute(@AttrRes int attrId) {
             TypedValue out = new TypedValue();
             P.mContext.getTheme().resolveAttribute(attrId, out, true);
             P.mIconId = out.resourceId;
@@ -509,7 +513,7 @@
          *
          * @return This Builder object to allow for chaining of calls to set methods
          */
-        public Builder setPositiveButton(int textId, final OnClickListener listener) {
+        public Builder setPositiveButton(@StringRes int textId, final OnClickListener listener) {
             P.mPositiveButtonText = P.mContext.getText(textId);
             P.mPositiveButtonListener = listener;
             return this;
@@ -535,7 +539,7 @@
          *
          * @return This Builder object to allow for chaining of calls to set methods
          */
-        public Builder setNegativeButton(int textId, final OnClickListener listener) {
+        public Builder setNegativeButton(@StringRes int textId, final OnClickListener listener) {
             P.mNegativeButtonText = P.mContext.getText(textId);
             P.mNegativeButtonListener = listener;
             return this;
@@ -561,7 +565,7 @@
          *
          * @return This Builder object to allow for chaining of calls to set methods
          */
-        public Builder setNeutralButton(int textId, final OnClickListener listener) {
+        public Builder setNeutralButton(@StringRes int textId, final OnClickListener listener) {
             P.mNeutralButtonText = P.mContext.getText(textId);
             P.mNeutralButtonListener = listener;
             return this;
@@ -634,7 +638,7 @@
          *
          * @return This Builder object to allow for chaining of calls to set methods
          */
-        public Builder setItems(int itemsId, final OnClickListener listener) {
+        public Builder setItems(@ArrayRes int itemsId, final OnClickListener listener) {
             P.mItems = P.mContext.getResources().getTextArray(itemsId);
             P.mOnClickListener = listener;
             return this;
@@ -706,7 +710,7 @@
          *
          * @return This Builder object to allow for chaining of calls to set methods
          */
-        public Builder setMultiChoiceItems(int itemsId, boolean[] checkedItems, 
+        public Builder setMultiChoiceItems(@ArrayRes int itemsId, boolean[] checkedItems,
                 final OnMultiChoiceClickListener listener) {
             P.mItems = P.mContext.getResources().getTextArray(itemsId);
             P.mOnCheckboxClickListener = listener;
@@ -785,7 +789,7 @@
          *
          * @return This Builder object to allow for chaining of calls to set methods
          */
-        public Builder setSingleChoiceItems(int itemsId, int checkedItem, 
+        public Builder setSingleChoiceItems(@ArrayRes int itemsId, int checkedItem,
                 final OnClickListener listener) {
             P.mItems = P.mContext.getResources().getTextArray(itemsId);
             P.mOnClickListener = listener;
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index d808c8b..f35e746 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -16,6 +16,9 @@
 
 package android.app;
 
+import android.annotation.DrawableRes;
+import android.annotation.StringRes;
+import android.annotation.XmlRes;
 import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Intent;
@@ -730,7 +733,7 @@
         }
     }
 
-    @Override public Drawable getDrawable(String packageName, int resid,
+    @Override public Drawable getDrawable(String packageName, @DrawableRes int resid,
                                           ApplicationInfo appInfo) {
         ResourceName name = new ResourceName(packageName, resid);
         Drawable dr = getCachedIcon(name);
@@ -1137,7 +1140,7 @@
     }
 
     @Override
-    public CharSequence getText(String packageName, int resid,
+    public CharSequence getText(String packageName, @StringRes int resid,
                                 ApplicationInfo appInfo) {
         ResourceName name = new ResourceName(packageName, resid);
         CharSequence text = getCachedString(name);
@@ -1170,7 +1173,7 @@
     }
 
     @Override
-    public XmlResourceParser getXml(String packageName, int resid,
+    public XmlResourceParser getXml(String packageName, @XmlRes int resid,
                                     ApplicationInfo appInfo) {
         if (appInfo == null) {
             try {
diff --git a/core/java/android/app/Dialog.java b/core/java/android/app/Dialog.java
index a3662b2..e465d57 100644
--- a/core/java/android/app/Dialog.java
+++ b/core/java/android/app/Dialog.java
@@ -16,6 +16,10 @@
 
 package android.app;
 
+import android.annotation.DrawableRes;
+import android.annotation.IdRes;
+import android.annotation.LayoutRes;
+import android.annotation.StringRes;
 import com.android.internal.app.WindowDecorActionBar;
 
 import android.annotation.Nullable;
@@ -478,7 +482,7 @@
      * @return The view with the given id or null.
      */
     @Nullable
-    public View findViewById(int id) {
+    public View findViewById(@IdRes int id) {
         return mWindow.findViewById(id);
     }
 
@@ -488,7 +492,7 @@
      * 
      * @param layoutResID Resource ID to be inflated.
      */
-    public void setContentView(int layoutResID) {
+    public void setContentView(@LayoutRes int layoutResID) {
         mWindow.setContentView(layoutResID);
     }
 
@@ -542,7 +546,7 @@
      *
      * @param titleId the title's text resource identifier
      */
-    public void setTitle(int titleId) {
+    public void setTitle(@StringRes int titleId) {
         setTitle(mContext.getText(titleId));
     }
 
@@ -1072,7 +1076,7 @@
      * Convenience for calling
      * {@link android.view.Window#setFeatureDrawableResource}.
      */
-    public final void setFeatureDrawableResource(int featureId, int resId) {
+    public final void setFeatureDrawableResource(int featureId, @DrawableRes int resId) {
         getWindow().setFeatureDrawableResource(featureId, resId);
     }
 
diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java
index f319309..c5f534c 100644
--- a/core/java/android/app/Fragment.java
+++ b/core/java/android/app/Fragment.java
@@ -18,6 +18,7 @@
 
 import android.animation.Animator;
 import android.annotation.Nullable;
+import android.annotation.StringRes;
 import android.content.ComponentCallbacks2;
 import android.content.Context;
 import android.content.Intent;
@@ -795,7 +796,7 @@
      *
      * @param resId Resource id for the CharSequence text
      */
-    public final CharSequence getText(int resId) {
+    public final CharSequence getText(@StringRes int resId) {
         return getResources().getText(resId);
     }
 
@@ -805,7 +806,7 @@
      *
      * @param resId Resource id for the string
      */
-    public final String getString(int resId) {
+    public final String getString(@StringRes int resId) {
         return getResources().getString(resId);
     }
 
@@ -818,7 +819,7 @@
      * @param formatArgs The format arguments that will be used for substitution.
      */
 
-    public final String getString(int resId, Object... formatArgs) {
+    public final String getString(@StringRes int resId, Object... formatArgs) {
         return getResources().getString(resId, formatArgs);
     }
 
diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java
index afdc917..975b20d 100644
--- a/core/java/android/app/FragmentManager.java
+++ b/core/java/android/app/FragmentManager.java
@@ -21,6 +21,7 @@
 import android.animation.AnimatorListenerAdapter;
 import android.annotation.Nullable;
 import android.content.Context;
+import android.annotation.IdRes;
 import android.content.res.Configuration;
 import android.content.res.TypedArray;
 import android.os.Bundle;
@@ -396,7 +397,7 @@
  */
 interface FragmentContainer {
     @Nullable
-    public View findViewById(int id);
+    public View findViewById(@IdRes int id);
     public boolean hasView();
 }
 
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 87e744c..9c00e1c 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -16,6 +16,7 @@
 
 package android.app;
 
+import android.annotation.DrawableRes;
 import android.annotation.IntDef;
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
@@ -165,6 +166,7 @@
      * The resource id of a drawable to use as the icon in the status bar.
      * This is required; notifications with an invalid icon resource will not be shown.
      */
+    @DrawableRes
     public int icon;
 
     /**
@@ -2128,7 +2130,7 @@
          *            A resource ID in the application's package of the drawable to use.
          * @see Notification#icon
          */
-        public Builder setSmallIcon(int icon) {
+        public Builder setSmallIcon(@DrawableRes int icon) {
             mSmallIcon = icon;
             return this;
         }
@@ -2144,7 +2146,7 @@
          * @see Notification#icon
          * @see Notification#iconLevel
          */
-        public Builder setSmallIcon(int icon, int level) {
+        public Builder setSmallIcon(@DrawableRes int icon, int level) {
             mSmallIcon = icon;
             mSmallIconLevel = level;
             return this;
diff --git a/core/java/android/app/SearchableInfo.java b/core/java/android/app/SearchableInfo.java
index 922ebdd..c7d2140 100644
--- a/core/java/android/app/SearchableInfo.java
+++ b/core/java/android/app/SearchableInfo.java
@@ -19,6 +19,7 @@
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
+import android.annotation.StringRes;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.pm.ActivityInfo;
@@ -682,6 +683,7 @@
      * @return A resource id, or {@code 0} if no language model was specified.
      * @see android.R.styleable#Searchable_voiceLanguageModel
      */
+    @StringRes
     public int getVoiceLanguageModeId() {
         return mVoiceLanguageModeId;
     }
@@ -692,6 +694,7 @@
      * @return A resource id, or {@code 0} if no voice prompt text was specified.
      * @see android.R.styleable#Searchable_voicePromptText
      */
+    @StringRes
     public int getVoicePromptTextId() {
         return mVoicePromptTextId;
     }
@@ -702,6 +705,7 @@
      * @return A resource id, or {@code 0} if no language was specified.
      * @see android.R.styleable#Searchable_voiceLanguage
      */
+    @StringRes
     public int getVoiceLanguageId() {
         return mVoiceLanguageId;
     }
diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java
index 90d84ee..dcbd669 100644
--- a/core/java/android/app/WallpaperManager.java
+++ b/core/java/android/app/WallpaperManager.java
@@ -16,6 +16,7 @@
 
 package android.app;
 
+import android.annotation.RawRes;
 import android.annotation.SystemApi;
 import android.content.ComponentName;
 import android.content.ContentResolver;
@@ -707,7 +708,7 @@
      * @throws IOException If an error occurs reverting to the built-in
      * wallpaper.
      */
-    public void setResource(int resid) throws IOException {
+    public void setResource(@RawRes int resid) throws IOException {
         if (sGlobals.mService == null) {
             Log.w(TAG, "WallpaperService not running");
             return;
@@ -823,7 +824,7 @@
      * with the given resource ID.  That is, their wallpaper has been
      * set through {@link #setResource(int)} with the same resource id.
      */
-    public boolean hasResourceWallpaper(int resid) {
+    public boolean hasResourceWallpaper(@RawRes int resid) {
         if (sGlobals.mService == null) {
             Log.w(TAG, "WallpaperService not running");
             return false;
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index df620d0..eabe297 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -20,6 +20,9 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.StringDef;
+import android.annotation.StringRes;
+import android.annotation.StyleRes;
+import android.annotation.StyleableRes;
 import android.annotation.SystemApi;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
@@ -365,7 +368,7 @@
      *
      * @param resId Resource id for the CharSequence text
      */
-    public final CharSequence getText(int resId) {
+    public final CharSequence getText(@StringRes int resId) {
         return getResources().getText(resId);
     }
 
@@ -375,7 +378,7 @@
      *
      * @param resId Resource id for the string
      */
-    public final String getString(int resId) {
+    public final String getString(@StringRes int resId) {
         return getResources().getString(resId);
     }
 
@@ -388,7 +391,7 @@
      * @param formatArgs The format arguments that will be used for substitution.
      */
 
-    public final String getString(int resId, Object... formatArgs) {
+    public final String getString(@StringRes int resId, Object... formatArgs) {
         return getResources().getString(resId, formatArgs);
     }
 
@@ -450,7 +453,7 @@
      *
      * @param resid The style resource describing the theme.
      */
-    public abstract void setTheme(int resid);
+    public abstract void setTheme(@StyleRes int resid);
 
     /** @hide Needed for some internal implementation...  not public because
      * you can't assume this actually means anything. */
@@ -484,7 +487,7 @@
      * @see Resources.Theme#obtainStyledAttributes(int, int[])
      */
     public final TypedArray obtainStyledAttributes(
-            int resid, int[] attrs) throws Resources.NotFoundException {
+            @StyleableRes int resid, int[] attrs) throws Resources.NotFoundException {
         return getTheme().obtainStyledAttributes(resid, attrs);
     }
 
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 582802b..3222b2b 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -23,6 +23,7 @@
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
+import android.annotation.AnyRes;
 import android.annotation.IntDef;
 import android.annotation.SdkConstant;
 import android.annotation.SystemApi;
@@ -762,11 +763,11 @@
          * identifier.
          *
          * @param context The context of the application.
-         * @param resourceId The resource idenfitier for the icon.
+         * @param resourceId The resource identifier for the icon.
          * @return A new ShortcutIconResource with the specified's context package name
-         *         and icon resource idenfitier.
+         *         and icon resource identifier.``
          */
-        public static ShortcutIconResource fromContext(Context context, int resourceId) {
+        public static ShortcutIconResource fromContext(Context context, @AnyRes int resourceId) {
             ShortcutIconResource icon = new ShortcutIconResource();
             icon.packageName = context.getPackageName();
             icon.resourceName = context.getResources().getResourceName(resourceId);
diff --git a/core/java/android/content/RestrictionEntry.java b/core/java/android/content/RestrictionEntry.java
index 5341ea8..6d79626 100644
--- a/core/java/android/content/RestrictionEntry.java
+++ b/core/java/android/content/RestrictionEntry.java
@@ -16,6 +16,7 @@
 
 package android.content;
 
+import android.annotation.ArrayRes;
 import android.os.Parcel;
 import android.os.Parcelable;
 
@@ -277,7 +278,7 @@
      * @param stringArrayResId the resource id for a string array containing the possible values.
      * @see #setChoiceValues(String[])
      */
-    public void setChoiceValues(Context context, int stringArrayResId) {
+    public void setChoiceValues(Context context, @ArrayRes int stringArrayResId) {
         mChoiceValues = context.getResources().getStringArray(stringArrayResId);
     }
 
@@ -307,7 +308,7 @@
      * @param context the application context, used for retrieving the resources.
      * @param stringArrayResId the resource id of a string array containing the possible entries.
      */
-    public void setChoiceEntries(Context context, int stringArrayResId) {
+    public void setChoiceEntries(Context context, @ArrayRes int stringArrayResId) {
         mChoiceEntries = context.getResources().getStringArray(stringArrayResId);
     }
 
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index e9f7c50..ebc8e1e 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -16,11 +16,14 @@
 
 package android.content.pm;
 
+import android.annotation.DrawableRes;
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
+import android.annotation.StringRes;
 import android.annotation.SystemApi;
+import android.annotation.XmlRes;
 import android.app.PackageDeleteObserver;
 import android.app.PackageInstallObserver;
 import android.app.admin.DevicePolicyManager;
@@ -2710,7 +2713,7 @@
      * @return Returns a Drawable holding the requested image.  Returns null if
      * an image could not be found for any reason.
      */
-    public abstract Drawable getDrawable(String packageName, int resid,
+    public abstract Drawable getDrawable(String packageName, @DrawableRes int resid,
             ApplicationInfo appInfo);
 
     /**
@@ -3012,7 +3015,7 @@
      * @return Returns a CharSequence holding the requested text.  Returns null
      * if the text could not be found for any reason.
      */
-    public abstract CharSequence getText(String packageName, int resid,
+    public abstract CharSequence getText(String packageName, @StringRes int resid,
             ApplicationInfo appInfo);
 
     /**
@@ -3031,7 +3034,7 @@
      * data.  Returns null if the xml resource could not be found for any
      * reason.
      */
-    public abstract XmlResourceParser getXml(String packageName, int resid,
+    public abstract XmlResourceParser getXml(String packageName, @XmlRes int resid,
             ApplicationInfo appInfo);
 
     /**
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java
index 6fb7299..3e922f2 100644
--- a/core/java/android/content/res/Resources.java
+++ b/core/java/android/content/res/Resources.java
@@ -23,8 +23,22 @@
 
 import android.animation.Animator;
 import android.animation.StateListAnimator;
+import android.annotation.AnimRes;
+import android.annotation.AnyRes;
+import android.annotation.ArrayRes;
+import android.annotation.BoolRes;
+import android.annotation.ColorRes;
+import android.annotation.DimenRes;
+import android.annotation.DrawableRes;
+import android.annotation.FractionRes;
+import android.annotation.IntegerRes;
+import android.annotation.LayoutRes;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.PluralsRes;
+import android.annotation.RawRes;
+import android.annotation.StringRes;
+import android.annotation.XmlRes;
 import android.content.pm.ActivityInfo;
 import android.content.res.ColorStateList.ColorStateListFactory;
 import android.graphics.Movie;
@@ -287,7 +301,7 @@
      * @return CharSequence The string data associated with the resource, plus
      *         possibly styled text information.
      */
-    public CharSequence getText(int id) throws NotFoundException {
+    public CharSequence getText(@StringRes int id) throws NotFoundException {
         CharSequence res = mAssets.getResourceText(id);
         if (res != null) {
             return res;
@@ -316,7 +330,8 @@
      * @return CharSequence The string data associated with the resource, plus
      *         possibly styled text information.
      */
-    public CharSequence getQuantityText(int id, int quantity) throws NotFoundException {
+    public CharSequence getQuantityText(@PluralsRes int id, int quantity)
+            throws NotFoundException {
         NativePluralRules rule = getPluralRule();
         CharSequence res = mAssets.getResourceBagText(id,
                 attrForQuantityCode(rule.quantityForInt(quantity)));
@@ -377,7 +392,7 @@
      * @return String The string data associated with the resource,
      * stripped of styled text information.
      */
-    public String getString(int id) throws NotFoundException {
+    public String getString(@StringRes int id) throws NotFoundException {
         CharSequence res = getText(id);
         if (res != null) {
             return res.toString();
@@ -405,7 +420,8 @@
      * @return String The string data associated with the resource,
      * stripped of styled text information.
      */
-    public String getString(int id, Object... formatArgs) throws NotFoundException {
+    public String getString(@StringRes int id, Object... formatArgs)
+            throws NotFoundException {
         String raw = getString(id);
         return String.format(mConfiguration.locale, raw, formatArgs);
     }
@@ -435,7 +451,7 @@
      * @return String The string data associated with the resource,
      * stripped of styled text information.
      */
-    public String getQuantityString(int id, int quantity, Object... formatArgs)
+    public String getQuantityString(@PluralsRes int id, int quantity, Object... formatArgs)
             throws NotFoundException {
         String raw = getQuantityText(id, quantity).toString();
         return String.format(mConfiguration.locale, raw, formatArgs);
@@ -461,7 +477,8 @@
      * @return String The string data associated with the resource,
      * stripped of styled text information.
      */
-    public String getQuantityString(int id, int quantity) throws NotFoundException {
+    public String getQuantityString(@PluralsRes int id, int quantity)
+            throws NotFoundException {
         return getQuantityText(id, quantity).toString();
     }
 
@@ -479,7 +496,7 @@
      * @return CharSequence The string data associated with the resource, plus
      *         possibly styled text information, or def if id is 0 or not found.
      */
-    public CharSequence getText(int id, CharSequence def) {
+    public CharSequence getText(@StringRes int id, CharSequence def) {
         CharSequence res = id != 0 ? mAssets.getResourceText(id) : null;
         return res != null ? res : def;
     }
@@ -495,7 +512,7 @@
      *
      * @return The styled text array associated with the resource.
      */
-    public CharSequence[] getTextArray(int id) throws NotFoundException {
+    public CharSequence[] getTextArray(@ArrayRes int id) throws NotFoundException {
         CharSequence[] res = mAssets.getResourceTextArray(id);
         if (res != null) {
             return res;
@@ -515,7 +532,8 @@
      *
      * @return The string array associated with the resource.
      */
-    public String[] getStringArray(int id) throws NotFoundException {
+    public String[] getStringArray(@ArrayRes int id)
+            throws NotFoundException {
         String[] res = mAssets.getResourceStringArray(id);
         if (res != null) {
             return res;
@@ -535,7 +553,7 @@
      *
      * @return The int array associated with the resource.
      */
-    public int[] getIntArray(int id) throws NotFoundException {
+    public int[] getIntArray(@ArrayRes int id) throws NotFoundException {
         int[] res = mAssets.getArrayIntResource(id);
         if (res != null) {
             return res;
@@ -557,7 +575,8 @@
      * Be sure to call {@link TypedArray#recycle() TypedArray.recycle()}
      * when done with it.
      */
-    public TypedArray obtainTypedArray(int id) throws NotFoundException {
+    public TypedArray obtainTypedArray(@ArrayRes int id)
+            throws NotFoundException {
         int len = mAssets.getArraySize(id);
         if (len < 0) {
             throw new NotFoundException("Array resource ID #0x"
@@ -588,7 +607,7 @@
      * @see #getDimensionPixelOffset
      * @see #getDimensionPixelSize
      */
-    public float getDimension(int id) throws NotFoundException {
+    public float getDimension(@DimenRes int id) throws NotFoundException {
         synchronized (mAccessLock) {
             TypedValue value = mTmpValue;
             if (value == null) {
@@ -623,7 +642,7 @@
      * @see #getDimension
      * @see #getDimensionPixelSize
      */
-    public int getDimensionPixelOffset(int id) throws NotFoundException {
+    public int getDimensionPixelOffset(@DimenRes int id) throws NotFoundException {
         synchronized (mAccessLock) {
             TypedValue value = mTmpValue;
             if (value == null) {
@@ -660,7 +679,7 @@
      * @see #getDimension
      * @see #getDimensionPixelOffset
      */
-    public int getDimensionPixelSize(int id) throws NotFoundException {
+    public int getDimensionPixelSize(@DimenRes int id) throws NotFoundException {
         synchronized (mAccessLock) {
             TypedValue value = mTmpValue;
             if (value == null) {
@@ -694,7 +713,7 @@
      *  
      * @throws NotFoundException Throws NotFoundException if the given ID does not exist.
      */
-    public float getFraction(int id, int base, int pbase) {
+    public float getFraction(@FractionRes int id, int base, int pbase) {
         synchronized (mAccessLock) {
             TypedValue value = mTmpValue;
             if (value == null) {
@@ -744,7 +763,7 @@
      */
     @Deprecated
     @Nullable
-    public Drawable getDrawable(int id) throws NotFoundException {
+    public Drawable getDrawable(@DrawableRes int id) throws NotFoundException {
         final Drawable d = getDrawable(id, null);
         if (d != null && d.canApplyTheme()) {
             Log.w(TAG, "Drawable " + getResourceName(id) + " has unresolved theme "
@@ -769,7 +788,7 @@
      *         not exist.
      */
     @Nullable
-    public Drawable getDrawable(int id, @Nullable Theme theme) throws NotFoundException {
+    public Drawable getDrawable(@DrawableRes int id, @Nullable Theme theme) throws NotFoundException {
         TypedValue value;
         synchronized (mAccessLock) {
             value = mTmpValue;
@@ -817,7 +836,7 @@
      */
     @Deprecated
     @Nullable
-    public Drawable getDrawableForDensity(int id, int density) throws NotFoundException {
+    public Drawable getDrawableForDensity(@DrawableRes int id, int density) throws NotFoundException {
         return getDrawableForDensity(id, density, null);
     }
 
@@ -836,7 +855,7 @@
      *             not exist.
      */
     @Nullable
-    public Drawable getDrawableForDensity(int id, int density, @Nullable Theme theme) {
+    public Drawable getDrawableForDensity(@DrawableRes int id, int density, @Nullable Theme theme) {
         TypedValue value;
         synchronized (mAccessLock) {
             value = mTmpValue;
@@ -880,7 +899,7 @@
      * @throws NotFoundException Throws NotFoundException if the given ID does not exist.
      * 
      */
-    public Movie getMovie(int id) throws NotFoundException {
+    public Movie getMovie(@RawRes int id) throws NotFoundException {
         InputStream is = openRawResource(id);
         Movie movie = Movie.decodeStream(is);
         try {
@@ -907,7 +926,7 @@
      * @return A single color value in the form 0xAARRGGBB.
      * @deprecated Use {@link #getColor(int, Theme)} instead.
      */
-    public int getColor(int id) throws NotFoundException {
+    public int getColor(@ColorRes int id) throws NotFoundException {
         return getColor(id, null);
     }
 
@@ -927,7 +946,7 @@
      *
      * @return A single color value in the form 0xAARRGGBB.
      */
-    public int getColor(int id, @Nullable Theme theme) throws NotFoundException {
+    public int getColor(@ColorRes int id, @Nullable Theme theme) throws NotFoundException {
         TypedValue value;
         synchronized (mAccessLock) {
             value = mTmpValue;
@@ -975,7 +994,7 @@
      * @deprecated Use {@link #getColorStateList(int, Theme)} instead.
      */
     @Nullable
-    public ColorStateList getColorStateList(int id) throws NotFoundException {
+    public ColorStateList getColorStateList(@ColorRes int id) throws NotFoundException {
         final ColorStateList csl = getColorStateList(id, null);
         if (csl != null && csl.canApplyTheme()) {
             Log.w(TAG, "ColorStateList " + getResourceName(id) + " has "
@@ -1005,7 +1024,7 @@
      *         color or multiple colors that can be selected based on a state.
      */
     @Nullable
-    public ColorStateList getColorStateList(int id, @Nullable Theme theme)
+    public ColorStateList getColorStateList(@ColorRes int id, @Nullable Theme theme)
             throws NotFoundException {
         TypedValue value;
         synchronized (mAccessLock) {
@@ -1043,7 +1062,7 @@
      *
      * @return Returns the boolean value contained in the resource.
      */
-    public boolean getBoolean(int id) throws NotFoundException {
+    public boolean getBoolean(@BoolRes int id) throws NotFoundException {
         synchronized (mAccessLock) {
             TypedValue value = mTmpValue;
             if (value == null) {
@@ -1071,7 +1090,7 @@
      *
      * @return Returns the integer value contained in the resource.
      */
-    public int getInteger(int id) throws NotFoundException {
+    public int getInteger(@IntegerRes int id) throws NotFoundException {
         synchronized (mAccessLock) {
             TypedValue value = mTmpValue;
             if (value == null) {
@@ -1136,7 +1155,7 @@
      *         
      * @see #getXml
      */
-    public XmlResourceParser getLayout(int id) throws NotFoundException {
+    public XmlResourceParser getLayout(@LayoutRes int id) throws NotFoundException {
         return loadXmlResourceParser(id, "layout");
     }
 
@@ -1160,7 +1179,7 @@
      *         
      * @see #getXml
      */
-    public XmlResourceParser getAnimation(int id) throws NotFoundException {
+    public XmlResourceParser getAnimation(@AnimRes int id) throws NotFoundException {
         return loadXmlResourceParser(id, "anim");
     }
 
@@ -1185,7 +1204,7 @@
      *         
      * @see android.util.AttributeSet
      */
-    public XmlResourceParser getXml(int id) throws NotFoundException {
+    public XmlResourceParser getXml(@XmlRes int id) throws NotFoundException {
         return loadXmlResourceParser(id, "xml");
     }
 
@@ -1203,7 +1222,7 @@
      * @throws NotFoundException Throws NotFoundException if the given ID does not exist.
      * 
      */
-    public InputStream openRawResource(int id) throws NotFoundException {
+    public InputStream openRawResource(@RawRes int id) throws NotFoundException {
         TypedValue value;
         synchronized (mAccessLock) {
             value = mTmpValue;
@@ -1235,7 +1254,8 @@
      *
      * @throws NotFoundException Throws NotFoundException if the given ID does not exist.
      */
-    public InputStream openRawResource(int id, TypedValue value) throws NotFoundException {
+    public InputStream openRawResource(@RawRes int id, TypedValue value)
+            throws NotFoundException {
         getValue(id, value, true);
 
         try {
@@ -1270,7 +1290,8 @@
      * @throws NotFoundException Throws NotFoundException if the given ID does not exist.
      * 
      */
-    public AssetFileDescriptor openRawResourceFd(int id) throws NotFoundException {
+    public AssetFileDescriptor openRawResourceFd(@RawRes int id)
+            throws NotFoundException {
         TypedValue value;
         synchronized (mAccessLock) {
             value = mTmpValue;
@@ -1315,7 +1336,7 @@
      * @throws NotFoundException Throws NotFoundException if the given ID does not exist.
      *
      */
-    public void getValue(int id, TypedValue outValue, boolean resolveRefs)
+    public void getValue(@AnyRes int id, TypedValue outValue, boolean resolveRefs)
             throws NotFoundException {
         boolean found = mAssets.getResourceValue(id, 0, outValue, resolveRefs);
         if (found) {
@@ -1338,8 +1359,8 @@
      *             not exist.
      * @see #getValue(String, TypedValue, boolean)
      */
-    public void getValueForDensity(int id, int density, TypedValue outValue, boolean resolveRefs)
-            throws NotFoundException {
+    public void getValueForDensity(@AnyRes int id, int density, TypedValue outValue,
+            boolean resolveRefs) throws NotFoundException {
         boolean found = mAssets.getResourceValue(id, density, outValue, resolveRefs);
         if (found) {
             return;
@@ -1698,7 +1719,7 @@
          * @throws NotFoundException Throws NotFoundException if the given ID
          *         does not exist.
          */
-        public Drawable getDrawable(int id) throws NotFoundException {
+        public Drawable getDrawable(@DrawableRes int id) throws NotFoundException {
             return Resources.this.getDrawable(id, this);
         }
 
@@ -2103,7 +2124,7 @@
      *
      * @hide
      */
-    public static boolean resourceHasPackage(int resid) {
+    public static boolean resourceHasPackage(@AnyRes int resid) {
         return (resid >>> 24) != 0;
     }
 
@@ -2121,7 +2142,7 @@
      * @see #getResourceTypeName
      * @see #getResourceEntryName
      */
-    public String getResourceName(int resid) throws NotFoundException {
+    public String getResourceName(@AnyRes int resid) throws NotFoundException {
         String str = mAssets.getResourceName(resid);
         if (str != null) return str;
         throw new NotFoundException("Unable to find resource ID #0x"
@@ -2140,7 +2161,7 @@
      * 
      * @see #getResourceName
      */
-    public String getResourcePackageName(int resid) throws NotFoundException {
+    public String getResourcePackageName(@AnyRes int resid) throws NotFoundException {
         String str = mAssets.getResourcePackageName(resid);
         if (str != null) return str;
         throw new NotFoundException("Unable to find resource ID #0x"
@@ -2159,7 +2180,7 @@
      * 
      * @see #getResourceName
      */
-    public String getResourceTypeName(int resid) throws NotFoundException {
+    public String getResourceTypeName(@AnyRes int resid) throws NotFoundException {
         String str = mAssets.getResourceTypeName(resid);
         if (str != null) return str;
         throw new NotFoundException("Unable to find resource ID #0x"
@@ -2178,7 +2199,7 @@
      * 
      * @see #getResourceName
      */
-    public String getResourceEntryName(int resid) throws NotFoundException {
+    public String getResourceEntryName(@AnyRes int resid) throws NotFoundException {
         String str = mAssets.getResourceEntryName(resid);
         if (str != null) return str;
         throw new NotFoundException("Unable to find resource ID #0x"
diff --git a/core/java/android/content/res/TypedArray.java b/core/java/android/content/res/TypedArray.java
index f15b6b9..3d43304 100644
--- a/core/java/android/content/res/TypedArray.java
+++ b/core/java/android/content/res/TypedArray.java
@@ -16,6 +16,7 @@
 
 package android.content.res;
 
+import android.annotation.AnyRes;
 import android.annotation.Nullable;
 import android.graphics.drawable.Drawable;
 import android.os.StrictMode;
@@ -786,6 +787,7 @@
      * @return Attribute resource identifier, or defValue if not defined.
      * @throws RuntimeException if the TypedArray has already been recycled.
      */
+    @AnyRes
     public int getResourceId(int index, int defValue) {
         if (mRecycled) {
             throw new RuntimeException("Cannot make calls to a recycled instance!");
diff --git a/core/java/android/gesture/GestureLibraries.java b/core/java/android/gesture/GestureLibraries.java
index 6d6c156..611d9ab 100644
--- a/core/java/android/gesture/GestureLibraries.java
+++ b/core/java/android/gesture/GestureLibraries.java
@@ -16,6 +16,7 @@
 
 package android.gesture;
 
+import android.annotation.RawRes;
 import android.util.Log;
 import static android.gesture.GestureConstants.*;
 import android.content.Context;
@@ -44,7 +45,7 @@
         return fromFile(context.getFileStreamPath(name));
     }
 
-    public static GestureLibrary fromRawResource(Context context, int resourceId) {
+    public static GestureLibrary fromRawResource(Context context, @RawRes int resourceId) {
         return new ResourceGestureLibrary(context, resourceId);
     }
 
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java
index f218b65..481fc2f 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -19,6 +19,7 @@
 import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
 import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
 
+import android.annotation.DrawableRes;
 import android.app.ActivityManager;
 import android.app.Dialog;
 import android.content.Context;
@@ -1178,7 +1179,7 @@
         return isExtractViewShown() ? View.GONE : View.INVISIBLE;
     }
     
-    public void showStatusIcon(int iconResId) {
+    public void showStatusIcon(@DrawableRes int iconResId) {
         mStatusIcon = iconResId;
         mImm.showStatusIcon(mToken, getPackageName(), iconResId);
     }
diff --git a/core/java/android/inputmethodservice/Keyboard.java b/core/java/android/inputmethodservice/Keyboard.java
index 4fe54c0..45f1889 100644
--- a/core/java/android/inputmethodservice/Keyboard.java
+++ b/core/java/android/inputmethodservice/Keyboard.java
@@ -18,6 +18,7 @@
 
 import org.xmlpull.v1.XmlPullParserException;
 
+import android.annotation.XmlRes;
 import android.content.Context;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
@@ -519,7 +520,8 @@
      * @param width sets width of keyboard
      * @param height sets height of keyboard
      */
-    public Keyboard(Context context, int xmlLayoutResId, int modeId, int width, int height) {
+    public Keyboard(Context context, @XmlRes int xmlLayoutResId, int modeId, int width,
+            int height) {
         mDisplayWidth = width;
         mDisplayHeight = height;
 
@@ -540,7 +542,7 @@
      * @param xmlLayoutResId the resource file that contains the keyboard layout and keys.
      * @param modeId keyboard mode identifier
      */
-    public Keyboard(Context context, int xmlLayoutResId, int modeId) {
+    public Keyboard(Context context, @XmlRes int xmlLayoutResId, int modeId) {
         DisplayMetrics dm = context.getResources().getDisplayMetrics();
         mDisplayWidth = dm.widthPixels;
         mDisplayHeight = dm.heightPixels;
diff --git a/core/java/android/preference/DialogPreference.java b/core/java/android/preference/DialogPreference.java
index b65eac7..1b226c1 100644
--- a/core/java/android/preference/DialogPreference.java
+++ b/core/java/android/preference/DialogPreference.java
@@ -17,6 +17,8 @@
 package android.preference;
 
 
+import android.annotation.DrawableRes;
+import android.annotation.StringRes;
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.content.Context;
@@ -168,7 +170,7 @@
      * 
      * @param dialogIconRes The icon, as a resource ID.
      */
-    public void setDialogIcon(int dialogIconRes) {
+    public void setDialogIcon(@DrawableRes int dialogIconRes) {
         mDialogIcon = getContext().getDrawable(dialogIconRes);
     }
     
@@ -194,7 +196,7 @@
      * @see #setPositiveButtonText(CharSequence)
      * @param positiveButtonTextResId The positive button text as a resource.
      */
-    public void setPositiveButtonText(int positiveButtonTextResId) {
+    public void setPositiveButtonText(@StringRes int positiveButtonTextResId) {
         setPositiveButtonText(getContext().getString(positiveButtonTextResId));
     }
     
@@ -222,7 +224,7 @@
      * @see #setNegativeButtonText(CharSequence)
      * @param negativeButtonTextResId The negative button text as a resource.
      */
-    public void setNegativeButtonText(int negativeButtonTextResId) {
+    public void setNegativeButtonText(@StringRes int negativeButtonTextResId) {
         setNegativeButtonText(getContext().getString(negativeButtonTextResId));
     }
     
diff --git a/core/java/android/preference/GenericInflater.java b/core/java/android/preference/GenericInflater.java
index 7de7d1c..c84dbf1 100644
--- a/core/java/android/preference/GenericInflater.java
+++ b/core/java/android/preference/GenericInflater.java
@@ -23,6 +23,8 @@
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
+import android.annotation.AnyRes;
+import android.annotation.XmlRes;
 import android.content.Context;
 import android.content.res.XmlResourceParser;
 import android.util.AttributeSet;
@@ -216,7 +218,7 @@
      *         this is the root item; otherwise it is the root of the inflated
      *         XML file.
      */
-    public T inflate(int resource, P root) {
+    public T inflate(@XmlRes int resource, P root) {
         return inflate(resource, root, root != null);
     }
 
@@ -256,7 +258,7 @@
      *         attachToRoot is true, this is root; otherwise it is the root of
      *         the inflated XML file.
      */
-    public T inflate(int resource, P root, boolean attachToRoot) {
+    public T inflate(@XmlRes int resource, P root, boolean attachToRoot) {
         if (DEBUG) System.out.println("INFLATING from resource: " + resource);
         XmlResourceParser parser = getContext().getResources().getXml(resource);
         try {
diff --git a/core/java/android/preference/ListPreference.java b/core/java/android/preference/ListPreference.java
index 9482a72..2700373 100644
--- a/core/java/android/preference/ListPreference.java
+++ b/core/java/android/preference/ListPreference.java
@@ -16,6 +16,7 @@
 
 package android.preference;
 
+import android.annotation.ArrayRes;
 import android.app.AlertDialog.Builder;
 import android.content.Context;
 import android.content.DialogInterface;
@@ -91,7 +92,7 @@
      * @see #setEntries(CharSequence[])
      * @param entriesResId The entries array as a resource.
      */
-    public void setEntries(int entriesResId) {
+    public void setEntries(@ArrayRes int entriesResId) {
         setEntries(getContext().getResources().getTextArray(entriesResId));
     }
     
@@ -119,7 +120,7 @@
      * @see #setEntryValues(CharSequence[])
      * @param entryValuesResId The entry values array as a resource.
      */
-    public void setEntryValues(int entryValuesResId) {
+    public void setEntryValues(@ArrayRes int entryValuesResId) {
         setEntryValues(getContext().getResources().getTextArray(entryValuesResId));
     }
     
diff --git a/core/java/android/preference/MultiCheckPreference.java b/core/java/android/preference/MultiCheckPreference.java
index 57c906d..c1260a4 100644
--- a/core/java/android/preference/MultiCheckPreference.java
+++ b/core/java/android/preference/MultiCheckPreference.java
@@ -18,6 +18,7 @@
 
 import java.util.Arrays;
 
+import android.annotation.ArrayRes;
 import android.app.AlertDialog.Builder;
 import android.content.Context;
 import android.content.DialogInterface;
@@ -96,7 +97,7 @@
      * @see #setEntries(CharSequence[])
      * @param entriesResId The entries array as a resource.
      */
-    public void setEntries(int entriesResId) {
+    public void setEntries(@ArrayRes int entriesResId) {
         setEntries(getContext().getResources().getTextArray(entriesResId));
     }
     
@@ -126,7 +127,7 @@
      * @see #setEntryValues(CharSequence[])
      * @param entryValuesResId The entry values array as a resource.
      */
-    public void setEntryValues(int entryValuesResId) {
+    public void setEntryValues(@ArrayRes int entryValuesResId) {
         setEntryValuesCS(getContext().getResources().getTextArray(entryValuesResId));
     }
 
diff --git a/core/java/android/preference/MultiSelectListPreference.java b/core/java/android/preference/MultiSelectListPreference.java
index 6c4c20f..138bd878 100644
--- a/core/java/android/preference/MultiSelectListPreference.java
+++ b/core/java/android/preference/MultiSelectListPreference.java
@@ -16,6 +16,7 @@
 
 package android.preference;
 
+import android.annotation.ArrayRes;
 import android.app.AlertDialog.Builder;
 import android.content.Context;
 import android.content.DialogInterface;
@@ -87,7 +88,7 @@
      * @see #setEntries(CharSequence[])
      * @param entriesResId The entries array as a resource.
      */
-    public void setEntries(int entriesResId) {
+    public void setEntries(@ArrayRes int entriesResId) {
         setEntries(getContext().getResources().getTextArray(entriesResId));
     }
     
@@ -115,7 +116,7 @@
      * @see #setEntryValues(CharSequence[])
      * @param entryValuesResId The entry values array as a resource.
      */
-    public void setEntryValues(int entryValuesResId) {
+    public void setEntryValues(@ArrayRes int entryValuesResId) {
         setEntryValues(getContext().getResources().getTextArray(entryValuesResId));
     }
     
diff --git a/core/java/android/preference/Preference.java b/core/java/android/preference/Preference.java
index 0224c73..78928b2 100644
--- a/core/java/android/preference/Preference.java
+++ b/core/java/android/preference/Preference.java
@@ -18,6 +18,9 @@
 
 import com.android.internal.util.CharSequences;
 
+import android.annotation.DrawableRes;
+import android.annotation.LayoutRes;
+import android.annotation.StringRes;
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
@@ -424,7 +427,7 @@
      *            a {@link View}.
      * @see #setWidgetLayoutResource(int)
      */
-    public void setLayoutResource(int layoutResId) {
+    public void setLayoutResource(@LayoutRes int layoutResId) {
         if (layoutResId != mLayoutResId) {
             // Layout changed
             mCanRecycleLayout = false;
@@ -438,6 +441,7 @@
      * 
      * @return The layout resource ID.
      */
+    @LayoutRes
     public int getLayoutResource() {
         return mLayoutResId;
     }
@@ -452,7 +456,7 @@
      *            main layout.
      * @see #setLayoutResource(int)
      */
-    public void setWidgetLayoutResource(int widgetLayoutResId) {
+    public void setWidgetLayoutResource(@LayoutRes int widgetLayoutResId) {
         if (widgetLayoutResId != mWidgetLayoutResId) {
             // Layout changed
             mCanRecycleLayout = false;
@@ -465,6 +469,7 @@
      * 
      * @return The layout resource ID.
      */
+    @LayoutRes
     public int getWidgetLayoutResource() {
         return mWidgetLayoutResId;
     }
@@ -648,7 +653,7 @@
      * @see #setTitle(CharSequence)
      * @param titleResId The title as a resource ID.
      */
-    public void setTitle(int titleResId) {
+    public void setTitle(@StringRes int titleResId) {
         setTitle(mContext.getString(titleResId));
         mTitleRes = titleResId;
     }
@@ -660,6 +665,7 @@
      * @return The title resource.
      * @see #setTitle(int)
      */
+    @StringRes
     public int getTitleRes() {
         return mTitleRes;
     }
@@ -696,7 +702,7 @@
      * @see #setIcon(Drawable)
      * @param iconResId The icon as a resource ID.
      */
-    public void setIcon(int iconResId) {
+    public void setIcon(@DrawableRes int iconResId) {
         mIconResId = iconResId;
         setIcon(mContext.getDrawable(iconResId));
     }
@@ -739,7 +745,7 @@
      * @see #setSummary(CharSequence)
      * @param summaryResId The summary as a resource.
      */
-    public void setSummary(int summaryResId) {
+    public void setSummary(@StringRes int summaryResId) {
         setSummary(mContext.getString(summaryResId));
     }
     
diff --git a/core/java/android/preference/PreferenceActivity.java b/core/java/android/preference/PreferenceActivity.java
index 04cd7d5..0d80c0d 100644
--- a/core/java/android/preference/PreferenceActivity.java
+++ b/core/java/android/preference/PreferenceActivity.java
@@ -16,6 +16,8 @@
 
 package android.preference;
 
+import android.annotation.StringRes;
+import android.annotation.XmlRes;
 import android.app.Fragment;
 import android.app.FragmentBreadCrumbs;
 import android.app.FragmentManager;
@@ -337,6 +339,7 @@
          * Resource ID of title of the header that is shown to the user.
          * @attr ref android.R.styleable#PreferenceHeader_title
          */
+        @StringRes
         public int titleRes;
 
         /**
@@ -349,6 +352,7 @@
          * Resource ID of optional summary describing what this header controls.
          * @attr ref android.R.styleable#PreferenceHeader_summary
          */
+        @StringRes
         public int summaryRes;
 
         /**
@@ -361,6 +365,7 @@
          * Resource ID of optional text to show as the title in the bread crumb.
          * @attr ref android.R.styleable#PreferenceHeader_breadCrumbTitle
          */
+        @StringRes
         public int breadCrumbTitleRes;
 
         /**
@@ -373,6 +378,7 @@
          * Resource ID of optional text to show as the short title in the bread crumb.
          * @attr ref android.R.styleable#PreferenceHeader_breadCrumbShortTitle
          */
+        @StringRes
         public int breadCrumbShortTitleRes;
 
         /**
@@ -797,7 +803,7 @@
      * @param resid The XML resource to load and parse.
      * @param target The list in which the parsed headers should be placed.
      */
-    public void loadHeadersFromResource(int resid, List<Header> target) {
+    public void loadHeadersFromResource(@XmlRes int resid, List<Header> target) {
         XmlResourceParser parser = null;
         try {
             parser = getResources().getXml(resid);
@@ -1086,7 +1092,7 @@
      * fragment.
      */
     public Intent onBuildStartFragmentIntent(String fragmentName, Bundle args,
-            int titleRes, int shortTitleRes) {
+            @StringRes int titleRes, int shortTitleRes) {
         Intent intent = new Intent(Intent.ACTION_MAIN);
         intent.setClass(this, getClass());
         intent.putExtra(EXTRA_SHOW_FRAGMENT, fragmentName);
@@ -1124,7 +1130,8 @@
      * this set of preferences.
      */
     public void startWithFragment(String fragmentName, Bundle args,
-            Fragment resultTo, int resultRequestCode, int titleRes, int shortTitleRes) {
+            Fragment resultTo, int resultRequestCode, @StringRes int titleRes,
+            @StringRes int shortTitleRes) {
         Intent intent = onBuildStartFragmentIntent(fragmentName, args, titleRes, shortTitleRes);
         if (resultTo == null) {
             startActivity(intent);
@@ -1343,9 +1350,9 @@
      * preference panel is done.  The launched panel must use
      * {@link #finishPreferencePanel(Fragment, int, Intent)} when done.
      * @param resultRequestCode If resultTo is non-null, this is the caller's
-     * request code to be received with the resut.
+     * request code to be received with the result.
      */
-    public void startPreferencePanel(String fragmentClass, Bundle args, int titleRes,
+    public void startPreferencePanel(String fragmentClass, Bundle args, @StringRes int titleRes,
             CharSequence titleText, Fragment resultTo, int resultRequestCode) {
         if (mSinglePane) {
             startWithFragment(fragmentClass, args, resultTo, resultRequestCode, titleRes, 0);
diff --git a/core/java/android/preference/PreferenceManager.java b/core/java/android/preference/PreferenceManager.java
index 0a0e625..55ee77a 100644
--- a/core/java/android/preference/PreferenceManager.java
+++ b/core/java/android/preference/PreferenceManager.java
@@ -16,6 +16,7 @@
 
 package android.preference;
 
+import android.annotation.XmlRes;
 import android.app.Activity;
 import android.content.Context;
 import android.content.DialogInterface;
@@ -263,7 +264,7 @@
      *         root).
      * @hide
      */
-    public PreferenceScreen inflateFromResource(Context context, int resId,
+    public PreferenceScreen inflateFromResource(Context context, @XmlRes int resId,
             PreferenceScreen rootPreferences) {
         // Block commits
         setNoCommit(true);
@@ -438,7 +439,7 @@
      *            and clear it followed by a call to this method with this
      *            parameter set to true.
      */
-    public static void setDefaultValues(Context context, int resId, boolean readAgain) {
+    public static void setDefaultValues(Context context, @XmlRes int resId, boolean readAgain) {
         
         // Use the default shared preferences name and mode
         setDefaultValues(context, getDefaultSharedPreferencesName(context),
diff --git a/core/java/android/preference/SwitchPreference.java b/core/java/android/preference/SwitchPreference.java
index 53b5aad..9c3cefc 100644
--- a/core/java/android/preference/SwitchPreference.java
+++ b/core/java/android/preference/SwitchPreference.java
@@ -16,6 +16,7 @@
 
 package android.preference;
 
+import android.annotation.StringRes;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.util.AttributeSet;
@@ -169,7 +170,7 @@
      *
      * @param resId The text as a string resource ID
      */
-    public void setSwitchTextOn(int resId) {
+    public void setSwitchTextOn(@StringRes int resId) {
         setSwitchTextOn(getContext().getString(resId));
     }
 
@@ -179,7 +180,7 @@
      *
      * @param resId The text as a string resource ID
      */
-    public void setSwitchTextOff(int resId) {
+    public void setSwitchTextOff(@StringRes int resId) {
         setSwitchTextOff(getContext().getString(resId));
     }
 
diff --git a/core/java/android/preference/TwoStatePreference.java b/core/java/android/preference/TwoStatePreference.java
index 3823b27..7037aca 100644
--- a/core/java/android/preference/TwoStatePreference.java
+++ b/core/java/android/preference/TwoStatePreference.java
@@ -16,6 +16,7 @@
 
 package android.preference;
 
+import android.annotation.StringRes;
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.content.res.TypedArray;
@@ -116,7 +117,7 @@
      * @see #setSummaryOn(CharSequence)
      * @param summaryResId The summary as a resource.
      */
-    public void setSummaryOn(int summaryResId) {
+    public void setSummaryOn(@StringRes int summaryResId) {
         setSummaryOn(getContext().getString(summaryResId));
     }
 
@@ -144,7 +145,7 @@
      * @see #setSummaryOff(CharSequence)
      * @param summaryResId The summary as a resource.
      */
-    public void setSummaryOff(int summaryResId) {
+    public void setSummaryOff(@StringRes int summaryResId) {
         setSummaryOff(getContext().getString(summaryResId));
     }
 
diff --git a/core/java/android/service/dreams/DreamService.java b/core/java/android/service/dreams/DreamService.java
index d410622..df4d7e0 100644
--- a/core/java/android/service/dreams/DreamService.java
+++ b/core/java/android/service/dreams/DreamService.java
@@ -18,6 +18,8 @@
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 
+import android.annotation.IdRes;
+import android.annotation.LayoutRes;
 import android.annotation.Nullable;
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
@@ -383,7 +385,7 @@
      * @see #setContentView(android.view.View)
      * @see #setContentView(android.view.View, android.view.ViewGroup.LayoutParams)
      */
-    public void setContentView(int layoutResID) {
+    public void setContentView(@LayoutRes int layoutResID) {
         getWindow().setContentView(layoutResID);
     }
 
@@ -444,7 +446,7 @@
      * @return The view if found or null otherwise.
      */
     @Nullable
-    public View findViewById(int id) {
+    public View findViewById(@IdRes int id) {
         return getWindow().findViewById(id);
     }
 
diff --git a/core/java/android/speech/tts/TextToSpeech.java b/core/java/android/speech/tts/TextToSpeech.java
index 06e9ce0..f0ad951 100644
--- a/core/java/android/speech/tts/TextToSpeech.java
+++ b/core/java/android/speech/tts/TextToSpeech.java
@@ -15,6 +15,7 @@
  */
 package android.speech.tts;
 
+import android.annotation.RawRes;
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
 import android.content.ComponentName;
@@ -884,7 +885,7 @@
      *
      * @return Code indicating success or failure. See {@link #ERROR} and {@link #SUCCESS}.
      */
-    public int addSpeech(String text, String packagename, int resourceId) {
+    public int addSpeech(String text, String packagename, @RawRes int resourceId) {
         synchronized (mStartLock) {
             mUtterances.put(text, makeResourceUri(packagename, resourceId));
             return SUCCESS;
@@ -993,7 +994,7 @@
      *
      * @return Code indicating success or failure. See {@link #ERROR} and {@link #SUCCESS}.
      */
-    public int addEarcon(String earcon, String packagename, int resourceId) {
+    public int addEarcon(String earcon, String packagename, @RawRes int resourceId) {
         synchronized(mStartLock) {
             mEarcons.put(earcon, makeResourceUri(packagename, resourceId));
             return SUCCESS;
diff --git a/core/java/android/text/style/ImageSpan.java b/core/java/android/text/style/ImageSpan.java
index 3d6f8e6..856dd0b 100644
--- a/core/java/android/text/style/ImageSpan.java
+++ b/core/java/android/text/style/ImageSpan.java
@@ -16,6 +16,7 @@
 
 package android.text.style;
 
+import android.annotation.DrawableRes;
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
@@ -110,7 +111,7 @@
         mSource = uri.toString();
     }
 
-    public ImageSpan(Context context, int resourceId) {
+    public ImageSpan(Context context, @DrawableRes int resourceId) {
         this(context, resourceId, ALIGN_BOTTOM);
     }
 
@@ -118,7 +119,7 @@
      * @param verticalAlignment one of {@link DynamicDrawableSpan#ALIGN_BOTTOM} or
      * {@link DynamicDrawableSpan#ALIGN_BASELINE}.
      */
-    public ImageSpan(Context context, int resourceId, int verticalAlignment) {
+    public ImageSpan(Context context, @DrawableRes int resourceId, int verticalAlignment) {
         super(verticalAlignment);
         mContext = context;
         mResourceId = resourceId;
diff --git a/core/java/android/util/TypedValue.java b/core/java/android/util/TypedValue.java
index 74d4245..98aaa81 100644
--- a/core/java/android/util/TypedValue.java
+++ b/core/java/android/util/TypedValue.java
@@ -16,6 +16,8 @@
 
 package android.util;
 
+import android.annotation.AnyRes;
+
 /**
  * Container for a dynamically typed data value.  Primarily used with
  * {@link android.content.res.Resources} for holding resource values.
@@ -178,6 +180,7 @@
     public int assetCookie;
 
     /** If Value came from a resource, this holds the corresponding resource id. */
+    @AnyRes
     public int resourceId;
 
     /** If Value came from a resource, these are the configurations for which
diff --git a/core/java/android/view/ActionMode.java b/core/java/android/view/ActionMode.java
index ae4b60f..a018138 100644
--- a/core/java/android/view/ActionMode.java
+++ b/core/java/android/view/ActionMode.java
@@ -17,6 +17,8 @@
 package android.view;
 
 
+import android.annotation.StringRes;
+
 /**
  * Represents a contextual mode of the user interface. Action modes can be used to provide
  * alternative interaction modes and replace parts of the normal UI until finished.
@@ -93,7 +95,7 @@
      * @see #setTitle(CharSequence)
      * @see #setCustomView(View)
      */
-    public abstract void setTitle(int resId);
+    public abstract void setTitle(@StringRes int resId);
 
     /**
      * Set the subtitle of the action mode. This method will have no visible effect if
@@ -115,7 +117,7 @@
      * @see #setSubtitle(CharSequence)
      * @see #setCustomView(View)
      */
-    public abstract void setSubtitle(int resId);
+    public abstract void setSubtitle(@StringRes int resId);
 
     /**
      * Set whether or not the title/subtitle display for this action mode
diff --git a/core/java/android/view/ContextMenu.java b/core/java/android/view/ContextMenu.java
index decabcb..85fe421 100644
--- a/core/java/android/view/ContextMenu.java
+++ b/core/java/android/view/ContextMenu.java
@@ -16,6 +16,8 @@
 
 package android.view;
 
+import android.annotation.DrawableRes;
+import android.annotation.StringRes;
 import android.app.Activity;
 import android.graphics.drawable.Drawable;
 import android.widget.AdapterView;
@@ -44,7 +46,7 @@
      * @param titleRes The string resource identifier used for the title.
      * @return This ContextMenu so additional setters can be called.
      */
-    public ContextMenu setHeaderTitle(int titleRes);
+    public ContextMenu setHeaderTitle(@StringRes int titleRes);
 
     /**
      * Sets the context menu header's title to the title given in <var>title</var>.
@@ -61,7 +63,7 @@
      * @param iconRes The resource identifier used for the icon.
      * @return This ContextMenu so additional setters can be called.
      */
-    public ContextMenu setHeaderIcon(int iconRes);
+    public ContextMenu setHeaderIcon(@DrawableRes int iconRes);
 
     /**
      * Sets the context menu header's icon to the icon given in <var>icon</var>
diff --git a/core/java/android/view/LayoutInflater.java b/core/java/android/view/LayoutInflater.java
index a5225cb..1014573 100644
--- a/core/java/android/view/LayoutInflater.java
+++ b/core/java/android/view/LayoutInflater.java
@@ -21,6 +21,7 @@
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
+import android.annotation.LayoutRes;
 import android.annotation.Nullable;
 import android.content.Context;
 import android.content.res.Resources;
@@ -369,7 +370,7 @@
      *         this is the root View; otherwise it is the root of the inflated
      *         XML file.
      */
-    public View inflate(int resource, @Nullable ViewGroup root) {
+    public View inflate(@LayoutRes int resource, @Nullable ViewGroup root) {
         return inflate(resource, root, root != null);
     }
 
@@ -410,7 +411,7 @@
      *         attachToRoot is true, this is root; otherwise it is the root of
      *         the inflated XML file.
      */
-    public View inflate(int resource, @Nullable ViewGroup root, boolean attachToRoot) {
+    public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot) {
         final Resources res = getContext().getResources();
         if (DEBUG) {
             Log.d(TAG, "INFLATING from resource: \"" + res.getResourceName(resource) + "\" ("
diff --git a/core/java/android/view/Menu.java b/core/java/android/view/Menu.java
index 7157bc5..0c2e9cf 100644
--- a/core/java/android/view/Menu.java
+++ b/core/java/android/view/Menu.java
@@ -16,6 +16,7 @@
 
 package android.view;
 
+import android.annotation.StringRes;
 import android.app.Activity;
 import android.content.ComponentName;
 import android.content.Intent;
@@ -148,7 +149,7 @@
      * @param titleRes Resource identifier of title string.
      * @return The newly added menu item.
      */
-    public MenuItem add(int titleRes);
+    public MenuItem add(@StringRes int titleRes);
 
     /**
      * Add a new item to the menu. This item displays the given title for its
@@ -182,7 +183,7 @@
      * @param titleRes Resource identifier of title string.
      * @return The newly added menu item.
      */
-    public MenuItem add(int groupId, int itemId, int order, int titleRes);
+    public MenuItem add(int groupId, int itemId, int order, @StringRes int titleRes);
 
     /**
      * Add a new sub-menu to the menu. This item displays the given title for
@@ -202,7 +203,7 @@
      * @param titleRes Resource identifier of title string.
      * @return The newly added sub-menu
      */
-    SubMenu addSubMenu(final int titleRes);
+    SubMenu addSubMenu(@StringRes final int titleRes);
 
     /**
      * Add a new sub-menu to the menu. This item displays the given
@@ -239,7 +240,7 @@
      * @param titleRes Resource identifier of title string.
      * @return The newly added sub-menu
      */
-    SubMenu addSubMenu(int groupId, int itemId, int order, int titleRes);
+    SubMenu addSubMenu(int groupId, int itemId, int order, @StringRes int titleRes);
 
     /**
      * Add a group of menu items corresponding to actions that can be performed
diff --git a/core/java/android/view/MenuInflater.java b/core/java/android/view/MenuInflater.java
index 5811c17..3492aa0 100644
--- a/core/java/android/view/MenuInflater.java
+++ b/core/java/android/view/MenuInflater.java
@@ -21,6 +21,7 @@
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
+import android.annotation.MenuRes;
 import android.app.Activity;
 import android.content.Context;
 import android.content.ContextWrapper;
@@ -101,7 +102,7 @@
      * @param menu The Menu to inflate into. The items and submenus will be
      *            added to this Menu.
      */
-    public void inflate(int menuRes, Menu menu) {
+    public void inflate(@MenuRes int menuRes, Menu menu) {
         XmlResourceParser parser = null;
         try {
             parser = mContext.getResources().getLayout(menuRes);
diff --git a/core/java/android/view/MenuItem.java b/core/java/android/view/MenuItem.java
index e706c9c..9e8b97e 100644
--- a/core/java/android/view/MenuItem.java
+++ b/core/java/android/view/MenuItem.java
@@ -16,6 +16,9 @@
 
 package android.view;
 
+import android.annotation.DrawableRes;
+import android.annotation.LayoutRes;
+import android.annotation.StringRes;
 import android.app.Activity;
 import android.content.Intent;
 import android.graphics.drawable.Drawable;
@@ -165,7 +168,7 @@
      * @see #setTitleCondensed(CharSequence)
      */
     
-    public MenuItem setTitle(int title);
+    public MenuItem setTitle(@StringRes int title);
 
     /**
      * Retrieve the current title of the item.
@@ -214,7 +217,7 @@
      * @param iconRes The new icon (as a resource ID) to be displayed.
      * @return This Item so additional setters can be called.
      */
-    public MenuItem setIcon(int iconRes);
+    public MenuItem setIcon(@DrawableRes int iconRes);
     
     /**
      * Returns the icon for this item as a Drawable (getting it from resources if it hasn't been
@@ -511,7 +514,7 @@
      *
      * @see #setShowAsAction(int)
      */
-    public MenuItem setActionView(int resId);
+    public MenuItem setActionView(@LayoutRes int resId);
 
     /**
      * Returns the currently set action view for this menu item.
diff --git a/core/java/android/view/PointerIcon.java b/core/java/android/view/PointerIcon.java
index 7dcad68..cf35ce5 100644
--- a/core/java/android/view/PointerIcon.java
+++ b/core/java/android/view/PointerIcon.java
@@ -18,6 +18,7 @@
 
 import com.android.internal.util.XmlUtils;
 
+import android.annotation.XmlRes;
 import android.content.Context;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
@@ -192,7 +193,7 @@
      * @throws Resources.NotFoundException if the resource was not found or the drawable
      * linked in the resource was not found.
      */
-    public static PointerIcon loadCustomIcon(Resources resources, int resourceId) {
+    public static PointerIcon loadCustomIcon(Resources resources, @XmlRes int resourceId) {
         if (resources == null) {
             throw new IllegalArgumentException("resources must not be null");
         }
@@ -373,7 +374,7 @@
         return true;
     }
 
-    private void loadResource(Context context, Resources resources, int resourceId) {
+    private void loadResource(Context context, Resources resources, @XmlRes int resourceId) {
         final XmlResourceParser parser = resources.getXml(resourceId);
         final int bitmapRes;
         final float hotSpotX;
diff --git a/core/java/android/view/SubMenu.java b/core/java/android/view/SubMenu.java
index 196a183..38662b0 100644
--- a/core/java/android/view/SubMenu.java
+++ b/core/java/android/view/SubMenu.java
@@ -16,6 +16,8 @@
 
 package android.view;
 
+import android.annotation.DrawableRes;
+import android.annotation.StringRes;
 import android.graphics.drawable.Drawable;
 
 /**
@@ -38,7 +40,7 @@
      * @param titleRes The string resource identifier used for the title.
      * @return This SubMenu so additional setters can be called.
      */
-    public SubMenu setHeaderTitle(int titleRes);
+    public SubMenu setHeaderTitle(@StringRes int titleRes);
 
     /**
      * Sets the submenu header's title to the title given in <var>title</var>.
@@ -55,7 +57,7 @@
      * @param iconRes The resource identifier used for the icon.
      * @return This SubMenu so additional setters can be called.
      */
-    public SubMenu setHeaderIcon(int iconRes);
+    public SubMenu setHeaderIcon(@DrawableRes int iconRes);
 
     /**
      * Sets the submenu header's icon to the icon given in <var>icon</var>
@@ -88,7 +90,7 @@
      * @param iconRes The new icon (as a resource ID) to be displayed.
      * @return This SubMenu so additional setters can be called.
      */
-    public SubMenu setIcon(int iconRes);
+    public SubMenu setIcon(@DrawableRes int iconRes);
     
     /**
      * Change the icon associated with this submenu's item in its parent menu.
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index ad5d651..f99d2d5 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -18,6 +18,8 @@
 
 import android.animation.AnimatorInflater;
 import android.animation.StateListAnimator;
+import android.annotation.DrawableRes;
+import android.annotation.IdRes;
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -1593,6 +1595,7 @@
      * @see #setId(int)
      * @see #getId()
      */
+    @IdRes
     @ViewDebug.ExportedProperty(resolveId = true)
     int mID = NO_ID;
 
@@ -6062,7 +6065,7 @@
      * @param id The labeled view id.
      */
     @RemotableViewMethod
-    public void setLabelFor(int id) {
+    public void setLabelFor(@IdRes int id) {
         if (mLabelForId == id) {
             return;
         }
@@ -16242,7 +16245,7 @@
      * @attr ref android.R.styleable#View_background
      */
     @RemotableViewMethod
-    public void setBackgroundResource(int resid) {
+    public void setBackgroundResource(@DrawableRes int resid) {
         if (resid != 0 && resid == mBackgroundResource) {
             return;
         }
@@ -17070,7 +17073,7 @@
      * @param id the id of the view to be found
      * @return the view of the specified id, null if cannot be found
      */
-    protected View findViewTraversal(int id) {
+    protected View findViewTraversal(@IdRes int id) {
         if (id == mID) {
             return this;
         }
@@ -17110,7 +17113,7 @@
      * @return The view that has the given id in the hierarchy or null
      */
     @Nullable
-    public final View findViewById(int id) {
+    public final View findViewById(@IdRes int id) {
         if (id < 0) {
             return null;
         }
@@ -17225,7 +17228,7 @@
      *
      * @attr ref android.R.styleable#View_id
      */
-    public void setId(int id) {
+    public void setId(@IdRes int id) {
         mID = id;
         if (mID == View.NO_ID && mLabelForId != View.NO_ID) {
             mID = generateViewId();
@@ -17265,6 +17268,7 @@
      * @see #findViewById(int)
      * @attr ref android.R.styleable#View_id
      */
+    @IdRes
     @ViewDebug.CapturedViewProperty
     public int getId() {
         return mID;
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 504a758..a49d8c3 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -17,6 +17,7 @@
 package android.view;
 
 import android.animation.LayoutTransition;
+import android.annotation.IdRes;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.content.res.Configuration;
@@ -3612,7 +3613,7 @@
      * {@hide}
      */
     @Override
-    protected View findViewTraversal(int id) {
+    protected View findViewTraversal(@IdRes int id) {
         if (id == mID) {
             return this;
         }
diff --git a/core/java/android/view/ViewStub.java b/core/java/android/view/ViewStub.java
index 9f9ed5b..ec852e8 100644
--- a/core/java/android/view/ViewStub.java
+++ b/core/java/android/view/ViewStub.java
@@ -16,6 +16,8 @@
 
 package android.view;
 
+import android.annotation.IdRes;
+import android.annotation.LayoutRes;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.Canvas;
@@ -87,7 +89,7 @@
      * @param context The application's environment.
      * @param layoutResource The reference to a layout resource that will be inflated.
      */
-    public ViewStub(Context context, int layoutResource) {
+    public ViewStub(Context context, @LayoutRes int layoutResource) {
         this(context, null);
 
         mLayoutResource = layoutResource;
@@ -125,6 +127,7 @@
      * @see #setInflatedId(int)
      * @attr ref android.R.styleable#ViewStub_inflatedId
      */
+    @IdRes
     public int getInflatedId() {
         return mInflatedId;
     }
@@ -140,7 +143,7 @@
      * @attr ref android.R.styleable#ViewStub_inflatedId
      */
     @android.view.RemotableViewMethod
-    public void setInflatedId(int inflatedId) {
+    public void setInflatedId(@IdRes int inflatedId) {
         mInflatedId = inflatedId;
     }
 
@@ -156,6 +159,7 @@
      * @see #inflate()
      * @attr ref android.R.styleable#ViewStub_layout
      */
+    @LayoutRes
     public int getLayoutResource() {
         return mLayoutResource;
     }
@@ -173,7 +177,7 @@
      * @attr ref android.R.styleable#ViewStub_layout
      */
     @android.view.RemotableViewMethod
-    public void setLayoutResource(int layoutResource) {
+    public void setLayoutResource(@LayoutRes int layoutResource) {
         mLayoutResource = layoutResource;
     }
 
diff --git a/core/java/android/view/Window.java b/core/java/android/view/Window.java
index 8964862..e332135 100644
--- a/core/java/android/view/Window.java
+++ b/core/java/android/view/Window.java
@@ -16,6 +16,9 @@
 
 package android.view;
 
+import android.annotation.DrawableRes;
+import android.annotation.IdRes;
+import android.annotation.LayoutRes;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
@@ -985,7 +988,7 @@
      * @return The view if found or null otherwise.
      */
     @Nullable
-    public View findViewById(int id) {
+    public View findViewById(@IdRes int id) {
         return getDecorView().findViewById(id);
     }
 
@@ -998,7 +1001,7 @@
      * @param layoutResID Resource ID to be inflated.
      * @see #setContentView(View, android.view.ViewGroup.LayoutParams)
      */
-    public abstract void setContentView(int layoutResID);
+    public abstract void setContentView(@LayoutRes int layoutResID);
 
     /**
      * Convenience for
@@ -1128,7 +1131,7 @@
      * @param resId The resource identifier of a drawable resource which will
      *              be installed as the new background.
      */
-    public void setBackgroundDrawableResource(int resId) {
+    public void setBackgroundDrawableResource(@DrawableRes int resId) {
         setBackgroundDrawable(mContext.getDrawable(resId));
     }
 
@@ -1144,7 +1147,7 @@
 
     /**
      * Set the value for a drawable feature of this window, from a resource
-     * identifier.  You must have called requestFeauture(featureId) before
+     * identifier.  You must have called requestFeature(featureId) before
      * calling this function.
      *
      * @see android.content.res.Resources#getDrawable(int)
@@ -1153,7 +1156,7 @@
      * constant by Window.
      * @param resId Resource identifier of the desired image.
      */
-    public abstract void setFeatureDrawableResource(int featureId, int resId);
+    public abstract void setFeatureDrawableResource(int featureId, @DrawableRes int resId);
 
     /**
      * Set the value for a drawable feature of this window, from a URI. You
@@ -1423,7 +1426,7 @@
      *
      * @param resId resource ID of a drawable to set
      */
-    public void setIcon(int resId) { }
+    public void setIcon(@DrawableRes int resId) { }
 
     /**
      * Set the default icon for this window.
@@ -1432,7 +1435,7 @@
      *
      * @hide
      */
-    public void setDefaultIcon(int resId) { }
+    public void setDefaultIcon(@DrawableRes int resId) { }
 
     /**
      * Set the logo for this window. A logo is often shown in place of an
@@ -1441,7 +1444,7 @@
      *
      * @param resId resource ID of a drawable to set
      */
-    public void setLogo(int resId) { }
+    public void setLogo(@DrawableRes int resId) { }
 
     /**
      * Set the default logo for this window.
@@ -1450,7 +1453,7 @@
      *
      * @hide
      */
-    public void setDefaultLogo(int resId) { }
+    public void setDefaultLogo(@DrawableRes int resId) { }
 
     /**
      * Set focus locally. The window should have the
diff --git a/core/java/android/view/animation/AnimationUtils.java b/core/java/android/view/animation/AnimationUtils.java
index 606c83e..4d1209a 100644
--- a/core/java/android/view/animation/AnimationUtils.java
+++ b/core/java/android/view/animation/AnimationUtils.java
@@ -19,6 +19,8 @@
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
+import android.annotation.AnimRes;
+import android.annotation.InterpolatorRes;
 import android.content.Context;
 import android.content.res.Resources;
 import android.content.res.Resources.Theme;
@@ -65,7 +67,7 @@
      * @return The animation object reference by the specified id
      * @throws NotFoundException when the animation cannot be loaded
      */
-    public static Animation loadAnimation(Context context, int id)
+    public static Animation loadAnimation(Context context, @AnimRes int id)
             throws NotFoundException {
 
         XmlResourceParser parser = null;
@@ -143,7 +145,7 @@
      * @return The animation object reference by the specified id
      * @throws NotFoundException when the layout animation controller cannot be loaded
      */
-    public static LayoutAnimationController loadLayoutAnimation(Context context, int id)
+    public static LayoutAnimationController loadLayoutAnimation(Context context, @AnimRes int id)
             throws NotFoundException {
 
         XmlResourceParser parser = null;
@@ -266,7 +268,8 @@
      * @return The animation object reference by the specified id
      * @throws NotFoundException
      */
-    public static Interpolator loadInterpolator(Context context, int id) throws NotFoundException {
+    public static Interpolator loadInterpolator(Context context, @InterpolatorRes int id)
+            throws NotFoundException {
         XmlResourceParser parser = null;
         try {
             parser = context.getResources().getAnimation(id);
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index e87a117..164283d 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -16,6 +16,7 @@
 
 package android.widget;
 
+import android.annotation.DrawableRes;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.TypedArray;
@@ -2712,7 +2713,7 @@
      *
      * @attr ref android.R.styleable#AbsListView_listSelector
      */
-    public void setSelector(int resID) {
+    public void setSelector(@DrawableRes int resID) {
         setSelector(getContext().getDrawable(resID));
     }
 
diff --git a/core/java/android/widget/ActivityChooserView.java b/core/java/android/widget/ActivityChooserView.java
index f9af2f9..f34ad71 100644
--- a/core/java/android/widget/ActivityChooserView.java
+++ b/core/java/android/widget/ActivityChooserView.java
@@ -18,6 +18,7 @@
 
 import com.android.internal.R;
 
+import android.annotation.StringRes;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
@@ -334,7 +335,7 @@
      *
      * @param resourceId The content description resource id.
      */
-    public void setExpandActivityOverflowButtonContentDescription(int resourceId) {
+    public void setExpandActivityOverflowButtonContentDescription(@StringRes int resourceId) {
         CharSequence contentDescription = mContext.getString(resourceId);
         mExpandActivityOverflowButtonImage.setContentDescription(contentDescription);
     }
@@ -514,7 +515,7 @@
      *
      * @param resourceId The resource id.
      */
-    public void setDefaultActionButtonContentDescription(int resourceId) {
+    public void setDefaultActionButtonContentDescription(@StringRes int resourceId) {
         mDefaultActionButtonContentDescription = resourceId;
     }
 
diff --git a/core/java/android/widget/ArrayAdapter.java b/core/java/android/widget/ArrayAdapter.java
index aff5e29..89e508f 100644
--- a/core/java/android/widget/ArrayAdapter.java
+++ b/core/java/android/widget/ArrayAdapter.java
@@ -16,6 +16,9 @@
 
 package android.widget;
 
+import android.annotation.ArrayRes;
+import android.annotation.IdRes;
+import android.annotation.LayoutRes;
 import android.content.Context;
 import android.content.res.Resources;
 import android.util.Log;
@@ -106,7 +109,7 @@
      * @param resource The resource ID for a layout file containing a TextView to use when
      *                 instantiating views.
      */
-    public ArrayAdapter(Context context, int resource) {
+    public ArrayAdapter(Context context, @LayoutRes int resource) {
         this(context, resource, 0, new ArrayList<T>());
     }
 
@@ -118,7 +121,7 @@
      *                 instantiating views.
      * @param textViewResourceId The id of the TextView within the layout resource to be populated
      */
-    public ArrayAdapter(Context context, int resource, int textViewResourceId) {
+    public ArrayAdapter(Context context, @LayoutRes int resource, @IdRes int textViewResourceId) {
         this(context, resource, textViewResourceId, new ArrayList<T>());
     }
 
@@ -130,7 +133,7 @@
      *                 instantiating views.
      * @param objects The objects to represent in the ListView.
      */
-    public ArrayAdapter(Context context, int resource, T[] objects) {
+    public ArrayAdapter(Context context, @LayoutRes int resource, T[] objects) {
         this(context, resource, 0, Arrays.asList(objects));
     }
 
@@ -143,7 +146,7 @@
      * @param textViewResourceId The id of the TextView within the layout resource to be populated
      * @param objects The objects to represent in the ListView.
      */
-    public ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects) {
+    public ArrayAdapter(Context context, @LayoutRes int resource, @IdRes int textViewResourceId, T[] objects) {
         this(context, resource, textViewResourceId, Arrays.asList(objects));
     }
 
@@ -155,7 +158,7 @@
      *                 instantiating views.
      * @param objects The objects to represent in the ListView.
      */
-    public ArrayAdapter(Context context, int resource, List<T> objects) {
+    public ArrayAdapter(Context context, @LayoutRes int resource, List<T> objects) {
         this(context, resource, 0, objects);
     }
 
@@ -405,7 +408,7 @@
      * @param resource the layout resource defining the drop down views
      * @see #getDropDownView(int, android.view.View, android.view.ViewGroup)
      */
-    public void setDropDownViewResource(int resource) {
+    public void setDropDownViewResource(@LayoutRes int resource) {
         this.mDropDownResource = resource;
     }
 
@@ -457,7 +460,7 @@
      * @return An ArrayAdapter<CharSequence>.
      */
     public static ArrayAdapter<CharSequence> createFromResource(Context context,
-            int textArrayResId, int textViewResId) {
+            @ArrayRes int textArrayResId, @LayoutRes int textViewResId) {
         CharSequence[] strings = context.getResources().getTextArray(textArrayResId);
         return new ArrayAdapter<CharSequence>(context, textViewResId, strings);
     }
diff --git a/core/java/android/widget/AutoCompleteTextView.java b/core/java/android/widget/AutoCompleteTextView.java
index e6392b9..01767d5 100644
--- a/core/java/android/widget/AutoCompleteTextView.java
+++ b/core/java/android/widget/AutoCompleteTextView.java
@@ -16,6 +16,7 @@
 
 package android.widget;
 
+import android.annotation.DrawableRes;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.database.DataSetObserver;
@@ -356,7 +357,7 @@
      * 
      * @attr ref android.R.styleable#PopupWindow_popupBackground
      */
-    public void setDropDownBackgroundResource(int id) {
+    public void setDropDownBackgroundResource(@DrawableRes int id) {
         mPopup.setBackgroundDrawable(getContext().getDrawable(id));
     }
     
diff --git a/core/java/android/widget/CalendarView.java b/core/java/android/widget/CalendarView.java
index 5e43916..47fb8a7 100644
--- a/core/java/android/widget/CalendarView.java
+++ b/core/java/android/widget/CalendarView.java
@@ -16,6 +16,7 @@
 
 package android.widget;
 
+import android.annotation.DrawableRes;
 import android.annotation.Widget;
 import android.content.Context;
 import android.content.res.Configuration;
@@ -253,7 +254,7 @@
      *
      * @attr ref android.R.styleable#CalendarView_selectedDateVerticalBar
      */
-    public void setSelectedDateVerticalBar(int resourceId) {
+    public void setSelectedDateVerticalBar(@DrawableRes int resourceId) {
         mDelegate.setSelectedDateVerticalBar(resourceId);
     }
 
diff --git a/core/java/android/widget/CheckedTextView.java b/core/java/android/widget/CheckedTextView.java
index 344d00a..84f0ee5 100644
--- a/core/java/android/widget/CheckedTextView.java
+++ b/core/java/android/widget/CheckedTextView.java
@@ -18,6 +18,7 @@
 
 import com.android.internal.R;
 
+import android.annotation.DrawableRes;
 import android.annotation.Nullable;
 import android.content.Context;
 import android.content.res.ColorStateList;
@@ -32,7 +33,6 @@
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
 
-
 /**
  * An extension to TextView that supports the {@link android.widget.Checkable} interface.
  * This is useful when used in a {@link android.widget.ListView ListView} where the it's 
@@ -141,7 +141,7 @@
      *
      * @attr ref android.R.styleable#CheckedTextView_checkMark
      */
-    public void setCheckMarkDrawable(int resid) {
+    public void setCheckMarkDrawable(@DrawableRes int resid) {
         if (resid != 0 && resid == mCheckMarkResource) {
             return;
         }
diff --git a/core/java/android/widget/CompoundButton.java b/core/java/android/widget/CompoundButton.java
index f2afeeb..dbf82b6 100644
--- a/core/java/android/widget/CompoundButton.java
+++ b/core/java/android/widget/CompoundButton.java
@@ -21,6 +21,7 @@
 import android.graphics.PorterDuff;
 import com.android.internal.R;
 
+import android.annotation.DrawableRes;
 import android.content.Context;
 import android.content.res.ColorStateList;
 import android.content.res.TypedArray;
diff --git a/core/java/android/widget/ImageSwitcher.java b/core/java/android/widget/ImageSwitcher.java
index 80e908a..81636a7 100644
--- a/core/java/android/widget/ImageSwitcher.java
+++ b/core/java/android/widget/ImageSwitcher.java
@@ -16,6 +16,7 @@
 
 package android.widget;
 
+import android.annotation.DrawableRes;
 import android.content.Context;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
@@ -23,7 +24,6 @@
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
 
-
 public class ImageSwitcher extends ViewSwitcher
 {
     public ImageSwitcher(Context context)
@@ -35,7 +35,7 @@
         super(context, attrs);
     }
 
-    public void setImageResource(int resid)
+    public void setImageResource(@DrawableRes int resid)
     {
         ImageView image = (ImageView)this.getNextView();
         image.setImageResource(resid);
diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java
index dd9bdb66..9831dca 100644
--- a/core/java/android/widget/ImageView.java
+++ b/core/java/android/widget/ImageView.java
@@ -16,6 +16,7 @@
 
 package android.widget;
 
+import android.annotation.DrawableRes;
 import android.annotation.Nullable;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -387,7 +388,7 @@
      * @attr ref android.R.styleable#ImageView_src
      */
     @android.view.RemotableViewMethod
-    public void setImageResource(int resId) {
+    public void setImageResource(@DrawableRes int resId) {
         // The resource configuration may have changed, so we should always
         // try to load the resource even if the resId hasn't changed.
         final int oldWidth = mDrawableWidth;
diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java
index 0aaef6d..f9c7faa 100644
--- a/core/java/android/widget/ListView.java
+++ b/core/java/android/widget/ListView.java
@@ -21,6 +21,7 @@
 import com.android.internal.util.Predicate;
 import com.google.android.collect.Lists;
 
+import android.annotation.IdRes;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.TypedArray;
@@ -3630,7 +3631,7 @@
      * First look in our children, then in any header and footer views that may be scrolled off.
      */
     @Override
-    protected View findViewTraversal(int id) {
+    protected View findViewTraversal(@IdRes int id) {
         View v;
         v = super.findViewTraversal(id);
         if (v == null) {
diff --git a/core/java/android/widget/PopupMenu.java b/core/java/android/widget/PopupMenu.java
index 06ac1c3..1507dfb 100644
--- a/core/java/android/widget/PopupMenu.java
+++ b/core/java/android/widget/PopupMenu.java
@@ -22,6 +22,7 @@
 import com.android.internal.view.menu.MenuPresenter;
 import com.android.internal.view.menu.SubMenuBuilder;
 
+import android.annotation.MenuRes;
 import android.content.Context;
 import android.view.Gravity;
 import android.view.Menu;
@@ -205,7 +206,7 @@
      * popupMenu.getMenuInflater().inflate(menuRes, popupMenu.getMenu()).
      * @param menuRes Menu resource to inflate
      */
-    public void inflate(int menuRes) {
+    public void inflate(@MenuRes int menuRes) {
         getMenuInflater().inflate(menuRes, mMenu);
     }
 
diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java
index 5b0745e..406a274 100644
--- a/core/java/android/widget/ProgressBar.java
+++ b/core/java/android/widget/ProgressBar.java
@@ -21,6 +21,7 @@
 
 import com.android.internal.R;
 
+import android.annotation.InterpolatorRes;
 import android.content.Context;
 import android.content.res.ColorStateList;
 import android.content.res.TypedArray;
@@ -1508,7 +1509,7 @@
      * @param context The application environment
      * @param resID The resource identifier of the interpolator to load
      */
-    public void setInterpolator(Context context, int resID) {
+    public void setInterpolator(Context context, @InterpolatorRes int resID) {
         setInterpolator(AnimationUtils.loadInterpolator(context, resID));
     }
 
diff --git a/core/java/android/widget/RadioGroup.java b/core/java/android/widget/RadioGroup.java
index f04bb3d..6586d11 100644
--- a/core/java/android/widget/RadioGroup.java
+++ b/core/java/android/widget/RadioGroup.java
@@ -18,6 +18,7 @@
 
 import com.android.internal.R;
 
+import android.annotation.IdRes;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.util.AttributeSet;
@@ -151,7 +152,7 @@
      * @see #getCheckedRadioButtonId()
      * @see #clearCheck()
      */
-    public void check(int id) {
+    public void check(@IdRes int id) {
         // don't even bother
         if (id != -1 && (id == mCheckedId)) {
             return;
@@ -168,7 +169,7 @@
         setCheckedId(id);
     }
 
-    private void setCheckedId(int id) {
+    private void setCheckedId(@IdRes int id) {
         mCheckedId = id;
         if (mOnCheckedChangeListener != null) {
             mOnCheckedChangeListener.onCheckedChanged(this, mCheckedId);
@@ -193,6 +194,7 @@
      *
      * @attr ref android.R.styleable#RadioGroup_checkedButton
      */
+    @IdRes
     public int getCheckedRadioButtonId() {
         return mCheckedId;
     }
@@ -331,7 +333,7 @@
          * @param group the group in which the checked radio button has changed
          * @param checkedId the unique identifier of the newly checked radio button
          */
-        public void onCheckedChanged(RadioGroup group, int checkedId);
+        public void onCheckedChanged(RadioGroup group, @IdRes int checkedId);
     }
 
     private class CheckedStateTracker implements CompoundButton.OnCheckedChangeListener {
diff --git a/core/java/android/widget/Spinner.java b/core/java/android/widget/Spinner.java
index 6ee2b4c..f0bc303 100644
--- a/core/java/android/widget/Spinner.java
+++ b/core/java/android/widget/Spinner.java
@@ -18,6 +18,7 @@
 
 import com.android.internal.R;
 
+import android.annotation.DrawableRes;
 import android.annotation.Nullable;
 import android.annotation.Widget;
 import android.app.AlertDialog;
@@ -46,7 +47,6 @@
 import android.widget.ListPopupWindow.ForwardingListener;
 import android.widget.PopupWindow.OnDismissListener;
 
-
 /**
  * A view that displays one child at a time and lets the user pick among them.
  * The items in the Spinner come from the {@link Adapter} associated with
@@ -331,7 +331,7 @@
      *
      * @attr ref android.R.styleable#Spinner_popupBackground
      */
-    public void setPopupBackgroundResource(int resId) {
+    public void setPopupBackgroundResource(@DrawableRes int resId) {
         setPopupBackgroundDrawable(getPopupContext().getDrawable(resId));
     }
 
diff --git a/core/java/android/widget/Switch.java b/core/java/android/widget/Switch.java
index b959ddc..ce1834e 100644
--- a/core/java/android/widget/Switch.java
+++ b/core/java/android/widget/Switch.java
@@ -17,7 +17,9 @@
 package android.widget;
 
 import android.animation.ObjectAnimator;
+import android.annotation.DrawableRes;
 import android.annotation.Nullable;
+import android.annotation.StyleRes;
 import android.content.Context;
 import android.content.res.ColorStateList;
 import android.content.res.Resources;
@@ -263,7 +265,7 @@
      *
      * @attr ref android.R.styleable#Switch_switchTextAppearance
      */
-    public void setSwitchTextAppearance(Context context, int resid) {
+    public void setSwitchTextAppearance(Context context, @StyleRes int resid) {
         TypedArray appearance =
                 context.obtainStyledAttributes(resid,
                         com.android.internal.R.styleable.TextAppearance);
@@ -471,7 +473,7 @@
      *
      * @attr ref android.R.styleable#Switch_track
      */
-    public void setTrackResource(int resId) {
+    public void setTrackResource(@DrawableRes int resId) {
         setTrackDrawable(getContext().getDrawable(resId));
     }
 
@@ -593,7 +595,7 @@
      *
      * @attr ref android.R.styleable#Switch_thumb
      */
-    public void setThumbResource(int resId) {
+    public void setThumbResource(@DrawableRes int resId) {
         setThumbDrawable(getContext().getDrawable(resId));
     }
 
diff --git a/core/java/android/widget/TabWidget.java b/core/java/android/widget/TabWidget.java
index 88ecb13..f90a0a7 100644
--- a/core/java/android/widget/TabWidget.java
+++ b/core/java/android/widget/TabWidget.java
@@ -17,6 +17,7 @@
 package android.widget;
 
 import android.R;
+import android.annotation.DrawableRes;
 import android.content.Context;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
@@ -244,7 +245,7 @@
      * @param resId the resource identifier of the drawable to use as a
      * divider.
      */
-    public void setDividerDrawable(int resId) {
+    public void setDividerDrawable(@DrawableRes int resId) {
         setDividerDrawable(mContext.getDrawable(resId));
     }
     
@@ -265,7 +266,7 @@
      * @param resId the resource identifier of the drawable to use as the
      * left strip drawable
      */
-    public void setLeftStripDrawable(int resId) {
+    public void setLeftStripDrawable(@DrawableRes int resId) {
         setLeftStripDrawable(mContext.getDrawable(resId));
     }
 
@@ -286,7 +287,7 @@
      * @param resId the resource identifier of the drawable to use as the
      * right strip drawable
      */
-    public void setRightStripDrawable(int resId) {
+    public void setRightStripDrawable(@DrawableRes int resId) {
         setRightStripDrawable(mContext.getDrawable(resId));
     }
 
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 848c1c0..f33ef75 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -17,8 +17,12 @@
 package android.widget;
 
 import android.R;
+import android.annotation.DrawableRes;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.StringRes;
+import android.annotation.StyleRes;
+import android.annotation.XmlRes;
 import android.content.ClipData;
 import android.content.ClipboardManager;
 import android.content.Context;
@@ -2173,7 +2177,8 @@
      * @attr ref android.R.styleable#TextView_drawableBottom
      */
     @android.view.RemotableViewMethod
-    public void setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom) {
+    public void setCompoundDrawablesWithIntrinsicBounds(@DrawableRes int left,
+            @DrawableRes int top, @DrawableRes int right, @DrawableRes int bottom) {
         final Context context = getContext();
         setCompoundDrawablesWithIntrinsicBounds(left != 0 ? context.getDrawable(left) : null,
                 top != 0 ? context.getDrawable(top) : null,
@@ -2374,8 +2379,8 @@
      * @attr ref android.R.styleable#TextView_drawableBottom
      */
     @android.view.RemotableViewMethod
-    public void setCompoundDrawablesRelativeWithIntrinsicBounds(int start, int top, int end,
-            int bottom) {
+    public void setCompoundDrawablesRelativeWithIntrinsicBounds(@DrawableRes int start,
+            @DrawableRes int top, @DrawableRes int end, @DrawableRes int bottom) {
         final Context context = getContext();
         setCompoundDrawablesRelativeWithIntrinsicBounds(
                 start != 0 ? context.getDrawable(start) : null,
@@ -2643,7 +2648,7 @@
      * Sets the text color, size, style, hint color, and highlight color
      * from the specified TextAppearance resource.
      */
-    public void setTextAppearance(Context context, int resid) {
+    public void setTextAppearance(Context context, @StyleRes int resid) {
         TypedArray appearance =
             context.obtainStyledAttributes(resid,
                                            com.android.internal.R.styleable.TextAppearance);
@@ -4267,11 +4272,11 @@
     }
 
     @android.view.RemotableViewMethod
-    public final void setText(int resid) {
+    public final void setText(@StringRes int resid) {
         setText(getContext().getResources().getText(resid));
     }
 
-    public final void setText(int resid, BufferType type) {
+    public final void setText(@StringRes int resid, BufferType type) {
         setText(getContext().getResources().getText(resid), type);
     }
 
@@ -4307,7 +4312,7 @@
      * @attr ref android.R.styleable#TextView_hint
      */
     @android.view.RemotableViewMethod
-    public final void setHint(int resid) {
+    public final void setHint(@StringRes int resid) {
         setHint(getContext().getResources().getText(resid));
     }
 
@@ -4711,7 +4716,7 @@
      * @see EditorInfo#extras
      * @attr ref android.R.styleable#TextView_editorExtras
      */
-    public void setInputExtras(int xmlResId) throws XmlPullParserException, IOException {
+    public void setInputExtras(@XmlRes int xmlResId) throws XmlPullParserException, IOException {
         createEditorIfNeeded();
         XmlResourceParser parser = getResources().getXml(xmlResId);
         mEditor.createInputContentTypeIfNeeded();
diff --git a/core/java/android/widget/Toast.java b/core/java/android/widget/Toast.java
index be4cdc1..207f675 100644
--- a/core/java/android/widget/Toast.java
+++ b/core/java/android/widget/Toast.java
@@ -17,6 +17,7 @@
 package android.widget;
 
 import android.annotation.IntDef;
+import android.annotation.StringRes;
 import android.app.INotificationManager;
 import android.app.ITransientNotification;
 import android.content.Context;
@@ -280,7 +281,7 @@
      *
      * @throws Resources.NotFoundException if the resource can't be found.
      */
-    public static Toast makeText(Context context, int resId, @Duration int duration)
+    public static Toast makeText(Context context, @StringRes int resId, @Duration int duration)
                                 throws Resources.NotFoundException {
         return makeText(context, context.getResources().getText(resId), duration);
     }
@@ -289,7 +290,7 @@
      * Update the text in a Toast that was previously created using one of the makeText() methods.
      * @param resId The new text for the Toast.
      */
-    public void setText(int resId) {
+    public void setText(@StringRes int resId) {
         setText(mContext.getText(resId));
     }
     
diff --git a/media/java/android/media/MediaRouter.java b/media/java/android/media/MediaRouter.java
index 5285074..b4c612a 100644
--- a/media/java/android/media/MediaRouter.java
+++ b/media/java/android/media/MediaRouter.java
@@ -17,6 +17,7 @@
 package android.media;
 
 import android.Manifest;
+import android.annotation.DrawableRes;
 import android.app.ActivityThread;
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -2083,7 +2084,7 @@
          *
          * @param resId Resource ID of an icon drawable to use to represent this route
          */
-        public void setIconResource(int resId) {
+        public void setIconResource(@DrawableRes int resId) {
             setIconDrawable(sStatic.mResources.getDrawable(resId));
         }
 
@@ -2393,7 +2394,7 @@
          *
          * @param resId Resource ID of an icon drawable to use to represent this group
          */
-        public void setIconResource(int resId) {
+        public void setIconResource(@DrawableRes int resId) {
             setIconDrawable(sStatic.mResources.getDrawable(resId));
         }