summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Beverly Tai <beverlyt@google.com> 2023-03-13 13:23:18 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-03-13 13:23:18 +0000
commit5aa4f1fa6e374e05d62fc5d317c10a39c174a2c0 (patch)
tree655c312177913e2d2fd399063402d89e52b501e1
parenta0e394b83efe2f5347923f1fc272a62eb376a2f1 (diff)
parentc86e27e5015c8234e53d2fda471a80f6c9232550 (diff)
Merge "Fix alternateBouncer => primaryBouncer flicker" into udc-dev
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java26
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java46
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);
+ }
}