diff options
| author | 2023-03-13 13:23:18 +0000 | |
|---|---|---|
| committer | 2023-03-13 13:23:18 +0000 | |
| commit | 5aa4f1fa6e374e05d62fc5d317c10a39c174a2c0 (patch) | |
| tree | 655c312177913e2d2fd399063402d89e52b501e1 | |
| parent | a0e394b83efe2f5347923f1fc272a62eb376a2f1 (diff) | |
| parent | c86e27e5015c8234e53d2fda471a80f6c9232550 (diff) | |
Merge "Fix alternateBouncer => primaryBouncer flicker" into udc-dev
4 files changed, 62 insertions, 18 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java index 6c3c246e7fb9..7661b8d0c144 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java @@ -168,7 +168,7 @@ public interface KeyguardViewController { /** * Stop showing the alternate bouncer, if showing. */ - void hideAlternateBouncer(boolean forceUpdateScrim); + void hideAlternateBouncer(boolean updateScrim); // TODO: Deprecate registerStatusBar in KeyguardViewController interface. It is currently // only used for testing purposes in StatusBarKeyguardViewManager, and it prevents us from diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java index 00519b95172e..5438a59fadc2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java @@ -613,7 +613,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { private Runnable mLaunchTransitionEndRunnable; private Runnable mLaunchTransitionCancelRunnable; - private boolean mLaunchingAffordance; private boolean mLaunchCameraWhenFinishedWaking; private boolean mLaunchCameraOnFinishedGoingToSleep; private boolean mLaunchEmergencyActionWhenFinishedWaking; @@ -3796,8 +3795,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { mScrimController.setExpansionAffectsAlpha(!unlocking); - boolean launchingAffordanceWithPreview = mLaunchingAffordance; - mScrimController.setLaunchingAffordanceWithPreview(launchingAffordanceWithPreview); if (mAlternateBouncerInteractor.isVisibleState()) { if ((!isOccluded() || isPanelExpanded()) && (mState == StatusBarState.SHADE || mState == StatusBarState.SHADE_LOCKED @@ -3816,9 +3813,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { ScrimState state = mStatusBarKeyguardViewManager.primaryBouncerNeedsScrimming() ? ScrimState.BOUNCER_SCRIMMED : ScrimState.BOUNCER; mScrimController.transitionTo(state); - } else if (launchingAffordanceWithPreview) { - // We want to avoid animating when launching with a preview. - mScrimController.transitionTo(ScrimState.UNLOCKED, mUnlockScrimCallback); } else if (mBrightnessMirrorVisible) { mScrimController.transitionTo(ScrimState.BRIGHTNESS_MIRROR); } else if (mState == StatusBarState.SHADE_LOCKED) { 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 aa71b51b5459..69b683b9d054 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -85,6 +85,8 @@ import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.unfold.FoldAodAnimationController; import com.android.systemui.unfold.SysUIUnfoldComponent; +import dagger.Lazy; + import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashSet; @@ -94,8 +96,6 @@ import java.util.Set; import javax.inject.Inject; -import dagger.Lazy; - /** * Manages creating, showing, hiding and resetting the keyguard within the status bar. Calls back * via {@link ViewMediatorCallback} to poke the wake lock and report that the keyguard is done, @@ -405,14 +405,14 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb } /** - * Sets a new legacy alternate bouncer. Only used if mdoern alternate bouncer is NOT enable. + * Sets a new legacy alternate bouncer. Only used if modern alternate bouncer is NOT enabled. */ public void setLegacyAlternateBouncer(@NonNull LegacyAlternateBouncer alternateBouncerLegacy) { if (!mIsModernAlternateBouncerEnabled) { if (!Objects.equals(mAlternateBouncerInteractor.getLegacyAlternateBouncer(), alternateBouncerLegacy)) { mAlternateBouncerInteractor.setLegacyAlternateBouncer(alternateBouncerLegacy); - hideAlternateBouncer(false); + hideAlternateBouncer(true); } } @@ -640,8 +640,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb */ public void showPrimaryBouncer(boolean scrimmed) { hideAlternateBouncer(false); - - if (mKeyguardStateController.isShowing() && !isBouncerShowing()) { + if (mKeyguardStateController.isShowing() && !isBouncerShowing()) { mPrimaryBouncerInteractor.show(scrimmed); } updateStates(); @@ -734,7 +733,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb showBouncerOrKeyguard(hideBouncerWhenShowing); } if (hideBouncerWhenShowing) { - hideAlternateBouncer(false); + hideAlternateBouncer(true); } mKeyguardUpdateManager.sendKeyguardReset(); updateStates(); @@ -742,8 +741,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb } @Override - public void hideAlternateBouncer(boolean forceUpdateScrim) { - updateAlternateBouncerShowing(mAlternateBouncerInteractor.hide() || forceUpdateScrim); + public void hideAlternateBouncer(boolean updateScrim) { + updateAlternateBouncerShowing(mAlternateBouncerInteractor.hide() && updateScrim); } private void updateAlternateBouncerShowing(boolean updateScrim) { @@ -1447,16 +1446,21 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb * For any touches on the NPVC, show the primary bouncer if the alternate bouncer is currently * showing. */ - public void onTouch(MotionEvent event) { - if (mAlternateBouncerInteractor.isVisibleState() + public boolean onTouch(MotionEvent event) { + boolean handledTouch = false; + if (event.getAction() == MotionEvent.ACTION_UP + && mAlternateBouncerInteractor.isVisibleState() && mAlternateBouncerInteractor.hasAlternateBouncerShownWithMinTime()) { showPrimaryBouncer(true); + handledTouch = true; } // Forward NPVC touches to callbacks in case they want to respond to touches for (KeyguardViewManagerCallback callback: mCallbacks) { callback.onTouch(event); } + + return handledTouch; } /** Update keyguard position based on a tapped X coordinate. */ 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 e2019b2814d9..31462623ce2d 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 @@ -19,6 +19,7 @@ package com.android.systemui.statusbar.phone; import static com.android.systemui.keyguard.shared.constants.KeyguardBouncerConstants.EXPANSION_HIDDEN; import static com.android.systemui.keyguard.shared.constants.KeyguardBouncerConstants.EXPANSION_VISIBLE; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; @@ -35,6 +36,7 @@ import static org.mockito.Mockito.when; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; +import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.ViewRootImpl; @@ -709,4 +711,48 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { // THEN alternate bouncer is NOT hidden verify(mAlternateBouncerInteractor, never()).hide(); } + + @Test + public void testAlternateBouncerToShowPrimaryBouncer_updatesScrimControllerOnce() { + // GIVEN the alternate bouncer has shown and calls to hide() will result in successfully + // hiding it + when(mAlternateBouncerInteractor.hide()).thenReturn(true); + when(mKeyguardStateController.isShowing()).thenReturn(true); + when(mPrimaryBouncerInteractor.isFullyShowing()).thenReturn(false); + when(mAlternateBouncerInteractor.isVisibleState()).thenReturn(false); + + // WHEN request to show primary bouncer + mStatusBarKeyguardViewManager.showPrimaryBouncer(true); + + // THEN the scrim isn't updated from StatusBarKeyguardViewManager + verify(mCentralSurfaces, never()).updateScrimController(); + } + + @Test + public void testAlternateBouncerOnTouch_actionDown_doesNotHandleTouch() { + // GIVEN the alternate bouncer has shown for a minimum amount of time + when(mAlternateBouncerInteractor.hasAlternateBouncerShownWithMinTime()).thenReturn(true); + when(mAlternateBouncerInteractor.isVisibleState()).thenReturn(true); + + // WHEN ACTION_DOWN touch event comes + boolean touchHandled = mStatusBarKeyguardViewManager.onTouch( + MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, 0f, 0)); + + // THEN the touch is not handled + assertFalse(touchHandled); + } + + @Test + public void testAlternateBouncerOnTouch_actionUp_handlesTouch() { + // GIVEN the alternate bouncer has shown for a minimum amount of time + when(mAlternateBouncerInteractor.hasAlternateBouncerShownWithMinTime()).thenReturn(true); + when(mAlternateBouncerInteractor.isVisibleState()).thenReturn(true); + + // WHEN ACTION_UP touch event comes + boolean touchHandled = mStatusBarKeyguardViewManager.onTouch( + MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_UP, 0f, 0f, 0)); + + // THEN the touch is handled + assertTrue(touchHandled); + } } |