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

Commit ff77667c authored by Roman Birg's avatar Roman Birg
Browse files

SystemUI: workaround for visualizer flash on track change



Change-Id: I852c704816f1e56f239a38f00910132ad8363fcd
Signed-off-by: default avatarRoman Birg <roman@cyngn.com>
parent d2f90f5c
Loading
Loading
Loading
Loading
+49 −14
Original line number Diff line number Diff line
@@ -30,8 +30,6 @@ import android.graphics.Canvas;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.media.session.PlaybackState;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.PowerManager;
@@ -378,12 +376,15 @@ public class BackDropView extends FrameLayout implements Palette.PaletteAsyncLis
                }
            };

    private static class LockscreenBarEqRenderer extends Renderer {
    private class LockscreenBarEqRenderer extends Renderer {
        private int mDivisions;
        private Paint mPaint;
        private int mDbFuzz;
        private int mDbFuzzFactor;

        private boolean mDrawEmpty;
        int mFramesSinceLastEmptyRender;

        /**
         * Renders the FFT data as a series of lines, in histogram form
         *
@@ -411,6 +412,11 @@ public class BackDropView extends FrameLayout implements Palette.PaletteAsyncLis

        @Override
        public void onRender(Canvas canvas, FFTData data, Rect rect) {
            if (isDataEmpty(data)) {
                mDrawEmpty = true;
                mFramesSinceLastEmptyRender = 0;
            } else {
                mFramesSinceLastEmptyRender++;
                for (int i = 0; i < data.bytes.length / mDivisions; i++) {
                    mFFTPoints[i * 4] = i * 4 * mDivisions;
                    mFFTPoints[i * 4 + 2] = i * 4 * mDivisions;
@@ -422,11 +428,40 @@ public class BackDropView extends FrameLayout implements Palette.PaletteAsyncLis
                    mFFTPoints[i * 4 + 1] = rect.height();
                    mFFTPoints[i * 4 + 3] = rect.height() - ((dbValue * mDbFuzzFactor) + mDbFuzz);
                }
            }

             /*
              * When transitioning songs, we get a bunch of empty frames, followed by 1 frame
              * as the track switch occurs, then some more empty frames until the song starts.
              *
              * We skip the first frame in between empty frames here to avoid drawing
              * anything when we're switching songs
              */
            mDrawEmpty = mFramesSinceLastEmptyRender == 1;

            if (mFramesSinceLastEmptyRender == 1) {
                //
                mDrawEmpty = true;
            }
            if (mDrawEmpty) {
                mVisualizer.setDrawingEnabled(false);
            } else {
                mVisualizer.setDrawingEnabled(true);
                canvas.drawLines(mFFTPoints, mPaint);
            }
        }

        private boolean isDataEmpty(FFTData data) {
            for (int i = 0; i < data.bytes.length; i++) {
                if (data.bytes[i] != 0) {
                    return false;
                }
            }
            return true;
        }

    }

    private class SettingsObserver extends UserContentObserver {
        SettingsObserver(Handler handler) {
            super(handler);