summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Adrian Roos <roosa@google.com> 2017-06-27 14:48:50 +0200
committer Adrian Roos <roosa@google.com> 2017-06-27 14:48:50 +0200
commitd32b366a1752d1735cfe4b87058596d05fcf9588 (patch)
tree6552638787d888ef914d8e1236111f1296790d1a
parent889d326edaea26ae21454a0117f01e4006f5e16d (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.java72
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;