diff options
7 files changed, 42 insertions, 6 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeHost.java b/packages/SystemUI/src/com/android/systemui/doze/DozeHost.java index 57fb14e50249..9b97634d7419 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeHost.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeHost.java @@ -44,6 +44,8 @@ public interface DozeHost { void setDozeScreenBrightness(int value); + void onIgnoreTouchWhilePulsing(boolean ignore); + interface Callback { default void onNotificationHeadsUp() {} default void onPowerSaveChanged(boolean active) {} diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java index 0993ace8cfcc..79de48a17423 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java @@ -164,6 +164,11 @@ public class DozeLog { } } + public static void traceState(DozeMachine.State state) { + if (!ENABLED) return; + log("state " + state); + } + public static void traceProximityResult(Context context, boolean near, long millis, int pulseReason) { if (!ENABLED) return; @@ -233,10 +238,10 @@ public class DozeLog { + state + " blocked=" + blocked); } - public static void tracePulseCanceledByProx(Context context) { + public static void tracePulseTouchDisabledByProx(Context context, boolean disabled) { if (!ENABLED) return; init(context); - log("pulseCanceledByProx"); + log("pulseTouchDisabledByProx " + disabled); } public static void setRegisterKeyguardCallback(boolean registerKeyguardCallback) { diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java b/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java index a1dfeb34a670..8ec6afc326e1 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java @@ -17,6 +17,7 @@ package com.android.systemui.doze; import android.annotation.MainThread; +import android.os.Trace; import android.os.UserHandle; import android.util.Log; import android.view.Display; @@ -225,6 +226,9 @@ public class DozeMachine { State oldState = mState; mState = newState; + DozeLog.traceState(newState); + Trace.traceCounter(Trace.TRACE_TAG_APP, "doze_machine_state", newState.ordinal()); + updatePulseReason(newState, oldState, pulseReason); performTransitionOnComponents(oldState, newState); updateWakeLockState(newState); diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java index ea064797f8f5..15981e573ca1 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java @@ -162,10 +162,10 @@ public class DozeTriggers implements DozeMachine.Part { final boolean pausing = (state == DozeMachine.State.DOZE_AOD_PAUSING); final boolean aod = (state == DozeMachine.State.DOZE_AOD); - if (near && state == DozeMachine.State.DOZE_PULSING) { - if (DEBUG) Log.i(TAG, "Prox NEAR, ending pulse"); - DozeLog.tracePulseCanceledByProx(mContext); - mMachine.requestState(DozeMachine.State.DOZE_PULSE_DONE); + if (state == DozeMachine.State.DOZE_PULSING) { + boolean ignoreTouch = near; + if (DEBUG) Log.i(TAG, "Prox changed, ignore touch = " + ignoreTouch); + mDozeHost.onIgnoreTouchWhilePulsing(ignoreTouch); } if (far && (paused || pausing)) { if (DEBUG) Log.i(TAG, "Prox FAR, unpausing AOD"); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index 0d6c383ffe92..ab021b49c6a8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -5395,6 +5395,7 @@ public class StatusBar extends SystemUI implements DemoMode, private final class DozeServiceHost implements DozeHost { private final ArrayList<Callback> mCallbacks = new ArrayList<Callback>(); private boolean mAnimateWakeup; + private boolean mIgnoreTouchWhilePulsing; @Override public String toString() { @@ -5465,6 +5466,7 @@ public class StatusBar extends SystemUI implements DemoMode, mStackScroller.setPulsing(pulsing); mNotificationPanel.setPulsing(pulsing != null); mVisualStabilityManager.setPulsing(pulsing != null); + mIgnoreTouchWhilePulsing = false; } }, reason); } @@ -5479,6 +5481,17 @@ public class StatusBar extends SystemUI implements DemoMode, } @Override + public void onIgnoreTouchWhilePulsing(boolean ignore) { + if (ignore != mIgnoreTouchWhilePulsing) { + DozeLog.tracePulseTouchDisabledByProx(mContext, ignore); + } + mIgnoreTouchWhilePulsing = ignore; + if (isDozing() && ignore) { + mStatusBarWindow.cancelCurrentTouch(); + } + } + + @Override public void dozeTimeTick() { mNotificationPanel.refreshTime(); } @@ -5575,6 +5588,10 @@ public class StatusBar extends SystemUI implements DemoMode, } } + public boolean shouldIgnoreTouch() { + return isDozing() && mDozeServiceHost.mIgnoreTouchWhilePulsing; + } + // Begin Extra BaseStatusBar methods. protected CommandQueue mCommandQueue; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java index 0dcf6d277145..03f42a6f760d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java @@ -254,6 +254,10 @@ public class StatusBarWindowView extends FrameLayout { @Override public boolean dispatchTouchEvent(MotionEvent ev) { boolean isDown = ev.getActionMasked() == MotionEvent.ACTION_DOWN; + boolean isCancel = ev.getActionMasked() == MotionEvent.ACTION_CANCEL; + if (!isCancel && mService.shouldIgnoreTouch()) { + return false; + } if (isDown && mNotificationPanel.isFullyCollapsed()) { mNotificationPanel.startExpandLatencyTracking(); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeHostFake.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeHostFake.java index 641f2636c6ae..333e73dc10f4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeHostFake.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeHostFake.java @@ -87,6 +87,10 @@ class DozeHostFake implements DozeHost { } @Override + public void onIgnoreTouchWhilePulsing(boolean ignore) { + } + + @Override public void abortPulsing() { pulseAborted = true; } |