diff options
10 files changed, 168 insertions, 118 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeHost.java b/packages/SystemUI/src/com/android/systemui/doze/DozeHost.java index b59855426a3c..4c4aa5ce1911 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeHost.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeHost.java @@ -33,6 +33,18 @@ public interface DozeHost { boolean isProvisioned(); /** + * Whether there's a pulse that's been requested but hasn't started transitioning to pulsing + * states yet. + */ + boolean isPulsePending(); + + /** + * @param isPulsePending whether a pulse has been requested but hasn't started transitioning + * to the pulse state yet + */ + void setPulsePending(boolean isPulsePending); + + /** * Makes a current pulse last for twice as long. * @param reason why we're extending it. */ diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java index 4161cf6d2657..8ae305b1f329 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java @@ -280,8 +280,8 @@ public class DozeLog implements Dumpable { /** * Appends pulse dropped event to logs */ - public void tracePulseDropped(boolean pulsePending, DozeMachine.State state, boolean blocked) { - mLogger.logPulseDropped(pulsePending, state, blocked); + public void tracePulseDropped(String from, DozeMachine.State state) { + mLogger.logPulseDropped(from, state); } /** @@ -292,6 +292,13 @@ public class DozeLog implements Dumpable { } /** + * Appends pulsing event to logs. + */ + public void tracePulseEvent(String pulseEvent, boolean dozing, int pulseReason) { + mLogger.logPulseEvent(pulseEvent, dozing, DozeLog.reasonToString(pulseReason)); + } + + /** * Appends pulse dropped event to logs * @param reason why the pulse was dropped */ diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeLogger.kt b/packages/SystemUI/src/com/android/systemui/doze/DozeLogger.kt index 4b279ec8f008..21a2c3b57f82 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeLogger.kt +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeLogger.kt @@ -224,13 +224,12 @@ class DozeLogger @Inject constructor( }) } - fun logPulseDropped(pulsePending: Boolean, state: DozeMachine.State, blocked: Boolean) { + fun logPulseDropped(from: String, state: DozeMachine.State) { buffer.log(TAG, INFO, { - bool1 = pulsePending - str1 = state.name - bool2 = blocked + str1 = from + str2 = state.name }, { - "Pulse dropped, pulsePending=$bool1 state=$str1 blocked=$bool2" + "Pulse dropped, cannot pulse from=$str1 state=$str2" }) } @@ -243,6 +242,16 @@ class DozeLogger @Inject constructor( }) } + fun logPulseEvent(pulseEvent: String, dozing: Boolean, pulseReason: String) { + buffer.log(TAG, DEBUG, { + str1 = pulseEvent + bool1 = dozing + str2 = pulseReason + }, { + "Pulse-$str1 dozing=$bool1 pulseReason=$str2" + }) + } + fun logPulseDropped(reason: String) { buffer.log(TAG, INFO, { str1 = reason diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java index 00ac8bc7e3fa..ef454ffbdeb1 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java @@ -102,7 +102,6 @@ public class DozeTriggers implements DozeMachine.Part { private final UiEventLogger mUiEventLogger; private long mNotificationPulseTime; - private boolean mPulsePending; private Runnable mAodInterruptRunnable; /** see {@link #onProximityFar} prox for callback */ @@ -303,8 +302,8 @@ public class DozeTriggers implements DozeMachine.Part { null /* onPulseSuppressedListener */); } } else { - proximityCheckThenCall((result) -> { - if (result != null && result) { + proximityCheckThenCall((isNear) -> { + if (isNear != null && isNear) { // In pocket, drop event. mDozeLog.traceSensorEventDropped(pulseReason, "prox reporting near"); return; @@ -410,8 +409,8 @@ public class DozeTriggers implements DozeMachine.Part { sWakeDisplaySensorState = wake; if (wake) { - proximityCheckThenCall((result) -> { - if (result != null && result) { + proximityCheckThenCall((isNear) -> { + if (isNear != null && isNear) { // In pocket, drop event. return; } @@ -537,24 +536,44 @@ public class DozeTriggers implements DozeMachine.Part { return; } - if (mPulsePending || !mAllowPulseTriggers || !canPulse()) { - if (mAllowPulseTriggers) { - mDozeLog.tracePulseDropped(mPulsePending, dozeState, mDozeHost.isPulsingBlocked()); + if (!mAllowPulseTriggers || mDozeHost.isPulsePending() || !canPulse()) { + if (!mAllowPulseTriggers) { + mDozeLog.tracePulseDropped("requestPulse - !mAllowPulseTriggers"); + } else if (mDozeHost.isPulsePending()) { + mDozeLog.tracePulseDropped("requestPulse - pulsePending"); + } else if (!canPulse()) { + mDozeLog.tracePulseDropped("requestPulse", dozeState); } runIfNotNull(onPulseSuppressedListener); return; } - mPulsePending = true; - proximityCheckThenCall((result) -> { - if (result != null && result) { + mDozeHost.setPulsePending(true); + proximityCheckThenCall((isNear) -> { + if (isNear != null && isNear) { // in pocket, abort pulse - mDozeLog.tracePulseDropped("inPocket"); - mPulsePending = false; + mDozeLog.tracePulseDropped("requestPulse - inPocket"); + mDozeHost.setPulsePending(false); runIfNotNull(onPulseSuppressedListener); } else { // not in pocket, continue pulsing - continuePulseRequest(reason); + final boolean isPulsePending = mDozeHost.isPulsePending(); + mDozeHost.setPulsePending(false); + if (!isPulsePending || mDozeHost.isPulsingBlocked() || !canPulse()) { + if (!isPulsePending) { + mDozeLog.tracePulseDropped("continuePulseRequest - pulse no longer" + + " pending, pulse was cancelled before it could start" + + " transitioning to pulsing state."); + } else if (mDozeHost.isPulsingBlocked()) { + mDozeLog.tracePulseDropped("continuePulseRequest - pulsingBlocked"); + } else if (!canPulse()) { + mDozeLog.tracePulseDropped("continuePulseRequest", mMachine.getState()); + } + runIfNotNull(onPulseSuppressedListener); + return; + } + + mMachine.requestPulse(reason); } }, !mDozeParameters.getProxCheckBeforePulse() || performedProxCheck, reason); @@ -569,16 +588,6 @@ public class DozeTriggers implements DozeMachine.Part { || mMachine.getState() == DozeMachine.State.DOZE_AOD_DOCKED; } - private void continuePulseRequest(int reason) { - mPulsePending = false; - if (mDozeHost.isPulsingBlocked() || !canPulse()) { - mDozeLog.tracePulseDropped(mPulsePending, mMachine.getState(), - mDozeHost.isPulsingBlocked()); - return; - } - mMachine.requestPulse(reason); - } - @Nullable private InstanceId getKeyguardSessionId() { return mSessionTracker.getSessionId(SESSION_KEYGUARD); @@ -591,7 +600,7 @@ public class DozeTriggers implements DozeMachine.Part { pw.print(" notificationPulseTime="); pw.println(Formatter.formatShortElapsedTime(mContext, mNotificationPulseTime)); - pw.println(" pulsePending=" + mPulsePending); + pw.println(" DozeHost#isPulsePending=" + mDozeHost.isPulsePending()); pw.println("DozeSensors:"); IndentingPrintWriter idpw = new IndentingPrintWriter(pw); idpw.increaseIndent(); diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java b/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java index 5612c22311fb..01be3958e85f 100644 --- a/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java +++ b/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java @@ -43,7 +43,7 @@ public class LogModule { @SysUISingleton @DozeLog public static LogBuffer provideDozeLogBuffer(LogBufferFactory factory) { - return factory.create("DozeLog", 100); + return factory.create("DozeLog", 120); } /** Provides a logging buffer for all logs related to the data layer of notifications. */ diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java index 7de4668abe28..00673169d036 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java @@ -18,7 +18,6 @@ package com.android.systemui.statusbar.phone; import android.annotation.NonNull; import android.os.Handler; -import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.dagger.SysUISingleton; @@ -34,9 +33,6 @@ import javax.inject.Inject; */ @SysUISingleton public class DozeScrimController implements StateListener { - private static final String TAG = "DozeScrimController"; - private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); - private final DozeLog mDozeLog; private final DozeParameters mDozeParameters; private final Handler mHandler = new Handler(); @@ -44,28 +40,26 @@ public class DozeScrimController implements StateListener { private boolean mDozing; private DozeHost.PulseCallback mPulseCallback; private int mPulseReason; - private boolean mFullyPulsing; private final ScrimController.Callback mScrimCallback = new ScrimController.Callback() { @Override public void onDisplayBlanked() { - if (DEBUG) { - Log.d(TAG, "Pulse in, mDozing=" + mDozing + " mPulseReason=" - + DozeLog.reasonToString(mPulseReason)); - } if (!mDozing) { + mDozeLog.tracePulseDropped("onDisplayBlanked - not dozing"); return; } - // Signal that the pulse is ready to turn the screen on and draw. - pulseStarted(); + if (mPulseCallback != null) { + // Signal that the pulse is ready to turn the screen on and draw. + mDozeLog.tracePulseStart(mPulseReason); + mPulseCallback.onPulseStarted(); + } } @Override public void onFinished() { - if (DEBUG) { - Log.d(TAG, "Pulse in finished, mDozing=" + mDozing); - } + mDozeLog.tracePulseEvent("scrimCallback-onFinished", mDozing, mPulseReason); + if (!mDozing) { return; } @@ -78,7 +72,6 @@ public class DozeScrimController implements StateListener { mHandler.postDelayed(mPulseOutExtended, mDozeParameters.getPulseVisibleDurationExtended()); } - mFullyPulsing = true; } /** @@ -118,19 +111,14 @@ public class DozeScrimController implements StateListener { } if (!mDozing || mPulseCallback != null) { - if (DEBUG) { - Log.d(TAG, "Pulse suppressed. Dozing: " + mDozeParameters + " had callback? " - + (mPulseCallback != null)); - } // Pulse suppressed. callback.onPulseFinished(); if (!mDozing) { - mDozeLog.tracePulseDropped("device isn't dozing"); + mDozeLog.tracePulseDropped("pulse - device isn't dozing"); } else { - mDozeLog.tracePulseDropped("already has pulse callback mPulseCallback=" + mDozeLog.tracePulseDropped("pulse - already has pulse callback mPulseCallback=" + mPulseCallback); } - return; } @@ -141,9 +129,7 @@ public class DozeScrimController implements StateListener { } public void pulseOutNow() { - if (mPulseCallback != null && mFullyPulsing) { - mPulseOut.run(); - } + mPulseOut.run(); } public boolean isPulsing() { @@ -168,24 +154,16 @@ public class DozeScrimController implements StateListener { private void cancelPulsing() { if (mPulseCallback != null) { - if (DEBUG) Log.d(TAG, "Cancel pulsing"); - mFullyPulsing = false; + mDozeLog.tracePulseEvent("cancel", mDozing, mPulseReason); mHandler.removeCallbacks(mPulseOut); mHandler.removeCallbacks(mPulseOutExtended); pulseFinished(); } } - private void pulseStarted() { - mDozeLog.tracePulseStart(mPulseReason); - if (mPulseCallback != null) { - mPulseCallback.onPulseStarted(); - } - } - private void pulseFinished() { - mDozeLog.tracePulseFinish(); if (mPulseCallback != null) { + mDozeLog.tracePulseFinish(); mPulseCallback.onPulseFinished(); mPulseCallback = null; } @@ -202,10 +180,9 @@ public class DozeScrimController implements StateListener { private final Runnable mPulseOut = new Runnable() { @Override public void run() { - mFullyPulsing = false; mHandler.removeCallbacks(mPulseOut); mHandler.removeCallbacks(mPulseOutExtended); - if (DEBUG) Log.d(TAG, "Pulse out, mDozing=" + mDozing); + mDozeLog.tracePulseEvent("out", mDozing, mPulseReason); if (!mDozing) return; pulseFinished(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java index 24ce5e98bdd0..5196e10df450 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java @@ -36,7 +36,6 @@ import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.doze.DozeHost; import com.android.systemui.doze.DozeLog; import com.android.systemui.doze.DozeReceiver; -import com.android.systemui.keyguard.KeyguardViewMediator; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.shade.NotificationPanelViewController; import com.android.systemui.shade.NotificationShadeWindowViewController; @@ -48,6 +47,7 @@ import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.DeviceProvisionedController; +import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener; import com.android.systemui.util.Assert; import java.util.ArrayList; @@ -80,7 +80,6 @@ public final class DozeServiceHost implements DozeHost { private final BatteryController mBatteryController; private final ScrimController mScrimController; private final Lazy<BiometricUnlockController> mBiometricUnlockControllerLazy; - private final KeyguardViewMediator mKeyguardViewMediator; private final Lazy<AssistManager> mAssistManagerLazy; private final DozeScrimController mDozeScrimController; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; @@ -95,6 +94,7 @@ public final class DozeServiceHost implements DozeHost { private View mAmbientIndicationContainer; private CentralSurfaces mCentralSurfaces; private boolean mAlwaysOnSuppressed; + private boolean mPulsePending; @Inject public DozeServiceHost(DozeLog dozeLog, PowerManager powerManager, @@ -104,7 +104,6 @@ public final class DozeServiceHost implements DozeHost { HeadsUpManagerPhone headsUpManagerPhone, BatteryController batteryController, ScrimController scrimController, Lazy<BiometricUnlockController> biometricUnlockControllerLazy, - KeyguardViewMediator keyguardViewMediator, Lazy<AssistManager> assistManagerLazy, DozeScrimController dozeScrimController, KeyguardUpdateMonitor keyguardUpdateMonitor, PulseExpansionHandler pulseExpansionHandler, @@ -122,7 +121,6 @@ public final class DozeServiceHost implements DozeHost { mBatteryController = batteryController; mScrimController = scrimController; mBiometricUnlockControllerLazy = biometricUnlockControllerLazy; - mKeyguardViewMediator = keyguardViewMediator; mAssistManagerLazy = assistManagerLazy; mDozeScrimController = dozeScrimController; mKeyguardUpdateMonitor = keyguardUpdateMonitor; @@ -131,6 +129,7 @@ public final class DozeServiceHost implements DozeHost { mNotificationWakeUpCoordinator = notificationWakeUpCoordinator; mAuthController = authController; mNotificationIconAreaController = notificationIconAreaController; + mHeadsUpManagerPhone.addListener(mOnHeadsUpChangedListener); } // TODO: we should try to not pass status bar in here if we can avoid it. @@ -246,7 +245,7 @@ public final class DozeServiceHost implements DozeHost { mDozeScrimController.pulse(new PulseCallback() { @Override public void onPulseStarted() { - callback.onPulseStarted(); + callback.onPulseStarted(); // requestState(DozeMachine.State.DOZE_PULSING) mCentralSurfaces.updateNotificationPanelTouchState(); setPulsing(true); } @@ -254,7 +253,7 @@ public final class DozeServiceHost implements DozeHost { @Override public void onPulseFinished() { mPulsing = false; - callback.onPulseFinished(); + callback.onPulseFinished(); // requestState(DozeMachine.State.DOZE_PULSE_DONE) mCentralSurfaces.updateNotificationPanelTouchState(); mScrimController.setWakeLockScreenSensorActive(false); setPulsing(false); @@ -338,9 +337,8 @@ public final class DozeServiceHost implements DozeHost { @Override public void stopPulsing() { - if (mDozeScrimController.isPulsing()) { - mDozeScrimController.pulseOutNow(); - } + setPulsePending(false); // prevent any pending pulses from continuing + mDozeScrimController.pulseOutNow(); } @Override @@ -451,6 +449,16 @@ public final class DozeServiceHost implements DozeHost { } } + @Override + public boolean isPulsePending() { + return mPulsePending; + } + + @Override + public void setPulsePending(boolean isPulsePending) { + mPulsePending = isPulsePending; + } + /** * Whether always-on-display is being suppressed. This does not affect wakeup gestures like * pickup and tap. @@ -458,4 +466,22 @@ public final class DozeServiceHost implements DozeHost { public boolean isAlwaysOnSuppressed() { return mAlwaysOnSuppressed; } + + final OnHeadsUpChangedListener mOnHeadsUpChangedListener = new OnHeadsUpChangedListener() { + @Override + public void onHeadsUpStateChanged(NotificationEntry entry, boolean isHeadsUp) { + if (mStatusBarStateController.isDozing() && isHeadsUp) { + entry.setPulseSuppressed(false); + fireNotificationPulse(entry); + if (isPulsing()) { + mDozeScrimController.cancelPendingPulseTimeout(); + } + } + if (!isHeadsUp && !mHeadsUpManagerPhone.hasNotifications()) { + // There are no longer any notifications to show. We should end the + // pulse now. + stopPulsing(); + } + } + }; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeadsUpChangeListener.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeadsUpChangeListener.java index ae201e3ea8cf..5512bedb5dd4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeadsUpChangeListener.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeadsUpChangeListener.java @@ -21,8 +21,6 @@ import com.android.systemui.shade.NotificationPanelViewController; import com.android.systemui.statusbar.NotificationRemoteInputManager; import com.android.systemui.statusbar.NotificationShadeWindowController; import com.android.systemui.statusbar.StatusBarState; -import com.android.systemui.statusbar.notification.collection.NotificationEntry; -import com.android.systemui.statusbar.notification.init.NotificationsController; import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent; import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener; import com.android.systemui.statusbar.window.StatusBarWindowController; @@ -41,9 +39,6 @@ public class StatusBarHeadsUpChangeListener implements OnHeadsUpChangedListener private final HeadsUpManagerPhone mHeadsUpManager; private final StatusBarStateController mStatusBarStateController; private final NotificationRemoteInputManager mNotificationRemoteInputManager; - private final NotificationsController mNotificationsController; - private final DozeServiceHost mDozeServiceHost; - private final DozeScrimController mDozeScrimController; @Inject StatusBarHeadsUpChangeListener( @@ -53,10 +48,7 @@ public class StatusBarHeadsUpChangeListener implements OnHeadsUpChangedListener KeyguardBypassController keyguardBypassController, HeadsUpManagerPhone headsUpManager, StatusBarStateController statusBarStateController, - NotificationRemoteInputManager notificationRemoteInputManager, - NotificationsController notificationsController, - DozeServiceHost dozeServiceHost, - DozeScrimController dozeScrimController) { + NotificationRemoteInputManager notificationRemoteInputManager) { mNotificationShadeWindowController = notificationShadeWindowController; mStatusBarWindowController = statusBarWindowController; @@ -65,9 +57,6 @@ public class StatusBarHeadsUpChangeListener implements OnHeadsUpChangedListener mHeadsUpManager = headsUpManager; mStatusBarStateController = statusBarStateController; mNotificationRemoteInputManager = notificationRemoteInputManager; - mNotificationsController = notificationsController; - mDozeServiceHost = dozeServiceHost; - mDozeScrimController = dozeScrimController; } @Override @@ -117,20 +106,4 @@ public class StatusBarHeadsUpChangeListener implements OnHeadsUpChangedListener } } } - - @Override - public void onHeadsUpStateChanged(NotificationEntry entry, boolean isHeadsUp) { - if (mStatusBarStateController.isDozing() && isHeadsUp) { - entry.setPulseSuppressed(false); - mDozeServiceHost.fireNotificationPulse(entry); - if (mDozeServiceHost.isPulsing()) { - mDozeScrimController.cancelPendingPulseTimeout(); - } - } - if (!isHeadsUp && !mHeadsUpManager.hasNotifications()) { - // There are no longer any notifications to show. We should end the - //pulse now. - mDozeScrimController.pulseOutNow(); - } - } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java index 6436981aee06..781dc1550048 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java @@ -144,6 +144,12 @@ public class DozeTriggersTest extends SysuiTestCase { mTriggers.transitionTo(DozeMachine.State.INITIALIZED, DozeMachine.State.DOZE); clearInvocations(mMachine); + ArgumentCaptor<Boolean> boolCaptor = ArgumentCaptor.forClass(Boolean.class); + doAnswer(invocation -> + when(mHost.isPulsePending()).thenReturn(boolCaptor.getValue()) + ).when(mHost).setPulsePending(boolCaptor.capture()); + + when(mHost.isPulsingBlocked()).thenReturn(false); mProximitySensor.setLastEvent(new ThresholdSensorEvent(true, 1)); captor.getValue().onNotificationAlerted(null /* pulseSuppressedListener */); mProximitySensor.alertListeners(); @@ -160,6 +166,29 @@ public class DozeTriggersTest extends SysuiTestCase { } @Test + public void testOnNotification_noPulseIfPulseIsNotPendingAnymore() { + when(mMachine.getState()).thenReturn(DozeMachine.State.DOZE); + ArgumentCaptor<DozeHost.Callback> captor = ArgumentCaptor.forClass(DozeHost.Callback.class); + doAnswer(invocation -> null).when(mHost).addCallback(captor.capture()); + + mTriggers.transitionTo(UNINITIALIZED, DozeMachine.State.INITIALIZED); + mTriggers.transitionTo(DozeMachine.State.INITIALIZED, DozeMachine.State.DOZE); + clearInvocations(mMachine); + when(mHost.isPulsingBlocked()).thenReturn(false); + + // GIVEN pulsePending = false + when(mHost.isPulsePending()).thenReturn(false); + + // WHEN prox check returns FAR + mProximitySensor.setLastEvent(new ThresholdSensorEvent(false, 2)); + captor.getValue().onNotificationAlerted(null /* pulseSuppressedListener */); + mProximitySensor.alertListeners(); + + // THEN don't request pulse because the pending pulse was abandoned early + verify(mMachine, never()).requestPulse(anyInt()); + } + + @Test public void testTransitionTo_disablesAndEnablesTouchSensors() { when(mMachine.getState()).thenReturn(DozeMachine.State.DOZE); @@ -237,6 +266,11 @@ public class DozeTriggersTest extends SysuiTestCase { when(mSessionTracker.getSessionId(StatusBarManager.SESSION_KEYGUARD)) .thenReturn(keyguardSessionId); + ArgumentCaptor<Boolean> boolCaptor = ArgumentCaptor.forClass(Boolean.class); + doAnswer(invocation -> + when(mHost.isPulsePending()).thenReturn(boolCaptor.getValue()) + ).when(mHost).setPulsePending(boolCaptor.capture()); + // WHEN quick pick up is triggered mTriggers.onSensor(DozeLog.REASON_SENSOR_QUICK_PICKUP, 100, 100, null); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java index 9de9db1d39e7..996851e218f1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java @@ -40,7 +40,6 @@ import com.android.systemui.assist.AssistManager; import com.android.systemui.biometrics.AuthController; import com.android.systemui.doze.DozeHost; import com.android.systemui.doze.DozeLog; -import com.android.systemui.keyguard.KeyguardViewMediator; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.shade.NotificationPanelViewController; import com.android.systemui.shade.NotificationShadeWindowViewController; @@ -73,7 +72,6 @@ public class DozeServiceHostTest extends SysuiTestCase { @Mock private HeadsUpManagerPhone mHeadsUpManager; @Mock private ScrimController mScrimController; @Mock private DozeScrimController mDozeScrimController; - @Mock private KeyguardViewMediator mKeyguardViewMediator; @Mock private StatusBarStateControllerImpl mStatusBarStateController; @Mock private BatteryController mBatteryController; @Mock private DeviceProvisionedController mDeviceProvisionedController; @@ -101,7 +99,7 @@ public class DozeServiceHostTest extends SysuiTestCase { mDozeServiceHost = new DozeServiceHost(mDozeLog, mPowerManager, mWakefullnessLifecycle, mStatusBarStateController, mDeviceProvisionedController, mHeadsUpManager, mBatteryController, mScrimController, () -> mBiometricUnlockController, - mKeyguardViewMediator, () -> mAssistManager, mDozeScrimController, + () -> mAssistManager, mDozeScrimController, mKeyguardUpdateMonitor, mPulseExpansionHandler, mNotificationShadeWindowController, mNotificationWakeUpCoordinator, mAuthController, mNotificationIconAreaController); @@ -132,19 +130,11 @@ public class DozeServiceHostTest extends SysuiTestCase { verify(mStatusBarStateController).setIsDozing(eq(false)); } - @Test public void testPulseWhileDozing_updatesScrimController() { mCentralSurfaces.setBarStateForTest(StatusBarState.KEYGUARD); mCentralSurfaces.showKeyguardImpl(); - // Keep track of callback to be able to stop the pulse -// DozeHost.PulseCallback[] pulseCallback = new DozeHost.PulseCallback[1]; -// doAnswer(invocation -> { -// pulseCallback[0] = invocation.getArgument(0); -// return null; -// }).when(mDozeScrimController).pulse(any(), anyInt()); - // Starting a pulse should change the scrim controller to the pulsing state mDozeServiceHost.pulseWhileDozing(new DozeHost.PulseCallback() { @Override @@ -210,4 +200,17 @@ public class DozeServiceHostTest extends SysuiTestCase { } } } + + @Test + public void testStopPulsing_setPendingPulseToFalse() { + // GIVEN a pending pulse + mDozeServiceHost.setPulsePending(true); + + // WHEN pulsing is stopped + mDozeServiceHost.stopPulsing(); + + // THEN isPendingPulse=false, pulseOutNow is called + assertFalse(mDozeServiceHost.isPulsePending()); + verify(mDozeScrimController).pulseOutNow(); + } } |