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

Commit 3e458c4f authored by Galia Peycheva's avatar Galia Peycheva
Browse files

Disable blurs during battery saver mode

Bug: 185240113
Test: m && flash && check app receives blur enabled/disabled events when
      battery saver mode is enabled/disabled

Change-Id: Icc4fea54194bdb79c163b57dc2b61feae1c382f5
parent bf05d0ee
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
@@ -730,7 +730,7 @@ public class WindowManagerService extends IWindowManager.Stub

    final TaskSnapshotController mTaskSnapshotController;

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

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

        mBlurController = new BlurController(mContext, mPowerManager);
    }

    DisplayAreaPolicy.Provider getDisplayAreaPolicyProvider() {