Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c16a65d2 authored by Winson Chung's avatar Winson Chung Committed by Automerger Merge Worker
Browse files

Merge "Take screen-off animation into account when determining hiding nav bar"...

Merge "Take screen-off animation into account when determining hiding nav bar" into sc-dev am: 6574585d

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15192680

Change-Id: Ied6da6cd14094bf13d9119605aab01c04bce0c94
parents 4fee595e 6574585d
Loading
Loading
Loading
Loading
+25 −3
Original line number Original line Diff line number Diff line
@@ -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
@@ -982,7 +1004,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);
    }
    }
+25 −1
Original line number Original line Diff line number Diff line
@@ -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());
    }
}
}