Loading packages/SystemUI/multivalentTests/src/com/android/systemui/doze/DozeUiTest.java +75 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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 { Loading Loading @@ -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)); } } packages/SystemUI/src/com/android/systemui/doze/DozeLog.java +1 −0 Original line number Diff line number Diff line Loading @@ -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 }) Loading packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java +12 −2 Original line number Diff line number Diff line Loading @@ -123,6 +123,7 @@ public class DozeSensors { private boolean mListeningProxSensors; private boolean mListeningAodOnlySensors; private boolean mUdfpsEnrolled; private boolean mOpticalUdfpsEnrolled; @DevicePostureController.DevicePostureInt private int mDevicePosture; Loading Loading @@ -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( Loading Loading @@ -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()); } Loading Loading @@ -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) { Loading Loading @@ -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()); Loading packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +34 −9 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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)) { Loading packages/SystemUI/src/com/android/systemui/doze/DozeUi.java +3 −3 Original line number Diff line number Diff line Loading @@ -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 Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/doze/DozeUiTest.java +75 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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 { Loading Loading @@ -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)); } }
packages/SystemUI/src/com/android/systemui/doze/DozeLog.java +1 −0 Original line number Diff line number Diff line Loading @@ -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 }) Loading
packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java +12 −2 Original line number Diff line number Diff line Loading @@ -123,6 +123,7 @@ public class DozeSensors { private boolean mListeningProxSensors; private boolean mListeningAodOnlySensors; private boolean mUdfpsEnrolled; private boolean mOpticalUdfpsEnrolled; @DevicePostureController.DevicePostureInt private int mDevicePosture; Loading Loading @@ -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( Loading Loading @@ -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()); } Loading Loading @@ -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) { Loading Loading @@ -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()); Loading
packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +34 −9 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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)) { Loading
packages/SystemUI/src/com/android/systemui/doze/DozeUi.java +3 −3 Original line number Diff line number Diff line Loading @@ -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