summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/test-current.txt1
-rw-r--r--core/java/android/view/IWindowManager.aidl2
-rw-r--r--core/java/android/view/WindowManager.java14
-rw-r--r--core/java/android/view/WindowManagerImpl.java9
-rw-r--r--services/core/java/com/android/server/wm/BlurController.java30
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java5
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
// -------------------------------------------------------------