From 765f01e71503c1c288c421cf50dcde28fbf7db89 Mon Sep 17 00:00:00 2001 From: Julian Winkler Date: Sun, 19 May 2024 15:06:17 +0200 Subject: [PATCH] Drawable: implement GradientDrawable.inflate() and Drawable.createFromXmlInner() --- .../android/graphics/drawable/Drawable.java | 27 ++++++++++--------- .../graphics/drawable/GradientDrawable.java | 7 +++-- .../graphics/drawable/StateListDrawable.java | 2 +- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/api-impl/android/graphics/drawable/Drawable.java b/src/api-impl/android/graphics/drawable/Drawable.java index c7f69ae7..226176ed 100644 --- a/src/api-impl/android/graphics/drawable/Drawable.java +++ b/src/api-impl/android/graphics/drawable/Drawable.java @@ -176,15 +176,26 @@ public class Drawable { while ((type=parser.next()) != XmlPullParser.START_TAG && type != XmlPullParser.END_DOCUMENT); if (type != XmlPullParser.START_TAG) throw new XmlPullParserException("No start tag found"); + + return createFromXmlInner(resources, parser, parser, null); + } + + public static Drawable createFromXmlInner(Resources resources, XmlPullParser parser, AttributeSet attrs) throws XmlPullParserException, IOException { + return createFromXmlInner(resources, parser, attrs, null); + } + + public static Drawable createFromXmlInner(Resources resources, XmlPullParser parser, AttributeSet attrs, Theme theme) throws XmlPullParserException, IOException { if ("selector".equals(parser.getName())) { StateListDrawable drawable = new StateListDrawable(); - drawable.inflate(resources, parser, parser, null); + drawable.inflate(resources, parser, attrs, null); return drawable; } else if ("shape".equals(parser.getName())) { - return new GradientDrawable(); + GradientDrawable drawable = new GradientDrawable(); + drawable.inflate(resources, parser, attrs); + return drawable; } else if ("bitmap".equals(parser.getName())) { BitmapDrawable drawable = new BitmapDrawable(); - drawable.inflate(resources, parser, parser, null); + drawable.inflate(resources, parser, attrs, null); return drawable; } else if ("transition".equals(parser.getName())) { return new Drawable(); @@ -193,7 +204,7 @@ public class Drawable { return new ColorDrawable(0); } else if ("vector".equals(parser.getName())) { VectorDrawable drawable = new VectorDrawable(); - drawable.inflate(resources, parser, parser, null); + drawable.inflate(resources, parser, attrs, null); return drawable; } else if ("layer-list".equals(parser.getName())) { return new LayerDrawable(); @@ -201,14 +212,6 @@ public class Drawable { return null; } - public static Drawable createFromXmlInner(Resources resources, XmlPullParser parser, AttributeSet attrs) { - return createFromXmlInner(resources, parser, attrs, null); - } - - public static Drawable createFromXmlInner(Resources resources, XmlPullParser parser, AttributeSet attrs, Theme theme) { - return null; - } - public static Drawable createFromResourceStream(Resources resources, TypedValue value, InputStream is, String file, Object object) { Path path = Paths.get(android.os.Environment.getExternalStorageDirectory().getPath(), file); diff --git a/src/api-impl/android/graphics/drawable/GradientDrawable.java b/src/api-impl/android/graphics/drawable/GradientDrawable.java index d9f41752..b57add78 100644 --- a/src/api-impl/android/graphics/drawable/GradientDrawable.java +++ b/src/api-impl/android/graphics/drawable/GradientDrawable.java @@ -850,7 +850,6 @@ public class GradientDrawable extends Drawable { return !mRect.isEmpty(); } -/* @Override public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs) throws XmlPullParserException, IOException { @@ -860,8 +859,8 @@ public class GradientDrawable extends Drawable { TypedArray a = r.obtainAttributes(attrs, com.android.internal.R.styleable.GradientDrawable); - super.inflateWithAttributes(r, parser, a, - com.android.internal.R.styleable.GradientDrawable_visible); + // super.inflateWithAttributes(r, parser, a, + // com.android.internal.R.styleable.GradientDrawable_visible); int shapeType = a.getInt( com.android.internal.R.styleable.GradientDrawable_shape, RECTANGLE); @@ -1078,7 +1077,7 @@ public class GradientDrawable extends Drawable { } mGradientState.computeOpacity(); - }*/ + } private static float getFloatOrFraction(TypedArray a, int index, float defaultValue) { TypedValue tv = a.peekValue(index); diff --git a/src/api-impl/android/graphics/drawable/StateListDrawable.java b/src/api-impl/android/graphics/drawable/StateListDrawable.java index aad192f7..de94b0f0 100644 --- a/src/api-impl/android/graphics/drawable/StateListDrawable.java +++ b/src/api-impl/android/graphics/drawable/StateListDrawable.java @@ -155,7 +155,7 @@ public class StateListDrawable extends DrawableContainer { + ": tag requires a 'drawable' attribute or " + "child tag defining a drawable"); } - // dr = Drawable.createFromXmlInner(r, parser, attrs, theme); + dr = Drawable.createFromXmlInner(r, parser, attrs, theme); } state.addStateSet(states, dr);