Merge "Add WM.setForceCrossWindowBlurDisabled TestApi" into sc-dev

This commit is contained in:
Galia Peycheva
2021-03-12 13:47:03 +00:00
committed by Android (Google) Code Review
6 changed files with 50 additions and 11 deletions

View File

@@ -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);

View File

@@ -816,4 +816,6 @@ interface IWindowManager
* @param listener the listener to be unregistered
*/
void unregisterCrossWindowBlurEnabledListener(ICrossWindowBlurEnabledListener listener);
void setForceCrossWindowBlurDisabled(boolean disable);
}

View File

@@ -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.

View File

@@ -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) {
}
}
}

View File

@@ -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 notifyBlurEnabledChanged(boolean enabled) {
private void updateBlurEnabledLocked() {
final boolean newEnabled = CROSS_WINDOW_BLUR_SUPPORTED && !mBlurForceDisabled;
if (mBlurEnabled == newEnabled) {
return;
}
mBlurEnabled = newEnabled;
notifyBlurEnabledChangedLocked(newEnabled);
}
private void notifyBlurEnabledChangedLocked(boolean enabled) {
int i = mBlurEnabledListeners.beginBroadcast();
while (i > 0) {
i--;
@@ -71,6 +81,4 @@ final class BlurController {
}
mBlurEnabledListeners.finishBroadcast();
}
}

View File

@@ -5675,6 +5675,11 @@ public class WindowManagerService extends IWindowManager.Stub
mBlurController.unregisterCrossWindowBlurEnabledListener(listener);
}
@Override
public void setForceCrossWindowBlurDisabled(boolean disable) {
mBlurController.setForceCrossWindowBlurDisabled(disable);
}
// -------------------------------------------------------------
// Internals
// -------------------------------------------------------------