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

Commit bd6c92b0 authored by Lucas Dupin's avatar Lucas Dupin
Browse files

Do not animate wallpaper when wakeAndUnlock

Fixes: 137536016
Test: press power to go to lock scree <-> aod
Test: unlock with fingerprint
Test: trigger AOD2 pulse (look at wallpaper animation)
Test: atest DozeWallpaperStateTest
Change-Id: I46574609a00712bdde5a4652ab5c9b0c04cbeeec
Merged-In: I46574609a00712bdde5a4652ab5c9b0c04cbeeec
parent 32cc7065
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import com.android.systemui.R;
import com.android.systemui.SystemUIApplication;
import com.android.systemui.classifier.FalsingManagerFactory;
import com.android.systemui.dock.DockManager;
import com.android.systemui.statusbar.phone.BiometricUnlockController;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.util.AsyncSensorManager;
import com.android.systemui.util.wakelock.DelayedWakeLock;
@@ -70,7 +71,7 @@ public class DozeFactory {
                new DozeScreenState(wrappedService, handler, params, wakeLock),
                createDozeScreenBrightness(context, wrappedService, sensorManager, host, params,
                        handler),
                new DozeWallpaperState(context),
                new DozeWallpaperState(context, getBiometricUnlockController(dozeService)),
                new DozeDockHandler(context, machine, host, config, handler, dockManager),
                new DozeAuthRemover(dozeService)
        });
@@ -108,4 +109,10 @@ public class DozeFactory {
        final SystemUIApplication app = (SystemUIApplication) appCandidate;
        return app.getComponent(DozeHost.class);
    }

    public static BiometricUnlockController getBiometricUnlockController(DozeService service) {
        Application appCandidate = service.getApplication();
        final SystemUIApplication app = (SystemUIApplication) appCandidate;
        return app.getComponent(BiometricUnlockController.class);
    }
}
+10 −3
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.util.Log;

import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
import com.android.systemui.statusbar.phone.BiometricUnlockController;
import com.android.systemui.statusbar.phone.DozeParameters;

import java.io.PrintWriter;
@@ -38,18 +39,22 @@ public class DozeWallpaperState implements DozeMachine.Part {

    private final IWallpaperManager mWallpaperManagerService;
    private final DozeParameters mDozeParameters;
    private final BiometricUnlockController mBiometricUnlockController;
    private boolean mIsAmbientMode;

    public DozeWallpaperState(Context context) {
    public DozeWallpaperState(Context context,
            BiometricUnlockController biometricUnlockController) {
        this(IWallpaperManager.Stub.asInterface(
                ServiceManager.getService(Context.WALLPAPER_SERVICE)),
                biometricUnlockController,
                DozeParameters.getInstance(context));
    }

    @VisibleForTesting
    DozeWallpaperState(IWallpaperManager wallpaperManagerService,
            DozeParameters parameters) {
            BiometricUnlockController biometricUnlockController, DozeParameters parameters) {
        mWallpaperManagerService = wallpaperManagerService;
        mBiometricUnlockController = biometricUnlockController;
        mDozeParameters = parameters;
    }

@@ -76,7 +81,9 @@ public class DozeWallpaperState implements DozeMachine.Part {
        } else {
            boolean wakingUpFromPulse = oldState == DozeMachine.State.DOZE_PULSING
                    && newState == DozeMachine.State.FINISH;
            animated = !mDozeParameters.getDisplayNeedsBlanking() || wakingUpFromPulse;
            boolean fastDisplay = !mDozeParameters.getDisplayNeedsBlanking();
            animated = (fastDisplay && !mBiometricUnlockController.unlockedByWakeAndUnlock())
                    || wakingUpFromPulse;
        }

        if (isAmbientMode != mIsAmbientMode) {
+13 −0
Original line number Diff line number Diff line
@@ -141,6 +141,7 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback {
    private BiometricSourceType mPendingAuthenticatedBioSourceType = null;
    private boolean mPendingShowBouncer;
    private boolean mHasScreenTurnedOnSinceAuthenticating;
    private boolean mFadedAwayAfterWakeAndUnlock;

    private final MetricsLogger mMetricsLogger = Dependency.get(MetricsLogger.class);

@@ -368,6 +369,7 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback {
    @Override
    public void onStartedGoingToSleep(int why) {
        resetMode();
        mFadedAwayAfterWakeAndUnlock = false;
        mPendingAuthenticatedUserId = -1;
        mPendingAuthenticatedBioSourceType = null;
    }
@@ -513,6 +515,9 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback {
    }

    public void finishKeyguardFadingAway() {
        if (isWakeAndUnlock()) {
            mFadedAwayAfterWakeAndUnlock = true;
        }
        resetMode();
    }

@@ -562,6 +567,14 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback {
                || mMode == MODE_WAKE_AND_UNLOCK_FROM_DREAM;
    }

    /**
     * Successful authentication with fingerprint, face, or iris that wakes up the device.
     * This will return {@code true} even after the keyguard fades away.
     */
    public boolean unlockedByWakeAndUnlock() {
        return  isWakeAndUnlock() || mFadedAwayAfterWakeAndUnlock;
    }

    /**
     * Successful authentication with fingerprint, face, or iris when the screen was either
     * on or off.
+1 −0
Original line number Diff line number Diff line
@@ -1230,6 +1230,7 @@ public class StatusBar extends SystemUI implements DemoMode,
                mDozeScrimController, keyguardViewMediator,
                mScrimController, this, UnlockMethodCache.getInstance(mContext),
                new Handler(), mKeyguardUpdateMonitor, mKeyguardBypassController);
        putComponent(BiometricUnlockController.class, mBiometricUnlockController);
        mStatusBarKeyguardViewManager = keyguardViewMediator.registerStatusBar(this,
                getBouncerContainer(), mNotificationPanel, mBiometricUnlockController,
                mStatusBarWindow.findViewById(R.id.lock_icon_container), mStackScroller,
+19 −1
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.doze;

import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -29,6 +30,7 @@ import androidx.test.filters.SmallTest;

import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
import com.android.systemui.statusbar.phone.BiometricUnlockController;
import com.android.systemui.statusbar.phone.DozeParameters;

import org.junit.Before;
@@ -44,12 +46,14 @@ public class DozeWallpaperStateTest extends SysuiTestCase {

    private DozeWallpaperState mDozeWallpaperState;
    @Mock IWallpaperManager mIWallpaperManager;
    @Mock BiometricUnlockController mBiometricUnlockController;
    @Mock DozeParameters mDozeParameters;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        mDozeWallpaperState = new DozeWallpaperState(mIWallpaperManager, mDozeParameters);
        mDozeWallpaperState = new DozeWallpaperState(mIWallpaperManager, mBiometricUnlockController,
                mDozeParameters);
    }

    @Test
@@ -101,6 +105,20 @@ public class DozeWallpaperStateTest extends SysuiTestCase {
        verify(mIWallpaperManager).setInAmbientMode(eq(false), eq(0L));
    }

    @Test
    public void testDoesNotAnimate_whenWakeAndUnlock() throws RemoteException {
        // Pre-conditions
        when(mDozeParameters.getAlwaysOn()).thenReturn(true);
        when(mBiometricUnlockController.unlockedByWakeAndUnlock()).thenReturn(true);

        mDozeWallpaperState.transitionTo(DozeMachine.State.UNINITIALIZED,
                DozeMachine.State.DOZE_AOD);
        clearInvocations(mIWallpaperManager);

        mDozeWallpaperState.transitionTo(DozeMachine.State.DOZE_AOD, DozeMachine.State.FINISH);
        verify(mIWallpaperManager).setInAmbientMode(eq(false), eq(0L));
    }

    @Test
    public void testTransitionTo_requestPulseIsAmbientMode() throws RemoteException {
        mDozeWallpaperState.transitionTo(DozeMachine.State.DOZE,