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

Commit 1b6e856e authored by Alan Viverette's avatar Alan Viverette
Browse files

Optimize use of layers in ripple, update dialog styling

BUG: 15474733
BUG: 15473856
Change-Id: I7c17865c7b2d4aad0fc3660ffac90e9f7ce8fda9
parent 19dba9a3
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -46,4 +46,19 @@ please see themes_device_defaults.xml.
    <style name="Theme.Holo.Light.DialogWhenLarge.NoActionBar"
            parent="@android:style/Theme.Holo.Light.Dialog.NoActionBar.FixedSize">
    </style>

    <style name="Theme.Material.DialogWhenLarge"
            parent="@android:style/Theme.Material.Dialog.FixedSize">
        <item name="preferencePanelStyle">@style/PreferencePanel.Dialog</item>
    </style>
    <style name="Theme.Material.DialogWhenLarge.NoActionBar"
            parent="@android:style/Theme.Material.Dialog.NoActionBar.FixedSize">
        <item name="preferencePanelStyle">@style/PreferencePanel.Dialog</item>
    </style>
    <style name="Theme.Material.Light.DialogWhenLarge"
            parent="@android:style/Theme.Material.Light.Dialog.FixedSize">
    </style>
    <style name="Theme.Material.Light.DialogWhenLarge.NoActionBar"
            parent="@android:style/Theme.Material.Light.Dialog.NoActionBar.FixedSize">
    </style>
</resources>
+3 −5
Original line number Diff line number Diff line
@@ -296,8 +296,8 @@ please see styles_device_defaults.xml.
        <item name="textAllCaps">@bool/config_actionMenuItemAllCaps</item>
    </style>

    <style name="TextAppearance.Material.WindowTitle" parent="TextAppearance.Material.Headline" />
    <style name="TextAppearance.Material.DialogWindowTitle" parent="TextAppearance.Material.Headline" />
    <style name="TextAppearance.Material.WindowTitle" parent="TextAppearance.Material.Title" />
    <style name="TextAppearance.Material.DialogWindowTitle" parent="TextAppearance.Material.Title" />

    <style name="TextAppearance.Material.CalendarViewWeekDayView" parent="TextAppearance.Material.Small">
        <item name="textStyle">bold</item>
@@ -966,8 +966,6 @@ please see styles_device_defaults.xml.
        <item name="textAppearance">@style/TextAppearance.Material.DialogWindowTitle</item>
    </style>

    <style name="DialogWindowTitle.Material.Light">
        <item name="textAppearance">@style/TextAppearance.Material.DialogWindowTitle</item>
    </style>
    <style name="DialogWindowTitle.Material.Light" />

</resources>
+2 −2
Original line number Diff line number Diff line
@@ -236,7 +236,7 @@ class Ripple {
        // Cache the paint alpha so we can restore it later.
        final int paintAlpha = p.getAlpha();

        final int outerAlpha = (int) (255 * mOuterOpacity + 0.5f);
        final int outerAlpha = (int) (paintAlpha * mOuterOpacity + 0.5f);
        if (outerAlpha > 0 && mOuterRadius > 0) {
            p.setAlpha(outerAlpha);
            p.setStyle(Style.FILL);
@@ -244,7 +244,7 @@ class Ripple {
            hasContent = true;
        }

        final int alpha = (int) (255 * mOpacity + 0.5f);
        final int alpha = (int) (paintAlpha * mOpacity + 0.5f);
        final float radius = MathUtils.lerp(0, mOuterRadius, mTweenRadius);
        if (alpha > 0 && radius > 0) {
            final float x = MathUtils.lerp(mStartingX - mBounds.exactCenterX(), mOuterX, mTweenX);
+25 −23
Original line number Diff line number Diff line
@@ -172,16 +172,20 @@ public class RippleDrawable extends LayerDrawable {
    protected boolean onStateChange(int[] stateSet) {
        super.onStateChange(stateSet);

        // TODO: This would make more sense in a StateListDrawable.
        boolean active = false;
        boolean enabled = false;
        final int N = stateSet.length;
        for (int i = 0; i < N; i++) {
            if (stateSet[i] == R.attr.state_enabled) {
                enabled = true;
            }
            if (stateSet[i] == R.attr.state_focused
                    || stateSet[i] == R.attr.state_pressed) {
                active = true;
                break;
            }
        }
        setActive(active);
        setActive(active && enabled);

        // Update the paint color. Only applicable when animated in software.
        if (mRipplePaint != null && mState.mTint != null) {
@@ -471,16 +475,21 @@ public class RippleDrawable extends LayerDrawable {

    @Override
    public void draw(Canvas canvas) {
        final Rect bounds = isProjected() ? getDirtyBounds() : getBounds();
        final boolean isProjected = isProjected();
        final boolean hasMask = mMask != null;
        final boolean drawNonMaskContent = mLayerState.mNum > (hasMask ? 1 : 0);
        final boolean drawMask = hasMask && mMask.getOpacity() != PixelFormat.OPAQUE;
        final Rect bounds = isProjected ? getDirtyBounds() : getBounds();

        // Draw the content into a layer first.
        final int contentLayer = drawContentLayer(canvas, bounds, SRC_OVER);
        // If we have content, draw it into a layer first.
        final int contentLayer = drawNonMaskContent ?
                drawContentLayer(canvas, bounds, SRC_OVER) : -1;

        // Next, draw the ripples into a layer.
        // Next, try to draw the ripples (into a layer if necessary).
        final int rippleLayer = drawRippleLayer(canvas, bounds, mState.mTintXfermode);

        // If we have ripples, draw the masking layer.
        if (rippleLayer >= 0) {
        // If we have ripples and a non-opaque mask, draw the masking layer.
        if (rippleLayer >= 0 && drawMask) {
            drawMaskingLayer(canvas, bounds, DST_IN);
        }

@@ -524,17 +533,14 @@ public class RippleDrawable extends LayerDrawable {
    }

    private int drawContentLayer(Canvas canvas, Rect bounds, PorterDuffXfermode mode) {
        final int count = mLayerState.mNum;
        if (count == 0 || (mMask != null && count == 1)) {
            return -1;
        }

        // TODO: We don't need a layer if all the content is opaque.
        final Paint maskingPaint = getMaskingPaint(mode);
        final int restoreToCount = canvas.saveLayer(bounds.left, bounds.top,
                bounds.right, bounds.bottom, maskingPaint);

        // Draw everything except the mask.
        final ChildDrawable[] array = mLayerState.mChildren;
        final int count = mLayerState.mNum;
        for (int i = 0; i < count; i++) {
            if (array[i].mId != R.id.mask) {
                array[i].mDrawable.draw(canvas);
@@ -559,14 +565,15 @@ public class RippleDrawable extends LayerDrawable {
            rippleARGB = Color.TRANSPARENT;
        }

        final int rippleAlpha = Color.alpha(rippleARGB);
        final int rippleColor = rippleARGB | (0xFF << 24);
        if (mRipplePaint == null) {
            mRipplePaint = new Paint();
            mRipplePaint.setAntiAlias(true);
        }

        final int rippleAlpha = Color.alpha(rippleARGB);
        final Paint ripplePaint = mRipplePaint;
        ripplePaint.setColor(rippleColor);
        ripplePaint.setColor(rippleARGB);
        ripplePaint.setAlpha(0xFF);

        boolean drewRipples = false;
        int restoreToCount = -1;
@@ -584,7 +591,6 @@ public class RippleDrawable extends LayerDrawable {
                maskingPaint.setAlpha(rippleAlpha);
                restoreToCount = canvas.saveLayer(bounds.left, bounds.top,
                        bounds.right, bounds.bottom, maskingPaint);
                maskingPaint.setAlpha(255);

                restoreTranslate = canvas.save();
                // Translate the canvas to the current hotspot bounds.
@@ -609,18 +615,13 @@ public class RippleDrawable extends LayerDrawable {
    }

    private int drawMaskingLayer(Canvas canvas, Rect bounds, PorterDuffXfermode mode) {
        final Drawable mask = mMask;
        if (mask == null) {
            return -1;
        }

        final int restoreToCount = canvas.saveLayer(bounds.left, bounds.top,
                bounds.right, bounds.bottom, getMaskingPaint(mode));

        // Ensure that DST_IN blends using the entire layer.
        canvas.drawColor(Color.TRANSPARENT);

        mask.draw(canvas);
        mMask.draw(canvas);

        return restoreToCount;
    }
@@ -630,6 +631,7 @@ public class RippleDrawable extends LayerDrawable {
            mMaskingPaint = new Paint();
        }
        mMaskingPaint.setXfermode(xfermode);
        mMaskingPaint.setAlpha(0xFF);
        return mMaskingPaint;
    }