diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-08-25 02:37:28 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-08-25 02:37:28 +0000 |
commit | 115b8514743671277ff9ac6b3d21c8e220d34aa9 (patch) | |
tree | 3b21a394d9ab4994ae3d7e84af9b240408d96787 | |
parent | 4272d2deb068d9e72751ef14f3edb9ffb0a79259 (diff) | |
parent | 85faec75552ca0c1692f1f89cf8758747731aee6 (diff) | |
download | base-115b8514743671277ff9ac6b3d21c8e220d34aa9.tar.gz |
Merge cherrypicks of [15671342, 15671402, 15670951, 15671362, 15671363, 15671364, 15671365, 15671366, 15671343, 15671344, 15671345, 15671346, 15671347, 15671367, 15671368, 15671369, 15671370] into sc-d1-release
Change-Id: I2832b48a48fbe423e57202e03f28ce5250eb1e30
11 files changed, 211 insertions, 32 deletions
diff --git a/media/java/android/media/PlayerBase.java b/media/java/android/media/PlayerBase.java index 86ed50bacb63..72ee00f03774 100644 --- a/media/java/android/media/PlayerBase.java +++ b/media/java/android/media/PlayerBase.java @@ -102,6 +102,13 @@ public abstract class PlayerBase { mState = AudioPlaybackConfiguration.PLAYER_STATE_IDLE; }; + /** @hide */ + public int getPlayerIId() { + synchronized (mLock) { + return mPlayerIId; + } + } + /** * Call from derived class when instantiation / initialization is successful */ diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java index e612fb4712fc..2de489d2ce21 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java @@ -781,6 +781,7 @@ public class UdfpsController implements DozeReceiver { mKeyguardViewMediator, mLockscreenShadeTransitionController, mConfigurationController, + mKeyguardStateController, this ); case IUdfpsOverlayController.REASON_AUTH_BP: diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java index 4896305daa2e..3ca7a9face95 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java @@ -34,6 +34,7 @@ import com.android.systemui.statusbar.phone.KeyguardBouncer; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.policy.ConfigurationController; +import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.concurrency.DelayableExecutor; import java.io.FileDescriptor; @@ -50,6 +51,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud @NonNull private final KeyguardViewMediator mKeyguardViewMediator; @NonNull private final LockscreenShadeTransitionController mLockScreenShadeTransitionController; @NonNull private final ConfigurationController mConfigurationController; + @NonNull private final KeyguardStateController mKeyguardStateController; @NonNull private final UdfpsController mUdfpsController; private boolean mShowingUdfpsBouncer; @@ -60,6 +62,9 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud private float mTransitionToFullShadeProgress; private float mLastDozeAmount; + private float mStatusBarExpansion; + private boolean mLaunchTransitionFadingAway; + /** * hidden amount of pin/pattern/password bouncer * {@link KeyguardBouncer#EXPANSION_VISIBLE} (0f) to @@ -79,6 +84,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud @NonNull KeyguardViewMediator keyguardViewMediator, @NonNull LockscreenShadeTransitionController transitionController, @NonNull ConfigurationController configurationController, + @NonNull KeyguardStateController keyguardStateController, @NonNull UdfpsController udfpsController) { super(view, statusBarStateController, statusBar, dumpManager); mKeyguardViewManager = statusBarKeyguardViewManager; @@ -87,6 +93,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud mKeyguardViewMediator = keyguardViewMediator; mLockScreenShadeTransitionController = transitionController; mConfigurationController = configurationController; + mKeyguardStateController = keyguardStateController; mUdfpsController = udfpsController; } @@ -105,11 +112,14 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud mUdfpsRequested = false; + mLaunchTransitionFadingAway = mKeyguardStateController.isLaunchTransitionFadingAway(); + mKeyguardStateController.addCallback(mKeyguardStateControllerCallback); mStatusBarState = mStatusBarStateController.getState(); mQsExpanded = mKeyguardViewManager.isQsExpanded(); mInputBouncerHiddenAmount = KeyguardBouncer.EXPANSION_HIDDEN; mIsBouncerVisible = mKeyguardViewManager.bouncerIsOrWillBeShowing(); mConfigurationController.addCallback(mConfigurationListener); + mStatusBar.addExpansionChangedListener(mStatusBarExpansionChangedListener); updateAlpha(); updatePauseAuth(); @@ -122,10 +132,12 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud super.onViewDetached(); mFaceDetectRunning = false; + mKeyguardStateController.removeCallback(mKeyguardStateControllerCallback); mStatusBarStateController.removeCallback(mStateListener); mKeyguardViewManager.removeAlternateAuthInterceptor(mAlternateAuthInterceptor); mKeyguardUpdateMonitor.requestFaceAuthOnOccludingApp(false); mConfigurationController.removeCallback(mConfigurationListener); + mStatusBar.removeExpansionChangedListener(mStatusBarExpansionChangedListener); if (mLockScreenShadeTransitionController.getUdfpsKeyguardViewController() == this) { mLockScreenShadeTransitionController.setUdfpsKeyguardViewController(null); } @@ -140,9 +152,11 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud pw.println("mQsExpanded=" + mQsExpanded); pw.println("mIsBouncerVisible=" + mIsBouncerVisible); pw.println("mInputBouncerHiddenAmount=" + mInputBouncerHiddenAmount); + pw.println("mStatusBarExpansion=" + mStatusBarExpansion); pw.println("mAlpha=" + mView.getAlpha()); pw.println("mUdfpsRequested=" + mUdfpsRequested); pw.println("mView.mUdfpsRequested=" + mView.mUdfpsRequested); + pw.println("mLaunchTransitionFadingAway=" + mLaunchTransitionFadingAway); } /** @@ -189,6 +203,10 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud return false; } + if (mLaunchTransitionFadingAway) { + return true; + } + if (mStatusBarState != KEYGUARD) { return true; } @@ -237,10 +255,13 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud } private void updateAlpha() { - // fade icon on transition to showing bouncer + // fade icon on transitions to showing the status bar, but if mUdfpsRequested, then + // the keyguard is occluded by some application - so instead use the input bouncer + // hidden amount to determine the fade + float expansion = mUdfpsRequested ? mInputBouncerHiddenAmount : mStatusBarExpansion; int alpha = mShowingUdfpsBouncer ? 255 : (int) MathUtils.constrain( - MathUtils.map(.5f, .9f, 0f, 255f, mInputBouncerHiddenAmount), + MathUtils.map(.5f, .9f, 0f, 255f, expansion), 0f, 255f); alpha *= (1.0f - mTransitionToFullShadeProgress); mView.setUnpausedAlpha(alpha); @@ -356,4 +377,23 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud mView.updateColor(); } }; + + private final StatusBar.ExpansionChangedListener mStatusBarExpansionChangedListener = + new StatusBar.ExpansionChangedListener() { + @Override + public void onExpansionChanged(float expansion, boolean expanded) { + mStatusBarExpansion = expansion; + updateAlpha(); + } + }; + + private final KeyguardStateController.Callback mKeyguardStateControllerCallback = + new KeyguardStateController.Callback() { + @Override + public void onLaunchTransitionFadingAwayChanged() { + mLaunchTransitionFadingAway = + mKeyguardStateController.isLaunchTransitionFadingAway(); + updatePauseAuth(); + } + }; } diff --git a/packages/SystemUI/src/com/android/systemui/media/NotificationPlayer.java b/packages/SystemUI/src/com/android/systemui/media/NotificationPlayer.java index 89786ee880ad..a617850ef0ae 100644 --- a/packages/SystemUI/src/com/android/systemui/media/NotificationPlayer.java +++ b/packages/SystemUI/src/com/android/systemui/media/NotificationPlayer.java @@ -139,7 +139,7 @@ public class NotificationPlayer implements OnCompletionListener, OnErrorListener + " with ducking", e); } player.start(); - if (DEBUG) { Log.d(mTag, "player.start"); } + if (DEBUG) { Log.d(mTag, "player.start piid:" + player.getPlayerIId()); } } catch (Exception e) { if (player != null) { player.release(); @@ -155,7 +155,13 @@ public class NotificationPlayer implements OnCompletionListener, OnErrorListener mPlayer = player; } if (mp != null) { - if (DEBUG) { Log.d(mTag, "mPlayer.release"); } + if (DEBUG) { + Log.d(mTag, "mPlayer.pause+release piid:" + player.getPlayerIId()); + } + mp.pause(); + try { + Thread.sleep(100); + } catch (InterruptedException ie) { } mp.release(); } this.notify(); @@ -244,6 +250,10 @@ public class NotificationPlayer implements OnCompletionListener, OnErrorListener try { mp.stop(); } catch (Exception e) { } + if (DEBUG) { + Log.i(mTag, "About to release MediaPlayer piid:" + + mp.getPlayerIId() + " due to notif cancelled"); + } mp.release(); synchronized(mQueueAudioFocusLock) { if (mAudioManagerWithAudioFocus != null) { @@ -284,7 +294,7 @@ public class NotificationPlayer implements OnCompletionListener, OnErrorListener public void onCompletion(MediaPlayer mp) { synchronized(mQueueAudioFocusLock) { if (mAudioManagerWithAudioFocus != null) { - if (DEBUG) Log.d(mTag, "onCompletion() abandonning AudioFocus"); + if (DEBUG) Log.d(mTag, "onCompletion() abandoning AudioFocus"); mAudioManagerWithAudioFocus.abandonAudioFocus(null); mAudioManagerWithAudioFocus = null; } else { @@ -310,6 +320,10 @@ public class NotificationPlayer implements OnCompletionListener, OnErrorListener } } if (mp != null) { + if (DEBUG) { + Log.i("NotificationPlayer", "About to release MediaPlayer piid:" + + mp.getPlayerIId() + " due to onCompletion"); + } mp.release(); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java index c1fdef12410b..7d25aeef6f98 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -432,7 +432,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump if (mKeyguardUpdateMonitor.needsSlowUnlockTransition() && mState == ScrimState.UNLOCKED) { mAnimationDelay = StatusBar.FADE_KEYGUARD_START_DELAY; scheduleUpdate(); - } else if ((oldState == ScrimState.AOD // leaving doze + } else if (((oldState == ScrimState.AOD || oldState == ScrimState.PULSING) // leaving doze && (!mDozeParameters.getAlwaysOn() || mState == ScrimState.UNLOCKED)) || (mState == ScrimState.AOD && !mDozeParameters.getDisplayNeedsBlanking())) { // Scheduling a frame isn't enough when: @@ -711,7 +711,8 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump } if (mUnOcclusionAnimationRunning && mState == ScrimState.KEYGUARD) { // We're unoccluding the keyguard and don't want to have a bright flash. - mNotificationsAlpha = 0f; + mNotificationsAlpha = KEYGUARD_SCRIM_ALPHA; + mNotificationsTint = ScrimState.KEYGUARD.getNotifTint(); } } if (isNaN(mBehindAlpha) || isNaN(mInFrontAlpha) || isNaN(mNotificationsAlpha)) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java index 06811932ac0c..2c0de629de8a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java @@ -244,7 +244,8 @@ public enum ScrimState { ? mKeyguardFadingAwayDuration : StatusBar.FADE_KEYGUARD_DURATION; - mAnimateChange = !mLaunchingAffordanceWithPreview; + boolean fromAod = previousState == AOD || previousState == PULSING; + mAnimateChange = !mLaunchingAffordanceWithPreview && !fromAod; mFrontTint = Color.TRANSPARENT; mBehindTint = Color.BLACK; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index dfbea37b206e..4705a362b669 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -1148,6 +1148,9 @@ public class StatusBar extends SystemUI implements DemoMode, mStatusBarView.setPanel(mNotificationPanelViewController); mStatusBarView.setScrimController(mScrimController); mStatusBarView.setExpansionChangedListeners(mExpansionChangedListeners); + for (ExpansionChangedListener listener : mExpansionChangedListeners) { + sendInitialExpansionAmount(listener); + } // CollapsedStatusBarFragment re-inflated PhoneStatusBarView and both of // mStatusBarView.mExpanded and mStatusBarView.mBouncerShowing are false. @@ -4932,6 +4935,14 @@ public class StatusBar extends SystemUI implements DemoMode, public void addExpansionChangedListener(@NonNull ExpansionChangedListener listener) { mExpansionChangedListeners.add(listener); + sendInitialExpansionAmount(listener); + } + + private void sendInitialExpansionAmount(ExpansionChangedListener expansionChangedListener) { + if (mStatusBarView != null) { + expansionChangedListener.onExpansionChanged(mStatusBarView.getExpansionFraction(), + mStatusBarView.isExpanded()); + } } public void removeExpansionChangedListener(@NonNull ExpansionChangedListener listener) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateController.java index fcfc9670b8b0..705761854532 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateController.java @@ -245,5 +245,11 @@ public interface KeyguardStateController extends CallbackController<Callback> { * animation. */ default void onKeyguardDismissAmountChanged() {} + + /** + * Triggered when the notification panel is starting or has finished + * fading away on transition to an app. + */ + default void onLaunchTransitionFadingAwayChanged() {} } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java index 64750bd803d5..f787ecf37372 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java @@ -343,6 +343,7 @@ public class KeyguardStateControllerImpl implements KeyguardStateController, Dum @Override public void setLaunchTransitionFadingAway(boolean fadingAway) { mLaunchTransitionFadingAway = fadingAway; + new ArrayList<>(mCallbacks).forEach(Callback::onLaunchTransitionFadingAwayChanged); } @Override diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java index 0c03a51f816e..47e060ef8f97 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java @@ -20,6 +20,11 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.atLeast; + +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -30,7 +35,6 @@ import android.testing.TestableLooper.RunWithLooper; import androidx.test.filters.SmallTest; import com.android.keyguard.KeyguardUpdateMonitor; -import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.systemui.SysuiTestCase; import com.android.systemui.dump.DumpManager; import com.android.systemui.keyguard.KeyguardViewMediator; @@ -40,6 +44,7 @@ import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.policy.ConfigurationController; +import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.concurrency.DelayableExecutor; import org.junit.Before; @@ -50,6 +55,8 @@ import org.mockito.Captor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import java.util.List; + @SmallTest @RunWith(AndroidTestingRunner.class) @@ -75,6 +82,8 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { @Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor; @Mock + private KeyguardStateController mKeyguardStateController; + @Mock private KeyguardViewMediator mKeyguardViewMediator; @Mock private ConfigurationController mConfigurationController; @@ -88,14 +97,15 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { private StatusBarStateController.StateListener mStatusBarStateListener; @Captor private ArgumentCaptor<StatusBar.ExpansionChangedListener> mExpansionListenerCaptor; - private StatusBar.ExpansionChangedListener mExpansionListener; + private List<StatusBar.ExpansionChangedListener> mExpansionListeners; @Captor private ArgumentCaptor<StatusBarKeyguardViewManager.AlternateAuthInterceptor> mAltAuthInterceptorCaptor; private StatusBarKeyguardViewManager.AlternateAuthInterceptor mAltAuthInterceptor; - @Captor private ArgumentCaptor<KeyguardUpdateMonitorCallback> mUpdateMonitorCallbackCaptor; - private KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback; + @Captor private ArgumentCaptor<KeyguardStateController.Callback> + mKeyguardStateControllerCallbackCaptor; + private KeyguardStateController.Callback mKeyguardStateControllerCallback; @Before public void setUp() { @@ -114,13 +124,14 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { mKeyguardViewMediator, mLockscreenShadeTransitionController, mConfigurationController, + mKeyguardStateController, mUdfpsController); } @Test public void testRegistersExpansionChangedListenerOnAttached() { mController.onViewAttached(); - captureExpansionListener(); + captureExpansionListeners(); } @Test @@ -149,11 +160,15 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { public void testListenersUnregisteredOnDetached() { mController.onViewAttached(); captureStatusBarStateListeners(); - captureExpansionListener(); + captureExpansionListeners(); + captureKeyguardStateControllerCallback(); mController.onViewDetached(); verify(mStatusBarStateController).removeCallback(mStatusBarStateListener); - verify(mStatusBar).removeExpansionChangedListener(mExpansionListener); + for (StatusBar.ExpansionChangedListener listener : mExpansionListeners) { + verify(mStatusBar).removeExpansionChangedListener(listener); + } + verify(mKeyguardStateController).removeCallback(mKeyguardStateControllerCallback); } @Test @@ -172,7 +187,6 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { public void testShouldPauseAuthBouncerShowing() { mController.onViewAttached(); captureStatusBarStateListeners(); - captureExpansionListener(); sendStatusBarStateChanged(StatusBarState.KEYGUARD); @@ -183,7 +197,6 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { public void testShouldNotPauseAuthOnKeyguard() { mController.onViewAttached(); captureStatusBarStateListeners(); - captureExpansionListener(); sendStatusBarStateChanged(StatusBarState.KEYGUARD); @@ -191,10 +204,25 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { } @Test + public void testShouldPauseAuthIsLaunchTransitionFadingAway() { + // GIVEN view is attached and we're on the keyguard (see testShouldNotPauseAuthOnKeyguard) + mController.onViewAttached(); + captureStatusBarStateListeners(); + sendStatusBarStateChanged(StatusBarState.KEYGUARD); + + // WHEN isLaunchTransitionFadingAway=true + captureKeyguardStateControllerCallback(); + when(mKeyguardStateController.isLaunchTransitionFadingAway()).thenReturn(true); + mKeyguardStateControllerCallback.onLaunchTransitionFadingAwayChanged(); + + // THEN pause auth + assertTrue(mController.shouldPauseAuth()); + } + + @Test public void testShouldPauseAuthOnShadeLocked() { mController.onViewAttached(); captureStatusBarStateListeners(); - captureExpansionListener(); sendStatusBarStateChanged(StatusBarState.SHADE_LOCKED); @@ -205,7 +233,6 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { public void testShouldPauseAuthOnShade() { mController.onViewAttached(); captureStatusBarStateListeners(); - captureExpansionListener(); // WHEN not on keyguard yet (shade = home) sendStatusBarStateChanged(StatusBarState.SHADE); @@ -218,7 +245,6 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { public void testShouldPauseAuthAnimatingScreenOffFromShade() { mController.onViewAttached(); captureStatusBarStateListeners(); - captureExpansionListener(); // WHEN transitioning from home/shade => keyguard + animating screen off mStatusBarStateListener.onStatePreChange(StatusBarState.SHADE, StatusBarState.KEYGUARD); @@ -232,7 +258,6 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { public void testDoNotPauseAuthAnimatingScreenOffFromLS() { mController.onViewAttached(); captureStatusBarStateListeners(); - captureExpansionListener(); // WHEN animating screen off transition from LS => AOD sendStatusBarStateChanged(StatusBarState.KEYGUARD); @@ -273,6 +298,21 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { verify(mStatusBarKeyguardViewManager).removeAlternateAuthInterceptor(mAltAuthInterceptor); } + @Test + public void testFadeInWithStatusBarExpansion() { + // GIVEN view is attached + mController.onViewAttached(); + captureExpansionListeners(); + captureKeyguardStateControllerCallback(); + reset(mView); + + // WHEN status bar expansion is 0 + updateStatusBarExpansion(0, true); + + // THEN alpha is 0 + verify(mView).setUnpausedAlpha(0); + } + private void sendStatusBarStateChanged(int statusBarState) { mStatusBarStateListener.onStateChanged(statusBarState); } @@ -282,9 +322,18 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { mStatusBarStateListener = mStateListenerCaptor.getValue(); } - private void captureExpansionListener() { - verify(mStatusBar).addExpansionChangedListener(mExpansionListenerCaptor.capture()); - mExpansionListener = mExpansionListenerCaptor.getValue(); + private void captureExpansionListeners() { + verify(mStatusBar, times(2)) + .addExpansionChangedListener(mExpansionListenerCaptor.capture()); + // first (index=0) is from super class, UdfpsAnimationViewController. + // second (index=1) is from UdfpsKeyguardViewController + mExpansionListeners = mExpansionListenerCaptor.getAllValues(); + } + + private void updateStatusBarExpansion(float expansion, boolean expanded) { + for (StatusBar.ExpansionChangedListener listener : mExpansionListeners) { + listener.onExpansionChanged(expansion, expanded); + } } private void captureAltAuthInterceptor() { @@ -293,8 +342,9 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase { mAltAuthInterceptor = mAltAuthInterceptorCaptor.getValue(); } - private void captureKeyguardUpdateMonitorCallback() { - verify(mKeyguardUpdateMonitor).registerCallback(mUpdateMonitorCallbackCaptor.capture()); - mKeyguardUpdateMonitorCallback = mUpdateMonitorCallbackCaptor.getValue(); + private void captureKeyguardStateControllerCallback() { + verify(mKeyguardStateController).addCallback( + mKeyguardStateControllerCallbackCaptor.capture()); + mKeyguardStateControllerCallback = mKeyguardStateControllerCallbackCaptor.getValue(); } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java index 2d7aa3e663a1..c71318fa9464 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java @@ -16,10 +16,13 @@ package com.android.systemui.statusbar.phone; +import static com.android.systemui.statusbar.phone.ScrimController.KEYGUARD_SCRIM_ALPHA; import static com.android.systemui.statusbar.phone.ScrimController.OPAQUE; import static com.android.systemui.statusbar.phone.ScrimController.SEMI_TRANSPARENT; import static com.android.systemui.statusbar.phone.ScrimController.TRANSPARENT; +import static com.google.common.truth.Truth.assertThat; + import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyFloat; @@ -734,9 +737,9 @@ public class ScrimControllerTest extends SysuiTestCase { } @Test - public void transitionToUnlockedFromAod() { - // Simulate unlock with fingerprint - mScrimController.transitionTo(ScrimState.AOD); + public void transitionToUnlockedFromOff() { + // Simulate unlock with fingerprint without AOD + mScrimController.transitionTo(ScrimState.OFF); mScrimController.setPanelExpansion(0f); finishAnimationsImmediately(); mScrimController.transitionTo(ScrimState.UNLOCKED); @@ -765,6 +768,28 @@ public class ScrimControllerTest extends SysuiTestCase { } @Test + public void transitionToUnlockedFromAod() { + // Simulate unlock with fingerprint + mScrimController.transitionTo(ScrimState.AOD); + mScrimController.setPanelExpansion(0f); + finishAnimationsImmediately(); + mScrimController.transitionTo(ScrimState.UNLOCKED); + + finishAnimationsImmediately(); + + // All scrims should be transparent at the end of fade transition. + assertScrimAlpha(Map.of( + mScrimInFront, TRANSPARENT, + mScrimBehind, TRANSPARENT)); + + // Make sure at the very end of the animation, we're reset to transparent + assertScrimTinted(Map.of( + mScrimInFront, false, + mScrimBehind, true + )); + } + + @Test public void scrimBlanksBeforeLeavingAod() { // Simulate unlock with fingerprint mScrimController.transitionTo(ScrimState.AOD); @@ -1081,6 +1106,26 @@ public class ScrimControllerTest extends SysuiTestCase { } @Test + public void testDoesntAnimate_whenUnlocking() { + // LightRevealScrim will animate the transition, we should only hide the keyguard scrims. + ScrimState.UNLOCKED.prepare(ScrimState.KEYGUARD); + assertThat(ScrimState.UNLOCKED.getAnimateChange()).isTrue(); + ScrimState.UNLOCKED.prepare(ScrimState.PULSING); + assertThat(ScrimState.UNLOCKED.getAnimateChange()).isFalse(); + + ScrimState.UNLOCKED.prepare(ScrimState.KEYGUARD); + assertThat(ScrimState.UNLOCKED.getAnimateChange()).isTrue(); + ScrimState.UNLOCKED.prepare(ScrimState.AOD); + assertThat(ScrimState.UNLOCKED.getAnimateChange()).isFalse(); + + // LightRevealScrim doesn't animate when AOD is disabled. We need to use the legacy anim. + ScrimState.UNLOCKED.prepare(ScrimState.KEYGUARD); + assertThat(ScrimState.UNLOCKED.getAnimateChange()).isTrue(); + ScrimState.UNLOCKED.prepare(ScrimState.OFF); + assertThat(ScrimState.UNLOCKED.getAnimateChange()).isTrue(); + } + + @Test public void testScrimsVisible_whenShadeVisible_clippingQs() { mScrimController.setClipsQsScrim(true); mScrimController.transitionTo(ScrimState.UNLOCKED); @@ -1142,8 +1187,10 @@ public class ScrimControllerTest extends SysuiTestCase { mScrimController.transitionTo(ScrimState.KEYGUARD); mScrimController.setUnocclusionAnimationRunning(true); - assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.0f, /* expansion */ 0.0f); - assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ 0.0f, /* expansion */ 1.0f); + assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ KEYGUARD_SCRIM_ALPHA, + /* expansion */ 0.0f); + assertAlphaAfterExpansion(mNotificationsScrim, /* alpha */ KEYGUARD_SCRIM_ALPHA, + /* expansion */ 1.0f); // Verify normal behavior after mScrimController.setUnocclusionAnimationRunning(false); |