diff options
| -rw-r--r-- | core/api/test-current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/view/IWindowManager.aidl | 2 | ||||
| -rw-r--r-- | core/java/android/view/WindowManager.java | 14 | ||||
| -rw-r--r-- | core/java/android/view/WindowManagerImpl.java | 9 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/BlurController.java | 30 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 5 |
6 files changed, 50 insertions, 11 deletions
diff --git a/core/api/test-current.txt b/core/api/test-current.txt index a7ca44cd4a5c..e832571ba499 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -2548,6 +2548,7 @@ package android.view { method public default int getDisplayImePolicy(int); method public default void holdLock(android.os.IBinder, int); method public default void setDisplayImePolicy(int, int); + method public default void setForceCrossWindowBlurDisabled(boolean); method public default void setShouldShowSystemDecors(int, boolean); method public default void setShouldShowWithInsecureKeyguard(int, boolean); method public default boolean shouldShowSystemDecors(int); diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl index 54778007c6ff..b345b2e58252 100644 --- a/core/java/android/view/IWindowManager.aidl +++ b/core/java/android/view/IWindowManager.aidl @@ -816,4 +816,6 @@ interface IWindowManager * @param listener the listener to be unregistered */ void unregisterCrossWindowBlurEnabledListener(ICrossWindowBlurEnabledListener listener); + + void setForceCrossWindowBlurDisabled(boolean disable); } diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index 7338c7d9a581..818a2b04b5c0 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -873,6 +873,20 @@ public interface WindowManager extends ViewManager { default void removeCrossWindowBlurEnabledListener(@NonNull Consumer<Boolean> listener) { } + /** + * Disables cross-window blurs device-wide. This includes window blur behind + * (see {@link LayoutParams#setBlurBehindRadius}) and window background blur + * (see {@link Window#setBackgroundBlurRadius}). + * + * @param disable specifies whether to disable the blur. Note that calling this + * with 'disable=false' will not enable blurs if there is something + * else disabling blurs. + * @hide + */ + @TestApi + default void setForceCrossWindowBlurDisabled(boolean disable) { + } + public static class LayoutParams extends ViewGroup.LayoutParams implements Parcelable { /** * X position for this window. With the default gravity it is ignored. diff --git a/core/java/android/view/WindowManagerImpl.java b/core/java/android/view/WindowManagerImpl.java index b39870738d68..e37522bc9986 100644 --- a/core/java/android/view/WindowManagerImpl.java +++ b/core/java/android/view/WindowManagerImpl.java @@ -317,4 +317,13 @@ public final class WindowManagerImpl implements WindowManager { public void removeCrossWindowBlurEnabledListener(@NonNull Consumer<Boolean> listener) { CrossWindowBlurListeners.getInstance().removeListener(listener); } + + @Override + public void setForceCrossWindowBlurDisabled(boolean disable) { + try { + WindowManagerGlobal.getWindowManagerService() + .setForceCrossWindowBlurDisabled(disable); + } catch (RemoteException e) { + } + } } diff --git a/services/core/java/com/android/server/wm/BlurController.java b/services/core/java/com/android/server/wm/BlurController.java index 13295e8aca02..128d452c3018 100644 --- a/services/core/java/com/android/server/wm/BlurController.java +++ b/services/core/java/com/android/server/wm/BlurController.java @@ -22,12 +22,17 @@ import android.os.RemoteCallbackList; import android.os.RemoteException; import android.view.ICrossWindowBlurEnabledListener; +import com.android.internal.annotations.GuardedBy; + final class BlurController { private final RemoteCallbackList<ICrossWindowBlurEnabledListener> mBlurEnabledListeners = new RemoteCallbackList<>(); private final Object mLock = new Object(); + @GuardedBy("mLock") boolean mBlurEnabled; + @GuardedBy("mLock") + boolean mBlurForceDisabled; BlurController() { mBlurEnabled = CROSS_WINDOW_BLUR_SUPPORTED; @@ -46,19 +51,24 @@ final class BlurController { mBlurEnabledListeners.unregister(listener); } - private void updateBlurEnabled() { - // TODO: add other factors disabling blurs - final boolean newEnabled = CROSS_WINDOW_BLUR_SUPPORTED; + void setForceCrossWindowBlurDisabled(boolean disable) { synchronized (mLock) { - if (mBlurEnabled == newEnabled) { - return; - } - mBlurEnabled = newEnabled; - notifyBlurEnabledChanged(newEnabled); + mBlurForceDisabled = disable; + updateBlurEnabledLocked(); + } + + } + + private void updateBlurEnabledLocked() { + final boolean newEnabled = CROSS_WINDOW_BLUR_SUPPORTED && !mBlurForceDisabled; + if (mBlurEnabled == newEnabled) { + return; } + mBlurEnabled = newEnabled; + notifyBlurEnabledChangedLocked(newEnabled); } - private void notifyBlurEnabledChanged(boolean enabled) { + private void notifyBlurEnabledChangedLocked(boolean enabled) { int i = mBlurEnabledListeners.beginBroadcast(); while (i > 0) { i--; @@ -71,6 +81,4 @@ final class BlurController { } mBlurEnabledListeners.finishBroadcast(); } - - } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 3007f0fed2a0..b95674e511d5 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -5675,6 +5675,11 @@ public class WindowManagerService extends IWindowManager.Stub mBlurController.unregisterCrossWindowBlurEnabledListener(listener); } + @Override + public void setForceCrossWindowBlurDisabled(boolean disable) { + mBlurController.setForceCrossWindowBlurDisabled(disable); + } + // ------------------------------------------------------------- // Internals // ------------------------------------------------------------- |