Loading services/core/java/com/android/server/wm/BlurController.java +40 −4 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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; } Loading services/core/java/com/android/server/wm/WindowManagerService.java +3 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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() { Loading Loading
services/core/java/com/android/server/wm/BlurController.java +40 −4 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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; } Loading
services/core/java/com/android/server/wm/WindowManagerService.java +3 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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() { Loading