Loading packages/SystemUI/plugin/src/com/android/systemui/plugins/SensorManagerPlugin.java +20 −1 Original line number Diff line number Diff line Loading @@ -52,7 +52,9 @@ public interface SensorManagerPlugin extends Plugin { } class Sensor { public static int TYPE_WAKE_LOCK_SCREEN = 1; public static final int TYPE_WAKE_LOCK_SCREEN = 1; public static final int TYPE_WAKE_DISPLAY = 2; public static final int TYPE_SWIPE = 3; int mType; Loading @@ -68,6 +70,7 @@ public interface SensorManagerPlugin extends Plugin { class TriggerEvent { Sensor mSensor; int mVendorType; float[] mValues; /** * Creates a trigger event Loading @@ -76,14 +79,30 @@ public interface SensorManagerPlugin extends Plugin { * e.g. SINGLE_TAP = 1, DOUBLE_TAP = 2, etc. */ public TriggerEvent(Sensor sensor, int vendorType) { this(sensor, vendorType, null); } /** * Creates a trigger event * @param sensor The type of sensor, e.g. TYPE_WAKE_LOCK_SCREEN * @param vendorType The vendor type, which should be unique for each type of sensor, * e.g. SINGLE_TAP = 1, DOUBLE_TAP = 2, etc. * @param values Values captured by the sensor. */ public TriggerEvent(Sensor sensor, int vendorType, float[] values) { mSensor = sensor; mVendorType = vendorType; mValues = values; } public Sensor getSensor() { return mSensor; } public float[] getValues() { return mValues; } public int getVendorType() { return mVendorType; } Loading packages/SystemUI/src/com/android/systemui/doze/DozeLog.java +15 −2 Original line number Diff line number Diff line Loading @@ -177,9 +177,22 @@ public class DozeLog { log("state " + state); } public static void traceWakeLockScreenWakeUp() { /** * Appends lock screen wake up event to the logs. * @param wake if we're waking up or sleeping. */ public static void traceLockScreenWakeUp(boolean wake) { if (!ENABLED) return; log("wakeLockScreenWakeUp " + wake); } /** * Appends wake-display event to the logs. * @param wake if we're waking up or sleeping. */ public static void traceWakeDisplay(boolean wake) { if (!ENABLED) return; log("wakeLockScreenWakeUp"); log("wakeLockScreenWakeUp " + wake); } public static void traceProximityResult(Context context, boolean near, long millis, Loading packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java +33 −30 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.doze; import static com.android.systemui.plugins.SensorManagerPlugin.Sensor.TYPE_WAKE_DISPLAY; import static com.android.systemui.plugins.SensorManagerPlugin.Sensor.TYPE_WAKE_LOCK_SCREEN; import android.annotation.AnyThread; Loading Loading @@ -67,7 +68,6 @@ public class DozeSensors { private final AmbientDisplayConfiguration mConfig; private final WakeLock mWakeLock; private final Consumer<Boolean> mProxCallback; private final Consumer<Boolean> mWakeScreenCallback; private final Callback mCallback; private final Handler mHandler = new Handler(); Loading @@ -76,8 +76,7 @@ public class DozeSensors { public DozeSensors(Context context, AlarmManager alarmManager, SensorManager sensorManager, DozeParameters dozeParameters, AmbientDisplayConfiguration config, WakeLock wakeLock, Callback callback, Consumer<Boolean> proxCallback, Consumer<Boolean> wakeScreenCallback, AlwaysOnDisplayPolicy policy) { Callback callback, Consumer<Boolean> proxCallback, AlwaysOnDisplayPolicy policy) { mContext = context; mAlarmManager = alarmManager; mSensorManager = sensorManager; Loading @@ -85,7 +84,6 @@ public class DozeSensors { mConfig = config; mWakeLock = wakeLock; mProxCallback = proxCallback; mWakeScreenCallback = wakeScreenCallback; mResolver = mContext.getContentResolver(); mSensors = new TriggerSensor[] { Loading Loading @@ -123,7 +121,13 @@ public class DozeSensors { DozeLog.PULSE_REASON_SENSOR_WAKE_LOCK_SCREEN, false /* reports touch coordinates */, false /* touchscreen */), new WakeScreenSensor(), new PluginTriggerSensor( new SensorManagerPlugin.Sensor(TYPE_WAKE_DISPLAY), Settings.Secure.DOZE_WAKE_SCREEN_GESTURE, true /* configured */, DozeLog.REASON_SENSOR_WAKE_UP, false /* reports touch coordinates */, false /* touchscreen */), }; mProxSensor = new ProxSensor(policy); Loading Loading @@ -395,7 +399,8 @@ public class DozeSensors { screenX = event.values[0]; screenY = event.values[1]; } mCallback.onSensorPulse(mPulseReason, sensorPerformsProxCheck, screenX, screenY); mCallback.onSensorPulse(mPulseReason, sensorPerformsProxCheck, screenX, screenY, event.values); updateListener(); // reregister, this sensor only fires once })); } Loading Loading @@ -429,7 +434,14 @@ public class DozeSensors { private final SensorManagerPlugin.Sensor mPluginSensor; private final SensorManagerPlugin.TriggerEventListener mTriggerEventListener = (event) -> { onTrigger(null); DozeLog.traceSensor(mContext, mPulseReason); mHandler.post(mWakeLock.wrap(() -> { if (DEBUG) Log.d(TAG, "onTrigger: " + triggerEventToString(event)); mRegistered = false; mCallback.onSensorPulse(mPulseReason, true /* sensorPerformsProxCheck */, -1, -1, event.getValues()); updateListener(); // reregister, this sensor only fires once })); }; PluginTriggerSensor(SensorManagerPlugin.Sensor sensor, String setting, boolean configured, Loading Loading @@ -463,28 +475,19 @@ public class DozeSensors { .append(", mSensor=").append(mPluginSensor).append("}").toString(); } private String triggerEventToString(SensorManagerPlugin.TriggerEvent event) { if (event == null) return null; final StringBuilder sb = new StringBuilder("PluginTriggerEvent[") .append(event.getSensor()).append(',') .append(event.getVendorType()); if (event.getValues() != null) { for (int i = 0; i < event.getValues().length; i++) { sb.append(',').append(event.getValues()[i]); } private class WakeScreenSensor extends TriggerSensor { WakeScreenSensor() { super(findSensorWithType(mConfig.wakeScreenSensorType()), Settings.Secure.DOZE_WAKE_SCREEN_GESTURE, true /* configured */, DozeLog.REASON_SENSOR_WAKE_UP, false /* reportsTouchCoordinates */, false /* requiresTouchscreen */); } @Override @AnyThread public void onTrigger(TriggerEvent event) { DozeLog.traceSensor(mContext, mPulseReason); mHandler.post(mWakeLock.wrap(() -> { if (DEBUG) Log.d(TAG, "onTrigger: " + triggerEventToString(event)); mRegistered = false; mWakeScreenCallback.accept(event.values[0] > 0); updateListener(); // reregister, this sensor only fires once })); return sb.append(']').toString(); } } public interface Callback { Loading @@ -496,9 +499,9 @@ public class DozeSensors { * @param screenX the location on the screen where the sensor fired or -1 * if the sensor doesn't support reporting screen locations. * @param screenY the location on the screen where the sensor fired or -1 * if the sensor doesn't support reporting screen locations. * @param rawValues raw values array from the event. */ void onSensorPulse(int pulseReason, boolean sensorPerformedProxCheck, float screenX, float screenY); float screenX, float screenY, float[] rawValues); } } packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +17 −6 Original line number Diff line number Diff line Loading @@ -84,7 +84,7 @@ public class DozeTriggers implements DozeMachine.Part { mWakeLock = wakeLock; mAllowPulseTriggers = allowPulseTriggers; mDozeSensors = new DozeSensors(context, alarmManager, mSensorManager, dozeParameters, config, wakeLock, this::onSensor, this::onProximityFar, this::onWakeScreen, config, wakeLock, this::onSensor, this::onProximityFar, dozeParameters.getPolicy()); mUiModeManager = mContext.getSystemService(UiModeManager.class); } Loading Loading @@ -124,13 +124,17 @@ public class DozeTriggers implements DozeMachine.Part { } private void onSensor(int pulseReason, boolean sensorPerformedProxCheck, float screenX, float screenY) { float screenX, float screenY, float[] rawValues) { boolean isDoubleTap = pulseReason == DozeLog.PULSE_REASON_SENSOR_DOUBLE_TAP; boolean isPickup = pulseReason == DozeLog.PULSE_REASON_SENSOR_PICKUP; boolean isLongPress = pulseReason == DozeLog.PULSE_REASON_SENSOR_LONG_PRESS; boolean isWakeLockScreen = pulseReason == DozeLog.PULSE_REASON_SENSOR_WAKE_LOCK_SCREEN; boolean isWakeDisplay = pulseReason == DozeLog.REASON_SENSOR_WAKE_UP; boolean wakeEvent = rawValues != null && rawValues.length > 0 && rawValues[0] != 0; if (isLongPress) { if (isWakeDisplay) { onWakeScreen(wakeEvent); } else if (isLongPress) { requestPulse(pulseReason, sensorPerformedProxCheck); } else { proximityCheckThenCall((result) -> { Loading @@ -141,7 +145,15 @@ public class DozeTriggers implements DozeMachine.Part { if (isDoubleTap) { mDozeHost.onDoubleTap(screenX, screenY); mMachine.wakeUp(); } else if (isPickup || isWakeLockScreen) { } else if (isWakeLockScreen) { if (wakeEvent) { mDozeHost.setPassiveInterrupt(true); mMachine.wakeUp(); DozeLog.traceLockScreenWakeUp(wakeEvent); } else { if (DEBUG) Log.d(TAG, "Unpulsing"); } } else if (isPickup) { mDozeHost.setPassiveInterrupt(true); mMachine.wakeUp(); } else { Loading @@ -157,8 +169,6 @@ public class DozeTriggers implements DozeMachine.Part { final boolean withinVibrationThreshold = timeSinceNotification < mDozeParameters.getPickupVibrationThreshold(); DozeLog.tracePickupWakeUp(mContext, withinVibrationThreshold); } else if (isWakeLockScreen) { DozeLog.traceWakeLockScreenWakeUp(); } } Loading @@ -184,6 +194,7 @@ public class DozeTriggers implements DozeMachine.Part { } private void onWakeScreen(boolean wake) { DozeLog.traceWakeDisplay(wake); DozeMachine.State state = mMachine.getState(); boolean paused = (state == DozeMachine.State.DOZE_AOD_PAUSED); boolean pausing = (state == DozeMachine.State.DOZE_AOD_PAUSING); Loading Loading
packages/SystemUI/plugin/src/com/android/systemui/plugins/SensorManagerPlugin.java +20 −1 Original line number Diff line number Diff line Loading @@ -52,7 +52,9 @@ public interface SensorManagerPlugin extends Plugin { } class Sensor { public static int TYPE_WAKE_LOCK_SCREEN = 1; public static final int TYPE_WAKE_LOCK_SCREEN = 1; public static final int TYPE_WAKE_DISPLAY = 2; public static final int TYPE_SWIPE = 3; int mType; Loading @@ -68,6 +70,7 @@ public interface SensorManagerPlugin extends Plugin { class TriggerEvent { Sensor mSensor; int mVendorType; float[] mValues; /** * Creates a trigger event Loading @@ -76,14 +79,30 @@ public interface SensorManagerPlugin extends Plugin { * e.g. SINGLE_TAP = 1, DOUBLE_TAP = 2, etc. */ public TriggerEvent(Sensor sensor, int vendorType) { this(sensor, vendorType, null); } /** * Creates a trigger event * @param sensor The type of sensor, e.g. TYPE_WAKE_LOCK_SCREEN * @param vendorType The vendor type, which should be unique for each type of sensor, * e.g. SINGLE_TAP = 1, DOUBLE_TAP = 2, etc. * @param values Values captured by the sensor. */ public TriggerEvent(Sensor sensor, int vendorType, float[] values) { mSensor = sensor; mVendorType = vendorType; mValues = values; } public Sensor getSensor() { return mSensor; } public float[] getValues() { return mValues; } public int getVendorType() { return mVendorType; } Loading
packages/SystemUI/src/com/android/systemui/doze/DozeLog.java +15 −2 Original line number Diff line number Diff line Loading @@ -177,9 +177,22 @@ public class DozeLog { log("state " + state); } public static void traceWakeLockScreenWakeUp() { /** * Appends lock screen wake up event to the logs. * @param wake if we're waking up or sleeping. */ public static void traceLockScreenWakeUp(boolean wake) { if (!ENABLED) return; log("wakeLockScreenWakeUp " + wake); } /** * Appends wake-display event to the logs. * @param wake if we're waking up or sleeping. */ public static void traceWakeDisplay(boolean wake) { if (!ENABLED) return; log("wakeLockScreenWakeUp"); log("wakeLockScreenWakeUp " + wake); } public static void traceProximityResult(Context context, boolean near, long millis, Loading
packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java +33 −30 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.doze; import static com.android.systemui.plugins.SensorManagerPlugin.Sensor.TYPE_WAKE_DISPLAY; import static com.android.systemui.plugins.SensorManagerPlugin.Sensor.TYPE_WAKE_LOCK_SCREEN; import android.annotation.AnyThread; Loading Loading @@ -67,7 +68,6 @@ public class DozeSensors { private final AmbientDisplayConfiguration mConfig; private final WakeLock mWakeLock; private final Consumer<Boolean> mProxCallback; private final Consumer<Boolean> mWakeScreenCallback; private final Callback mCallback; private final Handler mHandler = new Handler(); Loading @@ -76,8 +76,7 @@ public class DozeSensors { public DozeSensors(Context context, AlarmManager alarmManager, SensorManager sensorManager, DozeParameters dozeParameters, AmbientDisplayConfiguration config, WakeLock wakeLock, Callback callback, Consumer<Boolean> proxCallback, Consumer<Boolean> wakeScreenCallback, AlwaysOnDisplayPolicy policy) { Callback callback, Consumer<Boolean> proxCallback, AlwaysOnDisplayPolicy policy) { mContext = context; mAlarmManager = alarmManager; mSensorManager = sensorManager; Loading @@ -85,7 +84,6 @@ public class DozeSensors { mConfig = config; mWakeLock = wakeLock; mProxCallback = proxCallback; mWakeScreenCallback = wakeScreenCallback; mResolver = mContext.getContentResolver(); mSensors = new TriggerSensor[] { Loading Loading @@ -123,7 +121,13 @@ public class DozeSensors { DozeLog.PULSE_REASON_SENSOR_WAKE_LOCK_SCREEN, false /* reports touch coordinates */, false /* touchscreen */), new WakeScreenSensor(), new PluginTriggerSensor( new SensorManagerPlugin.Sensor(TYPE_WAKE_DISPLAY), Settings.Secure.DOZE_WAKE_SCREEN_GESTURE, true /* configured */, DozeLog.REASON_SENSOR_WAKE_UP, false /* reports touch coordinates */, false /* touchscreen */), }; mProxSensor = new ProxSensor(policy); Loading Loading @@ -395,7 +399,8 @@ public class DozeSensors { screenX = event.values[0]; screenY = event.values[1]; } mCallback.onSensorPulse(mPulseReason, sensorPerformsProxCheck, screenX, screenY); mCallback.onSensorPulse(mPulseReason, sensorPerformsProxCheck, screenX, screenY, event.values); updateListener(); // reregister, this sensor only fires once })); } Loading Loading @@ -429,7 +434,14 @@ public class DozeSensors { private final SensorManagerPlugin.Sensor mPluginSensor; private final SensorManagerPlugin.TriggerEventListener mTriggerEventListener = (event) -> { onTrigger(null); DozeLog.traceSensor(mContext, mPulseReason); mHandler.post(mWakeLock.wrap(() -> { if (DEBUG) Log.d(TAG, "onTrigger: " + triggerEventToString(event)); mRegistered = false; mCallback.onSensorPulse(mPulseReason, true /* sensorPerformsProxCheck */, -1, -1, event.getValues()); updateListener(); // reregister, this sensor only fires once })); }; PluginTriggerSensor(SensorManagerPlugin.Sensor sensor, String setting, boolean configured, Loading Loading @@ -463,28 +475,19 @@ public class DozeSensors { .append(", mSensor=").append(mPluginSensor).append("}").toString(); } private String triggerEventToString(SensorManagerPlugin.TriggerEvent event) { if (event == null) return null; final StringBuilder sb = new StringBuilder("PluginTriggerEvent[") .append(event.getSensor()).append(',') .append(event.getVendorType()); if (event.getValues() != null) { for (int i = 0; i < event.getValues().length; i++) { sb.append(',').append(event.getValues()[i]); } private class WakeScreenSensor extends TriggerSensor { WakeScreenSensor() { super(findSensorWithType(mConfig.wakeScreenSensorType()), Settings.Secure.DOZE_WAKE_SCREEN_GESTURE, true /* configured */, DozeLog.REASON_SENSOR_WAKE_UP, false /* reportsTouchCoordinates */, false /* requiresTouchscreen */); } @Override @AnyThread public void onTrigger(TriggerEvent event) { DozeLog.traceSensor(mContext, mPulseReason); mHandler.post(mWakeLock.wrap(() -> { if (DEBUG) Log.d(TAG, "onTrigger: " + triggerEventToString(event)); mRegistered = false; mWakeScreenCallback.accept(event.values[0] > 0); updateListener(); // reregister, this sensor only fires once })); return sb.append(']').toString(); } } public interface Callback { Loading @@ -496,9 +499,9 @@ public class DozeSensors { * @param screenX the location on the screen where the sensor fired or -1 * if the sensor doesn't support reporting screen locations. * @param screenY the location on the screen where the sensor fired or -1 * if the sensor doesn't support reporting screen locations. * @param rawValues raw values array from the event. */ void onSensorPulse(int pulseReason, boolean sensorPerformedProxCheck, float screenX, float screenY); float screenX, float screenY, float[] rawValues); } }
packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +17 −6 Original line number Diff line number Diff line Loading @@ -84,7 +84,7 @@ public class DozeTriggers implements DozeMachine.Part { mWakeLock = wakeLock; mAllowPulseTriggers = allowPulseTriggers; mDozeSensors = new DozeSensors(context, alarmManager, mSensorManager, dozeParameters, config, wakeLock, this::onSensor, this::onProximityFar, this::onWakeScreen, config, wakeLock, this::onSensor, this::onProximityFar, dozeParameters.getPolicy()); mUiModeManager = mContext.getSystemService(UiModeManager.class); } Loading Loading @@ -124,13 +124,17 @@ public class DozeTriggers implements DozeMachine.Part { } private void onSensor(int pulseReason, boolean sensorPerformedProxCheck, float screenX, float screenY) { float screenX, float screenY, float[] rawValues) { boolean isDoubleTap = pulseReason == DozeLog.PULSE_REASON_SENSOR_DOUBLE_TAP; boolean isPickup = pulseReason == DozeLog.PULSE_REASON_SENSOR_PICKUP; boolean isLongPress = pulseReason == DozeLog.PULSE_REASON_SENSOR_LONG_PRESS; boolean isWakeLockScreen = pulseReason == DozeLog.PULSE_REASON_SENSOR_WAKE_LOCK_SCREEN; boolean isWakeDisplay = pulseReason == DozeLog.REASON_SENSOR_WAKE_UP; boolean wakeEvent = rawValues != null && rawValues.length > 0 && rawValues[0] != 0; if (isLongPress) { if (isWakeDisplay) { onWakeScreen(wakeEvent); } else if (isLongPress) { requestPulse(pulseReason, sensorPerformedProxCheck); } else { proximityCheckThenCall((result) -> { Loading @@ -141,7 +145,15 @@ public class DozeTriggers implements DozeMachine.Part { if (isDoubleTap) { mDozeHost.onDoubleTap(screenX, screenY); mMachine.wakeUp(); } else if (isPickup || isWakeLockScreen) { } else if (isWakeLockScreen) { if (wakeEvent) { mDozeHost.setPassiveInterrupt(true); mMachine.wakeUp(); DozeLog.traceLockScreenWakeUp(wakeEvent); } else { if (DEBUG) Log.d(TAG, "Unpulsing"); } } else if (isPickup) { mDozeHost.setPassiveInterrupt(true); mMachine.wakeUp(); } else { Loading @@ -157,8 +169,6 @@ public class DozeTriggers implements DozeMachine.Part { final boolean withinVibrationThreshold = timeSinceNotification < mDozeParameters.getPickupVibrationThreshold(); DozeLog.tracePickupWakeUp(mContext, withinVibrationThreshold); } else if (isWakeLockScreen) { DozeLog.traceWakeLockScreenWakeUp(); } } Loading @@ -184,6 +194,7 @@ public class DozeTriggers implements DozeMachine.Part { } private void onWakeScreen(boolean wake) { DozeLog.traceWakeDisplay(wake); DozeMachine.State state = mMachine.getState(); boolean paused = (state == DozeMachine.State.DOZE_AOD_PAUSED); boolean pausing = (state == DozeMachine.State.DOZE_AOD_PAUSING); Loading