Loading packages/SystemUI/src/com/android/systemui/doze/DozeLog.java +2 −2 Original line number Diff line number Diff line Loading @@ -376,8 +376,8 @@ public class DozeLog implements Dumpable { case REASON_SENSOR_DOUBLE_TAP: return "doubletap"; case PULSE_REASON_SENSOR_LONG_PRESS: return "longpress"; case PULSE_REASON_DOCKING: return "docking"; case PULSE_REASON_SENSOR_WAKE_LOCK_SCREEN: return "wakelockscreen"; case REASON_SENSOR_WAKE_UP: return "wakeup"; case PULSE_REASON_SENSOR_WAKE_LOCK_SCREEN: return "reach-wakelockscreen"; case REASON_SENSOR_WAKE_UP: return "presence-wakeup"; case REASON_SENSOR_TAP: return "tap"; case REASON_SENSOR_UDFPS_LONG_PRESS: return "udfps"; case REASON_SENSOR_QUICK_PICKUP: return "quickPickup"; Loading packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java +0 −6 Original line number Diff line number Diff line Loading @@ -40,11 +40,9 @@ import android.view.Display; import androidx.annotation.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.UiEvent; import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.UiEventLoggerImpl; import com.android.internal.logging.nano.MetricsProto; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.biometrics.AuthController; import com.android.systemui.plugins.SensorManagerPlugin; Loading Loading @@ -491,10 +489,6 @@ public class DozeSensors { mHandler.post(mWakeLock.wrap(() -> { if (DEBUG) Log.d(TAG, "onTrigger: " + triggerEventToString(event)); if (mSensor != null && mSensor.getType() == Sensor.TYPE_PICK_UP_GESTURE) { int subType = (int) event.values[0]; MetricsLogger.action( mContext, MetricsProto.MetricsEvent.ACTION_AMBIENT_GESTURE, subType); UI_EVENT_LOGGER.log(DozeSensorsUiEvent.ACTION_AMBIENT_GESTURE_PICKUP); } Loading packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +15 −26 Original line number Diff line number Diff line Loading @@ -24,7 +24,6 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.res.Configuration; import android.hardware.display.AmbientDisplayConfiguration; import android.metrics.LogMaker; import android.os.SystemClock; import android.os.UserHandle; import android.text.format.Formatter; Loading @@ -33,12 +32,8 @@ import android.util.Log; import android.view.Display; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.UiEvent; import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.UiEventLoggerImpl; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.systemui.Dependency; import com.android.systemui.biometrics.AuthController; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.qualifiers.Main; Loading Loading @@ -70,8 +65,6 @@ public class DozeTriggers implements DozeMachine.Part { /** adb shell am broadcast -a com.android.systemui.doze.pulse com.android.systemui */ private static final String PULSE_ACTION = "com.android.systemui.doze.pulse"; private static final UiEventLogger UI_EVENT_LOGGER = new UiEventLoggerImpl(); /** * Last value sent by the wake-display sensor. * Assuming that the screen should start on. Loading Loading @@ -99,12 +92,11 @@ public class DozeTriggers implements DozeMachine.Part { private final BroadcastDispatcher mBroadcastDispatcher; private final AuthController mAuthController; private final DelayableExecutor mMainExecutor; private final UiEventLogger mUiEventLogger; private long mNotificationPulseTime; private boolean mPulsePending; private final MetricsLogger mMetricsLogger = Dependency.get(MetricsLogger.class); /** see {@link #onProximityFar} prox for callback */ private boolean mWantProxSensor; private boolean mWantTouchScreenSensors; Loading Loading @@ -143,7 +135,10 @@ public class DozeTriggers implements DozeMachine.Part { DOZING_UPDATE_AUTH_TRIGGERED(657), @UiEvent(doc = "Dozing updated because quick pickup sensor woke up.") DOZING_UPDATE_QUICK_PICKUP(708); DOZING_UPDATE_QUICK_PICKUP(708), @UiEvent(doc = "Dozing updated - sensor wakeup timed out (from quick pickup or presence)") DOZING_UPDATE_WAKE_TIMEOUT(794); private final int mId; Loading Loading @@ -182,7 +177,8 @@ public class DozeTriggers implements DozeMachine.Part { ProximitySensor proximitySensor, ProximitySensor.ProximityCheck proxCheck, DozeLog dozeLog, BroadcastDispatcher broadcastDispatcher, SecureSettings secureSettings, AuthController authController, @Main DelayableExecutor mainExecutor) { @Main DelayableExecutor mainExecutor, UiEventLogger uiEventLogger) { mContext = context; mDozeHost = dozeHost; mConfig = config; Loading @@ -200,6 +196,7 @@ public class DozeTriggers implements DozeMachine.Part { mBroadcastDispatcher = broadcastDispatcher; mAuthController = authController; mMainExecutor = mainExecutor; mUiEventLogger = uiEventLogger; } @Override Loading Loading @@ -328,11 +325,8 @@ public class DozeTriggers implements DozeMachine.Part { private void gentleWakeUp(int reason) { // Log screen wake up reason (lift/pickup, tap, double-tap) mMetricsLogger.write(new LogMaker(MetricsEvent.DOZING) .setType(MetricsEvent.TYPE_UPDATE) .setSubtype(reason)); Optional.ofNullable(DozingUpdateUiEvent.fromReason(reason)) .ifPresent(UI_EVENT_LOGGER::log); .ifPresent(mUiEventLogger::log); 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 Loading Loading @@ -401,10 +395,9 @@ public class DozeTriggers implements DozeMachine.Part { } if (state == DozeMachine.State.DOZE) { mMachine.requestState(DozeMachine.State.DOZE_AOD); // Logs AOD open due to sensor wake up. mMetricsLogger.write(new LogMaker(MetricsEvent.DOZING) .setType(MetricsEvent.TYPE_OPEN) .setSubtype(reason)); // Log sensor triggered Optional.ofNullable(DozingUpdateUiEvent.fromReason(reason)) .ifPresent(mUiEventLogger::log); if (isQuickPickup) { // schedule runnable to go back to DOZE Loading @@ -427,10 +420,8 @@ public class DozeTriggers implements DozeMachine.Part { return; } mMachine.requestState(DozeMachine.State.DOZE); // Logs AOD close due to sensor wake up. mMetricsLogger.write(new LogMaker(MetricsEvent.DOZING) .setType(MetricsEvent.TYPE_CLOSE) .setSubtype(reason)); // log wake timeout mUiEventLogger.log(DozingUpdateUiEvent.DOZING_UPDATE_WAKE_TIMEOUT); } } } Loading Loading @@ -563,10 +554,8 @@ public class DozeTriggers implements DozeMachine.Part { }, !mDozeParameters.getProxCheckBeforePulse() || performedProxCheck, reason); // Logs request pulse reason on AOD screen. mMetricsLogger.write(new LogMaker(MetricsEvent.DOZING) .setType(MetricsEvent.TYPE_UPDATE).setSubtype(reason)); Optional.ofNullable(DozingUpdateUiEvent.fromReason(reason)) .ifPresent(UI_EVENT_LOGGER::log); .ifPresent(mUiEventLogger::log); } private boolean canPulse() { Loading packages/SystemUI/tests/src/com/android/systemui/doze/DozeConfigurationUtil.java +1 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ public class DozeConfigurationUtil { when(params.getSelectivelyRegisterSensorsUsingProx()).thenReturn(false); when(params.singleTapUsesProx()).thenReturn(true); when(params.longPressUsesProx()).thenReturn(true); when(params.getQuickPickupAodDuration()).thenReturn(500); doneHolder[0] = true; return params; Loading packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java +39 −1 Original line number Diff line number Diff line Loading @@ -35,10 +35,12 @@ import android.view.Display; import androidx.test.filters.SmallTest; 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.statusbar.phone.DozeParameters; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.concurrency.FakeThreadFactory; Loading Loading @@ -76,6 +78,8 @@ public class DozeTriggersTest extends SysuiTestCase { private ProximitySensor.ProximityCheck mProximityCheck; @Mock private AuthController mAuthController; @Mock private UiEventLogger mUiEventLogger; private DozeTriggers mTriggers; private FakeSensorManager mSensors; Loading Loading @@ -107,7 +111,7 @@ 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); mAuthController, mExecutor, mUiEventLogger); mTriggers.setDozeMachine(mMachine); waitForSensorManager(); } Loading Loading @@ -194,6 +198,40 @@ public class DozeTriggersTest extends SysuiTestCase { mTriggers.onSensor(DozeLog.REASON_SENSOR_TAP, 100, 100, null); } @Test public void testQuickPickup() { // GIVEN device is in doze (screen blank, but running doze sensors) when(mMachine.getState()).thenReturn(DozeMachine.State.DOZE); // WHEN quick pick up is triggered mTriggers.onSensor(DozeLog.REASON_SENSOR_QUICK_PICKUP, 100, 100, null); // THEN device goes into aod (shows clock with black background) verify(mMachine).requestState(DozeMachine.State.DOZE_AOD); // THEN a log is taken that quick pick up was triggered verify(mUiEventLogger).log(DozingUpdateUiEvent.DOZING_UPDATE_QUICK_PICKUP); } @Test public void testQuickPickupTimeOutAfterExecutables() { // GIVEN quick pickup is triggered when device is in DOZE when(mMachine.getState()).thenReturn(DozeMachine.State.DOZE); mTriggers.onSensor(DozeLog.REASON_SENSOR_QUICK_PICKUP, 100, 100, null); verify(mMachine).requestState(DozeMachine.State.DOZE_AOD); verify(mMachine, never()).requestState(DozeMachine.State.DOZE); // WHEN next executable is run mExecutor.advanceClockToLast(); mExecutor.runAllReady(); // THEN device goes back into DOZE verify(mMachine).requestState(DozeMachine.State.DOZE); // THEN a log is taken that wake up timeout expired verify(mUiEventLogger).log(DozingUpdateUiEvent.DOZING_UPDATE_WAKE_TIMEOUT); } @Test public void testOnSensor_Fingerprint() { final int screenX = 100; Loading Loading
packages/SystemUI/src/com/android/systemui/doze/DozeLog.java +2 −2 Original line number Diff line number Diff line Loading @@ -376,8 +376,8 @@ public class DozeLog implements Dumpable { case REASON_SENSOR_DOUBLE_TAP: return "doubletap"; case PULSE_REASON_SENSOR_LONG_PRESS: return "longpress"; case PULSE_REASON_DOCKING: return "docking"; case PULSE_REASON_SENSOR_WAKE_LOCK_SCREEN: return "wakelockscreen"; case REASON_SENSOR_WAKE_UP: return "wakeup"; case PULSE_REASON_SENSOR_WAKE_LOCK_SCREEN: return "reach-wakelockscreen"; case REASON_SENSOR_WAKE_UP: return "presence-wakeup"; case REASON_SENSOR_TAP: return "tap"; case REASON_SENSOR_UDFPS_LONG_PRESS: return "udfps"; case REASON_SENSOR_QUICK_PICKUP: return "quickPickup"; Loading
packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java +0 −6 Original line number Diff line number Diff line Loading @@ -40,11 +40,9 @@ import android.view.Display; import androidx.annotation.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.UiEvent; import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.UiEventLoggerImpl; import com.android.internal.logging.nano.MetricsProto; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.biometrics.AuthController; import com.android.systemui.plugins.SensorManagerPlugin; Loading Loading @@ -491,10 +489,6 @@ public class DozeSensors { mHandler.post(mWakeLock.wrap(() -> { if (DEBUG) Log.d(TAG, "onTrigger: " + triggerEventToString(event)); if (mSensor != null && mSensor.getType() == Sensor.TYPE_PICK_UP_GESTURE) { int subType = (int) event.values[0]; MetricsLogger.action( mContext, MetricsProto.MetricsEvent.ACTION_AMBIENT_GESTURE, subType); UI_EVENT_LOGGER.log(DozeSensorsUiEvent.ACTION_AMBIENT_GESTURE_PICKUP); } Loading
packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +15 −26 Original line number Diff line number Diff line Loading @@ -24,7 +24,6 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.res.Configuration; import android.hardware.display.AmbientDisplayConfiguration; import android.metrics.LogMaker; import android.os.SystemClock; import android.os.UserHandle; import android.text.format.Formatter; Loading @@ -33,12 +32,8 @@ import android.util.Log; import android.view.Display; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.UiEvent; import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.UiEventLoggerImpl; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.systemui.Dependency; import com.android.systemui.biometrics.AuthController; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.qualifiers.Main; Loading Loading @@ -70,8 +65,6 @@ public class DozeTriggers implements DozeMachine.Part { /** adb shell am broadcast -a com.android.systemui.doze.pulse com.android.systemui */ private static final String PULSE_ACTION = "com.android.systemui.doze.pulse"; private static final UiEventLogger UI_EVENT_LOGGER = new UiEventLoggerImpl(); /** * Last value sent by the wake-display sensor. * Assuming that the screen should start on. Loading Loading @@ -99,12 +92,11 @@ public class DozeTriggers implements DozeMachine.Part { private final BroadcastDispatcher mBroadcastDispatcher; private final AuthController mAuthController; private final DelayableExecutor mMainExecutor; private final UiEventLogger mUiEventLogger; private long mNotificationPulseTime; private boolean mPulsePending; private final MetricsLogger mMetricsLogger = Dependency.get(MetricsLogger.class); /** see {@link #onProximityFar} prox for callback */ private boolean mWantProxSensor; private boolean mWantTouchScreenSensors; Loading Loading @@ -143,7 +135,10 @@ public class DozeTriggers implements DozeMachine.Part { DOZING_UPDATE_AUTH_TRIGGERED(657), @UiEvent(doc = "Dozing updated because quick pickup sensor woke up.") DOZING_UPDATE_QUICK_PICKUP(708); DOZING_UPDATE_QUICK_PICKUP(708), @UiEvent(doc = "Dozing updated - sensor wakeup timed out (from quick pickup or presence)") DOZING_UPDATE_WAKE_TIMEOUT(794); private final int mId; Loading Loading @@ -182,7 +177,8 @@ public class DozeTriggers implements DozeMachine.Part { ProximitySensor proximitySensor, ProximitySensor.ProximityCheck proxCheck, DozeLog dozeLog, BroadcastDispatcher broadcastDispatcher, SecureSettings secureSettings, AuthController authController, @Main DelayableExecutor mainExecutor) { @Main DelayableExecutor mainExecutor, UiEventLogger uiEventLogger) { mContext = context; mDozeHost = dozeHost; mConfig = config; Loading @@ -200,6 +196,7 @@ public class DozeTriggers implements DozeMachine.Part { mBroadcastDispatcher = broadcastDispatcher; mAuthController = authController; mMainExecutor = mainExecutor; mUiEventLogger = uiEventLogger; } @Override Loading Loading @@ -328,11 +325,8 @@ public class DozeTriggers implements DozeMachine.Part { private void gentleWakeUp(int reason) { // Log screen wake up reason (lift/pickup, tap, double-tap) mMetricsLogger.write(new LogMaker(MetricsEvent.DOZING) .setType(MetricsEvent.TYPE_UPDATE) .setSubtype(reason)); Optional.ofNullable(DozingUpdateUiEvent.fromReason(reason)) .ifPresent(UI_EVENT_LOGGER::log); .ifPresent(mUiEventLogger::log); 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 Loading Loading @@ -401,10 +395,9 @@ public class DozeTriggers implements DozeMachine.Part { } if (state == DozeMachine.State.DOZE) { mMachine.requestState(DozeMachine.State.DOZE_AOD); // Logs AOD open due to sensor wake up. mMetricsLogger.write(new LogMaker(MetricsEvent.DOZING) .setType(MetricsEvent.TYPE_OPEN) .setSubtype(reason)); // Log sensor triggered Optional.ofNullable(DozingUpdateUiEvent.fromReason(reason)) .ifPresent(mUiEventLogger::log); if (isQuickPickup) { // schedule runnable to go back to DOZE Loading @@ -427,10 +420,8 @@ public class DozeTriggers implements DozeMachine.Part { return; } mMachine.requestState(DozeMachine.State.DOZE); // Logs AOD close due to sensor wake up. mMetricsLogger.write(new LogMaker(MetricsEvent.DOZING) .setType(MetricsEvent.TYPE_CLOSE) .setSubtype(reason)); // log wake timeout mUiEventLogger.log(DozingUpdateUiEvent.DOZING_UPDATE_WAKE_TIMEOUT); } } } Loading Loading @@ -563,10 +554,8 @@ public class DozeTriggers implements DozeMachine.Part { }, !mDozeParameters.getProxCheckBeforePulse() || performedProxCheck, reason); // Logs request pulse reason on AOD screen. mMetricsLogger.write(new LogMaker(MetricsEvent.DOZING) .setType(MetricsEvent.TYPE_UPDATE).setSubtype(reason)); Optional.ofNullable(DozingUpdateUiEvent.fromReason(reason)) .ifPresent(UI_EVENT_LOGGER::log); .ifPresent(mUiEventLogger::log); } private boolean canPulse() { Loading
packages/SystemUI/tests/src/com/android/systemui/doze/DozeConfigurationUtil.java +1 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ public class DozeConfigurationUtil { when(params.getSelectivelyRegisterSensorsUsingProx()).thenReturn(false); when(params.singleTapUsesProx()).thenReturn(true); when(params.longPressUsesProx()).thenReturn(true); when(params.getQuickPickupAodDuration()).thenReturn(500); doneHolder[0] = true; return params; Loading
packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java +39 −1 Original line number Diff line number Diff line Loading @@ -35,10 +35,12 @@ import android.view.Display; import androidx.test.filters.SmallTest; 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.statusbar.phone.DozeParameters; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.concurrency.FakeThreadFactory; Loading Loading @@ -76,6 +78,8 @@ public class DozeTriggersTest extends SysuiTestCase { private ProximitySensor.ProximityCheck mProximityCheck; @Mock private AuthController mAuthController; @Mock private UiEventLogger mUiEventLogger; private DozeTriggers mTriggers; private FakeSensorManager mSensors; Loading Loading @@ -107,7 +111,7 @@ 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); mAuthController, mExecutor, mUiEventLogger); mTriggers.setDozeMachine(mMachine); waitForSensorManager(); } Loading Loading @@ -194,6 +198,40 @@ public class DozeTriggersTest extends SysuiTestCase { mTriggers.onSensor(DozeLog.REASON_SENSOR_TAP, 100, 100, null); } @Test public void testQuickPickup() { // GIVEN device is in doze (screen blank, but running doze sensors) when(mMachine.getState()).thenReturn(DozeMachine.State.DOZE); // WHEN quick pick up is triggered mTriggers.onSensor(DozeLog.REASON_SENSOR_QUICK_PICKUP, 100, 100, null); // THEN device goes into aod (shows clock with black background) verify(mMachine).requestState(DozeMachine.State.DOZE_AOD); // THEN a log is taken that quick pick up was triggered verify(mUiEventLogger).log(DozingUpdateUiEvent.DOZING_UPDATE_QUICK_PICKUP); } @Test public void testQuickPickupTimeOutAfterExecutables() { // GIVEN quick pickup is triggered when device is in DOZE when(mMachine.getState()).thenReturn(DozeMachine.State.DOZE); mTriggers.onSensor(DozeLog.REASON_SENSOR_QUICK_PICKUP, 100, 100, null); verify(mMachine).requestState(DozeMachine.State.DOZE_AOD); verify(mMachine, never()).requestState(DozeMachine.State.DOZE); // WHEN next executable is run mExecutor.advanceClockToLast(); mExecutor.runAllReady(); // THEN device goes back into DOZE verify(mMachine).requestState(DozeMachine.State.DOZE); // THEN a log is taken that wake up timeout expired verify(mUiEventLogger).log(DozingUpdateUiEvent.DOZING_UPDATE_WAKE_TIMEOUT); } @Test public void testOnSensor_Fingerprint() { final int screenX = 100; Loading