Merge "Update scrim controller directly with occlude animation status." into tm-qpr-dev

This commit is contained in:
Josh Tsuji
2022-11-18 18:30:20 +00:00
committed by Android (Google) Code Review
4 changed files with 36 additions and 8 deletions

View File

@@ -137,6 +137,7 @@ import com.android.systemui.statusbar.phone.CentralSurfaces;
import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.ScreenOffAnimationController; 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.KeyguardStateController;
import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.util.DeviceConfigProxy; import com.android.systemui.util.DeviceConfigProxy;
@@ -851,6 +852,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
@Override @Override
public void onLaunchAnimationStart(boolean isExpandingFullyAbove) { public void onLaunchAnimationStart(boolean isExpandingFullyAbove) {
mOccludeAnimationPlaying = true; mOccludeAnimationPlaying = true;
mScrimControllerLazy.get().setOccludeAnimationPlaying(true);
} }
@Override @Override
@@ -861,6 +863,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
// Ensure keyguard state is set correctly if we're cancelled. // Ensure keyguard state is set correctly if we're cancelled.
mCentralSurfaces.updateIsKeyguard(); mCentralSurfaces.updateIsKeyguard();
mScrimControllerLazy.get().setOccludeAnimationPlaying(false);
} }
@Override @Override
@@ -874,6 +877,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
// Hide the keyguard now that we're done launching the occluding activity over // Hide the keyguard now that we're done launching the occluding activity over
// it. // it.
mCentralSurfaces.updateIsKeyguard(); mCentralSurfaces.updateIsKeyguard();
mScrimControllerLazy.get().setOccludeAnimationPlaying(false);
mInteractionJankMonitor.end(CUJ_LOCKSCREEN_OCCLUSION); mInteractionJankMonitor.end(CUJ_LOCKSCREEN_OCCLUSION);
} }
@@ -1138,6 +1142,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
private ScreenOnCoordinator mScreenOnCoordinator; private ScreenOnCoordinator mScreenOnCoordinator;
private Lazy<ActivityLaunchAnimator> mActivityLaunchAnimator; private Lazy<ActivityLaunchAnimator> mActivityLaunchAnimator;
private Lazy<ScrimController> mScrimControllerLazy;
/** /**
* Injected constructor. See {@link KeyguardModule}. * Injected constructor. See {@link KeyguardModule}.
@@ -1168,7 +1173,8 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
DreamOverlayStateController dreamOverlayStateController, DreamOverlayStateController dreamOverlayStateController,
Lazy<ShadeController> shadeControllerLazy, Lazy<ShadeController> shadeControllerLazy,
Lazy<NotificationShadeWindowController> notificationShadeWindowControllerLazy, Lazy<NotificationShadeWindowController> notificationShadeWindowControllerLazy,
Lazy<ActivityLaunchAnimator> activityLaunchAnimator) { Lazy<ActivityLaunchAnimator> activityLaunchAnimator,
Lazy<ScrimController> scrimControllerLazy) {
mContext = context; mContext = context;
mUserTracker = userTracker; mUserTracker = userTracker;
mFalsingCollector = falsingCollector; mFalsingCollector = falsingCollector;
@@ -1213,6 +1219,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
mDreamOverlayStateController = dreamOverlayStateController; mDreamOverlayStateController = dreamOverlayStateController;
mActivityLaunchAnimator = activityLaunchAnimator; mActivityLaunchAnimator = activityLaunchAnimator;
mScrimControllerLazy = scrimControllerLazy;
mPowerButtonY = context.getResources().getDimensionPixelSize( mPowerButtonY = context.getResources().getDimensionPixelSize(
R.dimen.physical_power_button_center_screen_location_y); R.dimen.physical_power_button_center_screen_location_y);

View File

@@ -54,6 +54,7 @@ import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.phone.ScreenOffAnimationController; 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.KeyguardStateController;
import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.util.DeviceConfigProxy; import com.android.systemui.util.DeviceConfigProxy;
@@ -113,7 +114,8 @@ public class KeyguardModule {
DreamOverlayStateController dreamOverlayStateController, DreamOverlayStateController dreamOverlayStateController,
Lazy<ShadeController> shadeController, Lazy<ShadeController> shadeController,
Lazy<NotificationShadeWindowController> notificationShadeWindowController, Lazy<NotificationShadeWindowController> notificationShadeWindowController,
Lazy<ActivityLaunchAnimator> activityLaunchAnimator) { Lazy<ActivityLaunchAnimator> activityLaunchAnimator,
Lazy<ScrimController> scrimControllerLazy) {
return new KeyguardViewMediator( return new KeyguardViewMediator(
context, context,
userTracker, userTracker,
@@ -142,7 +144,8 @@ public class KeyguardModule {
dreamOverlayStateController, dreamOverlayStateController,
shadeController, shadeController,
notificationShadeWindowController, notificationShadeWindowController,
activityLaunchAnimator); activityLaunchAnimator,
scrimControllerLazy);
} }
/** */ /** */

View File

@@ -109,6 +109,12 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
public static final int OPAQUE = 2; public static final int OPAQUE = 2;
private boolean mClipsQsScrim; 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. * 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 * 0.0f means we're not transitioning yet, while 1 means we're all the way in the full
@@ -733,6 +739,11 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
return mClipsQsScrim; return mClipsQsScrim;
} }
public void setOccludeAnimationPlaying(boolean occludeAnimationPlaying) {
mOccludeAnimationPlaying = occludeAnimationPlaying;
applyAndDispatchState();
}
private void setOrAdaptCurrentAnimation(@Nullable View scrim) { private void setOrAdaptCurrentAnimation(@Nullable View scrim) {
if (scrim == null) { if (scrim == null) {
return; return;
@@ -772,11 +783,15 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
} }
if (mState == ScrimState.UNLOCKED || mState == ScrimState.DREAMING) { if (mState == ScrimState.UNLOCKED || mState == ScrimState.DREAMING) {
// Darken scrim as you pull down the shade when unlocked, unless the shade is expanding final boolean occluding =
// because we're doing the screen off animation OR the shade is collapsing because mOccludeAnimationPlaying || mState.mLaunchingAffordanceWithPreview;
// we're playing the unlock animation
// 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() if (!mScreenOffAnimationController.shouldExpandNotifications()
&& !mAnimatingPanelExpansionOnUnlock) { && !mAnimatingPanelExpansionOnUnlock
&& !occluding) {
float behindFraction = getInterpolatedFraction(); float behindFraction = getInterpolatedFraction();
behindFraction = (float) Math.pow(behindFraction, 0.8f); behindFraction = (float) Math.pow(behindFraction, 0.8f);
if (mClipsQsScrim) { if (mClipsQsScrim) {

View File

@@ -65,6 +65,7 @@ import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.phone.CentralSurfaces; import com.android.systemui.statusbar.phone.CentralSurfaces;
import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.phone.ScreenOffAnimationController; 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.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.policy.UserSwitcherController;
@@ -112,6 +113,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
private @Mock Lazy<NotificationShadeWindowController> mNotificationShadeWindowControllerLazy; private @Mock Lazy<NotificationShadeWindowController> mNotificationShadeWindowControllerLazy;
private @Mock DreamOverlayStateController mDreamOverlayStateController; private @Mock DreamOverlayStateController mDreamOverlayStateController;
private @Mock ActivityLaunchAnimator mActivityLaunchAnimator; private @Mock ActivityLaunchAnimator mActivityLaunchAnimator;
private @Mock ScrimController mScrimController;
private DeviceConfigProxy mDeviceConfig = new DeviceConfigProxyFake(); private DeviceConfigProxy mDeviceConfig = new DeviceConfigProxyFake();
private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock()); private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock());
@@ -314,7 +316,8 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
mDreamOverlayStateController, mDreamOverlayStateController,
() -> mShadeController, () -> mShadeController,
mNotificationShadeWindowControllerLazy, mNotificationShadeWindowControllerLazy,
() -> mActivityLaunchAnimator); () -> mActivityLaunchAnimator,
() -> mScrimController);
mViewMediator.start(); mViewMediator.start();
mViewMediator.registerCentralSurfaces(mCentralSurfaces, null, null, null, null, null); mViewMediator.registerCentralSurfaces(mCentralSurfaces, null, null, null, null, null);