diff options
2 files changed, 45 insertions, 6 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java index 8203987cd7d6..367684faa621 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java @@ -83,7 +83,6 @@ import android.os.SystemProperties; import android.os.Trace; import android.os.UserHandle; import android.provider.Settings; -import android.service.dreams.DreamService; import android.service.dreams.IDreamManager; import android.service.notification.StatusBarNotification; import android.text.TextUtils; @@ -780,7 +779,8 @@ public class CentralSurfacesImpl extends CoreStartable implements InteractionJankMonitor jankMonitor, DeviceStateManager deviceStateManager, DreamOverlayStateController dreamOverlayStateController, - WiredChargingRippleController wiredChargingRippleController) { + WiredChargingRippleController wiredChargingRippleController, + IDreamManager dreamManager) { super(context); mNotificationsController = notificationsController; mFragmentService = fragmentService; @@ -871,6 +871,7 @@ public class CentralSurfacesImpl extends CoreStartable implements mLockscreenShadeTransitionController = lockscreenShadeTransitionController; mStartingSurfaceOptional = startingSurfaceOptional; mNotifPipelineFlags = notifPipelineFlags; + mDreamManager = dreamManager; lockscreenShadeTransitionController.setCentralSurfaces(this); statusBarWindowStateController.addListener(this::onStatusBarWindowStateChanged); @@ -924,8 +925,6 @@ public class CentralSurfacesImpl extends CoreStartable implements SysuiStatusBarStateController.RANK_STATUS_BAR); mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); - mDreamManager = IDreamManager.Stub.asInterface( - ServiceManager.checkService(DreamService.DREAM_SERVICE)); mDisplay = mContext.getDisplay(); mDisplayId = mDisplay.getDisplayId(); @@ -1792,6 +1791,12 @@ public class CentralSurfacesImpl extends CoreStartable implements collapseShade(); } + // We should exit the dream to prevent the activity from starting below the + // dream. + if (mKeyguardUpdateMonitor.isDreaming()) { + awakenDreams(); + } + mActivityLaunchAnimator.startIntentWithAnimation(controller, animate, intent.getPackage(), showOverLockscreenWhenLocked, (adapter) -> TaskStackBuilder .create(mContext) @@ -2731,6 +2736,10 @@ public class CentralSurfacesImpl extends CoreStartable implements mStatusBarKeyguardViewManager.dismissWithAction(action, cancelAction, afterKeyguardGone); } else { + // If the keyguard isn't showing but the device is dreaming, we should exit the dream. + if (mKeyguardUpdateMonitor.isDreaming()) { + awakenDreams(); + } action.onDismiss(); } } @@ -3964,7 +3973,7 @@ public class CentralSurfacesImpl extends CoreStartable implements protected WindowManager mWindowManager; protected IWindowManager mWindowManagerService; - private IDreamManager mDreamManager; + private final IDreamManager mDreamManager; protected Display mDisplay; private int mDisplayId; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java index d364505445f0..16f934b5af59 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java @@ -477,7 +477,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase { mJankMonitor, mDeviceStateManager, mDreamOverlayStateController, - mWiredChargingRippleController); + mWiredChargingRippleController, mDreamManager); when(mKeyguardViewMediator.registerCentralSurfaces( any(CentralSurfacesImpl.class), any(NotificationPanelViewController.class), @@ -534,6 +534,36 @@ public class CentralSurfacesImplTest extends SysuiTestCase { } @Test + public void executeRunnableDismissingKeyguard_dreaming_notShowing() throws RemoteException { + when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(false); + when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false); + when(mKeyguardUpdateMonitor.isDreaming()).thenReturn(true); + + mCentralSurfaces.executeRunnableDismissingKeyguard(() -> {}, + /* cancelAction= */ null, + /* dismissShade= */ false, + /* afterKeyguardGone= */ false, + /* deferred= */ false); + mUiBgExecutor.runAllReady(); + verify(mDreamManager, times(1)).awaken(); + } + + @Test + public void executeRunnableDismissingKeyguard_notDreaming_notShowing() throws RemoteException { + when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(false); + when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false); + when(mKeyguardUpdateMonitor.isDreaming()).thenReturn(false); + + mCentralSurfaces.executeRunnableDismissingKeyguard(() -> {}, + /* cancelAction= */ null, + /* dismissShade= */ false, + /* afterKeyguardGone= */ false, + /* deferred= */ false); + mUiBgExecutor.runAllReady(); + verify(mDreamManager, never()).awaken(); + } + + @Test public void lockscreenStateMetrics_notShowing() { // uninteresting state, except that fingerprint must be non-zero when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(false); |