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

Commit 71fe5db2 authored by Roman Birg's avatar Roman Birg
Browse files

SystemUI: more keyguard visualizer tweaks



- link and unlink in the background. this is an expensive operation and
  we should avoid running it on the main thread
- remove leftover getSystemService call
- keep track of whether QS is expanded to avoid starting visualizer when
  it is visible
- prefer light vibrant color from palette
- run palette generation async
- don't apply keyguard bitmap while visualizer is shown

Change-Id: I222a27df9438466423c63555041275e4bf153c64
Signed-off-by: default avatarRoman Birg <roman@cyngn.com>
parent 1ca33c1e
Loading
Loading
Loading
Loading
+45 −20
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.graphics.Color;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.graphics.Rect;
import android.os.AsyncTask;
import android.support.v7.graphics.Palette;
import android.util.AttributeSet;
import android.view.View;
@@ -39,7 +40,7 @@ import com.pheelicks.visualizer.renderer.Renderer;
/**
 * A view who contains media artwork.
 */
public class BackDropView extends FrameLayout {
public class BackDropView extends FrameLayout implements Palette.PaletteAsyncListener {
    private Runnable mOnVisibilityChangedRunnable;

    public BackDropView(Context context) {
@@ -81,6 +82,7 @@ public class BackDropView extends FrameLayout {
    private boolean mAnimating = false;
    private boolean mTouching = false;
    private boolean mPowerSaveMode = false;
    private boolean mQsExpanded = false;
    private int mColor;

    private VisualizerView mVisualizer;
@@ -90,10 +92,8 @@ public class BackDropView extends FrameLayout {
    private final Runnable mLinkVisualizer = new Runnable() {
        @Override
        public void run() {
            if (mVisualizer != null && !mLinked) {
            if (mVisualizer != null) {
                mVisualizer.link(0);
                mVisualizer.animate().alpha(1f).setDuration(300);
                mLinked = true;
            }
        }
    };
@@ -101,10 +101,8 @@ public class BackDropView extends FrameLayout {
    private final Runnable mUnlinkVisualizer = new Runnable() {
        @Override
        public void run() {
            if (mVisualizer != null && mLinked) {
                mVisualizer.animate().alpha(0f).setDuration(0);
            if (mVisualizer != null) {
                mVisualizer.unlink();
                mLinked = false;
            }
        }
    };
@@ -218,30 +216,49 @@ public class BackDropView extends FrameLayout {
        }
    }

    public void setBitmap(Bitmap bitmap) {
    public void setQsExpanded(boolean qsExpanded) {
        if (mQsExpanded != qsExpanded) {
            mQsExpanded = qsExpanded;
            checkStateChanged();
        }
    }

    @Override
    public void onGenerated(Palette palette) {
        int color = Color.TRANSPARENT;

        Palette p = Palette.generate(bitmap);
        color = p.getVibrantColor(color);
        if (color == Color.TRANSPARENT) {
            color = p.getLightVibrantColor(color);
        color = palette.getLightVibrantColor(color);
        if (color == Color.TRANSPARENT) {
                color = p.getDarkVibrantColor(color);
            color = palette.getVibrantColor(color);
            if (color == Color.TRANSPARENT) {
                    color = mContext.getResources().getColor(R.color.equalizer_fill_color);
                color = palette.getDarkVibrantColor(color);
            }
        }
        setVisualizerColor(color);
    }

    public void setBitmap(Bitmap bitmap) {
        if (bitmap != null) {
            Palette.generateAsync(bitmap, this);
        } else {
            setVisualizerColor(Color.TRANSPARENT);
        }
    }

    private void setVisualizerColor(int color) {
        if (color == Color.TRANSPARENT) {
            color = mContext.getResources().getColor(R.color.equalizer_fill_color);
        }
        if (mColor != color) {
            mColor = color;

            if (mLinked) {
                if (mVisualizerColorAnimator != null) {
                    mVisualizerColorAnimator.cancel();
                }
                mVisualizerColorAnimator = ObjectAnimator.ofArgb(mBarRenderer.mPaint, "color",
                        mBarRenderer.mPaint.getColor(), mColor);
                mVisualizerColorAnimator.setStartDelay(900);
                mVisualizerColorAnimator.setStartDelay(500);
                mVisualizerColorAnimator.setDuration(1200);
                mVisualizerColorAnimator.start();
            } else {
@@ -251,10 +268,18 @@ public class BackDropView extends FrameLayout {
    }

    private void checkStateChanged() {
        if (mVisible && mPlaying && !mAnimating && !mTouching && !mPowerSaveMode) {
            mLinkVisualizer.run();
        if (mVisible && mPlaying && !mAnimating && !mTouching && !mPowerSaveMode && !mQsExpanded) {
            if (!mLinked) {
                mVisualizer.animate().alpha(1f).setDuration(300);
                AsyncTask.execute(mLinkVisualizer);
                mLinked = true;
            }
        } else {
            mUnlinkVisualizer.run();
            if (mLinked) {
                mVisualizer.animate().alpha(0f).setDuration(0);
                AsyncTask.execute(mUnlinkVisualizer);
                mLinked = false;
            }
        }
    }
}
+4 −3
Original line number Diff line number Diff line
@@ -2349,13 +2349,11 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
            }
        }

        WallpaperManager wm = (WallpaperManager) mContext.getSystemService(
                Context.WALLPAPER_SERVICE);
        boolean keyguardVisible = (mState != StatusBarState.SHADE);
        boolean visualizerVisible = mVisualizerEnabled && keyguardVisible
                && (mMediaController != null);

        if (backdropBitmap == null && (mMediaMetadata == null || visualizerVisible)) {
        if (backdropBitmap == null && mMediaMetadata == null) {
            backdropBitmap = mKeyguardWallpaper;
        }

@@ -2625,6 +2623,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,

    public void setQsExpanded(boolean expanded) {
        mStatusBarWindowManager.setQsExpanded(expanded);
        if (mVisualizerEnabled && mState != StatusBarState.SHADE) {
            mBackdrop.setQsExpanded(expanded);
        }
    }

    public boolean isGoingToNotificationShade() {