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

Commit 31ff02ec authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix qs tile drawing in edit QS panel" into oc-dr1-dev

parents fa62d79a 929bd54c
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ public class SlashDrawable extends Drawable {
    private boolean mSlashed;
    private Mode mTintMode;
    private ColorStateList mTintList;
    private boolean mAnimationEnabled = true;

    public SlashDrawable(Drawable d) {
        mDrawable = d;
@@ -97,6 +98,10 @@ public class SlashDrawable extends Drawable {
        invalidateSelf();
    }

    public void setAnimationEnabled(boolean enabled) {
        mAnimationEnabled = enabled;
    }

    // Animate this value on change
    private float mCurrentSlashLength;
    private final FloatProperty mSlashLengthProp = new FloatProperty<SlashDrawable>("slashLength") {
@@ -119,12 +124,15 @@ public class SlashDrawable extends Drawable {
        final float end = mSlashed ? SLASH_HEIGHT / SCALE : 0f;
        final float start = mSlashed ? 0f : SLASH_HEIGHT / SCALE;

        if (mAnimationEnabled) {
            ObjectAnimator anim = ObjectAnimator.ofFloat(this, mSlashLengthProp, start, end);
        anim.addUpdateListener((ValueAnimator valueAnimator) -> {
            invalidateSelf();
        });
            anim.addUpdateListener((ValueAnimator valueAnimator) -> invalidateSelf());
            anim.setDuration(QS_ANIM_LENGTH);
            anim.start();
        } else {
            mCurrentSlashLength = end;
            invalidateSelf();
        }
    }

    @Override
+7 −3
Original line number Diff line number Diff line
@@ -98,10 +98,14 @@ public class QSIconViewImpl extends QSIconView {
                d.setAutoMirrored(false);
                d.setLayoutDirection(getLayoutDirection());
            }

            if (iv instanceof SlashImageView) {
                ((SlashImageView) iv).setAnimationEnabled(shouldAnimate);
                ((SlashImageView) iv).setState(state.slash, d);
            } else {
                iv.setImageDrawable(d);
            if (state.slash != null && iv instanceof SlashImageView) {
                ((SlashImageView) iv).setState(state.slash);
            }

            iv.setTag(R.id.qs_icon_tag, state.icon);
            iv.setTag(R.id.qs_slash_tag, state.slash);
            iv.setPadding(0, padding, 0, padding);
+20 −1
Original line number Diff line number Diff line
@@ -14,8 +14,10 @@

package com.android.systemui.qs.tileimpl;

import android.annotation.Nullable;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.widget.ImageView;

import com.android.internal.annotations.VisibleForTesting;
@@ -26,6 +28,7 @@ public class SlashImageView extends ImageView {

    @VisibleForTesting
    protected SlashDrawable mSlash;
    private boolean mAnimationEnabled = true;

    public SlashImageView(Context context) {
        super(context);
@@ -34,6 +37,7 @@ public class SlashImageView extends ImageView {
    private void ensureSlashDrawable() {
        if (mSlash == null) {
            mSlash = new SlashDrawable(getDrawable());
            mSlash.setAnimationEnabled(mAnimationEnabled);
            super.setImageDrawable(mSlash);
        }
    }
@@ -46,13 +50,28 @@ public class SlashImageView extends ImageView {
        } else if (mSlash == null) {
            super.setImageDrawable(drawable);
        } else {
            mSlash.setAnimationEnabled(mAnimationEnabled);
            mSlash.setDrawable(drawable);
        }
    }

    public void setState(SlashState slashState) {
    public void setAnimationEnabled(boolean enabled) {
        mAnimationEnabled = enabled;
    }

    private void setSlashState(@NonNull SlashState slashState) {
        ensureSlashDrawable();
        mSlash.setRotation(slashState.rotation);
        mSlash.setSlashed(slashState.isSlashed);
    }

    public void setState(@Nullable SlashState state, @Nullable Drawable drawable) {
        if (state != null) {
            setImageDrawable(drawable);
            setSlashState(state);
        } else {
            mSlash = null;
            setImageDrawable(drawable);
        }
    }
}
+17 −4
Original line number Diff line number Diff line
@@ -38,16 +38,29 @@ public class SlashImageViewTest extends SysuiTestCase {
    private TestableSlashImageView mSlashView;

    @Test
    public void testSetSlashStateCreatesSlashDrawable() {
    public void testSetNonNullSlashStateCreatesSlashDrawable() {
        SlashState mockState = mock(SlashState.class);
        Drawable mockDrawable = mock(Drawable.class);
        mSlashView = new TestableSlashImageView(mContext);
        assertTrue(mSlashView.getSlashDrawable() == null);

        mSlashView.setImageDrawable(mockDrawable);
        mSlashView.setState(mockState);
        mSlashView.setState(mockState, mockDrawable);

        assertTrue(mSlashView.getSlashDrawable() != null);
    }

    @Test
    public void testSetNullSlashStateRemovesSlashDrawable() {
        SlashState mockState = mock(SlashState.class);
        Drawable mockDrawable = mock(Drawable.class);
        mSlashView = new TestableSlashImageView(mContext);
        mSlashView.setState(mockState, mockDrawable);

        assertTrue(mSlashView.getSlashDrawable() != null);

        mSlashView.setState(null, mockDrawable);

        assertTrue(mSlashView.getSlashDrawable() == null);
    }

    @Test
@@ -57,7 +70,7 @@ public class SlashImageViewTest extends SysuiTestCase {

        mSlashView = new TestableSlashImageView(mContext);
        mSlashView.setImageDrawable(mockDrawable);
        mSlashView.setState(mockState);
        mSlashView.setState(mockState, mockDrawable);
        mSlashView.setImageDrawable(null);

        assertTrue(mSlashView.getSlashDrawable() == null);