diff options
| author | 2021-04-15 08:20:06 +0000 | |
|---|---|---|
| committer | 2021-04-15 08:20:06 +0000 | |
| commit | 60f71b5b01f435011bb464624826ec339d493ee1 (patch) | |
| tree | b28165eaa516cb5195315f27658b23c96812a506 | |
| parent | 1ea5fd3ae974a47400bc584b5439e7fccb680d58 (diff) | |
| parent | 3e458c4ffd4fbe3dd4362d0be92bad7762485bc9 (diff) | |
Merge "Disable blurs during battery saver mode" into sc-dev
| -rw-r--r-- | services/core/java/com/android/server/wm/BlurController.java | 44 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 4 |
2 files changed, 43 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/BlurController.java b/services/core/java/com/android/server/wm/BlurController.java index 128d452c3018..d920267bb44d 100644 --- a/services/core/java/com/android/server/wm/BlurController.java +++ b/services/core/java/com/android/server/wm/BlurController.java @@ -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; } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 67edde140c04..c80a38fdb838 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -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() { |