summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Galia Peycheva <galinap@google.com> 2021-04-15 08:20:06 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2021-04-15 08:20:06 +0000
commit60f71b5b01f435011bb464624826ec339d493ee1 (patch)
treeb28165eaa516cb5195315f27658b23c96812a506
parent1ea5fd3ae974a47400bc584b5439e7fccb680d58 (diff)
parent3e458c4ffd4fbe3dd4362d0be92bad7762485bc9 (diff)
Merge "Disable blurs during battery saver mode" into sc-dev
-rw-r--r--services/core/java/com/android/server/wm/BlurController.java44
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java4
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() {