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

Commit 93f89471 authored by Roman Birg's avatar Roman Birg
Browse files

SystemUI: disable visualizers during power save mode



Change-Id: I2ab4502d2654d1bcfe19782a600fe35585085b9a
Signed-off-by: default avatarRoman Birg <roman@cyngn.com>
parent 3ba66f50
Loading
Loading
Loading
Loading
+36 −11
Original line number Diff line number Diff line
@@ -18,8 +18,10 @@ package com.android.systemui.qs.tiles;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Paint;
@@ -30,6 +32,7 @@ import android.media.session.MediaSession;
import android.media.session.MediaSessionManager;
import android.media.session.PlaybackState;
import android.os.AsyncTask;
import android.os.PowerManager;
import android.view.Gravity;
import android.view.View;
import android.widget.FrameLayout;
@@ -58,6 +61,18 @@ public class VisualizerTile extends QSTile<QSTile.State>
    private boolean mLinked;
    private boolean mIsAnythingPlaying;
    private boolean mListening;
    private boolean mPowerSaveModeEnabled;

    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (PowerManager.ACTION_POWER_SAVE_MODE_CHANGING.equals(intent.getAction())) {
                mPowerSaveModeEnabled = intent.getBooleanExtra(PowerManager.EXTRA_POWER_SAVE_MODE,
                        false);
                checkIfPlaying();
            }
        }
    };

    public VisualizerTile(Host host) {
        super(host);
@@ -66,15 +81,23 @@ public class VisualizerTile extends QSTile<QSTile.State>
        mKeyguardMonitor = host.getKeyguardMonitor();
        mKeyguardMonitor.addCallback(this);

        mContext.registerReceiver(mReceiver,
                new IntentFilter(PowerManager.ACTION_POWER_SAVE_MODE_CHANGING));
        PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
        mPowerSaveModeEnabled = pm.isPowerSaveMode();

        // initialize state
        if (!mPowerSaveModeEnabled) {
            List<MediaController> activeSessions = mMediaSessionManager.getActiveSessions(null);
            for (MediaController activeSession : activeSessions) {
                PlaybackState playbackState = activeSession.getPlaybackState();
            if (playbackState != null && playbackState.getState() == PlaybackState.STATE_PLAYING) {
                if (playbackState != null && playbackState.getState()
                        == PlaybackState.STATE_PLAYING) {
                    mIsAnythingPlaying = true;
                    break;
                }
            }
        }
        if (mIsAnythingPlaying && !mLinked) {
            AsyncTask.execute(mLinkVisualizer);
        } else if (!mIsAnythingPlaying && mLinked) {
@@ -182,17 +205,19 @@ public class VisualizerTile extends QSTile<QSTile.State>
        }
        mCallbacks.clear();
        mKeyguardMonitor.removeCallback(this);
        mContext.unregisterReceiver(mReceiver);
    }


    private void checkIfPlaying() {
        boolean anythingPlaying = false;
        if (!mPowerSaveModeEnabled) {
            for (Map.Entry<MediaSession.Token, CallbackInfo> entry : mCallbacks.entrySet()) {
                if (entry.getValue().isPlaying()) {
                    anythingPlaying = true;
                    break;
                }
            }
        }
        if (anythingPlaying != mIsAnythingPlaying) {
            mIsAnythingPlaying = anythingPlaying;
            if (mIsAnythingPlaying && !mLinked) {
+26 −2
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import android.graphics.drawable.InsetDrawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.PowerManager;
import android.os.RemoteException;
import android.os.UserHandle;
import android.provider.MediaStore;
@@ -126,6 +127,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
    private boolean mScreenOn;
    private boolean mLinked;
    private boolean mVisualizerEnabled;
    private boolean mPowerSaveModeEnabled;
    private SettingsObserver mSettingsObserver;

    public KeyguardBottomAreaView(Context context) {
@@ -145,7 +147,6 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
        super(context, attrs, defStyleAttr, defStyleRes);
        mTrustDrawable = new TrustDrawable(mContext);
        mSettingsObserver = new SettingsObserver(new Handler());
        mSettingsObserver.observe();
    }

    private AccessibilityDelegate mAccessibilityDelegate = new AccessibilityDelegate() {
@@ -477,9 +478,19 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
        }
    }

    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        mContext.registerReceiver(mReceiver, new IntentFilter(
                PowerManager.ACTION_POWER_SAVE_MODE_CHANGING));
        mSettingsObserver.observe();
    }

    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        mSettingsObserver.unobserve();
        mContext.unregisterReceiver(mReceiver);
        mTrustDrawable.stop();
        requestVisualizer(false, 0);
    }
@@ -616,6 +627,19 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
        }
    };

    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (PowerManager.ACTION_POWER_SAVE_MODE_CHANGING.equals(intent.getAction())) {
                mPowerSaveModeEnabled = intent.getBooleanExtra(PowerManager.EXTRA_POWER_SAVE_MODE,
                        false);
                removeCallbacks(mStartVisualizer);
                removeCallbacks(mStopVisualizer);
                post(mPowerSaveModeEnabled ? mStopVisualizer : mStartVisualizer);
            }
        }
    };

    private final KeyguardUpdateMonitorCallback mUpdateMonitorCallback =
            new KeyguardUpdateMonitorCallback() {
        @Override
@@ -678,7 +702,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
    }

    public void requestVisualizer(boolean show, int delay) {
        if (mVisualizer == null || !mVisualizerEnabled) {
        if (mVisualizer == null || !mVisualizerEnabled || mPowerSaveModeEnabled) {
            return;
        }
        removeCallbacks(mStartVisualizer);