diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-08-09 01:13:32 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-08-09 01:13:32 +0000 |
commit | 1e492436269bb638ac24d279104af9300a2659c1 (patch) | |
tree | ef26761f5b929658dc69c4b5359bb019743c8b9b | |
parent | 7a6324e36278ba496cf6dc10fa87b1ce1c114a26 (diff) | |
parent | eb76c2603d0ee1010c102451d8dddaef7ca0e842 (diff) | |
download | base-1e492436269bb638ac24d279104af9300a2659c1.tar.gz |
Merge cherrypicks of [19500972] into tm-d1-release.
Change-Id: I327c246df4037e7555bc9956f36b5eb6496139d8
3 files changed, 32 insertions, 19 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java index 5d417e0b59e2..3d3e6ed26fe2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java @@ -165,6 +165,7 @@ public abstract class PanelViewController { private float mInitialTouchY; private float mInitialTouchX; private boolean mTouchDisabled; + private boolean mInitialTouchFromKeyguard; /** * Whether or not the PanelView can be expanded or collapsed with a drag. @@ -394,6 +395,7 @@ public abstract class PanelViewController { mInitialOffsetOnTouch = expandedHeight; mInitialTouchY = newY; mInitialTouchX = newX; + mInitialTouchFromKeyguard = mStatusBarStateController.getState() == StatusBarState.KEYGUARD; if (startTracking) { mTouchSlopExceeded = true; setExpandedHeight(mInitialOffsetOnTouch); @@ -416,20 +418,14 @@ public abstract class PanelViewController { mStatusBarStateController.getState() == StatusBarState.KEYGUARD; final boolean expand; - if (event.getActionMasked() == MotionEvent.ACTION_CANCEL || forceCancel) { - // If the keyguard is fading away, don't expand it again. This can happen if you're - // swiping to unlock, the app below the keyguard is in landscape, and the screen - // rotates while your finger is still down after the swipe to unlock. - if (mKeyguardStateController.isKeyguardFadingAway()) { - expand = false; - } else if (onKeyguard) { + if (mKeyguardStateController.isKeyguardFadingAway() + || (mInitialTouchFromKeyguard && !onKeyguard)) { + // Don't expand for any touches that started from the keyguard and ended after the + // keyguard is gone. + expand = false; + } else if (event.getActionMasked() == MotionEvent.ACTION_CANCEL || forceCancel) { + if (onKeyguard) { 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 { // If we get a cancel, put the shade back to the state it was in when the // gesture started @@ -438,7 +434,6 @@ public abstract class PanelViewController { } else { expand = flingExpands(vel, vectorVel, x, y); } - mDozeLog.traceFling(expand, mTouchAboveFalsingThreshold, mCentralSurfaces.isFalsingThresholdNeeded(), mCentralSurfaces.isWakeUpComingFromTouch()); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java index 038beba03957..68d95e882ced 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -19,6 +19,7 @@ package com.android.systemui.statusbar.phone; import static android.view.WindowInsets.Type.navigationBars; 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_WAKE_AND_UNLOCK; 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); } else if (mShowing && !hideBouncerOverDream) { if (!isWakeAndUnlocking() + && !(mBiometricUnlockController.getMode() == MODE_DISMISS_BOUNCER) && !mCentralSurfaces.isInLaunchTransition() && !isUnlockCollapsing()) { mBouncer.setExpansion(fraction); @@ -392,9 +394,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb } } else if (!mShowing && mBouncer.inTransit()) { // 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 - // stuck in transit. - mBouncer.setExpansion(fraction); + // We need to hide the bouncer, otherwise it will be stuck in transit. + mBouncer.setExpansion(KeyguardBouncer.EXPANSION_HIDDEN); } else if (mPulsing && fraction == KeyguardBouncer.EXPANSION_VISIBLE) { // Panel expanded while pulsing but didn't translate the bouncer (because we are // unlocked.) Let's simply wake-up to dismiss the lock screen. diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java index cd081e526c80..2dcb2f4f1203 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java @@ -192,12 +192,12 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { } @Test - public void onPanelExpansionChanged_propagatesToBouncer_evenAfterHidden() { + public void onPanelExpansionChanged_hideBouncer_afterKeyguardHidden() { mStatusBarKeyguardViewManager.hide(0, 0); when(mBouncer.inTransit()).thenReturn(true); mStatusBarKeyguardViewManager.onPanelExpansionChanged(EXPANSION_EVENT); - verify(mBouncer).setExpansion(eq(EXPANSION_EVENT.getFraction())); + verify(mBouncer).setExpansion(eq(KeyguardBouncer.EXPANSION_HIDDEN)); } @Test @@ -239,6 +239,23 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { } @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 public void onPanelExpansionChanged_neverTranslatesBouncerWhenLaunchingApp() { when(mCentralSurfaces.isInLaunchTransition()).thenReturn(true); mStatusBarKeyguardViewManager.onPanelExpansionChanged( |