Merge "Add null-safety check for DozeState" into tm-qpr-dev

This commit is contained in:
TreeHugger Robot
2022-10-21 16:55:38 +00:00
committed by Android (Google) Code Review
3 changed files with 31 additions and 14 deletions

View File

@@ -224,10 +224,14 @@ class DozeLogger @Inject constructor(
}) })
} }
fun logPulseDropped(from: String, state: DozeMachine.State) { /**
* Log why a pulse was dropped and the current doze machine state. The state can be null
* if the DozeMachine is the middle of transitioning between states.
*/
fun logPulseDropped(from: String, state: DozeMachine.State?) {
buffer.log(TAG, INFO, { buffer.log(TAG, INFO, {
str1 = from str1 = from
str2 = state.name str2 = state?.name
}, { }, {
"Pulse dropped, cannot pulse from=$str1 state=$str2" "Pulse dropped, cannot pulse from=$str1 state=$str2"
}) })

View File

@@ -536,13 +536,13 @@ public class DozeTriggers implements DozeMachine.Part {
return; return;
} }
if (!mAllowPulseTriggers || mDozeHost.isPulsePending() || !canPulse()) { if (!mAllowPulseTriggers || mDozeHost.isPulsePending() || !canPulse(dozeState)) {
if (!mAllowPulseTriggers) { if (!mAllowPulseTriggers) {
mDozeLog.tracePulseDropped("requestPulse - !mAllowPulseTriggers"); mDozeLog.tracePulseDropped("requestPulse - !mAllowPulseTriggers");
} else if (mDozeHost.isPulsePending()) { } else if (mDozeHost.isPulsePending()) {
mDozeLog.tracePulseDropped("requestPulse - pulsePending"); mDozeLog.tracePulseDropped("requestPulse - pulsePending");
} else if (!canPulse()) { } else if (!canPulse(dozeState)) {
mDozeLog.tracePulseDropped("requestPulse", dozeState); mDozeLog.tracePulseDropped("requestPulse - dozeState cannot pulse", dozeState);
} }
runIfNotNull(onPulseSuppressedListener); runIfNotNull(onPulseSuppressedListener);
return; return;
@@ -559,15 +559,16 @@ public class DozeTriggers implements DozeMachine.Part {
// not in pocket, continue pulsing // not in pocket, continue pulsing
final boolean isPulsePending = mDozeHost.isPulsePending(); final boolean isPulsePending = mDozeHost.isPulsePending();
mDozeHost.setPulsePending(false); mDozeHost.setPulsePending(false);
if (!isPulsePending || mDozeHost.isPulsingBlocked() || !canPulse()) { if (!isPulsePending || mDozeHost.isPulsingBlocked() || !canPulse(dozeState)) {
if (!isPulsePending) { if (!isPulsePending) {
mDozeLog.tracePulseDropped("continuePulseRequest - pulse no longer" mDozeLog.tracePulseDropped("continuePulseRequest - pulse no longer"
+ " pending, pulse was cancelled before it could start" + " pending, pulse was cancelled before it could start"
+ " transitioning to pulsing state."); + " transitioning to pulsing state.");
} else if (mDozeHost.isPulsingBlocked()) { } else if (mDozeHost.isPulsingBlocked()) {
mDozeLog.tracePulseDropped("continuePulseRequest - pulsingBlocked"); mDozeLog.tracePulseDropped("continuePulseRequest - pulsingBlocked");
} else if (!canPulse()) { } else if (!canPulse(dozeState)) {
mDozeLog.tracePulseDropped("continuePulseRequest", mMachine.getState()); mDozeLog.tracePulseDropped("continuePulseRequest"
+ " - doze state cannot pulse", dozeState);
} }
runIfNotNull(onPulseSuppressedListener); runIfNotNull(onPulseSuppressedListener);
return; return;
@@ -582,10 +583,10 @@ public class DozeTriggers implements DozeMachine.Part {
.ifPresent(uiEventEnum -> mUiEventLogger.log(uiEventEnum, getKeyguardSessionId())); .ifPresent(uiEventEnum -> mUiEventLogger.log(uiEventEnum, getKeyguardSessionId()));
} }
private boolean canPulse() { private boolean canPulse(DozeMachine.State dozeState) {
return mMachine.getState() == DozeMachine.State.DOZE return dozeState == DozeMachine.State.DOZE
|| mMachine.getState() == DozeMachine.State.DOZE_AOD || dozeState == DozeMachine.State.DOZE_AOD
|| mMachine.getState() == DozeMachine.State.DOZE_AOD_DOCKED; || dozeState == DozeMachine.State.DOZE_AOD_DOCKED;
} }
@Nullable @Nullable

View File

@@ -23,10 +23,10 @@ import static com.android.systemui.doze.DozeMachine.State.UNINITIALIZED;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
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.doAnswer; import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never; import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
@@ -88,6 +88,8 @@ public class DozeTriggersTest extends SysuiTestCase {
@Mock @Mock
private ProximityCheck mProximityCheck; private ProximityCheck mProximityCheck;
@Mock @Mock
private DozeLog mDozeLog;
@Mock
private AuthController mAuthController; private AuthController mAuthController;
@Mock @Mock
private UiEventLogger mUiEventLogger; private UiEventLogger mUiEventLogger;
@@ -127,7 +129,7 @@ public class DozeTriggersTest extends SysuiTestCase {
mTriggers = new DozeTriggers(mContext, mHost, config, dozeParameters, mTriggers = new DozeTriggers(mContext, mHost, config, dozeParameters,
asyncSensorManager, wakeLock, mDockManager, mProximitySensor, asyncSensorManager, wakeLock, mDockManager, mProximitySensor,
mProximityCheck, mock(DozeLog.class), mBroadcastDispatcher, new FakeSettings(), mProximityCheck, mDozeLog, mBroadcastDispatcher, new FakeSettings(),
mAuthController, mUiEventLogger, mSessionTracker, mKeyguardStateController, mAuthController, mUiEventLogger, mSessionTracker, mKeyguardStateController,
mDevicePostureController); mDevicePostureController);
mTriggers.setDozeMachine(mMachine); mTriggers.setDozeMachine(mMachine);
@@ -342,6 +344,16 @@ public class DozeTriggersTest extends SysuiTestCase {
verify(mProximityCheck).destroy(); verify(mProximityCheck).destroy();
} }
@Test
public void testIsExecutingTransition_dropPulse() {
when(mHost.isPulsePending()).thenReturn(false);
when(mMachine.isExecutingTransition()).thenReturn(true);
mTriggers.onSensor(DozeLog.PULSE_REASON_SENSOR_LONG_PRESS, 100, 100, null);
verify(mDozeLog).tracePulseDropped(anyString(), eq(null));
}
private void waitForSensorManager() { private void waitForSensorManager() {
mExecutor.runAllReady(); mExecutor.runAllReady();
} }