Merge "Take screen-off animation into account when determining hiding nav bar" into sc-dev am: 6574585d64
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15192680 Change-Id: Ia24d0be9cf69eefaf2d4931b25980820a0d80f0e
This commit is contained in:
@@ -50,6 +50,7 @@ import com.android.systemui.DejankUtils;
|
|||||||
import com.android.systemui.dagger.SysUISingleton;
|
import com.android.systemui.dagger.SysUISingleton;
|
||||||
import com.android.systemui.dock.DockManager;
|
import com.android.systemui.dock.DockManager;
|
||||||
import com.android.systemui.keyguard.FaceAuthScreenBrightnessController;
|
import com.android.systemui.keyguard.FaceAuthScreenBrightnessController;
|
||||||
|
import com.android.systemui.keyguard.WakefulnessLifecycle;
|
||||||
import com.android.systemui.navigationbar.NavigationModeController;
|
import com.android.systemui.navigationbar.NavigationModeController;
|
||||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||||
import com.android.systemui.shared.system.QuickStepContract;
|
import com.android.systemui.shared.system.QuickStepContract;
|
||||||
@@ -80,7 +81,7 @@ import javax.inject.Inject;
|
|||||||
public class StatusBarKeyguardViewManager implements RemoteInputController.Callback,
|
public class StatusBarKeyguardViewManager implements RemoteInputController.Callback,
|
||||||
StatusBarStateController.StateListener, ConfigurationController.ConfigurationListener,
|
StatusBarStateController.StateListener, ConfigurationController.ConfigurationListener,
|
||||||
PanelExpansionListener, NavigationModeController.ModeChangedListener,
|
PanelExpansionListener, NavigationModeController.ModeChangedListener,
|
||||||
KeyguardViewController {
|
KeyguardViewController, WakefulnessLifecycle.Observer {
|
||||||
|
|
||||||
// When hiding the Keyguard with timing supplied from WindowManager, better be early than late.
|
// When hiding the Keyguard with timing supplied from WindowManager, better be early than late.
|
||||||
private static final long HIDE_TIMING_CORRECTION_MS = - 16 * 3;
|
private static final long HIDE_TIMING_CORRECTION_MS = - 16 * 3;
|
||||||
@@ -104,6 +105,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
|||||||
private final NotificationShadeWindowController mNotificationShadeWindowController;
|
private final NotificationShadeWindowController mNotificationShadeWindowController;
|
||||||
private final Optional<FaceAuthScreenBrightnessController> mFaceAuthScreenBrightnessController;
|
private final Optional<FaceAuthScreenBrightnessController> mFaceAuthScreenBrightnessController;
|
||||||
private final KeyguardBouncer.Factory mKeyguardBouncerFactory;
|
private final KeyguardBouncer.Factory mKeyguardBouncerFactory;
|
||||||
|
private final WakefulnessLifecycle mWakefulnessLifecycle;
|
||||||
|
private final UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController;
|
||||||
private final BouncerExpansionCallback mExpansionCallback = new BouncerExpansionCallback() {
|
private final BouncerExpansionCallback mExpansionCallback = new BouncerExpansionCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onFullyShown() {
|
public void onFullyShown() {
|
||||||
@@ -189,6 +192,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
|||||||
private boolean mLastPulsing;
|
private boolean mLastPulsing;
|
||||||
private int mLastBiometricMode;
|
private int mLastBiometricMode;
|
||||||
private boolean mQsExpanded;
|
private boolean mQsExpanded;
|
||||||
|
private boolean mAnimatedToSleep;
|
||||||
|
|
||||||
private OnDismissAction mAfterKeyguardGoneAction;
|
private OnDismissAction mAfterKeyguardGoneAction;
|
||||||
private Runnable mKeyguardGoneCancelAction;
|
private Runnable mKeyguardGoneCancelAction;
|
||||||
@@ -232,7 +236,9 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
|||||||
KeyguardStateController keyguardStateController,
|
KeyguardStateController keyguardStateController,
|
||||||
Optional<FaceAuthScreenBrightnessController> faceAuthScreenBrightnessController,
|
Optional<FaceAuthScreenBrightnessController> faceAuthScreenBrightnessController,
|
||||||
NotificationMediaManager notificationMediaManager,
|
NotificationMediaManager notificationMediaManager,
|
||||||
KeyguardBouncer.Factory keyguardBouncerFactory) {
|
KeyguardBouncer.Factory keyguardBouncerFactory,
|
||||||
|
WakefulnessLifecycle wakefulnessLifecycle,
|
||||||
|
UnlockedScreenOffAnimationController unlockedScreenOffAnimationController) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mViewMediatorCallback = callback;
|
mViewMediatorCallback = callback;
|
||||||
mLockPatternUtils = lockPatternUtils;
|
mLockPatternUtils = lockPatternUtils;
|
||||||
@@ -246,6 +252,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
|||||||
mDockManager = dockManager;
|
mDockManager = dockManager;
|
||||||
mFaceAuthScreenBrightnessController = faceAuthScreenBrightnessController;
|
mFaceAuthScreenBrightnessController = faceAuthScreenBrightnessController;
|
||||||
mKeyguardBouncerFactory = keyguardBouncerFactory;
|
mKeyguardBouncerFactory = keyguardBouncerFactory;
|
||||||
|
mWakefulnessLifecycle = wakefulnessLifecycle;
|
||||||
|
mUnlockedScreenOffAnimationController = unlockedScreenOffAnimationController;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -301,6 +309,20 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
|||||||
mDockManager.addListener(mDockEventListener);
|
mDockManager.addListener(mDockEventListener);
|
||||||
mIsDocked = mDockManager.isDocked();
|
mIsDocked = mDockManager.isDocked();
|
||||||
}
|
}
|
||||||
|
mWakefulnessLifecycle.addObserver(new WakefulnessLifecycle.Observer() {
|
||||||
|
@Override
|
||||||
|
public void onFinishedWakingUp() {
|
||||||
|
mAnimatedToSleep = false;
|
||||||
|
updateStates();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFinishedGoingToSleep() {
|
||||||
|
mAnimatedToSleep =
|
||||||
|
mUnlockedScreenOffAnimationController.isScreenOffAnimationPlaying();
|
||||||
|
updateStates();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -985,7 +1007,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
|||||||
boolean hideWhileDozing = mDozing && biometricMode != MODE_WAKE_AND_UNLOCK_PULSING;
|
boolean hideWhileDozing = mDozing && biometricMode != MODE_WAKE_AND_UNLOCK_PULSING;
|
||||||
boolean keyguardWithGestureNav = (keyguardShowing && !mDozing || mPulsing && !mIsDocked)
|
boolean keyguardWithGestureNav = (keyguardShowing && !mDozing || mPulsing && !mIsDocked)
|
||||||
&& mGesturalNav;
|
&& mGesturalNav;
|
||||||
return (!keyguardShowing && !hideWhileDozing || mBouncer.isShowing()
|
return (!mAnimatedToSleep && !keyguardShowing && !hideWhileDozing || mBouncer.isShowing()
|
||||||
|| mRemoteInputActive || keyguardWithGestureNav
|
|| mRemoteInputActive || keyguardWithGestureNav
|
||||||
|| mGlobalActionsVisible);
|
|| mGlobalActionsVisible);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,11 +16,14 @@
|
|||||||
|
|
||||||
package com.android.systemui.statusbar.phone;
|
package com.android.systemui.statusbar.phone;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||||
import static org.mockito.ArgumentMatchers.anyFloat;
|
import static org.mockito.ArgumentMatchers.anyFloat;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.Mockito.clearInvocations;
|
import static org.mockito.Mockito.clearInvocations;
|
||||||
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.reset;
|
import static org.mockito.Mockito.reset;
|
||||||
@@ -41,6 +44,7 @@ import com.android.systemui.SysuiTestCase;
|
|||||||
import com.android.systemui.dock.DockManager;
|
import com.android.systemui.dock.DockManager;
|
||||||
import com.android.systemui.keyguard.DismissCallbackRegistry;
|
import com.android.systemui.keyguard.DismissCallbackRegistry;
|
||||||
import com.android.systemui.keyguard.FaceAuthScreenBrightnessController;
|
import com.android.systemui.keyguard.FaceAuthScreenBrightnessController;
|
||||||
|
import com.android.systemui.keyguard.WakefulnessLifecycle;
|
||||||
import com.android.systemui.navigationbar.NavigationModeController;
|
import com.android.systemui.navigationbar.NavigationModeController;
|
||||||
import com.android.systemui.plugins.ActivityStarter.OnDismissAction;
|
import com.android.systemui.plugins.ActivityStarter.OnDismissAction;
|
||||||
import com.android.systemui.statusbar.NotificationMediaManager;
|
import com.android.systemui.statusbar.NotificationMediaManager;
|
||||||
@@ -90,7 +94,10 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
|
|||||||
private KeyguardBouncer.Factory mKeyguardBouncerFactory;
|
private KeyguardBouncer.Factory mKeyguardBouncerFactory;
|
||||||
@Mock
|
@Mock
|
||||||
private KeyguardBouncer mBouncer;
|
private KeyguardBouncer mBouncer;
|
||||||
|
@Mock
|
||||||
|
private UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController;
|
||||||
|
|
||||||
|
private WakefulnessLifecycle mWakefulnessLifecycle;
|
||||||
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
@@ -101,6 +108,7 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
|
|||||||
any(KeyguardBouncer.BouncerExpansionCallback.class)))
|
any(KeyguardBouncer.BouncerExpansionCallback.class)))
|
||||||
.thenReturn(mBouncer);
|
.thenReturn(mBouncer);
|
||||||
|
|
||||||
|
mWakefulnessLifecycle = new WakefulnessLifecycle(getContext(), null);
|
||||||
mStatusBarKeyguardViewManager = new StatusBarKeyguardViewManager(
|
mStatusBarKeyguardViewManager = new StatusBarKeyguardViewManager(
|
||||||
getContext(),
|
getContext(),
|
||||||
mViewMediatorCallback,
|
mViewMediatorCallback,
|
||||||
@@ -114,7 +122,9 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
|
|||||||
mKeyguardStateController,
|
mKeyguardStateController,
|
||||||
Optional.of(mFaceAuthScreenBrightnessController),
|
Optional.of(mFaceAuthScreenBrightnessController),
|
||||||
mock(NotificationMediaManager.class),
|
mock(NotificationMediaManager.class),
|
||||||
mKeyguardBouncerFactory);
|
mKeyguardBouncerFactory,
|
||||||
|
mWakefulnessLifecycle,
|
||||||
|
mUnlockedScreenOffAnimationController);
|
||||||
mStatusBarKeyguardViewManager.registerStatusBar(mStatusBar, mContainer,
|
mStatusBarKeyguardViewManager.registerStatusBar(mStatusBar, mContainer,
|
||||||
mNotificationPanelView, mBiometrucUnlockController,
|
mNotificationPanelView, mBiometrucUnlockController,
|
||||||
mNotificationContainer, mBypassController);
|
mNotificationContainer, mBypassController);
|
||||||
@@ -280,4 +290,18 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
|
|||||||
|
|
||||||
verify(mBouncer).updateKeyguardPosition(1.0f);
|
verify(mBouncer).updateKeyguardPosition(1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNavBarHiddenWhenSleepAnimationStarts() {
|
||||||
|
mStatusBarKeyguardViewManager.hide(0 /* startTime */, 0 /* fadeoutDuration */);
|
||||||
|
assertTrue(mStatusBarKeyguardViewManager.isNavBarVisible());
|
||||||
|
|
||||||
|
// Verify that the nav bar is hidden when the screen off animation starts
|
||||||
|
doReturn(true).when(mUnlockedScreenOffAnimationController).isScreenOffAnimationPlaying();
|
||||||
|
mWakefulnessLifecycle.dispatchFinishedGoingToSleep();
|
||||||
|
assertFalse(mStatusBarKeyguardViewManager.isNavBarVisible());
|
||||||
|
|
||||||
|
mWakefulnessLifecycle.dispatchFinishedWakingUp();
|
||||||
|
assertTrue(mStatusBarKeyguardViewManager.isNavBarVisible());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user