Merge "Improve UDFPS unlock animation experience" into tm-d1-dev

This commit is contained in:
TreeHugger Robot
2022-08-05 20:07:36 +00:00
committed by Android (Google) Code Review
3 changed files with 32 additions and 19 deletions

View File

@@ -165,6 +165,7 @@ public abstract class PanelViewController {
private float mInitialTouchY; private float mInitialTouchY;
private float mInitialTouchX; private float mInitialTouchX;
private boolean mTouchDisabled; private boolean mTouchDisabled;
private boolean mInitialTouchFromKeyguard;
/** /**
* Whether or not the PanelView can be expanded or collapsed with a drag. * Whether or not the PanelView can be expanded or collapsed with a drag.
@@ -394,6 +395,7 @@ public abstract class PanelViewController {
mInitialOffsetOnTouch = expandedHeight; mInitialOffsetOnTouch = expandedHeight;
mInitialTouchY = newY; mInitialTouchY = newY;
mInitialTouchX = newX; mInitialTouchX = newX;
mInitialTouchFromKeyguard = mStatusBarStateController.getState() == StatusBarState.KEYGUARD;
if (startTracking) { if (startTracking) {
mTouchSlopExceeded = true; mTouchSlopExceeded = true;
setExpandedHeight(mInitialOffsetOnTouch); setExpandedHeight(mInitialOffsetOnTouch);
@@ -416,20 +418,14 @@ public abstract class PanelViewController {
mStatusBarStateController.getState() == StatusBarState.KEYGUARD; mStatusBarStateController.getState() == StatusBarState.KEYGUARD;
final boolean expand; final boolean expand;
if (event.getActionMasked() == MotionEvent.ACTION_CANCEL || forceCancel) { if (mKeyguardStateController.isKeyguardFadingAway()
// If the keyguard is fading away, don't expand it again. This can happen if you're || (mInitialTouchFromKeyguard && !onKeyguard)) {
// swiping to unlock, the app below the keyguard is in landscape, and the screen // Don't expand for any touches that started from the keyguard and ended after the
// rotates while your finger is still down after the swipe to unlock. // keyguard is gone.
if (mKeyguardStateController.isKeyguardFadingAway()) {
expand = false; expand = false;
} else if (onKeyguard) { } else if (event.getActionMasked() == MotionEvent.ACTION_CANCEL || forceCancel) {
if (onKeyguard) {
expand = true; expand = true;
} else if (mKeyguardStateController.isKeyguardFadingAway()) {
// If we're in the middle of dismissing the keyguard, don't expand due to the
// cancelled gesture. Gesture cancellation during an unlock is expected in some
// situations, such keeping your finger down while swiping to unlock to an app
// that is locked in landscape (the rotation will cancel the touch event).
expand = false;
} else { } else {
// If we get a cancel, put the shade back to the state it was in when the // If we get a cancel, put the shade back to the state it was in when the
// gesture started // gesture started
@@ -438,7 +434,6 @@ public abstract class PanelViewController {
} else { } else {
expand = flingExpands(vel, vectorVel, x, y); expand = flingExpands(vel, vectorVel, x, y);
} }
mDozeLog.traceFling(expand, mTouchAboveFalsingThreshold, mDozeLog.traceFling(expand, mTouchAboveFalsingThreshold,
mCentralSurfaces.isFalsingThresholdNeeded(), mCentralSurfaces.isFalsingThresholdNeeded(),
mCentralSurfaces.isWakeUpComingFromTouch()); mCentralSurfaces.isWakeUpComingFromTouch());

View File

@@ -19,6 +19,7 @@ package com.android.systemui.statusbar.phone;
import static android.view.WindowInsets.Type.navigationBars; import static android.view.WindowInsets.Type.navigationBars;
import static com.android.systemui.plugins.ActivityStarter.OnDismissAction; import static com.android.systemui.plugins.ActivityStarter.OnDismissAction;
import static com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_DISMISS_BOUNCER;
import static com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_UNLOCK_COLLAPSING; import static com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_UNLOCK_COLLAPSING;
import static com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_WAKE_AND_UNLOCK; import static com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_WAKE_AND_UNLOCK;
import static com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_WAKE_AND_UNLOCK_PULSING; import static com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_WAKE_AND_UNLOCK_PULSING;
@@ -381,6 +382,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
mBouncer.setExpansion(KeyguardBouncer.EXPANSION_VISIBLE); mBouncer.setExpansion(KeyguardBouncer.EXPANSION_VISIBLE);
} else if (mShowing && !hideBouncerOverDream) { } else if (mShowing && !hideBouncerOverDream) {
if (!isWakeAndUnlocking() if (!isWakeAndUnlocking()
&& !(mBiometricUnlockController.getMode() == MODE_DISMISS_BOUNCER)
&& !mCentralSurfaces.isInLaunchTransition() && !mCentralSurfaces.isInLaunchTransition()
&& !isUnlockCollapsing()) { && !isUnlockCollapsing()) {
mBouncer.setExpansion(fraction); mBouncer.setExpansion(fraction);
@@ -392,9 +394,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
} }
} else if (!mShowing && mBouncer.inTransit()) { } else if (!mShowing && mBouncer.inTransit()) {
// Keyguard is not visible anymore, but expansion animation was still running. // Keyguard is not visible anymore, but expansion animation was still running.
// We need to keep propagating the expansion state to the bouncer, otherwise it will be // We need to hide the bouncer, otherwise it will be stuck in transit.
// stuck in transit. mBouncer.setExpansion(KeyguardBouncer.EXPANSION_HIDDEN);
mBouncer.setExpansion(fraction);
} else if (mPulsing && fraction == KeyguardBouncer.EXPANSION_VISIBLE) { } else if (mPulsing && fraction == KeyguardBouncer.EXPANSION_VISIBLE) {
// Panel expanded while pulsing but didn't translate the bouncer (because we are // Panel expanded while pulsing but didn't translate the bouncer (because we are
// unlocked.) Let's simply wake-up to dismiss the lock screen. // unlocked.) Let's simply wake-up to dismiss the lock screen.

View File

@@ -192,12 +192,12 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
} }
@Test @Test
public void onPanelExpansionChanged_propagatesToBouncer_evenAfterHidden() { public void onPanelExpansionChanged_hideBouncer_afterKeyguardHidden() {
mStatusBarKeyguardViewManager.hide(0, 0); mStatusBarKeyguardViewManager.hide(0, 0);
when(mBouncer.inTransit()).thenReturn(true); when(mBouncer.inTransit()).thenReturn(true);
mStatusBarKeyguardViewManager.onPanelExpansionChanged(EXPANSION_EVENT); mStatusBarKeyguardViewManager.onPanelExpansionChanged(EXPANSION_EVENT);
verify(mBouncer).setExpansion(eq(EXPANSION_EVENT.getFraction())); verify(mBouncer).setExpansion(eq(KeyguardBouncer.EXPANSION_HIDDEN));
} }
@Test @Test
@@ -238,6 +238,23 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
verify(mBouncer, never()).setExpansion(anyFloat()); verify(mBouncer, never()).setExpansion(anyFloat());
} }
@Test
public void onPanelExpansionChanged_neverTranslatesBouncerWhenDismissBouncer() {
// Since KeyguardBouncer.EXPANSION_VISIBLE = 0 panel expansion, if the unlock is dismissing
// the bouncer, there may be an onPanelExpansionChanged(0) call to collapse the panel
// which would mistakenly cause the bouncer to show briefly before its visibility
// is set to hide. Therefore, we don't want to propagate panelExpansionChanged to the
// bouncer if the bouncer is dismissing as a result of a biometric unlock.
when(mBiometricUnlockController.getMode())
.thenReturn(BiometricUnlockController.MODE_DISMISS_BOUNCER);
mStatusBarKeyguardViewManager.onPanelExpansionChanged(
expansionEvent(
/* fraction= */ KeyguardBouncer.EXPANSION_VISIBLE,
/* expanded= */ true,
/* tracking= */ false));
verify(mBouncer, never()).setExpansion(anyFloat());
}
@Test @Test
public void onPanelExpansionChanged_neverTranslatesBouncerWhenLaunchingApp() { public void onPanelExpansionChanged_neverTranslatesBouncerWhenLaunchingApp() {
when(mCentralSurfaces.isInLaunchTransition()).thenReturn(true); when(mCentralSurfaces.isInLaunchTransition()).thenReturn(true);