Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java +9 −14 Original line number Original line Diff line number Diff line Loading @@ -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. Loading Loading @@ -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); Loading @@ -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 Loading @@ -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()); Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +4 −3 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading @@ -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. Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java +19 −2 Original line number Original line Diff line number Diff line Loading @@ -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 Loading Loading @@ -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); Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java +9 −14 Original line number Original line Diff line number Diff line Loading @@ -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. Loading Loading @@ -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); Loading @@ -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 Loading @@ -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()); Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +4 −3 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading @@ -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. Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java +19 −2 Original line number Original line Diff line number Diff line Loading @@ -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 Loading Loading @@ -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); Loading