diff options
4 files changed, 36 insertions, 8 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index 663582ede385..ffda2634cc35 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -137,6 +137,7 @@ import com.android.systemui.statusbar.phone.CentralSurfaces; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.ScreenOffAnimationController; +import com.android.systemui.statusbar.phone.ScrimController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.util.DeviceConfigProxy; @@ -847,6 +848,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable, @Override public void onLaunchAnimationStart(boolean isExpandingFullyAbove) { mOccludeAnimationPlaying = true; + mScrimControllerLazy.get().setOccludeAnimationPlaying(true); } @Override @@ -857,6 +859,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable, // Ensure keyguard state is set correctly if we're cancelled. mCentralSurfaces.updateIsKeyguard(); + mScrimControllerLazy.get().setOccludeAnimationPlaying(false); } @Override @@ -870,6 +873,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable, // Hide the keyguard now that we're done launching the occluding activity over // it. mCentralSurfaces.updateIsKeyguard(); + mScrimControllerLazy.get().setOccludeAnimationPlaying(false); mInteractionJankMonitor.end(CUJ_LOCKSCREEN_OCCLUSION); } @@ -1126,6 +1130,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable, private ScreenOnCoordinator mScreenOnCoordinator; private Lazy<ActivityLaunchAnimator> mActivityLaunchAnimator; + private Lazy<ScrimController> mScrimControllerLazy; /** * Injected constructor. See {@link KeyguardModule}. @@ -1156,7 +1161,8 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable, DreamOverlayStateController dreamOverlayStateController, Lazy<ShadeController> shadeControllerLazy, Lazy<NotificationShadeWindowController> notificationShadeWindowControllerLazy, - Lazy<ActivityLaunchAnimator> activityLaunchAnimator) { + Lazy<ActivityLaunchAnimator> activityLaunchAnimator, + Lazy<ScrimController> scrimControllerLazy) { mContext = context; mUserTracker = userTracker; mFalsingCollector = falsingCollector; @@ -1201,6 +1207,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable, mDreamOverlayStateController = dreamOverlayStateController; mActivityLaunchAnimator = activityLaunchAnimator; + mScrimControllerLazy = scrimControllerLazy; mPowerButtonY = context.getResources().getDimensionPixelSize( R.dimen.physical_power_button_center_screen_location_y); diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java b/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java index ef3c44340e57..47ef0fac17ab 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java @@ -54,6 +54,7 @@ import com.android.systemui.statusbar.NotificationShadeWindowController; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.ScreenOffAnimationController; +import com.android.systemui.statusbar.phone.ScrimController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.util.DeviceConfigProxy; @@ -113,7 +114,8 @@ public class KeyguardModule { DreamOverlayStateController dreamOverlayStateController, Lazy<ShadeController> shadeController, Lazy<NotificationShadeWindowController> notificationShadeWindowController, - Lazy<ActivityLaunchAnimator> activityLaunchAnimator) { + Lazy<ActivityLaunchAnimator> activityLaunchAnimator, + Lazy<ScrimController> scrimControllerLazy) { return new KeyguardViewMediator( context, userTracker, @@ -142,7 +144,8 @@ public class KeyguardModule { dreamOverlayStateController, shadeController, notificationShadeWindowController, - activityLaunchAnimator); + activityLaunchAnimator, + scrimControllerLazy); } /** */ diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java index c527f30c424c..fb0d3e4406bf 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -110,6 +110,12 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump private boolean mClipsQsScrim; /** + * Whether an activity is launching over the lockscreen. During the launch animation, we want to + * delay certain scrim changes until after the animation ends. + */ + private boolean mOccludeAnimationPlaying = false; + + /** * The amount of progress we are currently in if we're transitioning to the full shade. * 0.0f means we're not transitioning yet, while 1 means we're all the way in the full * shade. @@ -733,6 +739,11 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump return mClipsQsScrim; } + public void setOccludeAnimationPlaying(boolean occludeAnimationPlaying) { + mOccludeAnimationPlaying = occludeAnimationPlaying; + applyAndDispatchState(); + } + private void setOrAdaptCurrentAnimation(@Nullable View scrim) { if (scrim == null) { return; @@ -772,11 +783,15 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump } if (mState == ScrimState.UNLOCKED || mState == ScrimState.DREAMING) { - // Darken scrim as you pull down the shade when unlocked, unless the shade is expanding - // because we're doing the screen off animation OR the shade is collapsing because - // we're playing the unlock animation + final boolean occluding = + mOccludeAnimationPlaying || mState.mLaunchingAffordanceWithPreview; + + // Darken scrim as it's pulled down while unlocked. If we're unlocked but playing the + // screen off/occlusion animations, ignore expansion changes while those animations + // play. if (!mScreenOffAnimationController.shouldExpandNotifications() - && !mAnimatingPanelExpansionOnUnlock) { + && !mAnimatingPanelExpansionOnUnlock + && !occluding) { float behindFraction = getInterpolatedFraction(); behindFraction = (float) Math.pow(behindFraction, 0.8f); if (mClipsQsScrim) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java index 45aaaa2418a1..d17e3744edc6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java @@ -65,6 +65,7 @@ import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.phone.CentralSurfaces; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.ScreenOffAnimationController; +import com.android.systemui.statusbar.phone.ScrimController; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.UserSwitcherController; @@ -112,6 +113,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase { private @Mock Lazy<NotificationShadeWindowController> mNotificationShadeWindowControllerLazy; private @Mock DreamOverlayStateController mDreamOverlayStateController; private @Mock ActivityLaunchAnimator mActivityLaunchAnimator; + private @Mock ScrimController mScrimController; private DeviceConfigProxy mDeviceConfig = new DeviceConfigProxyFake(); private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock()); @@ -314,7 +316,8 @@ public class KeyguardViewMediatorTest extends SysuiTestCase { mDreamOverlayStateController, () -> mShadeController, mNotificationShadeWindowControllerLazy, - () -> mActivityLaunchAnimator); + () -> mActivityLaunchAnimator, + () -> mScrimController); mViewMediator.start(); mViewMediator.registerCentralSurfaces(mCentralSurfaces, null, null, null, null, null); |