summaryrefslogtreecommitdiff
path: root/graphics/java
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/java')
-rw-r--r--graphics/java/android/graphics/BLASTBufferQueue.java17
-rw-r--r--graphics/java/android/graphics/BaseCanvas.java6
-rw-r--r--graphics/java/android/graphics/Bitmap.java4
-rw-r--r--graphics/java/android/graphics/BitmapFactory.java3
-rw-r--r--graphics/java/android/graphics/Canvas.java12
-rw-r--r--graphics/java/android/graphics/CanvasProperty.java5
-rw-r--r--graphics/java/android/graphics/ColorMatrixColorFilter.java3
-rw-r--r--graphics/java/android/graphics/FontListParser.java3
-rw-r--r--graphics/java/android/graphics/GraphicBuffer.java5
-rw-r--r--graphics/java/android/graphics/LightingColorFilter.java5
-rw-r--r--graphics/java/android/graphics/LinearGradient.java15
-rw-r--r--graphics/java/android/graphics/Movie.java2
-rw-r--r--graphics/java/android/graphics/Paint.java21
-rw-r--r--graphics/java/android/graphics/Path.java5
-rw-r--r--graphics/java/android/graphics/PorterDuffColorFilter.java3
-rw-r--r--graphics/java/android/graphics/RadialGradient.java106
-rw-r--r--graphics/java/android/graphics/Region.java7
-rw-r--r--graphics/java/android/graphics/Shader.java13
-rw-r--r--graphics/java/android/graphics/SurfaceTexture.java11
-rw-r--r--graphics/java/android/graphics/SweepGradient.java13
-rw-r--r--graphics/java/android/graphics/Typeface.java10
-rw-r--r--graphics/java/android/graphics/Xfermode.java3
-rw-r--r--graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java4
-rw-r--r--graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java4
-rw-r--r--graphics/java/android/graphics/drawable/ColorDrawable.java3
-rw-r--r--graphics/java/android/graphics/drawable/Drawable.java3
-rw-r--r--graphics/java/android/graphics/drawable/DrawableInflater.java3
-rw-r--r--graphics/java/android/graphics/drawable/DrawableWrapper.java3
-rw-r--r--graphics/java/android/graphics/drawable/Icon.java12
-rw-r--r--graphics/java/android/graphics/drawable/InsetDrawable.java3
-rw-r--r--graphics/java/android/graphics/drawable/LayerDrawable.java3
-rw-r--r--graphics/java/android/graphics/drawable/RippleDrawable.java7
-rw-r--r--graphics/java/android/graphics/drawable/ScaleDrawable.java3
-rw-r--r--graphics/java/android/graphics/drawable/StateListDrawable.java5
-rw-r--r--graphics/java/android/graphics/drawable/VectorDrawable.java3
-rw-r--r--graphics/java/android/graphics/fonts/Font.java75
-rw-r--r--graphics/java/android/graphics/fonts/FontVariationAxis.java2
-rw-r--r--graphics/java/android/graphics/pdf/PdfRenderer.java5
-rw-r--r--graphics/java/android/graphics/text/GlyphStyle.java234
-rw-r--r--graphics/java/android/graphics/text/MeasuredText.java14
-rw-r--r--graphics/java/android/graphics/text/PositionedGlyphs.java48
-rw-r--r--graphics/java/android/graphics/text/TextRunShaper.java (renamed from graphics/java/android/graphics/text/TextShaper.java)24
42 files changed, 334 insertions, 396 deletions
diff --git a/graphics/java/android/graphics/BLASTBufferQueue.java b/graphics/java/android/graphics/BLASTBufferQueue.java
index 4c0f890eee40..94bfdc9dbad6 100644
--- a/graphics/java/android/graphics/BLASTBufferQueue.java
+++ b/graphics/java/android/graphics/BLASTBufferQueue.java
@@ -29,9 +29,10 @@ public final class BLASTBufferQueue {
private static native long nativeCreate(String name, long surfaceControl, long width,
long height, boolean tripleBufferingEnabled);
private static native void nativeDestroy(long ptr);
- private static native Surface nativeGetSurface(long ptr);
+ private static native Surface nativeGetSurface(long ptr, boolean includeSurfaceControlHandle);
private static native void nativeSetNextTransaction(long ptr, long transactionPtr);
private static native void nativeUpdate(long ptr, long surfaceControl, long width, long height);
+ private static native void nativeFlushShadowQueue(long ptr);
/** Create a new connection with the surface flinger. */
public BLASTBufferQueue(String name, SurfaceControl sc, int width, int height,
@@ -48,7 +49,15 @@ public final class BLASTBufferQueue {
* @return a new Surface instance from the IGraphicsBufferProducer of the adapter.
*/
public Surface createSurface() {
- return nativeGetSurface(mNativeObject);
+ return nativeGetSurface(mNativeObject, false /* includeSurfaceControlHandle */);
+ }
+
+ /**
+ * @return a new Surface instance from the IGraphicsBufferProducer of the adapter and
+ * the SurfaceControl handle.
+ */
+ public Surface createSurfaceWithHandle() {
+ return nativeGetSurface(mNativeObject, true /* includeSurfaceControlHandle */);
}
public void setNextTransaction(SurfaceControl.Transaction t) {
@@ -69,4 +78,8 @@ public final class BLASTBufferQueue {
super.finalize();
}
}
+
+ public void flushShadowQueue() {
+ nativeFlushShadowQueue(mNativeObject);
+ }
}
diff --git a/graphics/java/android/graphics/BaseCanvas.java b/graphics/java/android/graphics/BaseCanvas.java
index 05df250fa6b9..54f9fa81b9b7 100644
--- a/graphics/java/android/graphics/BaseCanvas.java
+++ b/graphics/java/android/graphics/BaseCanvas.java
@@ -26,11 +26,13 @@ import android.compat.annotation.UnsupportedAppUsage;
import android.graphics.Canvas.VertexMode;
import android.graphics.fonts.Font;
import android.graphics.text.MeasuredText;
+import android.graphics.text.TextRunShaper;
import android.text.GraphicsOperations;
import android.text.MeasuredParagraph;
import android.text.PrecomputedText;
import android.text.SpannableString;
import android.text.SpannedString;
+import android.text.TextShaper;
import android.text.TextUtils;
import com.android.internal.util.Preconditions;
@@ -471,8 +473,8 @@ public abstract class BaseCanvas {
* @param font Font used for drawing.
* @param paint Paint used for drawing. The typeface set to this paint is ignored.
*
- * @see android.graphics.text.TextShaper
- * @see android.text.StyledTextShaper
+ * @see TextRunShaper
+ * @see TextShaper
*/
public void drawGlyphs(
@NonNull int[] glyphIds,
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java
index 4f95a53e0ec8..055e5ad17def 100644
--- a/graphics/java/android/graphics/Bitmap.java
+++ b/graphics/java/android/graphics/Bitmap.java
@@ -80,7 +80,7 @@ public final class Bitmap implements Parcelable {
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 123769491)
private byte[] mNinePatchChunk; // may be null
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private NinePatch.InsetStruct mNinePatchInsets; // may be null
@UnsupportedAppUsage
private int mWidth;
@@ -176,7 +176,7 @@ public final class Bitmap implements Parcelable {
* width/height values
*/
@SuppressWarnings("unused") // called from JNI
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
void reinit(int width, int height, boolean requestPremultiplied) {
mWidth = width;
mHeight = height;
diff --git a/graphics/java/android/graphics/BitmapFactory.java b/graphics/java/android/graphics/BitmapFactory.java
index bad487b47682..ef1e7bfc6651 100644
--- a/graphics/java/android/graphics/BitmapFactory.java
+++ b/graphics/java/android/graphics/BitmapFactory.java
@@ -23,6 +23,7 @@ import android.annotation.Nullable;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.res.AssetManager;
import android.content.res.Resources;
+import android.os.Build;
import android.os.Trace;
import android.util.DisplayMetrics;
import android.util.Log;
@@ -875,7 +876,7 @@ public class BitmapFactory {
@UnsupportedAppUsage
private static native Bitmap nativeDecodeFileDescriptor(FileDescriptor fd,
Rect padding, Options opts, long inBitmapHandle, long colorSpaceHandle);
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private static native Bitmap nativeDecodeAsset(long nativeAsset, Rect padding, Options opts,
long inBitmapHandle, long colorSpaceHandle);
@UnsupportedAppUsage
diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java
index 5e07d156a06a..42e6ab9c830c 100644
--- a/graphics/java/android/graphics/Canvas.java
+++ b/graphics/java/android/graphics/Canvas.java
@@ -26,7 +26,9 @@ import android.annotation.Size;
import android.compat.annotation.UnsupportedAppUsage;
import android.graphics.fonts.Font;
import android.graphics.text.MeasuredText;
+import android.graphics.text.TextRunShaper;
import android.os.Build;
+import android.text.TextShaper;
import dalvik.annotation.optimization.CriticalNative;
import dalvik.annotation.optimization.FastNative;
@@ -1353,7 +1355,7 @@ public class Canvas extends BaseCanvas {
*
* @hide
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void release() {
mNativeCanvasWrapper = 0;
if (mFinalizer != null) {
@@ -1377,7 +1379,7 @@ public class Canvas extends BaseCanvas {
*
* @hide
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public static void freeTextLayoutCaches() {
nFreeTextLayoutCaches();
}
@@ -2053,7 +2055,7 @@ public class Canvas extends BaseCanvas {
* Draw array of glyphs with specified font.
*
* @param glyphIds Array of glyph IDs. The length of array must be greater than or equal to
- * {@code glyphStart + glyphCount}.
+ * {@code glyphIdOffset + glyphCount}.
* @param glyphIdOffset Number of elements to skip before drawing in <code>glyphIds</code>
* array.
* @param positions A flattened X and Y position array. The first glyph X position must be
@@ -2071,8 +2073,8 @@ public class Canvas extends BaseCanvas {
* @param font Font used for drawing.
* @param paint Paint used for drawing. The typeface set to this paint is ignored.
*
- * @see android.graphics.text.TextShaper
- * @see android.text.StyledTextShaper
+ * @see TextRunShaper
+ * @see TextShaper
*/
public void drawGlyphs(
@NonNull int[] glyphIds,
diff --git a/graphics/java/android/graphics/CanvasProperty.java b/graphics/java/android/graphics/CanvasProperty.java
index 4263772c1c2c..e949584b0659 100644
--- a/graphics/java/android/graphics/CanvasProperty.java
+++ b/graphics/java/android/graphics/CanvasProperty.java
@@ -17,6 +17,7 @@
package android.graphics;
import android.compat.annotation.UnsupportedAppUsage;
+import android.os.Build;
import com.android.internal.util.VirtualRefBasePtr;
@@ -28,12 +29,12 @@ public final class CanvasProperty<T> {
private VirtualRefBasePtr mProperty;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public static CanvasProperty<Float> createFloat(float initialValue) {
return new CanvasProperty<Float>(nCreateFloat(initialValue));
}
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public static CanvasProperty<Paint> createPaint(Paint initialValue) {
return new CanvasProperty<Paint>(nCreatePaint(initialValue.getNativeInstance()));
}
diff --git a/graphics/java/android/graphics/ColorMatrixColorFilter.java b/graphics/java/android/graphics/ColorMatrixColorFilter.java
index a8b18a9fcb1f..90ff1899f34d 100644
--- a/graphics/java/android/graphics/ColorMatrixColorFilter.java
+++ b/graphics/java/android/graphics/ColorMatrixColorFilter.java
@@ -19,6 +19,7 @@ package android.graphics;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.compat.annotation.UnsupportedAppUsage;
+import android.os.Build;
/**
* A color filter that transforms colors through a 4x5 color matrix. This filter
@@ -107,7 +108,7 @@ public class ColorMatrixColorFilter extends ColorFilter {
*
* @hide
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setColorMatrixArray(@Nullable float[] array) {
// called '...Array' so that passing null isn't ambiguous
discardNativeInstance();
diff --git a/graphics/java/android/graphics/FontListParser.java b/graphics/java/android/graphics/FontListParser.java
index c146bbd4441b..0782f8dfd9d3 100644
--- a/graphics/java/android/graphics/FontListParser.java
+++ b/graphics/java/android/graphics/FontListParser.java
@@ -18,6 +18,7 @@ package android.graphics;
import android.compat.annotation.UnsupportedAppUsage;
import android.graphics.fonts.FontVariationAxis;
+import android.os.Build;
import android.text.FontConfig;
import android.util.Xml;
@@ -38,7 +39,7 @@ import java.util.regex.Pattern;
public class FontListParser {
/* Parse fallback list (no names) */
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public static FontConfig parse(InputStream in) throws XmlPullParserException, IOException {
return parse(in, "/system/fonts");
}
diff --git a/graphics/java/android/graphics/GraphicBuffer.java b/graphics/java/android/graphics/GraphicBuffer.java
index 2c25f4546771..f9113a21405c 100644
--- a/graphics/java/android/graphics/GraphicBuffer.java
+++ b/graphics/java/android/graphics/GraphicBuffer.java
@@ -18,6 +18,7 @@ package android.graphics;
import android.compat.annotation.UnsupportedAppUsage;
import android.hardware.HardwareBuffer;
+import android.os.Build;
import android.os.Parcel;
import android.os.Parcelable;
@@ -55,7 +56,7 @@ public class GraphicBuffer implements Parcelable {
private final int mFormat;
private final int mUsage;
// Note: do not rename, this field is used by native code
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private final long mNativeObject;
// These two fields are only used by lock/unlockCanvas()
@@ -87,7 +88,7 @@ public class GraphicBuffer implements Parcelable {
/**
* Private use only. See {@link #create(int, int, int, int)}.
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private GraphicBuffer(int width, int height, int format, int usage, long nativeObject) {
mWidth = width;
mHeight = height;
diff --git a/graphics/java/android/graphics/LightingColorFilter.java b/graphics/java/android/graphics/LightingColorFilter.java
index 221dfa192795..df91c5d492bd 100644
--- a/graphics/java/android/graphics/LightingColorFilter.java
+++ b/graphics/java/android/graphics/LightingColorFilter.java
@@ -23,6 +23,7 @@ package android.graphics;
import android.annotation.ColorInt;
import android.compat.annotation.UnsupportedAppUsage;
+import android.os.Build;
/**
* A color filter that can be used to simulate simple lighting effects.
@@ -73,7 +74,7 @@ public class LightingColorFilter extends ColorFilter {
*
* @hide
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setColorMultiply(@ColorInt int mul) {
if (mMul != mul) {
mMul = mul;
@@ -99,7 +100,7 @@ public class LightingColorFilter extends ColorFilter {
*
* @hide
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void setColorAdd(@ColorInt int add) {
if (mAdd != add) {
mAdd = add;
diff --git a/graphics/java/android/graphics/LinearGradient.java b/graphics/java/android/graphics/LinearGradient.java
index ebe34cad0654..4eedbf563865 100644
--- a/graphics/java/android/graphics/LinearGradient.java
+++ b/graphics/java/android/graphics/LinearGradient.java
@@ -21,20 +21,21 @@ import android.annotation.ColorLong;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.compat.annotation.UnsupportedAppUsage;
+import android.os.Build;
public class LinearGradient extends Shader {
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private float mX0;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private float mY0;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private float mX1;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private float mY1;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private float[] mPositions;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private TileMode mTileMode;
// @ColorInts are replaced by @ColorLongs, but these remain due to @UnsupportedAppUsage.
@@ -44,7 +45,7 @@ public class LinearGradient extends Shader {
@UnsupportedAppUsage
@ColorInt
private int mColor0;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
@ColorInt
private int mColor1;
diff --git a/graphics/java/android/graphics/Movie.java b/graphics/java/android/graphics/Movie.java
index 4b3924f0d55f..9c9535d16aab 100644
--- a/graphics/java/android/graphics/Movie.java
+++ b/graphics/java/android/graphics/Movie.java
@@ -28,7 +28,7 @@ import java.io.InputStream;
*/
@Deprecated
public class Movie {
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private long mNativeMovie;
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java
index 28d7911c771f..4b6e4d124b48 100644
--- a/graphics/java/android/graphics/Paint.java
+++ b/graphics/java/android/graphics/Paint.java
@@ -53,7 +53,7 @@ import java.util.Locale;
*/
public class Paint {
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private long mNativePaint;
private long mNativeShader;
private long mNativeColorFilter;
@@ -115,6 +115,21 @@ public class Paint {
Align.LEFT, Align.CENTER, Align.RIGHT
};
+ /** @hide */
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef(flag = true, value = {
+ ANTI_ALIAS_FLAG,
+ FILTER_BITMAP_FLAG,
+ DITHER_FLAG,
+ UNDERLINE_TEXT_FLAG,
+ STRIKE_THRU_TEXT_FLAG,
+ FAKE_BOLD_TEXT_FLAG,
+ LINEAR_TEXT_FLAG,
+ SUBPIXEL_TEXT_FLAG,
+ EMBEDDED_BITMAP_TEXT_FLAG
+ })
+ public @interface PaintFlag{}
+
/**
* Paint flag that enables antialiasing when drawing.
*
@@ -724,7 +739,7 @@ public class Paint {
*
* @return the paint's flags (see enums ending in _Flag for bit masks)
*/
- public int getFlags() {
+ public @PaintFlag int getFlags() {
return nGetFlags(mNativePaint);
}
@@ -733,7 +748,7 @@ public class Paint {
*
* @param flags The new flag bits for the paint
*/
- public void setFlags(int flags) {
+ public void setFlags(@PaintFlag int flags) {
nSetFlags(mNativePaint, flags);
}
diff --git a/graphics/java/android/graphics/Path.java b/graphics/java/android/graphics/Path.java
index 7811671b80d6..e5ef10d1d555 100644
--- a/graphics/java/android/graphics/Path.java
+++ b/graphics/java/android/graphics/Path.java
@@ -21,6 +21,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Size;
import android.compat.annotation.UnsupportedAppUsage;
+import android.os.Build;
import dalvik.annotation.optimization.CriticalNative;
import dalvik.annotation.optimization.FastNative;
@@ -48,12 +49,12 @@ public class Path {
/**
* @hide
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean isSimplePath = true;
/**
* @hide
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public Region rects;
private Direction mLastDirection = null;
diff --git a/graphics/java/android/graphics/PorterDuffColorFilter.java b/graphics/java/android/graphics/PorterDuffColorFilter.java
index 50ecb62e7fcc..0700f217ecf0 100644
--- a/graphics/java/android/graphics/PorterDuffColorFilter.java
+++ b/graphics/java/android/graphics/PorterDuffColorFilter.java
@@ -19,6 +19,7 @@ package android.graphics;
import android.annotation.ColorInt;
import android.annotation.NonNull;
import android.compat.annotation.UnsupportedAppUsage;
+import android.os.Build;
/**
* A color filter that can be used to tint the source pixels using a single
@@ -64,7 +65,7 @@ public class PorterDuffColorFilter extends ColorFilter {
*
* @hide
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public PorterDuff.Mode getMode() {
return mMode;
}
diff --git a/graphics/java/android/graphics/RadialGradient.java b/graphics/java/android/graphics/RadialGradient.java
index 089d6de44adb..dd1be1570d79 100644
--- a/graphics/java/android/graphics/RadialGradient.java
+++ b/graphics/java/android/graphics/RadialGradient.java
@@ -18,30 +18,36 @@ package android.graphics;
import android.annotation.ColorInt;
import android.annotation.ColorLong;
+import android.annotation.FloatRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.compat.annotation.UnsupportedAppUsage;
+import android.os.Build;
public class RadialGradient extends Shader {
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private float mX;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private float mY;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private float mRadius;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private float[] mPositions;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private TileMode mTileMode;
+ private final float mFocalX;
+ private final float mFocalY;
+ private final float mFocalRadius;
+
// @ColorInts are replaced by @ColorLongs, but these remain due to @UnsupportedAppUsage.
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
@ColorInt
private int[] mColors;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
@ColorInt
private int mCenterColor;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
@ColorInt
private int mEdgeColor;
@@ -64,8 +70,8 @@ public class RadialGradient extends Shader {
public RadialGradient(float centerX, float centerY, float radius,
@NonNull @ColorInt int[] colors, @Nullable float[] stops,
@NonNull TileMode tileMode) {
- this(centerX, centerY, radius, convertColors(colors), stops, tileMode,
- ColorSpace.get(ColorSpace.Named.SRGB));
+ this(centerX, centerY, 0f, centerX, centerY, radius, convertColors(colors),
+ stops, tileMode, ColorSpace.get(ColorSpace.Named.SRGB));
}
/**
@@ -88,27 +94,79 @@ public class RadialGradient extends Shader {
public RadialGradient(float centerX, float centerY, float radius,
@NonNull @ColorLong long[] colors, @Nullable float[] stops,
@NonNull TileMode tileMode) {
- this(centerX, centerY, radius, colors.clone(), stops, tileMode, detectColorSpace(colors));
+ this(centerX, centerY, 0f, centerX, centerY, radius, colors.clone(), stops,
+ tileMode, detectColorSpace(colors));
+ }
+
+ /**
+ * Create a shader that draws a radial gradient given the start and end points as well as
+ * starting and ending radii. The starting point is often referred to as the focal center and
+ * represents the starting circle of the radial gradient.
+ *
+ * @param startX The x-coordinate of the center of the starting circle of the radial gradient,
+ * often referred to as the focal point.
+ * @param startY The y-coordinate of the center of the starting circle of the radial gradient,
+ * often referred to as the focal point.
+ * @param startRadius The radius of the starting circle of the radial gradient, often referred
+ * to as the focal radius. Must be greater than or equal to zero.
+ * @param endX The x-coordinate of the center of the radius for the end circle of the
+ * radial gradient
+ * @param endY The y-coordinate of the center of the radius for the end circle of the
+ * radial gradient
+ * @param endRadius The radius of the ending circle for this gradient. This must be strictly
+ * greater than zero. A radius value equal to zero is not allowed.
+ * @param colors The colors to be distributed between the center and edge of the circle
+ * @param stops May be <code>null</code>. Valid values are between <code>0.0f</code> and
+ * <code>1.0f</code>. The relative position of each corresponding color in
+ * the colors array. If <code>null</code>, colors are distributed evenly
+ * between the center and edge of the circle.
+ * @param tileMode The Shader tiling mode
+ *
+ * @throws IllegalArgumentException If one of the following circumstances:
+ * - There are less than two colors
+ * - The colors do not share the same {@link ColorSpace}
+ * - The colors do not use a valid {@link ColorSpace}
+ * - The {@code stops} parameter is not {@code null} and has a different length
+ * from {@code colors}.
+ * - The {@param startRadius} is negative
+ * - The {@param endRadius} is less than or equal to zero
+ */
+ public RadialGradient(float startX, float startY, @FloatRange(from = 0.0f) float startRadius,
+ float endX, float endY, @FloatRange(from = 0.0f, fromInclusive = false) float endRadius,
+ @NonNull @ColorLong long[] colors, @Nullable float[] stops,
+ @NonNull TileMode tileMode) {
+ this(startX, startY, startRadius, endX, endY, endRadius, colors.clone(), stops, tileMode,
+ detectColorSpace(colors));
}
/**
* Base constructor. Assumes @param colors is a copy that this object can hold onto,
* and all colors share @param colorSpace.
*/
- private RadialGradient(float centerX, float centerY, float radius,
- @NonNull @ColorLong long[] colors, @Nullable float[] stops,
- @NonNull TileMode tileMode, ColorSpace colorSpace) {
+ private RadialGradient(float startX, float startY, float startRadius, float endX, float endY,
+ float endRadius, @NonNull @ColorLong long[] colors, @Nullable float[] stops,
+ @NonNull TileMode tileMode, ColorSpace colorSpace
+ ) {
super(colorSpace);
+ // A focal or starting radius of zero with a focal point that matches the center is
+ // identical to a regular radial gradient
+ if (startRadius < 0) {
+ throw new IllegalArgumentException("starting/focal radius must be >= 0");
+ }
- if (radius <= 0) {
- throw new IllegalArgumentException("radius must be > 0");
+ if (endRadius <= 0) {
+ throw new IllegalArgumentException("ending radius must be > 0");
}
+
if (stops != null && colors.length != stops.length) {
throw new IllegalArgumentException("color and position arrays must be of equal length");
}
- mX = centerX;
- mY = centerY;
- mRadius = radius;
+ mX = endX;
+ mY = endY;
+ mRadius = endRadius;
+ mFocalX = startX;
+ mFocalY = startY;
+ mFocalRadius = startRadius;
mColorLongs = colors;
mPositions = stops != null ? stops.clone() : null;
mTileMode = tileMode;
@@ -150,12 +208,12 @@ public class RadialGradient extends Shader {
/** @hide */
@Override
protected long createNativeInstance(long nativeMatrix) {
- return nativeCreate(nativeMatrix, mX, mY, mRadius,
- mColorLongs, mPositions, mTileMode.nativeInt,
- colorSpace().getNativeInstance());
+ return nativeCreate(nativeMatrix, mFocalX, mFocalY, mFocalRadius, mX, mY, mRadius,
+ mColorLongs, mPositions, mTileMode.nativeInt, colorSpace().getNativeInstance());
}
- private static native long nativeCreate(long matrix, float x, float y, float radius,
- @ColorLong long[] colors, float[] positions, int tileMode, long colorSpaceHandle);
+ private static native long nativeCreate(long matrix, float startX, float startY,
+ float startRadius, float endX, float endY, float endRadius, @ColorLong long[] colors,
+ float[] positions, int tileMode, long colorSpaceHandle);
}
diff --git a/graphics/java/android/graphics/Region.java b/graphics/java/android/graphics/Region.java
index 43373ffbd3f4..29708738d2db 100644
--- a/graphics/java/android/graphics/Region.java
+++ b/graphics/java/android/graphics/Region.java
@@ -18,6 +18,7 @@ package android.graphics;
import android.annotation.NonNull;
import android.compat.annotation.UnsupportedAppUsage;
+import android.os.Build;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Pools.SynchronizedPool;
@@ -32,7 +33,7 @@ public class Region implements Parcelable {
/**
* @hide
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public long mNativeRegion;
// the native values for these must match up with the enum in SkRegion.h
@@ -337,7 +338,7 @@ public class Region implements Parcelable {
*
* @hide
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public void recycle() {
setEmpty();
sPool.release(this);
@@ -411,7 +412,7 @@ public class Region implements Parcelable {
/* Add an unused parameter so constructor can be called from jni without
triggering 'not cloneable' exception */
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private Region(long ni, int unused) {
this(ni);
}
diff --git a/graphics/java/android/graphics/Shader.java b/graphics/java/android/graphics/Shader.java
index d71ff1138b25..7651d019bdcb 100644
--- a/graphics/java/android/graphics/Shader.java
+++ b/graphics/java/android/graphics/Shader.java
@@ -83,21 +83,22 @@ public class Shader {
public enum TileMode {
/**
- * replicate the edge color if the shader draws outside of its
- * original bounds
+ * Replicate the edge color if the shader draws outside of its
+ * original bounds.
*/
CLAMP (0),
/**
- * repeat the shader's image horizontally and vertically
+ * Repeat the shader's image horizontally and vertically.
*/
REPEAT (1),
/**
- * repeat the shader's image horizontally and vertically, alternating
- * mirror images so that adjacent images always seam
+ * Repeat the shader's image horizontally and vertically, alternating
+ * mirror images so that adjacent images always seam.
*/
MIRROR(2),
/**
- * Only draw within the original domain, return transparent-black everywhere else
+ * Render the shader's image pixels only within its original bounds. If the shader
+ * draws outside of its original bounds, transparent black is drawn instead.
*/
DECAL(3);
diff --git a/graphics/java/android/graphics/SurfaceTexture.java b/graphics/java/android/graphics/SurfaceTexture.java
index 228d03a1dd10..7a2e5843ffc7 100644
--- a/graphics/java/android/graphics/SurfaceTexture.java
+++ b/graphics/java/android/graphics/SurfaceTexture.java
@@ -18,6 +18,7 @@ package android.graphics;
import android.annotation.Nullable;
import android.compat.annotation.UnsupportedAppUsage;
+import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
@@ -69,17 +70,17 @@ import java.lang.ref.WeakReference;
*/
public class SurfaceTexture {
private final Looper mCreatorLooper;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private Handler mOnFrameAvailableHandler;
/**
* These fields are used by native code, do not access or modify.
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private long mSurfaceTexture;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private long mProducer;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private long mFrameAvailableListener;
private boolean mIsSingleBuffered;
@@ -390,7 +391,7 @@ public class SurfaceTexture {
* This method is invoked from native code only.
*/
@SuppressWarnings({"UnusedDeclaration"})
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private static void postEventFromNative(WeakReference<SurfaceTexture> weakSelf) {
SurfaceTexture st = weakSelf.get();
if (st != null) {
diff --git a/graphics/java/android/graphics/SweepGradient.java b/graphics/java/android/graphics/SweepGradient.java
index f1ca1986bfa0..22807805e7fa 100644
--- a/graphics/java/android/graphics/SweepGradient.java
+++ b/graphics/java/android/graphics/SweepGradient.java
@@ -21,23 +21,24 @@ import android.annotation.ColorLong;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.compat.annotation.UnsupportedAppUsage;
+import android.os.Build;
public class SweepGradient extends Shader {
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private float mCx;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private float mCy;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private float[] mPositions;
// @ColorInts are replaced by @ColorLongs, but these remain due to @UnsupportedAppUsage.
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
@ColorInt
private int[] mColors;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
@ColorInt
private int mColor0;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
@ColorInt
private int mColor1;
diff --git a/graphics/java/android/graphics/Typeface.java b/graphics/java/android/graphics/Typeface.java
index a2dd9a8322b6..441c16322645 100644
--- a/graphics/java/android/graphics/Typeface.java
+++ b/graphics/java/android/graphics/Typeface.java
@@ -327,7 +327,7 @@ public class Typeface {
* 1) Create Typeface from ttf file.
* <pre>
* <code>
- * Typeface.Builder buidler = new Typeface.Builder("your_font_file.ttf");
+ * Typeface.Builder builder = new Typeface.Builder("your_font_file.ttf");
* Typeface typeface = builder.build();
* </code>
* </pre>
@@ -335,7 +335,7 @@ public class Typeface {
* 2) Create Typeface from ttc file in assets directory.
* <pre>
* <code>
- * Typeface.Builder buidler = new Typeface.Builder(getAssets(), "your_font_file.ttc");
+ * Typeface.Builder builder = new Typeface.Builder(getAssets(), "your_font_file.ttc");
* builder.setTtcIndex(2); // Set index of font collection.
* Typeface typeface = builder.build();
* </code>
@@ -344,7 +344,7 @@ public class Typeface {
* 3) Create Typeface with variation settings.
* <pre>
* <code>
- * Typeface.Builder buidler = new Typeface.Builder("your_font_file.ttf");
+ * Typeface.Builder builder = new Typeface.Builder("your_font_file.ttf");
* builder.setFontVariationSettings("'wght' 700, 'slnt' 20, 'ital' 1");
* builder.setWeight(700); // Tell the system that this is a bold font.
* builder.setItalic(true); // Tell the system that this is an italic style font.
@@ -768,7 +768,7 @@ public class Typeface {
public @NonNull CustomFallbackBuilder addCustomFallback(@NonNull FontFamily family) {
Preconditions.checkNotNull(family);
Preconditions.checkArgument(mFamilies.size() < getMaxCustomFallbackCount(),
- "Custom fallback limit exceeded(" + getMaxCustomFallbackCount() + ")");
+ "Custom fallback limit exceeded(%d)", getMaxCustomFallbackCount());
mFamilies.add(family);
return this;
}
@@ -1217,7 +1217,7 @@ public class Typeface {
long native_instance, List<FontVariationAxis> axes);
@UnsupportedAppUsage
private static native long nativeCreateWeightAlias(long native_instance, int weight);
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private static native long nativeCreateFromArray(long[] familyArray, int weight, int italic);
private static native int[] nativeGetSupportedAxes(long native_instance);
diff --git a/graphics/java/android/graphics/Xfermode.java b/graphics/java/android/graphics/Xfermode.java
index e79fb76d806e..81769e2e21bf 100644
--- a/graphics/java/android/graphics/Xfermode.java
+++ b/graphics/java/android/graphics/Xfermode.java
@@ -22,6 +22,7 @@
package android.graphics;
import android.compat.annotation.UnsupportedAppUsage;
+import android.os.Build;
/**
* Xfermode is the base class for objects that are called to implement custom
@@ -32,6 +33,6 @@ import android.compat.annotation.UnsupportedAppUsage;
*/
public class Xfermode {
static final int DEFAULT = PorterDuff.Mode.SRC_OVER.nativeInt;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
int porterDuffMode = DEFAULT;
}
diff --git a/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java b/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java
index 06159d8a0558..33a6d38b698d 100644
--- a/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java
+++ b/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java
@@ -561,9 +561,9 @@ public class AnimatedStateListDrawable extends StateListDrawable {
int[] mAnimThemeAttrs;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
LongSparseLongArray mTransitions;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
SparseIntArray mStateIds;
AnimatedStateListState(@Nullable AnimatedStateListState orig,
diff --git a/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java b/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java
index 73dbe65bd25b..33b09b8831ce 100644
--- a/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java
+++ b/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java
@@ -315,7 +315,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 {
*/
private Resources mRes;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private AnimatedVectorDrawableState mAnimatedVectorState;
/** The animator set that is parsed from the xml. */
@@ -1773,7 +1773,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 {
}
// onFinished: should be called from native
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private static void callOnFinished(VectorDrawableAnimatorRT set, int id) {
set.mHandler.post(() -> set.onAnimationEnd(id));
}
diff --git a/graphics/java/android/graphics/drawable/ColorDrawable.java b/graphics/java/android/graphics/drawable/ColorDrawable.java
index 2457ab85144f..f8dc61526ce6 100644
--- a/graphics/java/android/graphics/drawable/ColorDrawable.java
+++ b/graphics/java/android/graphics/drawable/ColorDrawable.java
@@ -34,6 +34,7 @@ import android.graphics.Outline;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Xfermode;
+import android.os.Build;
import android.util.AttributeSet;
import android.view.ViewDebug;
@@ -53,7 +54,7 @@ import java.io.IOException;
* @attr ref android.R.styleable#ColorDrawable_color
*/
public class ColorDrawable extends Drawable {
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
@ViewDebug.ExportedProperty(deepExport = true, prefix = "state_")
diff --git a/graphics/java/android/graphics/drawable/Drawable.java b/graphics/java/android/graphics/drawable/Drawable.java
index ed210ab40b7a..28b3b04b827d 100644
--- a/graphics/java/android/graphics/drawable/Drawable.java
+++ b/graphics/java/android/graphics/drawable/Drawable.java
@@ -45,6 +45,7 @@ import android.graphics.PorterDuffColorFilter;
import android.graphics.Rect;
import android.graphics.Region;
import android.graphics.Xfermode;
+import android.os.Build;
import android.os.Trace;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
@@ -1715,7 +1716,7 @@ public abstract class Drawable {
*
* @hide
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public static BlendMode parseBlendMode(int value, BlendMode defaultMode) {
switch (value) {
case 3: return BlendMode.SRC_OVER;
diff --git a/graphics/java/android/graphics/drawable/DrawableInflater.java b/graphics/java/android/graphics/drawable/DrawableInflater.java
index 3408b64e7536..66752a2536d3 100644
--- a/graphics/java/android/graphics/drawable/DrawableInflater.java
+++ b/graphics/java/android/graphics/drawable/DrawableInflater.java
@@ -23,6 +23,7 @@ import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.Resources.Theme;
+import android.os.Build;
import android.util.AttributeSet;
import android.view.InflateException;
@@ -50,7 +51,7 @@ public final class DrawableInflater {
new HashMap<>();
private final Resources mRes;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private final ClassLoader mClassLoader;
/**
diff --git a/graphics/java/android/graphics/drawable/DrawableWrapper.java b/graphics/java/android/graphics/drawable/DrawableWrapper.java
index 98c38214adab..ebde75775e84 100644
--- a/graphics/java/android/graphics/drawable/DrawableWrapper.java
+++ b/graphics/java/android/graphics/drawable/DrawableWrapper.java
@@ -32,6 +32,7 @@ import android.graphics.Outline;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.Xfermode;
+import android.os.Build;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.View;
@@ -47,7 +48,7 @@ import java.io.IOException;
* Drawable container with only one child element.
*/
public abstract class DrawableWrapper extends Drawable implements Drawable.Callback {
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private DrawableWrapperState mState;
private Drawable mDrawable;
private boolean mMutated;
diff --git a/graphics/java/android/graphics/drawable/Icon.java b/graphics/java/android/graphics/drawable/Icon.java
index 90412f417f38..32b310353b6c 100644
--- a/graphics/java/android/graphics/drawable/Icon.java
+++ b/graphics/java/android/graphics/drawable/Icon.java
@@ -39,6 +39,7 @@ import android.os.Handler;
import android.os.Message;
import android.os.Parcel;
import android.os.Parcelable;
+import android.os.UserHandle;
import android.text.TextUtils;
import android.util.Log;
@@ -169,7 +170,7 @@ public final class Icon implements Parcelable {
* @return The length of the compressed bitmap byte array held by this {@link #TYPE_DATA} Icon.
* @hide
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public int getDataLength() {
if (mType != TYPE_DATA) {
throw new IllegalStateException("called getDataLength() on " + this);
@@ -441,10 +442,11 @@ public final class Icon implements Parcelable {
resPackage = context.getPackageName();
}
if (getResources() == null && !(getResPackage().equals("android"))) {
- final PackageManager pm = context.getPackageManager();
+ final PackageManager pm = context.createContextAsUser(
+ UserHandle.of(userId), /* flags */ 0).getPackageManager();
try {
// assign getResources() as the correct user
- mObj1 = pm.getResourcesForApplicationAsUser(resPackage, userId);
+ mObj1 = pm.getResourcesForApplication(resPackage);
} catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, String.format("Unable to find pkg=%s user=%d",
getResPackage(),
@@ -597,7 +599,7 @@ public final class Icon implements Parcelable {
* Version of createWithResource that takes Resources. Do not use.
* @hide
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public static Icon createWithResource(Resources res, @DrawableRes int resId) {
if (res == null) {
throw new IllegalArgumentException("Resource must not be null.");
@@ -769,7 +771,7 @@ public final class Icon implements Parcelable {
}
/** @hide */
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public boolean hasTint() {
return (mTintList != null) || (mBlendMode != DEFAULT_BLEND_MODE);
}
diff --git a/graphics/java/android/graphics/drawable/InsetDrawable.java b/graphics/java/android/graphics/drawable/InsetDrawable.java
index 005a4d175fd5..87c0a061c9f2 100644
--- a/graphics/java/android/graphics/drawable/InsetDrawable.java
+++ b/graphics/java/android/graphics/drawable/InsetDrawable.java
@@ -27,6 +27,7 @@ import android.graphics.Insets;
import android.graphics.Outline;
import android.graphics.PixelFormat;
import android.graphics.Rect;
+import android.os.Build;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.TypedValue;
@@ -58,7 +59,7 @@ public class InsetDrawable extends DrawableWrapper {
private final Rect mTmpRect = new Rect();
private final Rect mTmpInsetRect = new Rect();
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private InsetState mState;
/**
diff --git a/graphics/java/android/graphics/drawable/LayerDrawable.java b/graphics/java/android/graphics/drawable/LayerDrawable.java
index 19f29aed203f..a03f8b566ddd 100644
--- a/graphics/java/android/graphics/drawable/LayerDrawable.java
+++ b/graphics/java/android/graphics/drawable/LayerDrawable.java
@@ -30,6 +30,7 @@ import android.graphics.ColorFilter;
import android.graphics.Outline;
import android.graphics.PixelFormat;
import android.graphics.Rect;
+import android.os.Build;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.LayoutDirection;
@@ -434,7 +435,7 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
* @param layer The layer to add.
* @return The index of the layer.
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
int addLayer(@NonNull ChildDrawable layer) {
final LayerState st = mLayerState;
final int N = st.mChildren != null ? st.mChildren.length : 0;
diff --git a/graphics/java/android/graphics/drawable/RippleDrawable.java b/graphics/java/android/graphics/drawable/RippleDrawable.java
index 16ffd132a41b..8677fb1b7c1e 100644
--- a/graphics/java/android/graphics/drawable/RippleDrawable.java
+++ b/graphics/java/android/graphics/drawable/RippleDrawable.java
@@ -36,6 +36,7 @@ import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.Rect;
import android.graphics.Shader;
+import android.os.Build;
import android.util.AttributeSet;
import com.android.internal.R;
@@ -121,7 +122,7 @@ public class RippleDrawable extends LayerDrawable {
private final Rect mDirtyBounds = new Rect();
/** Mirrors mLayerState with some extra information. */
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private RippleState mState;
/** The masking layer, e.g. the layer with id R.id.mask. */
@@ -159,7 +160,7 @@ public class RippleDrawable extends LayerDrawable {
private Paint mRipplePaint;
/** Target density of the display into which ripples are drawn. */
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private int mDensity;
/** Whether bounds are being overridden. */
@@ -979,7 +980,7 @@ public class RippleDrawable extends LayerDrawable {
static class RippleState extends LayerState {
int[] mTouchThemeAttrs;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
ColorStateList mColor = ColorStateList.valueOf(Color.MAGENTA);
int mMaxRadius = RADIUS_AUTO;
diff --git a/graphics/java/android/graphics/drawable/ScaleDrawable.java b/graphics/java/android/graphics/drawable/ScaleDrawable.java
index af7eed4b3897..7e246e552bec 100644
--- a/graphics/java/android/graphics/drawable/ScaleDrawable.java
+++ b/graphics/java/android/graphics/drawable/ScaleDrawable.java
@@ -25,6 +25,7 @@ import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.PixelFormat;
import android.graphics.Rect;
+import android.os.Build;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.Gravity;
@@ -67,7 +68,7 @@ public class ScaleDrawable extends DrawableWrapper {
private final Rect mTmpRect = new Rect();
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private ScaleState mState;
ScaleDrawable() {
diff --git a/graphics/java/android/graphics/drawable/StateListDrawable.java b/graphics/java/android/graphics/drawable/StateListDrawable.java
index 88cd4625394b..af69029da9d7 100644
--- a/graphics/java/android/graphics/drawable/StateListDrawable.java
+++ b/graphics/java/android/graphics/drawable/StateListDrawable.java
@@ -22,6 +22,7 @@ import android.compat.annotation.UnsupportedAppUsage;
import android.content.res.Resources;
import android.content.res.Resources.Theme;
import android.content.res.TypedArray;
+import android.os.Build;
import android.util.AttributeSet;
import android.util.StateSet;
@@ -130,7 +131,7 @@ public class StateListDrawable extends DrawableContainer {
/**
* Updates the constant state from the values in the typed array.
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private void updateStateFromTypedArray(TypedArray a) {
final StateListState state = mStateListState;
@@ -208,7 +209,7 @@ public class StateListDrawable extends DrawableContainer {
* @param attrs The attribute set.
* @return An array of state_ attributes.
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
int[] extractStateSet(AttributeSet attrs) {
int j = 0;
final int numAttrs = attrs.getAttributeCount();
diff --git a/graphics/java/android/graphics/drawable/VectorDrawable.java b/graphics/java/android/graphics/drawable/VectorDrawable.java
index a1ccc7b7b5e4..6dcc251c2ddc 100644
--- a/graphics/java/android/graphics/drawable/VectorDrawable.java
+++ b/graphics/java/android/graphics/drawable/VectorDrawable.java
@@ -34,6 +34,7 @@ import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.Rect;
import android.graphics.Shader;
+import android.os.Build;
import android.os.Trace;
import android.util.ArrayMap;
import android.util.AttributeSet;
@@ -324,7 +325,7 @@ public class VectorDrawable extends Drawable {
private VectorDrawableState mVectorState;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private PorterDuffColorFilter mTintFilter;
private BlendModeColorFilter mBlendModeColorFilter;
diff --git a/graphics/java/android/graphics/fonts/Font.java b/graphics/java/android/graphics/fonts/Font.java
index 97cd8ab6cae9..c07b4bcf0e72 100644
--- a/graphics/java/android/graphics/fonts/Font.java
+++ b/graphics/java/android/graphics/fonts/Font.java
@@ -523,6 +523,9 @@ public final class Font {
/**
* Returns a font file buffer.
*
+ * Duplicate before reading values by {@link ByteBuffer#duplicate()} for avoiding unexpected
+ * reading position sharing.
+ *
* @return a font buffer
*/
public @NonNull ByteBuffer getBuffer() {
@@ -623,23 +626,82 @@ public final class Font {
return mNativePtr;
}
+ /**
+ * Returns true if the given font is created from the same source data from this font.
+ *
+ * This method essentially compares {@link ByteBuffer} inside Font, but has some optimization
+ * for faster comparing. This method compares the internal object before going to one-by-one
+ * byte compare with {@link ByteBuffer}. This typically works efficiently if you compares the
+ * font that is created from {@link Builder#Builder(Font)}.
+ *
+ * This API is typically useful for checking if two fonts can be interpolated by font variation
+ * axes. For example, when you call {@link android.text.TextShaper} for the same
+ * string but different style, you may get two font objects which is created from the same
+ * source but have different parameters. You may want to animate between them by interpolating
+ * font variation settings if these fonts are created from the same source.
+ *
+ * @param other a font object to be compared.
+ * @return true if given font is created from the same source from this font. Otherwise false.
+ */
+ public boolean isSameSource(@NonNull Font other) {
+ Objects.requireNonNull(other);
+
+ // Shortcut for the same instance.
+ if (mBuffer == other.mBuffer) {
+ return true;
+ }
+
+ // Shortcut for different font buffer check by comparing size.
+ if (mBuffer.capacity() != other.mBuffer.capacity()) {
+ return false;
+ }
+
+ // ByteBuffer#equals compares all bytes which is not performant for e.g HashMap. Since
+ // underlying native font object holds buffer address, check if this buffer points exactly
+ // the same address as a shortcut of equality. For being compatible with of API30 or before,
+ // check buffer position even if the buffer points the same address.
+ if (nIsSameBufferAddress(mNativePtr, other.mNativePtr)
+ && mBuffer.position() == other.mBuffer.position()) {
+ return true;
+ }
+
+ // Unfortunately, need to compare bytes one-by-one since the buffer may be different font
+ // file but has the same file size, or two font has same content but they are allocated
+ // differently. For being compatible with API30 ore before, compare with ByteBuffer#equals.
+ return mBuffer.equals(other.mBuffer);
+ }
+
@Override
public boolean equals(@Nullable Object o) {
if (o == this) {
return true;
}
- if (o == null || !(o instanceof Font)) {
+ if (!(o instanceof Font)) {
return false;
}
Font f = (Font) o;
- return mFontStyle.equals(f.mFontStyle) && f.mTtcIndex == mTtcIndex
- && Arrays.equals(f.mAxes, mAxes) && f.mBuffer.equals(mBuffer)
- && Objects.equals(f.mLocaleList, mLocaleList);
+ boolean paramEqual = mFontStyle.equals(f.mFontStyle) && f.mTtcIndex == mTtcIndex
+ && Arrays.equals(f.mAxes, mAxes) && Objects.equals(f.mLocaleList, mLocaleList)
+ && Objects.equals(mFile, f.mFile);
+
+ if (!paramEqual) {
+ return false;
+ }
+
+ return isSameSource(f);
}
@Override
public int hashCode() {
- return Objects.hash(mFontStyle, mTtcIndex, Arrays.hashCode(mAxes), mBuffer, mLocaleList);
+ return Objects.hash(
+ mFontStyle,
+ mTtcIndex,
+ Arrays.hashCode(mAxes),
+ // Use Buffer size instead of ByteBuffer#hashCode since ByteBuffer#hashCode traverse
+ // data which is not performant e.g. for HashMap. The hash collision are less likely
+ // happens because it is unlikely happens the different font files has exactly the
+ // same size.
+ mLocaleList);
}
@Override
@@ -724,4 +786,7 @@ public final class Font {
@CriticalNative
private static native long nGetNativeFontPtr(long ptr);
+
+ @CriticalNative
+ private static native boolean nIsSameBufferAddress(long lFontPtr, long rFontPtr);
}
diff --git a/graphics/java/android/graphics/fonts/FontVariationAxis.java b/graphics/java/android/graphics/fonts/FontVariationAxis.java
index 4e6580ea5f53..7bd581723d18 100644
--- a/graphics/java/android/graphics/fonts/FontVariationAxis.java
+++ b/graphics/java/android/graphics/fonts/FontVariationAxis.java
@@ -33,7 +33,7 @@ public final class FontVariationAxis {
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
private final int mTag;
private final String mTagString;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private final float mStyleValue;
/**
diff --git a/graphics/java/android/graphics/pdf/PdfRenderer.java b/graphics/java/android/graphics/pdf/PdfRenderer.java
index 43de4699381f..4666963b5dd4 100644
--- a/graphics/java/android/graphics/pdf/PdfRenderer.java
+++ b/graphics/java/android/graphics/pdf/PdfRenderer.java
@@ -25,6 +25,7 @@ import android.graphics.Bitmap.Config;
import android.graphics.Matrix;
import android.graphics.Point;
import android.graphics.Rect;
+import android.os.Build;
import android.os.ParcelFileDescriptor;
import android.system.ErrnoException;
import android.system.Os;
@@ -121,7 +122,7 @@ public final class PdfRenderer implements AutoCloseable {
private ParcelFileDescriptor mInput;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private Page mCurrentPage;
/** @hide */
@@ -246,7 +247,7 @@ public final class PdfRenderer implements AutoCloseable {
}
}
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private void doClose() {
if (mCurrentPage != null) {
mCurrentPage.close();
diff --git a/graphics/java/android/graphics/text/GlyphStyle.java b/graphics/java/android/graphics/text/GlyphStyle.java
deleted file mode 100644
index cc8c4d26fb5e..000000000000
--- a/graphics/java/android/graphics/text/GlyphStyle.java
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.graphics.text;
-
-import android.annotation.ColorInt;
-import android.annotation.FloatRange;
-import android.annotation.NonNull;
-import android.graphics.Paint;
-
-import java.util.Objects;
-
-/**
- * Represents subset of Paint parameters such as font size, scaleX that is used to draw a glyph.
- *
- * Glyph is a most primitive unit of text drawing.
- *
- */
-public class GlyphStyle {
- private @ColorInt int mColor;
- private float mFontSize;
- private float mScaleX;
- private float mSkewX;
- private int mFlags;
-
- /**
- * @param color a color.
- * @param fontSize a font size in pixels.
- * @param scaleX a horizontal scale factor.
- * @param skewX a horizontal skew factor
- * @param flags paint flags
- *
- * @see Paint#getFlags()
- * @see Paint#setFlags(int)
- */
- public GlyphStyle(
- @ColorInt int color,
- @FloatRange(from = 0) float fontSize,
- @FloatRange(from = 0) float scaleX,
- @FloatRange(from = 0) float skewX,
- int flags) {
- mColor = color;
- mFontSize = fontSize;
- mScaleX = scaleX;
- mSkewX = skewX;
- mFlags = flags;
- }
-
- /**
- * Create glyph style from Paint
- *
- * @param paint a paint
- */
- public GlyphStyle(@NonNull Paint paint) {
- setFromPaint(paint);
- }
-
- /**
- * Gets the color.
- *
- * @return a color
- * @see Paint#getColor()
- * @see Paint#setColor(int)
- */
- public @ColorInt int getColor() {
- return mColor;
- }
-
- /**
- * Sets the color.
- *
- * @param color a color
- * @see Paint#getColor()
- * @see Paint#setColor(int)
- */
- public void setColor(@ColorInt int color) {
- mColor = color;
- }
-
- /**
- * Gets the font size in pixels.
- *
- * @return font size
- * @see Paint#getTextSize()
- * @see Paint#setTextSize(float)
- */
- public @FloatRange(from = 0) float getFontSize() {
- return mFontSize;
- }
-
- /**
- * Sets the font size in pixels.
- *
- * @param fontSize font size in pixel
- * @see Paint#getTextSize()
- * @see Paint#setTextSize(float)
- */
- public void setFontSize(@FloatRange(from = 0) float fontSize) {
- mFontSize = fontSize;
- }
-
- /**
- * Return the horizontal scale factor
- *
- * @return a horizontal scale factor
- * @see Paint#getTextScaleX()
- * @see Paint#setTextScaleX(float)
- */
- public @FloatRange(from = 0) float getScaleX() {
- return mScaleX;
- }
-
- /**
- * Set the horizontal scale factor
- *
- * @param scaleX a horizontal scale factor
- * @see Paint#getTextScaleX()
- * @see Paint#setTextScaleX(float)
- */
- public void setScaleX(@FloatRange(from = 0) float scaleX) {
- mScaleX = scaleX;
- }
-
- /**
- * Return the horizontal skew factor
- *
- * @return a horizontal skew factor
- * @see Paint#getTextSkewX()
- * @see Paint#setTextSkewX(float)
- */
- public @FloatRange(from = 0) float getSkewX() {
- return mSkewX;
- }
-
- /**
- * Set the horizontal skew factor
- *
- * @param skewX a horizontal skew factor
- * @see Paint#getTextSkewX()
- * @see Paint#setTextSkewX(float)
- */
- public void setSkewX(@FloatRange(from = 0) float skewX) {
- mSkewX = skewX;
- }
-
- /**
- * Returns the Paint flags.
- *
- * @return a paint flags
- * @see Paint#getFlags()
- * @see Paint#setFlags(int)
- */
- public int getFlags() {
- return mFlags;
- }
-
- /**
- * Set the Paint flags.
- *
- * @param flags a paint flags
- * @see Paint#getFlags()
- * @see Paint#setFlags(int)
- */
- public void setFlags(int flags) {
- mFlags = flags;
- }
-
- /**
- * Applies glyph style to the paint object.
- *
- * @param paint a paint object
- */
- public void applyToPaint(@NonNull Paint paint) {
- paint.setColor(mColor);
- paint.setTextSize(mFontSize);
- paint.setTextScaleX(mScaleX);
- paint.setTextSkewX(mSkewX);
- paint.setFlags(mFlags);
- }
-
- /**
- * Copy parameters from a Paint object.
- *
- * @param paint a paint object
- */
- public void setFromPaint(@NonNull Paint paint) {
- mColor = paint.getColor();
- mFontSize = paint.getTextSize();
- mScaleX = paint.getTextScaleX();
- mSkewX = paint.getTextSkewX();
- mFlags = paint.getFlags();
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (!(o instanceof GlyphStyle)) return false;
- GlyphStyle that = (GlyphStyle) o;
- return that.mColor == mColor
- && Float.compare(that.mFontSize, mFontSize) == 0
- && Float.compare(that.mScaleX, mScaleX) == 0
- && Float.compare(that.mSkewX, mSkewX) == 0
- && mFlags == that.mFlags;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(mColor, mFontSize, mScaleX, mSkewX, mFlags);
- }
-
- @Override
- public String toString() {
- return "GlyphStyle{"
- + "mColor=" + mColor
- + ", mFontSize=" + mFontSize
- + ", mScaleX=" + mScaleX
- + ", mSkewX=" + mSkewX
- + ", mFlags=" + mFlags
- + '}';
- }
-}
diff --git a/graphics/java/android/graphics/text/MeasuredText.java b/graphics/java/android/graphics/text/MeasuredText.java
index b6d8fa19fca8..31c3d09ed5b1 100644
--- a/graphics/java/android/graphics/text/MeasuredText.java
+++ b/graphics/java/android/graphics/text/MeasuredText.java
@@ -80,11 +80,11 @@ public class MeasuredText {
public @FloatRange(from = 0.0) @Px float getWidth(
@IntRange(from = 0) int start, @IntRange(from = 0) int end) {
Preconditions.checkArgument(0 <= start && start <= mChars.length,
- "start(" + start + ") must be 0 <= start <= " + mChars.length);
+ "start(%d) must be 0 <= start <= %d", start, mChars.length);
Preconditions.checkArgument(0 <= end && end <= mChars.length,
- "end(" + end + ") must be 0 <= end <= " + mChars.length);
+ "end(%d) must be 0 <= end <= %d", end, mChars.length);
Preconditions.checkArgument(start <= end,
- "start(" + start + ") is larger than end(" + end + ")");
+ "start(%d) is larger than end(%d)", start, end);
return nGetWidth(mNativePtr, start, end);
}
@@ -107,11 +107,11 @@ public class MeasuredText {
public void getBounds(@IntRange(from = 0) int start, @IntRange(from = 0) int end,
@NonNull Rect rect) {
Preconditions.checkArgument(0 <= start && start <= mChars.length,
- "start(" + start + ") must be 0 <= start <= " + mChars.length);
+ "start(%d) must be 0 <= start <= %d", start, mChars.length);
Preconditions.checkArgument(0 <= end && end <= mChars.length,
- "end(" + end + ") must be 0 <= end <= " + mChars.length);
+ "end(%d) must be 0 <= end <= %d", end, mChars.length);
Preconditions.checkArgument(start <= end,
- "start(" + start + ") is larger than end(" + end + ")");
+ "start(%d) is larger than end(%d)", start, end);
Preconditions.checkNotNull(rect);
nGetBounds(mNativePtr, mChars, start, end, rect);
}
@@ -123,7 +123,7 @@ public class MeasuredText {
*/
public @FloatRange(from = 0.0f) @Px float getCharWidthAt(@IntRange(from = 0) int offset) {
Preconditions.checkArgument(0 <= offset && offset < mChars.length,
- "offset(" + offset + ") is larger than text length: " + mChars.length);
+ "offset(%d) is larger than text length %d" + offset, mChars.length);
return nGetCharWidthAt(mNativePtr, offset);
}
diff --git a/graphics/java/android/graphics/text/PositionedGlyphs.java b/graphics/java/android/graphics/text/PositionedGlyphs.java
index 7364d545a452..c2de0acebca9 100644
--- a/graphics/java/android/graphics/text/PositionedGlyphs.java
+++ b/graphics/java/android/graphics/text/PositionedGlyphs.java
@@ -35,11 +35,12 @@ import java.util.Objects;
* Text shaping result object for single style text.
*
* You can get text shaping result by
- * {@link TextShaper#shapeTextRun(char[], int, int, int, int, float, float, boolean, Paint)} and
- * {@link TextShaper#shapeTextRun(CharSequence, int, int, int, int, float, float, boolean, Paint)}.
+ * {@link TextRunShaper#shapeTextRun(char[], int, int, int, int, float, float, boolean, Paint)} and
+ * {@link TextRunShaper#shapeTextRun(CharSequence, int, int, int, int, float, float, boolean,
+ * Paint)}.
*
- * @see TextShaper#shapeTextRun(char[], int, int, int, int, float, float, boolean, Paint)
- * @see TextShaper#shapeTextRun(CharSequence, int, int, int, int, float, float, boolean, Paint)
+ * @see TextRunShaper#shapeTextRun(char[], int, int, int, int, float, float, boolean, Paint)
+ * @see TextRunShaper#shapeTextRun(CharSequence, int, int, int, int, float, float, boolean, Paint)
*/
public final class PositionedGlyphs {
private static final NativeAllocationRegistry REGISTRY =
@@ -49,7 +50,6 @@ public final class PositionedGlyphs {
private final long mLayoutPtr;
private final float mXOffset;
private final float mYOffset;
- private final GlyphStyle mGlyphStyle;
private final ArrayList<Font> mFonts;
/**
@@ -62,7 +62,7 @@ public final class PositionedGlyphs {
*
* @return total amount of advance
*/
- public float getTotalAdvance() {
+ public float getAdvance() {
return nGetTotalAdvance(mLayoutPtr);
}
@@ -91,21 +91,11 @@ public final class PositionedGlyphs {
}
/**
- * Returns the glyph style used for drawing the glyph at the given index.
- *
- * @return A glyph style
- */
- @NonNull
- public GlyphStyle getStyle() {
- return mGlyphStyle;
- }
-
- /**
* Returns the amount of X offset added to glyph position.
*
* @return The X offset added to glyph position.
*/
- public float getOriginX() {
+ public float getOffsetX() {
return mXOffset;
}
@@ -114,7 +104,7 @@ public final class PositionedGlyphs {
*
* @return The Y offset added to glyph position.
*/
- public float getOriginY() {
+ public float getOffsetY() {
return mYOffset;
}
@@ -144,7 +134,7 @@ public final class PositionedGlyphs {
* Returns the glyph ID used for drawing the glyph at the given index.
*
* @param index the glyph index
- * @return A font object
+ * @return An glyph ID of the font.
*/
@IntRange(from = 0)
public int getGlyphId(@IntRange(from = 0) int index) {
@@ -158,7 +148,7 @@ public final class PositionedGlyphs {
* @param index the glyph index
* @return A X offset in pixels
*/
- public float getPositionX(@IntRange(from = 0) int index) {
+ public float getGlyphX(@IntRange(from = 0) int index) {
Preconditions.checkArgumentInRange(index, 0, glyphCount() - 1, "index");
return nGetX(mLayoutPtr, index) + mXOffset;
}
@@ -169,7 +159,7 @@ public final class PositionedGlyphs {
* @param index the glyph index
* @return A Y offset in pixels.
*/
- public float getPositionY(@IntRange(from = 0) int index) {
+ public float getGlyphY(@IntRange(from = 0) int index) {
Preconditions.checkArgumentInRange(index, 0, glyphCount() - 1, "index");
return nGetY(mLayoutPtr, index) + mYOffset;
}
@@ -180,11 +170,9 @@ public final class PositionedGlyphs {
* @hide
*
* @param layoutPtr the address of native layout object.
- * @param paint a paint object
*/
- public PositionedGlyphs(long layoutPtr, @NonNull Paint paint, float xOffset, float yOffset) {
+ public PositionedGlyphs(long layoutPtr, float xOffset, float yOffset) {
mLayoutPtr = layoutPtr;
- mGlyphStyle = new GlyphStyle(paint);
int glyphCount = nGetGlyphCount(layoutPtr);
mFonts = new ArrayList<>(glyphCount);
mXOffset = xOffset;
@@ -229,14 +217,13 @@ public final class PositionedGlyphs {
if (!(o instanceof PositionedGlyphs)) return false;
PositionedGlyphs that = (PositionedGlyphs) o;
- if (!mGlyphStyle.equals(that.mGlyphStyle)) return false;
if (mXOffset != that.mXOffset || mYOffset != that.mYOffset) return false;
if (glyphCount() != that.glyphCount()) return false;
for (int i = 0; i < glyphCount(); ++i) {
if (getGlyphId(i) != that.getGlyphId(i)) return false;
- if (getPositionX(i) != that.getPositionX(i)) return false;
- if (getPositionY(i) != that.getPositionY(i)) return false;
+ if (getGlyphX(i) != that.getGlyphX(i)) return false;
+ if (getGlyphY(i) != that.getGlyphY(i)) return false;
// Intentionally using reference equality since font equality is heavy due to buffer
// compare.
if (getFont(i) != that.getFont(i)) return false;
@@ -247,10 +234,10 @@ public final class PositionedGlyphs {
@Override
public int hashCode() {
- int hashCode = Objects.hash(mXOffset, mYOffset, mGlyphStyle);
+ int hashCode = Objects.hash(mXOffset, mYOffset);
for (int i = 0; i < glyphCount(); ++i) {
hashCode = Objects.hash(hashCode,
- getGlyphId(i), getPositionX(i), getPositionY(i), getFont(i));
+ getGlyphId(i), getGlyphX(i), getGlyphY(i), getFont(i));
}
return hashCode;
}
@@ -263,7 +250,7 @@ public final class PositionedGlyphs {
sb.append(", ");
}
sb.append("[ ID = " + getGlyphId(i) + ","
- + " pos = (" + getPositionX(i) + "," + getPositionY(i) + ")"
+ + " pos = (" + getGlyphX(i) + "," + getGlyphY(i) + ")"
+ " font = " + getFont(i) + " ]");
}
sb.append("]");
@@ -271,7 +258,6 @@ public final class PositionedGlyphs {
+ "glyphs = " + sb.toString()
+ ", mXOffset=" + mXOffset
+ ", mYOffset=" + mYOffset
- + ", mGlyphStyle=" + mGlyphStyle
+ '}';
}
}
diff --git a/graphics/java/android/graphics/text/TextShaper.java b/graphics/java/android/graphics/text/TextRunShaper.java
index f40ed8f8f653..8459e7bfe191 100644
--- a/graphics/java/android/graphics/text/TextShaper.java
+++ b/graphics/java/android/graphics/text/TextRunShaper.java
@@ -19,6 +19,7 @@ package android.graphics.text;
import android.annotation.NonNull;
import android.graphics.Paint;
import android.text.TextDirectionHeuristic;
+import android.text.TextPaint;
import android.text.TextUtils;
import com.android.internal.util.Preconditions;
@@ -31,15 +32,18 @@ import dalvik.annotation.optimization.FastNative;
* Text shaping is a preprocess for drawing text into canvas with glyphs. The glyph is a most
* primitive unit of the text drawing, consist of glyph identifier in the font file and its position
* and style. You can draw the shape result to Canvas by calling Canvas#drawGlyphs.
-
*
- * @see TextShaper#shapeTextRun(CharSequence, int, int, int, int, float, float, boolean, Paint)
- * @see TextShaper#shapeTextRun(char[], int, int, int, int, float, float, boolean, Paint)
- * @see android.text.StyledTextShaper#shapeText(CharSequence, int, int, TextDirectionHeuristic,
- * TextPaint)
+ * For most of the use cases, {@link android.text.TextShaper} will provide text shaping
+ * functionalities needed. {@link TextRunShaper} is a lower level API that is used by
+ * {@link android.text.TextShaper}.
+ *
+ * @see TextRunShaper#shapeTextRun(CharSequence, int, int, int, int, float, float, boolean, Paint)
+ * @see TextRunShaper#shapeTextRun(char[], int, int, int, int, float, float, boolean, Paint)
+ * @see android.text.TextShaper#shapeText(CharSequence, int, int, TextDirectionHeuristic, TextPaint,
+ * TextShaper.GlyphsConsumer)
*/
-public class TextShaper {
- private TextShaper() {} // Do not instantiate
+public class TextRunShaper {
+ private TextRunShaper() {} // Do not instantiate
/**
* Shape non-styled text.
@@ -68,7 +72,7 @@ public class TextShaper {
return new PositionedGlyphs(
nativeShapeTextRun(text, start, count, contextStart, contextCount, isRtl,
paint.getNativeInstance()),
- paint, xOffset, yOffset);
+ xOffset, yOffset);
}
/**
@@ -100,7 +104,7 @@ public class TextShaper {
nativeShapeTextRun(
(String) text, start, count, contextStart, contextCount, isRtl,
paint.getNativeInstance()),
- paint, xOffset, yOffset);
+ xOffset, yOffset);
} else {
char[] buf = new char[contextCount];
TextUtils.getChars(text, contextStart, contextStart + contextCount, buf, 0);
@@ -108,7 +112,7 @@ public class TextShaper {
nativeShapeTextRun(
buf, start - contextStart, count,
0, contextCount, isRtl, paint.getNativeInstance()),
- paint, xOffset, yOffset);
+ xOffset, yOffset);
}
}