Merge "Cleanup/document Shaders for UI rendering module"
diff --git a/graphics/java/android/graphics/BitmapShader.java b/graphics/java/android/graphics/BitmapShader.java
index edf53c4..1cb5912 100644
--- a/graphics/java/android/graphics/BitmapShader.java
+++ b/graphics/java/android/graphics/BitmapShader.java
@@ -17,7 +17,6 @@
 package android.graphics;
 
 import android.annotation.NonNull;
-import android.compat.annotation.UnsupportedAppUsage;
 
 /**
  * Shader used to draw a bitmap as a texture. The bitmap can be repeated or
@@ -26,15 +25,10 @@
 public class BitmapShader extends Shader {
     /**
      * Prevent garbage collection.
-     * @hide
      */
-    @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
-    @UnsupportedAppUsage
-    public Bitmap mBitmap;
+    /*package*/ Bitmap mBitmap;
 
-    @UnsupportedAppUsage
     private int mTileX;
-    @UnsupportedAppUsage
     private int mTileY;
 
     /**
@@ -52,16 +46,14 @@
         if (bitmap == null) {
             throw new IllegalArgumentException("Bitmap must be non-null");
         }
-        if (bitmap == mBitmap && tileX == mTileX && tileY == mTileY) {
-            return;
-        }
         mBitmap = bitmap;
         mTileX = tileX;
         mTileY = tileY;
     }
 
+    /** @hide */
     @Override
-    long createNativeInstance(long nativeMatrix) {
+    protected long createNativeInstance(long nativeMatrix) {
         return nativeCreate(nativeMatrix, mBitmap.getNativeInstance(), mTileX, mTileY);
     }
 
diff --git a/graphics/java/android/graphics/ComposeShader.java b/graphics/java/android/graphics/ComposeShader.java
index 64ee6bf..279e293 100644
--- a/graphics/java/android/graphics/ComposeShader.java
+++ b/graphics/java/android/graphics/ComposeShader.java
@@ -84,8 +84,9 @@
         mPorterDuffMode = nativeMode;
     }
 
+    /** @hide */
     @Override
-    long createNativeInstance(long nativeMatrix) {
+    protected long createNativeInstance(long nativeMatrix) {
         mNativeInstanceShaderA = mShaderA.getNativeInstance();
         mNativeInstanceShaderB = mShaderB.getNativeInstance();
         return nativeCreate(nativeMatrix,
diff --git a/graphics/java/android/graphics/LinearGradient.java b/graphics/java/android/graphics/LinearGradient.java
index 3f3ad96..ebe34ca 100644
--- a/graphics/java/android/graphics/LinearGradient.java
+++ b/graphics/java/android/graphics/LinearGradient.java
@@ -151,8 +151,9 @@
         this(x0, y0, x1, y1, new long[] {color0, color1}, null, tile);
     }
 
+    /** @hide */
     @Override
-    long createNativeInstance(long nativeMatrix) {
+    protected long createNativeInstance(long nativeMatrix) {
         return nativeCreate(nativeMatrix, mX0, mY0, mX1, mY1,
                 mColorLongs, mPositions, mTileMode.nativeInt,
                 colorSpace().getNativeInstance());
diff --git a/graphics/java/android/graphics/RadialGradient.java b/graphics/java/android/graphics/RadialGradient.java
index 96b7b9a..089d6de 100644
--- a/graphics/java/android/graphics/RadialGradient.java
+++ b/graphics/java/android/graphics/RadialGradient.java
@@ -147,8 +147,9 @@
         this(centerX, centerY, radius, new long[] {centerColor, edgeColor}, null, tileMode);
     }
 
+    /** @hide */
     @Override
-    long createNativeInstance(long nativeMatrix) {
+    protected long createNativeInstance(long nativeMatrix) {
         return nativeCreate(nativeMatrix, mX, mY, mRadius,
                 mColorLongs, mPositions, mTileMode.nativeInt,
                 colorSpace().getNativeInstance());
diff --git a/graphics/java/android/graphics/RuntimeShader.java b/graphics/java/android/graphics/RuntimeShader.java
index 5a3f2a9..5a0b4a9 100644
--- a/graphics/java/android/graphics/RuntimeShader.java
+++ b/graphics/java/android/graphics/RuntimeShader.java
@@ -74,8 +74,9 @@
         discardNativeInstance();
     }
 
+    /** @hide */
     @Override
-    long createNativeInstance(long nativeMatrix) {
+    protected long createNativeInstance(long nativeMatrix) {
         return nativeCreate(mNativeInstanceRuntimeShaderFactory, nativeMatrix, mUniforms,
                 colorSpace().getNativeInstance(), mIsOpaque);
     }
diff --git a/graphics/java/android/graphics/Shader.java b/graphics/java/android/graphics/Shader.java
index 5335aa4..3b0795a 100644
--- a/graphics/java/android/graphics/Shader.java
+++ b/graphics/java/android/graphics/Shader.java
@@ -20,12 +20,11 @@
 import android.annotation.ColorLong;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.compat.annotation.UnsupportedAppUsage;
 
 import libcore.util.NativeAllocationRegistry;
 
 /**
- * Shader is the based class for objects that return horizontal spans of colors
+ * Shader is the base class for objects that return horizontal spans of colors
  * during drawing. A subclass of Shader is installed in a Paint calling
  * paint.setShader(shader). After that any object (other than a bitmap) that is
  * drawn with that paint will get its color(s) from the shader.
@@ -47,9 +46,9 @@
     }
 
     /**
-     * @hide
+     * @hide Only to be used by subclasses in android.graphics.
      */
-    public Shader(ColorSpace colorSpace) {
+    protected Shader(ColorSpace colorSpace) {
         mColorSpace = colorSpace;
         if (colorSpace == null) {
             throw new IllegalArgumentException(
@@ -63,7 +62,7 @@
     private final ColorSpace mColorSpace;
 
     /**
-     * @hide
+     * @hide Only to be used by subclasses in android.graphics.
      */
     protected ColorSpace colorSpace() {
         return mColorSpace;
@@ -97,11 +96,10 @@
          * mirror images so that adjacent images always seam
          */
         MIRROR  (2);
-    
+
         TileMode(int nativeInt) {
             this.nativeInt = nativeInt;
         }
-        @UnsupportedAppUsage
         final int nativeInt;
     }
 
@@ -142,11 +140,16 @@
         }
     }
 
-    long createNativeInstance(long nativeMatrix) {
+    /**
+     *  @hide Only to be used by subclasses in the graphics package.
+     */
+    protected long createNativeInstance(long nativeMatrix) {
         return 0;
     }
 
-    /** @hide */
+    /**
+     *  @hide Only to be used by subclasses in the graphics package.
+     */
     protected final void discardNativeInstance() {
         if (mNativeInstance != 0) {
             mCleaner.run();
@@ -158,14 +161,15 @@
     /**
      * Callback for subclasses to call {@link #discardNativeInstance()} if the most recently
      * constructed native instance is no longer valid.
-     * @hide
+     *  @hide Only to be used by subclasses in the graphics package.
      */
     protected void verifyNativeInstance() {
     }
 
 
     /**
-     * @hide
+     * @hide so it can be called by android.graphics.drawable but must not be called from outside
+     * the module.
      */
     public final long getNativeInstance() {
         // verify mNativeInstance is valid
@@ -183,9 +187,9 @@
     }
 
     /**
-     * @hide
+     * @hide Only to be called by subclasses in the android.graphics package.
      */
-    public static @ColorLong long[] convertColors(@NonNull @ColorInt int[] colors) {
+    protected static @ColorLong long[] convertColors(@NonNull @ColorInt int[] colors) {
         if (colors.length < 2) {
             throw new IllegalArgumentException("needs >= 2 number of colors");
         }
@@ -204,9 +208,9 @@
      * @throws IllegalArgumentException if the colors do not all share the same,
      *      valid ColorSpace, or if there are less than 2 colors.
      *
-     * @hide
+     * @hide Only to be called by subclasses in the android.graphics package.
      */
-    public static ColorSpace detectColorSpace(@NonNull @ColorLong long[] colors) {
+    protected static ColorSpace detectColorSpace(@NonNull @ColorLong long[] colors) {
         if (colors.length < 2) {
             throw new IllegalArgumentException("needs >= 2 number of colors");
         }
diff --git a/graphics/java/android/graphics/SweepGradient.java b/graphics/java/android/graphics/SweepGradient.java
index 0852004..f1ca198 100644
--- a/graphics/java/android/graphics/SweepGradient.java
+++ b/graphics/java/android/graphics/SweepGradient.java
@@ -130,8 +130,9 @@
         this(cx, cy, new long[] {color0, color1}, null);
     }
 
+    /** @hide */
     @Override
-    long createNativeInstance(long nativeMatrix) {
+    protected long createNativeInstance(long nativeMatrix) {
         return nativeCreate(nativeMatrix, mCx, mCy, mColorLongs, mPositions,
                 colorSpace().getNativeInstance());
     }