From fa2e92020fe1fb65870a9d4b1fac72147b98abe8 Mon Sep 17 00:00:00 2001 From: Leon Scroggins III Date: Mon, 11 May 2020 16:33:40 -0400 Subject: [PATCH] Cleanup/document Shaders for UI rendering module Bug: 156636925 Test: make Remove UnsupportedAppUsage false-positives from Shader and BitmapShader. Change public/package-protected methods that should only be called by subclasses to protected and mark them @hide. Document why other @hide methods must be @hide. Remove unnecessary if statement in BitmapShader constructor. Change-Id: If3e87c45cbbab1df180387dd6ccfda1ec2ecb153 --- .../java/android/graphics/BitmapShader.java | 14 ++------ .../java/android/graphics/ComposeShader.java | 3 +- .../java/android/graphics/LinearGradient.java | 3 +- .../java/android/graphics/RadialGradient.java | 3 +- .../java/android/graphics/RuntimeShader.java | 3 +- graphics/java/android/graphics/Shader.java | 34 +++++++++++-------- .../java/android/graphics/SweepGradient.java | 3 +- 7 files changed, 32 insertions(+), 31 deletions(-) diff --git a/graphics/java/android/graphics/BitmapShader.java b/graphics/java/android/graphics/BitmapShader.java index edf53c4913115..1cb5912e7a545 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 @@ import android.compat.annotation.UnsupportedAppUsage; 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 @@ public class BitmapShader extends Shader { 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 64ee6bf1f30ce..279e2937a80a4 100644 --- a/graphics/java/android/graphics/ComposeShader.java +++ b/graphics/java/android/graphics/ComposeShader.java @@ -84,8 +84,9 @@ public class ComposeShader extends Shader { 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 3f3ad967fe976..ebe34cad06541 100644 --- a/graphics/java/android/graphics/LinearGradient.java +++ b/graphics/java/android/graphics/LinearGradient.java @@ -151,8 +151,9 @@ public class LinearGradient extends Shader { 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 96b7b9a78ba89..089d6de44adba 100644 --- a/graphics/java/android/graphics/RadialGradient.java +++ b/graphics/java/android/graphics/RadialGradient.java @@ -147,8 +147,9 @@ public class RadialGradient extends Shader { 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 5a3f2a96e31de..5a0b4a9b8086c 100644 --- a/graphics/java/android/graphics/RuntimeShader.java +++ b/graphics/java/android/graphics/RuntimeShader.java @@ -74,8 +74,9 @@ public class RuntimeShader extends Shader { 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 5335aa4725adf..3b0795a7b9994 100644 --- a/graphics/java/android/graphics/Shader.java +++ b/graphics/java/android/graphics/Shader.java @@ -20,12 +20,11 @@ import android.annotation.ColorInt; 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 @@ public class Shader { } /** - * @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 @@ public class Shader { private final ColorSpace mColorSpace; /** - * @hide + * @hide Only to be used by subclasses in android.graphics. */ protected ColorSpace colorSpace() { return mColorSpace; @@ -97,11 +96,10 @@ public class Shader { * mirror images so that adjacent images always seam */ MIRROR (2); - + TileMode(int nativeInt) { this.nativeInt = nativeInt; } - @UnsupportedAppUsage final int nativeInt; } @@ -142,11 +140,16 @@ public class Shader { } } - 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 @@ public class Shader { /** * 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 @@ public class Shader { } /** - * @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 @@ public class Shader { * @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 08520048b787c..f1ca1986bfa0a 100644 --- a/graphics/java/android/graphics/SweepGradient.java +++ b/graphics/java/android/graphics/SweepGradient.java @@ -130,8 +130,9 @@ public class SweepGradient extends Shader { 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()); }