Merge "Plumb through the reason for wakeup from Doze." into tm-qpr-dev am: 8055d0e9df

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19593552

Change-Id: Icec18eb875489c766311c0cd7c21bedfe374503b
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Chandru S
2022-09-01 16:48:56 +00:00
committed by Automerger Merge Worker
8 changed files with 54 additions and 43 deletions

View File

@@ -269,9 +269,10 @@ public class DozeMachine {
return mPulseReason;
}
/** Requests the PowerManager to wake up now. */
public void wakeUp() {
mDozeService.requestWakeUp();
/** Requests the PowerManager to wake up now.
* @param reason {@link DozeLog.Reason} that woke up the device.*/
public void wakeUp(@DozeLog.Reason int reason) {
mDozeService.requestWakeUp(reason);
}
public boolean isExecutingTransition() {
@@ -469,7 +470,7 @@ public class DozeMachine {
void setDozeScreenState(int state);
/** Request waking up. */
void requestWakeUp();
void requestWakeUp(@DozeLog.Reason int reason);
/** Set screen brightness */
void setDozeScreenBrightness(int brightness);
@@ -492,8 +493,8 @@ public class DozeMachine {
}
@Override
public void requestWakeUp() {
mDelegate.requestWakeUp();
public void requestWakeUp(@DozeLog.Reason int reason) {
mDelegate.requestWakeUp(reason);
}
@Override

View File

@@ -113,10 +113,10 @@ public class DozeService extends DreamService
}
@Override
public void requestWakeUp() {
public void requestWakeUp(@DozeLog.Reason int reason) {
PowerManager pm = getSystemService(PowerManager.class);
pm.wakeUp(SystemClock.uptimeMillis(), PowerManager.WAKE_REASON_GESTURE,
"com.android.systemui:NODOZE");
"com.android.systemui:NODOZE " + DozeLog.reasonToString(reason));
}
@Override

View File

@@ -16,6 +16,8 @@
package com.android.systemui.doze;
import static android.app.StatusBarManager.SESSION_KEYGUARD;
import static com.android.systemui.doze.DozeMachine.State.DOZE_SUSPEND_TRIGGERS;
import static com.android.systemui.doze.DozeMachine.State.FINISH;
import static com.android.systemui.doze.DozeMachine.State.UNINITIALIZED;
@@ -34,19 +36,19 @@ import android.util.Log;
import android.view.Display;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.InstanceId;
import com.android.internal.logging.UiEvent;
import com.android.internal.logging.UiEventLogger;
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dock.DockManager;
import com.android.systemui.doze.DozeMachine.State;
import com.android.systemui.doze.dagger.DozeScope;
import com.android.systemui.log.SessionTracker;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.policy.DevicePostureController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.Assert;
import com.android.systemui.util.concurrency.DelayableExecutor;
import com.android.systemui.util.sensors.AsyncSensorManager;
import com.android.systemui.util.sensors.ProximityCheck;
import com.android.systemui.util.sensors.ProximitySensor;
@@ -80,6 +82,7 @@ public class DozeTriggers implements DozeMachine.Part {
private static final int PROXIMITY_TIMEOUT_DELAY_MS = 500;
private final Context mContext;
private final SessionTracker mSessionTracker;
private DozeMachine mMachine;
private final DozeLog mDozeLog;
private final DozeSensors mDozeSensors;
@@ -95,10 +98,8 @@ public class DozeTriggers implements DozeMachine.Part {
private final ProximityCheck mProxCheck;
private final BroadcastDispatcher mBroadcastDispatcher;
private final AuthController mAuthController;
private final DelayableExecutor mMainExecutor;
private final KeyguardStateController mKeyguardStateController;
private final UiEventLogger mUiEventLogger;
private final DevicePostureController mDevicePostureController;
private long mNotificationPulseTime;
private boolean mPulsePending;
@@ -185,8 +186,8 @@ public class DozeTriggers implements DozeMachine.Part {
ProximityCheck proxCheck,
DozeLog dozeLog, BroadcastDispatcher broadcastDispatcher,
SecureSettings secureSettings, AuthController authController,
@Main DelayableExecutor mainExecutor,
UiEventLogger uiEventLogger,
SessionTracker sessionTracker,
KeyguardStateController keyguardStateController,
DevicePostureController devicePostureController) {
mContext = context;
@@ -196,8 +197,8 @@ public class DozeTriggers implements DozeMachine.Part {
mSensorManager = sensorManager;
mWakeLock = wakeLock;
mAllowPulseTriggers = true;
mSessionTracker = sessionTracker;
mDevicePostureController = devicePostureController;
mDozeSensors = new DozeSensors(context, mSensorManager, dozeParameters,
config, wakeLock, this::onSensor, this::onProximityFar, dozeLog, proximitySensor,
secureSettings, authController, devicePostureController);
@@ -206,14 +207,9 @@ public class DozeTriggers implements DozeMachine.Part {
mDozeLog = dozeLog;
mBroadcastDispatcher = broadcastDispatcher;
mAuthController = authController;
mMainExecutor = mainExecutor;
mUiEventLogger = uiEventLogger;
mKeyguardStateController = keyguardStateController;
}
private final DevicePostureController.Callback mDevicePostureCallback =
posture -> {
};
@Override
public void setDozeMachine(DozeMachine dozeMachine) {
@@ -271,7 +267,7 @@ public class DozeTriggers implements DozeMachine.Part {
mProxCheck.check(PROXIMITY_TIMEOUT_DELAY_MS, near -> {
final long end = SystemClock.uptimeMillis();
mDozeLog.traceProximityResult(
near == null ? false : near,
near != null && near,
end - start,
reason);
callback.accept(near);
@@ -354,17 +350,17 @@ public class DozeTriggers implements DozeMachine.Part {
return mKeyguardStateController.isOccluded();
}
private void gentleWakeUp(int reason) {
private void gentleWakeUp(@DozeLog.Reason int reason) {
// Log screen wake up reason (lift/pickup, tap, double-tap)
Optional.ofNullable(DozingUpdateUiEvent.fromReason(reason))
.ifPresent(mUiEventLogger::log);
.ifPresent(uiEventEnum -> mUiEventLogger.log(uiEventEnum, getKeyguardSessionId()));
if (mDozeParameters.getDisplayNeedsBlanking()) {
// Let's prepare the display to wake-up by drawing black.
// This will cover the hardware wake-up sequence, where the display
// becomes black for a few frames.
mDozeHost.setAodDimmingScrim(1f);
}
mMachine.wakeUp();
mMachine.wakeUp(reason);
}
private void onProximityFar(boolean far) {
@@ -384,11 +380,10 @@ public class DozeTriggers implements DozeMachine.Part {
if (state == DozeMachine.State.DOZE_PULSING
|| state == DozeMachine.State.DOZE_PULSING_BRIGHT) {
boolean ignoreTouch = near;
if (DEBUG) {
Log.i(TAG, "Prox changed, ignore touch = " + ignoreTouch);
Log.i(TAG, "Prox changed, ignore touch = " + near);
}
mDozeHost.onIgnoreTouchWhilePulsing(ignoreTouch);
mDozeHost.onIgnoreTouchWhilePulsing(near);
}
if (far && (paused || pausing)) {
@@ -424,7 +419,8 @@ public class DozeTriggers implements DozeMachine.Part {
mMachine.requestState(DozeMachine.State.DOZE_AOD);
// Log sensor triggered
Optional.ofNullable(DozingUpdateUiEvent.fromReason(reason))
.ifPresent(mUiEventLogger::log);
.ifPresent(uiEventEnum ->
mUiEventLogger.log(uiEventEnum, getKeyguardSessionId()));
}
}, false /* alreadyPerformedProxCheck */, reason);
} else {
@@ -564,7 +560,7 @@ public class DozeTriggers implements DozeMachine.Part {
// Logs request pulse reason on AOD screen.
Optional.ofNullable(DozingUpdateUiEvent.fromReason(reason))
.ifPresent(mUiEventLogger::log);
.ifPresent(uiEventEnum -> mUiEventLogger.log(uiEventEnum, getKeyguardSessionId()));
}
private boolean canPulse() {
@@ -583,6 +579,11 @@ public class DozeTriggers implements DozeMachine.Part {
mMachine.requestPulse(reason);
}
@Nullable
private InstanceId getKeyguardSessionId() {
return mSessionTracker.getSessionId(SESSION_KEYGUARD);
}
@Override
public void dump(PrintWriter pw) {
pw.println(" mAodInterruptRunnable=" + mAodInterruptRunnable);

View File

@@ -448,7 +448,7 @@ public class DozeMachineTest extends SysuiTestCase {
@Test
public void testWakeUp_wakesUp() {
mMachine.wakeUp();
mMachine.wakeUp(DozeLog.REASON_SENSOR_PICKUP);
assertTrue(mServiceFake.requestedWakeup);
}

View File

@@ -75,9 +75,9 @@ public class DozeScreenStatePreventingAdapterTest extends SysuiTestCase {
}
@Test
public void forwards_requestWakeUp() throws Exception {
mWrapper.requestWakeUp();
verify(mInner).requestWakeUp();
public void forwards_requestWakeUp() {
mWrapper.requestWakeUp(DozeLog.REASON_SENSOR_PICKUP);
verify(mInner).requestWakeUp(DozeLog.REASON_SENSOR_PICKUP);
}
@Test

View File

@@ -48,7 +48,7 @@ public class DozeServiceFake implements DozeMachine.Service {
}
@Override
public void requestWakeUp() {
public void requestWakeUp(@DozeLog.Reason int reason) {
requestedWakeup = true;
}

View File

@@ -81,9 +81,9 @@ public class DozeSuspendScreenStatePreventingAdapterTest extends SysuiTestCase {
}
@Test
public void forwards_requestWakeUp() throws Exception {
mWrapper.requestWakeUp();
verify(mInner).requestWakeUp();
public void forwards_requestWakeUp() {
mWrapper.requestWakeUp(DozeLog.REASON_SENSOR_PICKUP);
verify(mInner).requestWakeUp(DozeLog.REASON_SENSOR_PICKUP);
}
@Test

View File

@@ -32,6 +32,7 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.StatusBarManager;
import android.hardware.Sensor;
import android.hardware.display.AmbientDisplayConfiguration;
import android.testing.AndroidTestingRunner;
@@ -40,12 +41,14 @@ import android.view.Display;
import androidx.test.filters.SmallTest;
import com.android.internal.logging.InstanceId;
import com.android.internal.logging.UiEventLogger;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dock.DockManager;
import com.android.systemui.doze.DozeTriggers.DozingUpdateUiEvent;
import com.android.systemui.log.SessionTracker;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.policy.DevicePostureController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -92,12 +95,14 @@ public class DozeTriggersTest extends SysuiTestCase {
private KeyguardStateController mKeyguardStateController;
@Mock
private DevicePostureController mDevicePostureController;
@Mock
private SessionTracker mSessionTracker;
private DozeTriggers mTriggers;
private FakeSensorManager mSensors;
private Sensor mTapSensor;
private FakeProximitySensor mProximitySensor;
private FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock());
private final FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock());
@Before
public void setUp() throws Exception {
@@ -123,14 +128,14 @@ public class DozeTriggersTest extends SysuiTestCase {
mTriggers = new DozeTriggers(mContext, mHost, config, dozeParameters,
asyncSensorManager, wakeLock, mDockManager, mProximitySensor,
mProximityCheck, mock(DozeLog.class), mBroadcastDispatcher, new FakeSettings(),
mAuthController, mExecutor, mUiEventLogger, mKeyguardStateController,
mAuthController, mUiEventLogger, mSessionTracker, mKeyguardStateController,
mDevicePostureController);
mTriggers.setDozeMachine(mMachine);
waitForSensorManager();
}
@Test
public void testOnNotification_stillWorksAfterOneFailedProxCheck() throws Exception {
public void testOnNotification_stillWorksAfterOneFailedProxCheck() {
when(mMachine.getState()).thenReturn(DozeMachine.State.DOZE);
ArgumentCaptor<DozeHost.Callback> captor = ArgumentCaptor.forClass(DozeHost.Callback.class);
doAnswer(invocation -> null).when(mHost).addCallback(captor.capture());
@@ -216,7 +221,7 @@ public class DozeTriggersTest extends SysuiTestCase {
}
@Test
public void testProximitySensorNotAvailablel() {
public void testProximitySensorNotAvailable() {
mProximitySensor.setSensorAvailable(false);
mTriggers.onSensor(DozeLog.PULSE_REASON_SENSOR_LONG_PRESS, 100, 100, null);
mTriggers.onSensor(DozeLog.PULSE_REASON_SENSOR_WAKE_REACH, 100, 100,
@@ -228,6 +233,9 @@ public class DozeTriggersTest extends SysuiTestCase {
public void testQuickPickup() {
// GIVEN device is in doze (screen blank, but running doze sensors)
when(mMachine.getState()).thenReturn(DozeMachine.State.DOZE);
InstanceId keyguardSessionId = InstanceId.fakeInstanceId(99);
when(mSessionTracker.getSessionId(StatusBarManager.SESSION_KEYGUARD))
.thenReturn(keyguardSessionId);
// WHEN quick pick up is triggered
mTriggers.onSensor(DozeLog.REASON_SENSOR_QUICK_PICKUP, 100, 100, null);
@@ -236,7 +244,8 @@ public class DozeTriggersTest extends SysuiTestCase {
verify(mMachine).requestPulse(anyInt());
// THEN a log is taken that quick pick up was triggered
verify(mUiEventLogger).log(DozingUpdateUiEvent.DOZING_UPDATE_QUICK_PICKUP);
verify(mUiEventLogger)
.log(DozingUpdateUiEvent.DOZING_UPDATE_QUICK_PICKUP, keyguardSessionId);
}
@Test
@@ -249,7 +258,7 @@ public class DozeTriggersTest extends SysuiTestCase {
mTriggers.onSensor(DozeLog.REASON_SENSOR_PICKUP, 100, 100, null);
// THEN wakeup
verify(mMachine).wakeUp();
verify(mMachine).wakeUp(DozeLog.REASON_SENSOR_PICKUP);
}
@Test
@@ -262,7 +271,7 @@ public class DozeTriggersTest extends SysuiTestCase {
mTriggers.onSensor(DozeLog.REASON_SENSOR_PICKUP, 100, 100, null);
// THEN never wakeup
verify(mMachine, never()).wakeUp();
verify(mMachine, never()).wakeUp(DozeLog.REASON_SENSOR_PICKUP);
}
@Test