diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java b/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java index 6c4be06170432..c243899c6bc9d 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java @@ -211,7 +211,7 @@ public class DozeMachine { mDozeService.requestWakeUp(); } - private boolean isExecutingTransition() { + public boolean isExecutingTransition() { return !mQueuedRequests.isEmpty(); } diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java index 031f56266ea4c..7189a48fed1f8 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java @@ -198,6 +198,14 @@ public class DozeTriggers implements DozeMachine.Part { } private void onProximityFar(boolean far) { + // Proximity checks are asynchronous and the user might have interacted with the phone + // when a new event is arriving. This means that a state transition might have happened + // and the proximity check is now obsolete. + if (mMachine.isExecutingTransition()) { + Log.w(TAG, "onProximityFar called during transition. Ignoring sensor response."); + return; + } + final boolean near = !far; final DozeMachine.State state = mMachine.getState(); final boolean paused = (state == DozeMachine.State.DOZE_AOD_PAUSED);