Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a6c03f8d authored by Adrian Roos's avatar Adrian Roos
Browse files

AOD: When prox covered disable touch during pulse instead of aborting

Fixes a UX issue where covering the prox would abort dozing. This
was done to prevent falsing and save power, but in practice results
in a frustrating experience when the proximity sensor is covered
transiently when reaching for the device.

Instead, just ignore touch while the sensor is covered.

Change-Id: Id70f8605c6c7a37288a383d587025bb9b4191b42
Fixes: 64007762
Test: Trigger AOD2, cover sensor. Verify phone stays on but double tap does nothing.
parent 076d6f76
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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) {}
+7 −2
Original line number Diff line number Diff line
@@ -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) {
+4 −0
Original line number Diff line number Diff line
@@ -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);
+4 −4
Original line number Diff line number Diff line
@@ -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");
+17 −0
Original line number Diff line number Diff line
@@ -5372,6 +5372,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() {
@@ -5442,6 +5443,7 @@ public class StatusBar extends SystemUI implements DemoMode,
                    mStackScroller.setPulsing(pulsing);
                    mNotificationPanel.setPulsing(pulsing != null);
                    mVisualStabilityManager.setPulsing(pulsing != null);
                    mIgnoreTouchWhilePulsing = false;
                }
            }, reason);
        }
@@ -5455,6 +5457,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();
@@ -5552,6 +5565,10 @@ public class StatusBar extends SystemUI implements DemoMode,
        }
    }

    public boolean shouldIgnoreTouch() {
        return isDozing() && mDozeServiceHost.mIgnoreTouchWhilePulsing;
    }

    // Begin Extra BaseStatusBar methods.

    protected CommandQueue mCommandQueue;
Loading