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

Commit 2a6a9e1d authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Udfps-screen off behavior improvements" into main

parents e26ee8e7 95c894c1
Loading
Loading
Loading
Loading
+75 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.systemui.doze;
import static com.android.systemui.doze.DozeMachine.State.DOZE;
import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD;
import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD_PAUSED;
import static com.android.systemui.doze.DozeMachine.State.DOZE_REQUEST_PULSE;
import static com.android.systemui.doze.DozeMachine.State.INITIALIZED;
import static com.android.systemui.doze.DozeMachine.State.UNINITIALIZED;

@@ -33,12 +34,14 @@ import static org.mockito.Mockito.when;
import android.app.AlarmManager;
import android.os.Handler;
import android.os.HandlerThread;
import android.platform.test.annotations.EnableFlags;
import android.testing.TestableLooper;

import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;

import com.android.systemui.DejankUtils;
import com.android.systemui.Flags;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.util.concurrency.FakeExecutor;
@@ -49,6 +52,8 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

@@ -72,6 +77,8 @@ public class DozeUiTest extends SysuiTestCase {
    private HandlerThread mHandlerThread;
    private DozeUi mDozeUi;
    private FakeExecutor mFakeExecutor;
    @Captor
    private ArgumentCaptor<DozeHost.PulseCallback> mPulseCallbackCaptor;

    @Before
    public void setUp() throws Exception {
@@ -123,4 +130,72 @@ public class DozeUiTest extends SysuiTestCase {
        mDozeUi.transitionTo(UNINITIALIZED, DOZE);
        verify(mHost).setAnimateWakeup(eq(true));
    }

    @Test
    @EnableFlags(Flags.FLAG_NEW_DOZING_KEYGUARD_STATES)
    public void onPulseStarted_quickPickupRequestsPulsingWithoutUI() {
        mDozeUi.transitionTo(UNINITIALIZED, INITIALIZED);
        mDozeUi.transitionTo(INITIALIZED, DOZE_AOD);

        when(mMachine.getPulseReason()).thenReturn(DozeLog.REASON_SENSOR_QUICK_PICKUP);
        mDozeUi.transitionTo(DOZE_AOD, DOZE_REQUEST_PULSE);

        capturePulseCallback(DozeLog.REASON_SENSOR_QUICK_PICKUP);

        mPulseCallbackCaptor.getValue().onPulseStarted();
        verify(mMachine).requestState(DozeMachine.State.DOZE_PULSING_WITHOUT_UI);
    }

    @Test
    @EnableFlags(Flags.FLAG_NEW_DOZING_KEYGUARD_STATES)
    public void onPulseStarted_udfpsLongpressRequestsPulsingWithoutUI() {
        mDozeUi.transitionTo(UNINITIALIZED, INITIALIZED);
        mDozeUi.transitionTo(INITIALIZED, DOZE_AOD);

        when(mMachine.getPulseReason()).thenReturn(DozeLog.REASON_SENSOR_UDFPS_LONG_PRESS);
        mDozeUi.transitionTo(DOZE_AOD, DOZE_REQUEST_PULSE);

        capturePulseCallback(DozeLog.REASON_SENSOR_UDFPS_LONG_PRESS);

        mPulseCallbackCaptor.getValue().onPulseStarted();
        verify(mMachine).requestState(DozeMachine.State.DOZE_PULSING_WITHOUT_UI);
    }

    @Test
    @EnableFlags(Flags.FLAG_NEW_DOZING_KEYGUARD_STATES)
    public void onPulseStarted_fingerprintPulseShowAuthUI() {
        mDozeUi.transitionTo(UNINITIALIZED, INITIALIZED);
        mDozeUi.transitionTo(INITIALIZED, DOZE_AOD);

        when(mMachine.getPulseReason()).thenReturn(
                DozeLog.PULSE_REASON_FINGERPRINT_PULSE_SHOW_AUTH_UI
        );
        mDozeUi.transitionTo(DOZE_AOD, DOZE_REQUEST_PULSE);

        capturePulseCallback(DozeLog.PULSE_REASON_FINGERPRINT_PULSE_SHOW_AUTH_UI);

        mPulseCallbackCaptor.getValue().onPulseStarted();
        verify(mMachine).requestState(DozeMachine.State.DOZE_PULSING_AUTH_UI);
    }

    @Test
    @EnableFlags(Flags.FLAG_NEW_DOZING_KEYGUARD_STATES)
    public void onPulseStarted_fingerprintPulseShowFullUI() {
        mDozeUi.transitionTo(UNINITIALIZED, INITIALIZED);
        mDozeUi.transitionTo(INITIALIZED, DOZE_AOD);

        when(mMachine.getPulseReason()).thenReturn(
                DozeLog.PULSE_REASON_FINGERPRINT_PULSE_SHOW_FULL_UI
        );
        mDozeUi.transitionTo(DOZE_AOD, DOZE_REQUEST_PULSE);

        capturePulseCallback(DozeLog.PULSE_REASON_FINGERPRINT_PULSE_SHOW_FULL_UI);

        mPulseCallbackCaptor.getValue().onPulseStarted();
        verify(mMachine).requestState(DozeMachine.State.DOZE_PULSING);
    }

    private void capturePulseCallback(int pulseReason) {
        verify(mHost).pulseWhileDozing(mPulseCallbackCaptor.capture(), eq(pulseReason));
    }
}
+1 −0
Original line number Diff line number Diff line
@@ -600,6 +600,7 @@ public class DozeLog implements Dumpable {
            PULSE_REASON_SENSOR_WAKE_REACH, REASON_SENSOR_TAP,
            PULSE_REASON_FINGERPRINT_PULSE_SHOW_AUTH_UI,
            PULSE_REASON_FINGERPRINT_PULSE_SHOW_FULL_UI,
            REASON_SENSOR_UDFPS_LONG_PRESS,
            REASON_SENSOR_QUICK_PICKUP,
            PULSE_REASON_FINGERPRINT_ACTIVATED, PULSE_REASON_MINMODE
    })
+12 −2
Original line number Diff line number Diff line
@@ -123,6 +123,7 @@ public class DozeSensors {
    private boolean mListeningProxSensors;
    private boolean mListeningAodOnlySensors;
    private boolean mUdfpsEnrolled;
    private boolean mOpticalUdfpsEnrolled;

    @DevicePostureController.DevicePostureInt
    private int mDevicePosture;
@@ -182,6 +183,8 @@ public class DozeSensors {

        mUdfpsEnrolled =
                mAuthController.isUdfpsEnrolled(mSelectedUserInteractor.getSelectedUserId());
        mOpticalUdfpsEnrolled =
                mAuthController.isOpticalUdfpsEnrolled(mSelectedUserInteractor.getSelectedUserId());
        mAuthController.addCallback(mAuthControllerCallback);
        mTriggerSensors = new TriggerSensor[] {
                new TriggerSensor(
@@ -304,6 +307,11 @@ public class DozeSensors {
    }

    private boolean quickPickUpConfigured() {
        if (Flags.newDozingKeyguardStates()) {
            return mOpticalUdfpsEnrolled
                    && mConfig.quickPickupSensorEnabled(
                            mSelectedUserInteractor.getSelectedUserId());
        }
        return mUdfpsEnrolled
                && mConfig.quickPickupSensorEnabled(mSelectedUserInteractor.getSelectedUserId());
    }
@@ -515,6 +523,7 @@ public class DozeSensors {
        pw.println("mListeningProxSensors=" + mListeningProxSensors);
        pw.println("mScreenOffUdfpsEnabled=" + mScreenOffUdfpsEnabled);
        pw.println("mUdfpsEnrolled=" + mUdfpsEnrolled);
        pw.println("mOpticalUdfpsEnrolled=" + mOpticalUdfpsEnrolled);
        IndentingPrintWriter idpw = new IndentingPrintWriter(pw);
        idpw.increaseIndent();
        for (TriggerSensor s : mTriggerSensors) {
@@ -888,8 +897,9 @@ public class DozeSensors {
        }

        private void updateUdfpsEnrolled() {
            mUdfpsEnrolled = mAuthController.isUdfpsEnrolled(
                    mSelectedUserInteractor.getSelectedUserId());
            final int userId = mSelectedUserInteractor.getSelectedUserId();
            mUdfpsEnrolled = mAuthController.isUdfpsEnrolled(userId);
            mOpticalUdfpsEnrolled = mAuthController.isOpticalUdfpsEnrolled(userId);
            for (TriggerSensor sensor : mTriggerSensors) {
                if (REASON_SENSOR_QUICK_PICKUP == sensor.mPulseReason) {
                    sensor.setConfigured(quickPickUpConfigured());
+34 −9
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.doze;

import static android.app.StatusBarManager.SESSION_KEYGUARD;

import static com.android.systemui.Flags.newDozingKeyguardStates;
import static com.android.systemui.Flags.udfpsScreenOffUnlockFlicker;
import static com.android.systemui.doze.DozeMachine.State.DOZE_SUSPEND_TRIGGERS;
import static com.android.systemui.doze.DozeMachine.State.FINISH;
@@ -603,17 +604,41 @@ public class DozeTriggers implements DozeMachine.Part {
            return;
        }

        // When we're already showing selective UI (or no UI) while pulsing, we can directly
        // go to other pulsing states.
        if (newDozingKeyguardStates()) {
            // When already pulsing, quick pickup and longpress gestures don't need to request
            // a new pulse
            if (alreadyPulsing
                    && (reason == DozeLog.REASON_SENSOR_QUICK_PICKUP
                    || reason == DozeLog.REASON_SENSOR_UDFPS_LONG_PRESS)) {
                return;
            }

            // When already showing auth UI, PULSE_REASON_FINGERPRINT_PULSE_SHOW_AUTH_UI
            // doesn't need to request a new pulse
            if ((dozeState == State.DOZE_PULSING_AUTH_UI || dozeState == State.DOZE_PULSING)
                    && reason == DozeLog.PULSE_REASON_FINGERPRINT_PULSE_SHOW_AUTH_UI) {
                return;
            }

            // When already showing full aod UI, PULSE_REASON_FINGERPRINT_PULSE_SHOW_FULL_UI
            // doesn't need to request a new pulse
            if (dozeState == State.DOZE_PULSING
                    && reason == DozeLog.PULSE_REASON_FINGERPRINT_PULSE_SHOW_FULL_UI) {
                return;
            }

            // When we're already pulsing and showing selective or no UI,
            // we can directly go to other pulsing states.
            if (selectiveUiPulsing) {
                if (reason == DozeLog.PULSE_REASON_FINGERPRINT_PULSE_SHOW_AUTH_UI) {
                    mMachine.requestState(State.DOZE_PULSING_AUTH_UI);
                } else {
                    // all other pulses should show full aod ui
                    mMachine.requestState(State.DOZE_PULSING);
                }
                return;
            }

        }

        if (!mAllowPulseTriggers || mDozeHost.isPulsePending()
                || !canPulse(dozeState, performedProxCheck)) {
+3 −3
Original line number Diff line number Diff line
@@ -103,9 +103,9 @@ public class DozeUi implements DozeMachine.Part {
                                requestState = DozeMachine.State.DOZE_PULSING_BRIGHT;
                            }

                            if (com.android.systemui.Flags.newDozingKeyguardStates()
                                    && !mDozeParameters.getAlwaysOn()) {
                                if (reason == DozeLog.REASON_SENSOR_UDFPS_LONG_PRESS) {
                            if (com.android.systemui.Flags.newDozingKeyguardStates()) {
                                if (reason == DozeLog.REASON_SENSOR_UDFPS_LONG_PRESS
                                        || reason == DozeLog.REASON_SENSOR_QUICK_PICKUP) {
                                    requestState = DozeMachine.State.DOZE_PULSING_WITHOUT_UI;
                                } else if (reason
                                        == DozeLog.PULSE_REASON_FINGERPRINT_PULSE_SHOW_AUTH_UI) {
Loading