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

Commit 60f71b5b authored by Galia Peycheva's avatar Galia Peycheva Committed by Android (Google) Code Review
Browse files

Merge "Disable blurs during battery saver mode" into sc-dev

parents 1ea5fd3a 3e458c4f
Loading
Loading
Loading
Loading
+40 −4
Original line number Diff line number Diff line
@@ -18,24 +18,52 @@ package com.android.server.wm;

import static android.view.CrossWindowBlurListeners.CROSS_WINDOW_BLUR_SUPPORTED;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.os.PowerManager;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.view.ICrossWindowBlurEnabledListener;

import com.android.internal.annotations.GuardedBy;

/**
 * Keeps track of the different factors that determine whether cross-window blur is enabled
 * or disabled. Also keeps a list of all interested listeners and notifies them when the
 * blur enabled state changes.
 */
final class BlurController {

    private final PowerManager mPowerManager;
    private final RemoteCallbackList<ICrossWindowBlurEnabledListener>
            mBlurEnabledListeners = new RemoteCallbackList<>();
    // We don't use the WM global lock, because the BlurController is not involved in window
    // drawing and only receives binder calls that don't need synchronization with the rest of WM
    private final Object mLock = new Object();
    @GuardedBy("mLock")
    boolean mBlurEnabled;
    @GuardedBy("mLock")
    boolean mBlurForceDisabled;
    @GuardedBy("mLock")
    boolean mInBatterySaverMode;

    BlurController() {
        mBlurEnabled = CROSS_WINDOW_BLUR_SUPPORTED;
    BlurController(Context context, PowerManager powerManager) {
        mPowerManager = powerManager;
        mInBatterySaverMode = mPowerManager.isPowerSaveMode();
        updateBlurEnabledLocked();

        IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
        filter.addAction(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED);
        context.registerReceiverForAllUsers(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (PowerManager.ACTION_POWER_SAVE_MODE_CHANGED.equals(intent.getAction())) {
                    setBatterySaverEnabled(mPowerManager.isPowerSaveMode());
                }
            }
        }, filter, null, null);
    }

    boolean registerCrossWindowBlurEnabledListener(ICrossWindowBlurEnabledListener listener) {
@@ -59,8 +87,16 @@ final class BlurController {

    }

    void setBatterySaverEnabled(boolean enabled) {
        synchronized (mLock) {
            mInBatterySaverMode = enabled;
            updateBlurEnabledLocked();
        }
    }

    private void updateBlurEnabledLocked() {
        final boolean newEnabled = CROSS_WINDOW_BLUR_SUPPORTED && !mBlurForceDisabled;
        final boolean newEnabled = CROSS_WINDOW_BLUR_SUPPORTED && !mBlurForceDisabled
                && !mInBatterySaverMode;
        if (mBlurEnabled == newEnabled) {
            return;
        }
+3 −1
Original line number Diff line number Diff line
@@ -731,7 +731,7 @@ public class WindowManagerService extends IWindowManager.Stub

    final TaskSnapshotController mTaskSnapshotController;

    final BlurController mBlurController = new BlurController();
    final BlurController mBlurController;

    boolean mIsTouchDevice;
    boolean mIsFakeTouchDevice;
@@ -1418,6 +1418,8 @@ public class WindowManagerService extends IWindowManager.Stub
        setGlobalShadowSettings();
        mAnrController = new AnrController(this);
        mStartingSurfaceController = new StartingSurfaceController(this);

        mBlurController = new BlurController(mContext, mPowerManager);
    }

    DisplayAreaPolicy.Provider getDisplayAreaPolicyProvider() {