diff --git a/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java b/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java index d7f2d7540e558..83fa994d2f05b 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java @@ -79,6 +79,7 @@ import com.android.systemui.shared.system.TaskStackChangeListeners; import com.android.systemui.shared.system.WindowManagerWrapper; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.NotificationRemoteInputManager; +import com.android.systemui.statusbar.NotificationShadeDepthController; import com.android.systemui.statusbar.phone.AutoHideController; import com.android.systemui.statusbar.phone.ConfigurationControllerImpl; import com.android.systemui.statusbar.phone.ShadeController; @@ -229,6 +230,7 @@ public class DependencyProvider { Lazy statusBarLazy, ShadeController shadeController, NotificationRemoteInputManager notificationRemoteInputManager, + NotificationShadeDepthController notificationShadeDepthController, SystemActions systemActions, @Main Handler mainHandler, UiEventLogger uiEventLogger, @@ -257,6 +259,7 @@ public class DependencyProvider { statusBarLazy, shadeController, notificationRemoteInputManager, + notificationShadeDepthController, systemActions, mainHandler, uiEventLogger, diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java index b21d311025ce9..7f42530916cf2 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java @@ -138,6 +138,7 @@ import com.android.systemui.statusbar.AutoHideUiElement; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.CommandQueue.Callbacks; import com.android.systemui.statusbar.NotificationRemoteInputManager; +import com.android.systemui.statusbar.NotificationShadeDepthController; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.notification.stack.StackStateAnimator; import com.android.systemui.statusbar.phone.AutoHideController; @@ -201,6 +202,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, private final UiEventLogger mUiEventLogger; private final NavigationBarA11yHelper mNavigationBarA11yHelper; private final UserTracker mUserTracker; + private final NotificationShadeDepthController mNotificationShadeDepthController; private Bundle mSavedState; private NavigationBarView mNavigationBarView; @@ -439,6 +441,25 @@ public class NavigationBar implements View.OnAttachStateChangeListener, } }; + private final NotificationShadeDepthController.DepthListener mDepthListener = + new NotificationShadeDepthController.DepthListener() { + boolean mHasBlurs; + + @Override + public void onWallpaperZoomOutChanged(float zoomOut) { + } + + @Override + public void onBlurRadiusChanged(int radius) { + boolean hasBlurs = radius != 0; + if (hasBlurs == mHasBlurs) { + return; + } + mHasBlurs = hasBlurs; + mNavigationBarView.setWindowHasBlurs(hasBlurs); + } + }; + public NavigationBar(Context context, WindowManager windowManager, Lazy assistManagerLazy, @@ -458,6 +479,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, Optional recentsOptional, Lazy statusBarLazy, ShadeController shadeController, NotificationRemoteInputManager notificationRemoteInputManager, + NotificationShadeDepthController notificationShadeDepthController, SystemActions systemActions, @Main Handler mainHandler, NavigationBarOverlayController navbarOverlayController, @@ -489,6 +511,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, mUiEventLogger = uiEventLogger; mNavigationBarA11yHelper = navigationBarA11yHelper; mUserTracker = userTracker; + mNotificationShadeDepthController = notificationShadeDepthController; mNavBarMode = mNavigationModeController.addListener(this); } @@ -554,6 +577,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, mIsCurrentUserSetup = mDeviceProvisionedController.isCurrentUserSetup(); mDeviceProvisionedController.addCallback(mUserSetupListener); + mNotificationShadeDepthController.addListener(mDepthListener); setAccessibilityFloatingMenuModeIfNeeded(); @@ -569,6 +593,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, mNavigationBarA11yHelper.removeA11yEventListener(mAccessibilityListener); mContentResolver.unregisterContentObserver(mAssistContentObserver); mDeviceProvisionedController.removeCallback(mUserSetupListener); + mNotificationShadeDepthController.removeListener(mDepthListener); DeviceConfig.removeOnPropertiesChangedListener(mOnPropertiesChangedListener); } diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java index 74f5022183e7e..aa5964bf5d3b8 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java @@ -60,6 +60,7 @@ import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.CommandQueue.Callbacks; import com.android.systemui.statusbar.NotificationRemoteInputManager; +import com.android.systemui.statusbar.NotificationShadeDepthController; import com.android.systemui.statusbar.phone.BarTransitions.TransitionMode; import com.android.systemui.statusbar.phone.ShadeController; import com.android.systemui.statusbar.phone.StatusBar; @@ -115,6 +116,7 @@ public class NavigationBarController implements Callbacks, private final DisplayManager mDisplayManager; private final NavigationBarOverlayController mNavBarOverlayController; private final TaskbarDelegate mTaskbarDelegate; + private final NotificationShadeDepthController mNotificationShadeDepthController; private int mNavMode; private boolean mIsTablet; private final UserTracker mUserTracker; @@ -149,6 +151,7 @@ public class NavigationBarController implements Callbacks, Lazy statusBarLazy, ShadeController shadeController, NotificationRemoteInputManager notificationRemoteInputManager, + NotificationShadeDepthController notificationShadeDepthController, SystemActions systemActions, @Main Handler mainHandler, UiEventLogger uiEventLogger, @@ -177,6 +180,7 @@ public class NavigationBarController implements Callbacks, mStatusBarLazy = statusBarLazy; mShadeController = shadeController; mNotificationRemoteInputManager = notificationRemoteInputManager; + mNotificationShadeDepthController = notificationShadeDepthController; mSystemActions = systemActions; mUiEventLogger = uiEventLogger; mHandler = mainHandler; @@ -370,6 +374,7 @@ public class NavigationBarController implements Callbacks, mStatusBarLazy, mShadeController, mNotificationRemoteInputManager, + mNotificationShadeDepthController, mSystemActions, mHandler, mNavBarOverlayController, diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java index 7af4853dd3f2d..4816f1cf8d6a6 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java @@ -413,6 +413,13 @@ public class NavigationBarView extends FrameLayout implements return super.onTouchEvent(event); } + /** + * If we're blurring the shade window. + */ + public void setWindowHasBlurs(boolean hasBlurs) { + mRegionSamplingHelper.setWindowHasBlurs(hasBlurs); + } + void onTransientStateChanged(boolean isTransient) { mEdgeBackGestureHandler.onNavBarTransientStateChanged(isTransient); diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/RegionSamplingHelper.java b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/RegionSamplingHelper.java index 70117eb6d2f08..560d89af8e920 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/RegionSamplingHelper.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/RegionSamplingHelper.java @@ -65,6 +65,7 @@ public class RegionSamplingHelper implements View.OnAttachStateChangeListener, private final float mLuminanceChangeThreshold; private boolean mFirstSamplingAfterStart; private boolean mWindowVisible; + private boolean mWindowHasBlurs; private SurfaceControl mRegisteredStopLayer = null; private ViewTreeObserver.OnDrawListener mUpdateOnDraw = new ViewTreeObserver.OnDrawListener() { @Override @@ -153,6 +154,7 @@ public class RegionSamplingHelper implements View.OnAttachStateChangeListener, boolean isSamplingEnabled = mSamplingEnabled && !mSamplingRequestBounds.isEmpty() && mWindowVisible + && !mWindowHasBlurs && (mSampledView.isAttachedToWindow() || mFirstSamplingAfterStart); if (isSamplingEnabled) { ViewRootImpl viewRootImpl = mSampledView.getViewRootImpl(); @@ -225,6 +227,14 @@ public class RegionSamplingHelper implements View.OnAttachStateChangeListener, updateSamplingListener(); } + /** + * If we're blurring the shade window. + */ + public void setWindowHasBlurs(boolean hasBlurs) { + mWindowHasBlurs = hasBlurs; + updateSamplingListener(); + } + public void dump(PrintWriter pw) { pw.println("RegionSamplingHelper:"); pw.println(" sampleView isAttached: " + mSampledView.isAttachedToWindow()); @@ -238,6 +248,7 @@ public class RegionSamplingHelper implements View.OnAttachStateChangeListener, pw.println(" mLastMedianLuma: " + mLastMedianLuma); pw.println(" mCurrentMedianLuma: " + mCurrentMedianLuma); pw.println(" mWindowVisible: " + mWindowVisible); + pw.println(" mWindowHasBlurs: " + mWindowHasBlurs); pw.println(" mWaitingOnDraw: " + mWaitingOnDraw); pw.println(" mRegisteredStopLayer: " + mRegisteredStopLayer); pw.println(" mIsDestroyed: " + mIsDestroyed); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt index 14570123e9035..a2048e21199ed 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt @@ -210,6 +210,7 @@ class NotificationShadeDepthController @Inject constructor( } listeners.forEach { it.onWallpaperZoomOutChanged(zoomOut) + it.onBlurRadiusChanged(blur) } notificationShadeWindowController.setBackgroundBlurRadius(blur) } @@ -513,5 +514,8 @@ class NotificationShadeDepthController @Inject constructor( * Current wallpaper zoom out, where 0 is the closest, and 1 the farthest */ fun onWallpaperZoomOutChanged(zoomOut: Float) + + @JvmDefault + fun onBlurRadiusChanged(blurRadius: Int) {} } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerTest.java index cfaa2e0dc55d9..e9a7c73558c87 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerTest.java @@ -55,6 +55,7 @@ import com.android.systemui.recents.Recents; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.NotificationRemoteInputManager; +import com.android.systemui.statusbar.NotificationShadeDepthController; import com.android.systemui.statusbar.phone.ShadeController; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper; @@ -107,6 +108,7 @@ public class NavigationBarControllerTest extends SysuiTestCase { () -> mock(StatusBar.class), mock(ShadeController.class), mock(NotificationRemoteInputManager.class), + mock(NotificationShadeDepthController.class), mock(SystemActions.class), Dependency.get(Dependency.MAIN_HANDLER), mock(UiEventLogger.class), diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTest.java index 6742599fff9ba..c606a430e325a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTest.java @@ -79,6 +79,7 @@ import com.android.systemui.recents.Recents; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.NotificationRemoteInputManager; +import com.android.systemui.statusbar.NotificationShadeDepthController; import com.android.systemui.statusbar.phone.ShadeController; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper; @@ -274,6 +275,7 @@ public class NavigationBarTest extends SysuiTestCase { () -> mock(StatusBar.class), mock(ShadeController.class), mock(NotificationRemoteInputManager.class), + mock(NotificationShadeDepthController.class), mock(SystemActions.class), mHandler, mock(NavigationBarOverlayController.class),