Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 91c8f753 authored by Alan Viverette's avatar Alan Viverette Committed by Android (Google) Code Review
Browse files

Merge "Theming for more VectorDrawable attrs, add attrs to test app"

parents f208fd46 7f1ab7a4
Loading
Loading
Loading
Loading
+17 −16
Original line number Diff line number Diff line
@@ -247,7 +247,7 @@ package android {
    field public static final int actionBarTabBarStyle = 16843508; // 0x10102f4
    field public static final int actionBarTabStyle = 16843507; // 0x10102f3
    field public static final int actionBarTabTextStyle = 16843509; // 0x10102f5
    field public static final int actionBarTheme = 16843836; // 0x101043c
    field public static final int actionBarTheme = 16843837; // 0x101043d
    field public static final int actionBarWidgetTheme = 16843671; // 0x1010397
    field public static final int actionButtonStyle = 16843480; // 0x10102d8
    field public static final int actionDropDownStyle = 16843479; // 0x10102d7
@@ -290,7 +290,7 @@ package android {
    field public static final int alwaysDrawnWithCache = 16842991; // 0x10100ef
    field public static final int alwaysRetainTaskState = 16843267; // 0x1010203
    field public static final int angle = 16843168; // 0x10101a0
    field public static final int animate = 16843822; // 0x101042e
    field public static final int animate = 16843823; // 0x101042f
    field public static final int animateFirstView = 16843477; // 0x10102d5
    field public static final int animateLayoutChanges = 16843506; // 0x10102f2
    field public static final int animateOnClick = 16843356; // 0x101025c
@@ -377,19 +377,19 @@ package android {
    field public static final int clipChildren = 16842986; // 0x10100ea
    field public static final int clipOrientation = 16843274; // 0x101020a
    field public static final int clipToPadding = 16842987; // 0x10100eb
    field public static final int clipToPath = 16843821; // 0x101042d
    field public static final int clipToPath = 16843822; // 0x101042e
    field public static final int codes = 16843330; // 0x1010242
    field public static final int collapseColumns = 16843083; // 0x101014b
    field public static final int color = 16843173; // 0x10101a5
    field public static final int colorActivatedHighlight = 16843664; // 0x1010390
    field public static final int colorBackground = 16842801; // 0x1010031
    field public static final int colorBackgroundCacheHint = 16843435; // 0x10102ab
    field public static final int colorButtonNormal = 16843828; // 0x1010434
    field public static final int colorButtonNormalColored = 16843830; // 0x1010436
    field public static final int colorButtonPressed = 16843829; // 0x1010435
    field public static final int colorButtonPressedColored = 16843831; // 0x1010437
    field public static final int colorControlActivated = 16843827; // 0x1010433
    field public static final int colorControlNormal = 16843826; // 0x1010432
    field public static final int colorButtonNormal = 16843829; // 0x1010435
    field public static final int colorButtonNormalColored = 16843831; // 0x1010437
    field public static final int colorButtonPressed = 16843830; // 0x1010436
    field public static final int colorButtonPressedColored = 16843832; // 0x1010438
    field public static final int colorControlActivated = 16843828; // 0x1010434
    field public static final int colorControlNormal = 16843827; // 0x1010433
    field public static final int colorFocusedHighlight = 16843663; // 0x101038f
    field public static final int colorForeground = 16842800; // 0x1010030
    field public static final int colorForegroundInverse = 16843270; // 0x1010206
@@ -757,7 +757,7 @@ package android {
    field public static final int layout_x = 16843135; // 0x101017f
    field public static final int layout_y = 16843136; // 0x1010180
    field public static final int left = 16843181; // 0x10101ad
    field public static final int limitTo = 16843823; // 0x101042f
    field public static final int limitTo = 16843824; // 0x1010430
    field public static final int lineSpacingExtra = 16843287; // 0x1010217
    field public static final int lineSpacingMultiplier = 16843288; // 0x1010218
    field public static final int lines = 16843092; // 0x1010154
@@ -867,11 +867,11 @@ package android {
    field public static final int permissionFlags = 16843719; // 0x10103c7
    field public static final int permissionGroup = 16842762; // 0x101000a
    field public static final int permissionGroupFlags = 16843717; // 0x10103c5
    field public static final int persistable = 16843832; // 0x1010438
    field public static final int persistable = 16843833; // 0x1010439
    field public static final int persistent = 16842765; // 0x101000d
    field public static final int persistentDrawingCache = 16842990; // 0x10100ee
    field public static final deprecated int phoneNumber = 16843111; // 0x1010167
    field public static final int pinned = 16843825; // 0x1010431
    field public static final int pinned = 16843826; // 0x1010432
    field public static final int pivotX = 16843189; // 0x10101b5
    field public static final int pivotY = 16843190; // 0x10101b6
    field public static final int popupAnimationStyle = 16843465; // 0x10102c9
@@ -936,7 +936,7 @@ package android {
    field public static final int required = 16843406; // 0x101028e
    field public static final int requiredAccountType = 16843734; // 0x10103d6
    field public static final int requiredForAllUsers = 16843728; // 0x10103d0
    field public static final int requiredForProfile = 16843824; // 0x1010430
    field public static final int requiredForProfile = 16843825; // 0x1010431
    field public static final int requiresFadingEdge = 16843685; // 0x10103a5
    field public static final int requiresSmallestWidthDp = 16843620; // 0x1010364
    field public static final int resizeMode = 16843619; // 0x1010363
@@ -1022,7 +1022,7 @@ package android {
    field public static final int shrinkColumns = 16843082; // 0x101014a
    field public static final deprecated int singleLine = 16843101; // 0x101015d
    field public static final int singleUser = 16843711; // 0x10103bf
    field public static final int slideEdge = 16843835; // 0x101043b
    field public static final int slideEdge = 16843836; // 0x101043c
    field public static final int smallIcon = 16843422; // 0x101029e
    field public static final int smallScreens = 16843396; // 0x1010284
    field public static final int smoothScrollbar = 16843313; // 0x1010231
@@ -1075,10 +1075,11 @@ package android {
    field public static final int stretchMode = 16843030; // 0x1010116
    field public static final int stroke = 16843811; // 0x1010423
    field public static final int strokeLineCap = 16843820; // 0x101042c
    field public static final int strokeLineJoin = 16843821; // 0x101042d
    field public static final int strokeOpacity = 16843812; // 0x1010424
    field public static final int strokeWidth = 16843813; // 0x1010425
    field public static final int subtitle = 16843473; // 0x10102d1
    field public static final int subtitleTextAppearance = 16843834; // 0x101043a
    field public static final int subtitleTextAppearance = 16843835; // 0x101043b
    field public static final int subtitleTextStyle = 16843513; // 0x10102f9
    field public static final int subtypeExtraValue = 16843674; // 0x101039a
    field public static final int subtypeId = 16843713; // 0x10103c1
@@ -1194,7 +1195,7 @@ package android {
    field public static final int tintMode = 16843798; // 0x1010416
    field public static final int title = 16843233; // 0x10101e1
    field public static final int titleCondensed = 16843234; // 0x10101e2
    field public static final int titleTextAppearance = 16843833; // 0x1010439
    field public static final int titleTextAppearance = 16843834; // 0x101043a
    field public static final int titleTextStyle = 16843512; // 0x10102f8
    field public static final int toAlpha = 16843211; // 0x10101cb
    field public static final int toDegrees = 16843188; // 0x10101b4
+1 −0
Original line number Diff line number Diff line
@@ -2131,6 +2131,7 @@
  <public type="attr" name="trimPathEnd" />
  <public type="attr" name="trimPathOffset" />
  <public type="attr" name="strokeLineCap" />
  <public type="attr" name="strokeLineJoin" />
  <public type="attr" name="clipToPath" />
  <public type="attr" name="animate" />
  <public type="attr" name="limitTo" />
+130 −65
Original line number Diff line number Diff line
@@ -846,11 +846,11 @@ public class VectorDrawable extends Drawable {
            }

            if (vPath.mStrokeColor != 0) {
                if (vPath.mStrokelineJoin != null) {
                    mStrokePaint.setStrokeJoin(vPath.mStrokelineJoin);
                if (vPath.mStrokeLineJoin != null) {
                    mStrokePaint.setStrokeJoin(vPath.mStrokeLineJoin);
                }
                if (vPath.mStrokelineCap != null) {
                    mStrokePaint.setStrokeCap(vPath.mStrokelineCap);
                if (vPath.mStrokeLineCap != null) {
                    mStrokePaint.setStrokeCap(vPath.mStrokeLineCap);
                }
                mStrokePaint.setStrokeMiter(vPath.mStrokeMiterlimit * scale);
                mStrokePaint.setColor(vPath.mStrokeColor);
@@ -1324,8 +1324,8 @@ public class VectorDrawable extends Drawable {

        boolean mAnimated = false;
        boolean mClip = false;
        Paint.Cap mStrokelineCap = null;
        Paint.Join mStrokelineJoin = null;
        Paint.Cap mStrokeLineCap = null;
        Paint.Join mStrokeLineJoin = null;
        float mStrokeMiterlimit = 4;

        private VNode[] mNode = null;
@@ -1386,56 +1386,88 @@ public class VectorDrawable extends Drawable {
            return mId;
        }

        private Paint.Cap getStrokeLineCap(int id, Paint.Cap defValue) {
            switch (id) {
                case LINECAP_BUTT:
                    return Paint.Cap.BUTT;
                case LINECAP_ROUND:
                    return Paint.Cap.ROUND;
                case LINECAP_SQUARE:
                    return Paint.Cap.SQUARE;
                default:
                    return defValue;
            }
        }

        private Paint.Join getStrokeLineJoin(int id, Paint.Join defValue) {
            switch (id) {
                case LINEJOIN_MITER:
                    return Paint.Join.MITER;
                case LINEJOIN_ROUND:
                    return Paint.Join.ROUND;
                case LINEJOIN_BEVEL:
                    return Paint.Join.BEVEL;
                default:
                    return defValue;
            }
        }

        public void inflate(Resources r, AttributeSet attrs, Theme theme) {
            final TypedArray a = obtainAttributes(r, theme, attrs, R.styleable.VectorDrawablePath);
            final int[] themeAttrs = a.extractThemeAttrs();
            mThemeAttrs = themeAttrs;

            mClip = a.getBoolean(R.styleable.VectorDrawablePath_clipToPath, false);
            // NOTE: The set of attributes loaded here MUST match the
            // set of attributes loaded in applyTheme.
            if (themeAttrs == null || themeAttrs[R.styleable.VectorDrawablePath_clipToPath] == 0) {
                mClip = a.getBoolean(R.styleable.VectorDrawablePath_clipToPath, mClip);
            }

            if (themeAttrs == null || themeAttrs[R.styleable.VectorDrawablePath_name] == 0) {
                mId = a.getString(R.styleable.VectorDrawablePath_name);
            }

            if (themeAttrs == null || themeAttrs[R.styleable.VectorDrawablePath_pathData] == 0) {
                mNode = parsePath(a.getString(R.styleable.VectorDrawablePath_pathData));
            }

            if (themeAttrs == null || themeAttrs[R.styleable.VectorDrawablePath_fill] == 0) {
                mFillColor = a.getColor(R.styleable.VectorDrawablePath_fill, 0);
                mFillColor = a.getColor(R.styleable.VectorDrawablePath_fill, mFillColor);
            }

            if (themeAttrs == null
                    || themeAttrs[R.styleable.VectorDrawablePath_fillOpacity] == 0) {
                mFillOpacity = a.getFloat(R.styleable.VectorDrawablePath_fillOpacity, Float.NaN);
            if (themeAttrs == null || themeAttrs[R.styleable.VectorDrawablePath_fillOpacity] == 0) {
                mFillOpacity = a.getFloat(R.styleable.VectorDrawablePath_fillOpacity, mFillOpacity);
            }

            mRotate = a.getFloat(R.styleable.VectorDrawablePath_rotation, 0);
            mPivotX = a.getFloat(R.styleable.VectorDrawablePath_pivotX, 0);
            mPivotY = a.getFloat(R.styleable.VectorDrawablePath_pivotY, 0);
            if (themeAttrs == null || themeAttrs[R.styleable.VectorDrawablePath_rotation] == 0) {
                mRotate = a.getFloat(R.styleable.VectorDrawablePath_rotation, mRotate);
            }

            final int lineCap  = a.getInt(R.styleable.VectorDrawablePath_strokeLineCap, 0);
            switch (lineCap) {
                case LINECAP_BUTT:
                    mStrokelineCap = Paint.Cap.BUTT;
                    break;
                case LINECAP_ROUND:
                    mStrokelineCap = Paint.Cap.ROUND;
                    break;
                case LINECAP_SQUARE:
                    mStrokelineCap = Paint.Cap.SQUARE;
                    break;
            if (themeAttrs == null || themeAttrs[R.styleable.VectorDrawablePath_pivotX] == 0) {
                mPivotX = a.getFloat(R.styleable.VectorDrawablePath_pivotX, mPivotX);
            }

            final int lineJoin =  a.getInt(R.styleable.VectorDrawablePath_strokeLineJoin, 0);
            switch (lineJoin) {
                case LINEJOIN_MITER:
                    mStrokelineJoin = Paint.Join.MITER;
                    break;
                case LINEJOIN_ROUND:
                    mStrokelineJoin = Paint.Join.ROUND;
                    break;
                case LINEJOIN_BEVEL:
                    mStrokelineJoin = Paint.Join.BEVEL;
                    break;
            if (themeAttrs == null || themeAttrs[R.styleable.VectorDrawablePath_pivotY] == 0) {
                mPivotY = a.getFloat(R.styleable.VectorDrawablePath_pivotY, mPivotY);
            }

            if (themeAttrs == null
                    || themeAttrs[R.styleable.VectorDrawablePath_strokeLineCap] == 0) {
                mStrokeLineCap = getStrokeLineCap(
                        a.getInt(R.styleable.VectorDrawablePath_strokeLineCap, -1), mStrokeLineCap);
            }

            if (themeAttrs == null
                    || themeAttrs[R.styleable.VectorDrawablePath_strokeLineJoin] == 0) {
                mStrokeLineJoin = getStrokeLineJoin(
                        a.getInt(R.styleable.VectorDrawablePath_strokeLineJoin, -1), mStrokeLineJoin);
            }

            mStrokeMiterlimit = a.getFloat(R.styleable.VectorDrawablePath_strokeMiterLimit,
                    mStrokeMiterlimit);
            if (themeAttrs == null
                    || themeAttrs[R.styleable.VectorDrawablePath_strokeMiterLimit] == 0) {
                mStrokeMiterlimit = a.getFloat(
                        R.styleable.VectorDrawablePath_strokeMiterLimit, mStrokeMiterlimit);
            }

            if (themeAttrs == null || themeAttrs[R.styleable.VectorDrawablePath_stroke] == 0) {
                mStrokeColor = a.getColor(R.styleable.VectorDrawablePath_stroke, mStrokeColor);
@@ -1444,14 +1476,30 @@ public class VectorDrawable extends Drawable {
            if (themeAttrs == null
                    || themeAttrs[R.styleable.VectorDrawablePath_strokeOpacity] == 0) {
                mStrokeOpacity = a.getFloat(
                        R.styleable.VectorDrawablePath_strokeOpacity, Float.NaN);
                        R.styleable.VectorDrawablePath_strokeOpacity, mStrokeOpacity);
            }

            if (themeAttrs == null || themeAttrs[R.styleable.VectorDrawablePath_strokeWidth] == 0) {
                mStrokeWidth = a.getFloat(R.styleable.VectorDrawablePath_strokeWidth, mStrokeWidth);
            }

            if (themeAttrs == null || themeAttrs[R.styleable.VectorDrawablePath_trimPathEnd] == 0) {
                mTrimPathEnd = a.getFloat(R.styleable.VectorDrawablePath_trimPathEnd, mTrimPathEnd);
            }

            mStrokeWidth = a.getFloat(R.styleable.VectorDrawablePath_strokeWidth, 0);
            mTrimPathEnd = a.getFloat(R.styleable.VectorDrawablePath_trimPathEnd, 1);
            mTrimPathOffset = a.getFloat(R.styleable.VectorDrawablePath_trimPathOffset, 0);
            mTrimPathStart = a.getFloat(R.styleable.VectorDrawablePath_trimPathStart, 0);
            if (themeAttrs == null
                    || themeAttrs[R.styleable.VectorDrawablePath_trimPathOffset] == 0) {
                mTrimPathOffset = a.getFloat(
                        R.styleable.VectorDrawablePath_trimPathOffset, mTrimPathOffset);
            }

            if (themeAttrs == null
                    || themeAttrs[R.styleable.VectorDrawablePath_trimPathStart] == 0) {
                mTrimPathStart = a.getFloat(
                        R.styleable.VectorDrawablePath_trimPathStart, mTrimPathStart);
            }

            // TODO: Consider replacing this with existing state attributes.
            final int[] states = {
                    R.styleable.VectorDrawablePath_state_activated,
                    R.styleable.VectorDrawablePath_state_checkable,
@@ -1489,22 +1537,39 @@ public class VectorDrawable extends Drawable {
            final TypedArray a = t.resolveAttributes(
                    mThemeAttrs, R.styleable.VectorDrawablePath, 0, 0);

            if (a.hasValue(R.styleable.VectorDrawablePath_fill)) {
                mFillColor = a.getColor(R.styleable.VectorDrawablePath_fill, 0);
            }
            mClip = a.getBoolean(R.styleable.VectorDrawablePath_clipToPath, mClip);

            if (a.hasValue(R.styleable.VectorDrawablePath_fillOpacity)) {
                mFillOpacity = a.getFloat(R.styleable.VectorDrawablePath_fillOpacity, Float.NaN);
            if (a.hasValue(R.styleable.VectorDrawablePath_name)) {
                mId = a.getString(R.styleable.VectorDrawablePath_name);
            }

            if (a.hasValue(R.styleable.VectorDrawablePath_stroke)) {
                mStrokeColor = a.getColor(R.styleable.VectorDrawablePath_stroke, mStrokeColor);
            if (a.hasValue(R.styleable.VectorDrawablePath_pathData)) {
                mNode = parsePath(a.getString(R.styleable.VectorDrawablePath_pathData));
            }

            if (a.hasValue(R.styleable.VectorDrawablePath_strokeOpacity)) {
            mFillColor = a.getColor(R.styleable.VectorDrawablePath_fill, mFillColor);
            mFillOpacity = a.getFloat(R.styleable.VectorDrawablePath_fillOpacity, mFillOpacity);

            mRotate = a.getFloat(R.styleable.VectorDrawablePath_rotation, mRotate);
            mPivotX = a.getFloat(R.styleable.VectorDrawablePath_pivotX, mPivotX);
            mPivotY = a.getFloat(R.styleable.VectorDrawablePath_pivotY, mPivotY);

            mStrokeLineCap = getStrokeLineCap(a.getInt(
                    R.styleable.VectorDrawablePath_strokeLineCap, -1), mStrokeLineCap);
            mStrokeLineJoin = getStrokeLineJoin(a.getInt(
                    R.styleable.VectorDrawablePath_strokeLineJoin, -1), mStrokeLineJoin);
            mStrokeMiterlimit = a.getFloat(
                    R.styleable.VectorDrawablePath_strokeMiterLimit, mStrokeMiterlimit);
            mStrokeColor = a.getColor(R.styleable.VectorDrawablePath_stroke, mStrokeColor);
            mStrokeOpacity = a.getFloat(
                        R.styleable.VectorDrawablePath_strokeOpacity, Float.NaN);
            }
                    R.styleable.VectorDrawablePath_strokeOpacity, mStrokeOpacity);
            mStrokeWidth = a.getFloat(R.styleable.VectorDrawablePath_strokeWidth, mStrokeWidth);

            mTrimPathEnd = a.getFloat(R.styleable.VectorDrawablePath_trimPathEnd, mTrimPathEnd);
            mTrimPathOffset = a.getFloat(
                    R.styleable.VectorDrawablePath_trimPathOffset, mTrimPathOffset);
            mTrimPathStart = a.getFloat(
                    R.styleable.VectorDrawablePath_trimPathStart, mTrimPathStart);

            updateColorAlphas();
        }
@@ -1626,8 +1691,8 @@ public class VectorDrawable extends Drawable {
            mTrimPathStart = p1.mTrimPathStart;
            mTrimPathEnd = p1.mTrimPathEnd;
            mTrimPathOffset = p1.mTrimPathOffset;
            mStrokelineCap = p1.mStrokelineCap;
            mStrokelineJoin = p1.mStrokelineJoin;
            mStrokeLineCap = p1.mStrokeLineCap;
            mStrokeLineJoin = p1.mStrokeLineJoin;
            mStrokeMiterlimit = p1.mStrokeMiterlimit;
            mNumberOfStates = p1.mNumberOfStates;
            for (int i = 0; i < mNumberOfStates; i++) {
@@ -1664,13 +1729,13 @@ public class VectorDrawable extends Drawable {
                    returnPath.mTrimPathOffset = t1 * p1.mTrimPathOffset + t * p2.mTrimPathOffset;
                    returnPath.mStrokeMiterlimit =
                            t1 * p1.mStrokeMiterlimit + t * p2.mStrokeMiterlimit;
                    returnPath.mStrokelineCap = p1.mStrokelineCap;
                    if (returnPath.mStrokelineCap == null) {
                        returnPath.mStrokelineCap = p2.mStrokelineCap;
                    returnPath.mStrokeLineCap = p1.mStrokeLineCap;
                    if (returnPath.mStrokeLineCap == null) {
                        returnPath.mStrokeLineCap = p2.mStrokeLineCap;
                    }
                    returnPath.mStrokelineJoin = p1.mStrokelineJoin;
                    if (returnPath.mStrokelineJoin == null) {
                        returnPath.mStrokelineJoin = p2.mStrokelineJoin;
                    returnPath.mStrokeLineJoin = p1.mStrokeLineJoin;
                    if (returnPath.mStrokeLineJoin == null) {
                        returnPath.mStrokeLineJoin = p2.mStrokeLineJoin;
                    }
                    returnPath.mFillRule = p1.mFillRule;

+1 −1
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.test.dynamic" >
    <uses-sdk android:minSdkVersion="11" />
    <uses-sdk android:minSdkVersion="20" />

    <application
        android:hardwareAccelerated="true"
+20 −15
Original line number Diff line number Diff line
@@ -17,8 +17,8 @@
    android:trigger="state_checked" android:versionCode="1" >

    <size
        android:height="64dp"
        android:width="64dp" />
        android:height="48dp"
        android:width="48dp" />

    <viewport
        android:viewportHeight="480"
@@ -28,42 +28,47 @@
        <path
            android:name="check"
            android:pathData="m20,200l100,90l180,-180l-35,-35l-145,145l-60,-60l-40,40z"
            android:fill="#ffff00ff"
            android:stroke="#FF00FF00"
            android:strokeWidth="5" />
            android:fill="?android:attr/colorControlActivated" />
    </group>
    <group>
        <path
            android:name="box1"
            android:pathData="m127,171l37,38l33,-31l-37,-40l-1,3l-2,0l-30,30z"
            android:fill="#ffffffff"
            android:stroke="#FF00FF00"
            android:strokeWidth="5" />
            android:fill="?android:attr/colorControlActivated"
            android:stroke="?android:attr/colorControlActivated"
            android:strokeLineCap="round"
            android:strokeLineJoin="round" />
    </group>
    <group>
        <path
            android:name="box2"
            android:pathData="m127,171l37,38l33,-31l-37,-40l-1,3l-2,0l-30,30z"
            android:fill="#ff000000"
            android:rotation="46.757"
            android:pivotX="162"
            android:pivotY="173.5"
            android:stroke="#FF00FF00"
            android:strokeWidth="5" />
            android:fill="?attr/android:colorControlNormal"
            android:stroke="?attr/android:colorControlNormal"
            android:strokeWidth="3"
            android:strokeLineCap="round"
            android:strokeLineJoin="round" />
    </group>
    <group>
        <path
            android:name="box3"
            android:pathData="m187,147l-1,55l-49,-1l2,-53l48,0z"
            android:stroke="#FF000000"
            android:strokeWidth="4" />
            android:stroke="?attr/android:colorControlNormal"
            android:strokeWidth="10"
            android:strokeLineCap="round"
            android:strokeLineJoin="round" />
    </group>
    <group>
        <path
            android:name="box4"
            android:pathData="m248,74l0,164l-177,0l1,-165l173,-1l3,2z"
            android:stroke="#FF000000"
            android:strokeWidth="30" />
            android:stroke="?attr/android:colorControlNormal"
            android:strokeWidth="30"
            android:strokeLineCap="round"
            android:strokeLineJoin="round" />
    </group>

    <animation