diff options
| author | 2017-06-27 14:48:50 +0200 | |
|---|---|---|
| committer | 2017-06-27 14:48:50 +0200 | |
| commit | d32b366a1752d1735cfe4b87058596d05fcf9588 (patch) | |
| tree | 6552638787d888ef914d8e1236111f1296790d1a | |
| parent | 889d326edaea26ae21454a0117f01e4006f5e16d (diff) | |
AOD: Proximity check doze triggers
Adds a proximity check to doze triggers that fire
while AOD is enabled.
Bug: 62484520
Test: manual
Change-Id: I5c0e8ccec1e470be6722dade06b2e8f174943512
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java | 72 |
1 files changed, 41 insertions, 31 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java index ae936db7b0e2..9915098741e7 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java @@ -39,6 +39,7 @@ import com.android.systemui.util.Assert; import com.android.systemui.util.wakelock.WakeLock; import java.io.PrintWriter; +import java.util.function.IntConsumer; /** * Handles triggers for ambient state changes. @@ -98,18 +99,44 @@ public class DozeTriggers implements DozeMachine.Part { requestPulse(DozeLog.PULSE_REASON_NOTIFICATION, false /* performedProxCheck */); } + private void proximityCheckThenCall(IntConsumer callback, + boolean alreadyPerformedProxCheck, + int pulseReason) { + if (alreadyPerformedProxCheck) { + callback.accept(ProximityCheck.RESULT_NOT_CHECKED); + } else { + final long start = SystemClock.uptimeMillis(); + new ProximityCheck() { + @Override + public void onProximityResult(int result) { + final long end = SystemClock.uptimeMillis(); + DozeLog.traceProximityResult(mContext, result == RESULT_NEAR, + end - start, pulseReason); + callback.accept(result); + } + }.check(); + } + } + private void onSensor(int pulseReason, boolean sensorPerformedProxCheck, float screenX, float screenY) { boolean isDoubleTap = pulseReason == DozeLog.PULSE_REASON_SENSOR_DOUBLE_TAP; boolean isPickup = pulseReason == DozeLog.PULSE_REASON_SENSOR_PICKUP; if (mConfig.alwaysOnEnabled(UserHandle.USER_CURRENT)) { - if (isDoubleTap) { - mDozeHost.onDoubleTap(screenX, screenY); - mMachine.wakeUp(); - } else { - mDozeHost.extendPulse(); - } + proximityCheckThenCall((result) -> { + if (result == ProximityCheck.RESULT_NEAR) { + // In pocket, drop event. + return; + } + if (isDoubleTap) { + mDozeHost.onDoubleTap(screenX, screenY); + mMachine.wakeUp(); + } else { + mDozeHost.extendPulse(); + } + }, sensorPerformedProxCheck, pulseReason); + return; } else { requestPulse(pulseReason, sensorPerformedProxCheck); } @@ -199,33 +226,15 @@ public class DozeTriggers implements DozeMachine.Part { } mPulsePending = true; - if (!mDozeParameters.getProxCheckBeforePulse() || performedProxCheck) { - // skip proximity check - continuePulseRequest(reason); - return; - } - - final long start = SystemClock.uptimeMillis(); - new ProximityCheck() { - @Override - public void onProximityResult(int result) { - final long end = SystemClock.uptimeMillis(); - DozeLog.traceProximityResult(mContext, result == RESULT_NEAR, - end - start, reason); - if (performedProxCheck) { - // we already continued - return; - } - // avoid pulsing in pockets - if (result == RESULT_NEAR) { - mPulsePending = false; - return; - } - - // not in-pocket, continue pulsing + proximityCheckThenCall((result) -> { + if (result == ProximityCheck.RESULT_NEAR) { + // in pocket, abort pulse + mPulsePending = false; + } else { + // not in pocket, continue pulsing continuePulseRequest(reason); } - }.check(); + }, !mDozeParameters.getProxCheckBeforePulse() || performedProxCheck, reason); } private boolean canPulse() { @@ -259,6 +268,7 @@ public class DozeTriggers implements DozeMachine.Part { protected static final int RESULT_UNKNOWN = 0; protected static final int RESULT_NEAR = 1; protected static final int RESULT_FAR = 2; + protected static final int RESULT_NOT_CHECKED = 3; private boolean mRegistered; private boolean mFinished; |