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

Commit cbbb27bc authored by Adrian Roos's avatar Adrian Roos Committed by android-build-merger
Browse files

Merge "AOD: Proximity check doze triggers" into oc-dr1-dev am: 939171ee

am: 56fb90cf

Change-Id: I03e74dab4e096ac8a9b5fc01dfd90ca745eabf09
parents 58964543 56fb90cf
Loading
Loading
Loading
Loading
+41 −31
Original line number Diff line number Diff line
@@ -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)) {
            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);
        }
@@ -202,33 +229,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) {
        proximityCheckThenCall((result) -> {
            if (result == ProximityCheck.RESULT_NEAR) {
                // in pocket, abort pulse
                mPulsePending = false;
                    return;
                }

                // not in-pocket, continue pulsing
            } else {
                // not in pocket, continue pulsing
                continuePulseRequest(reason);
            }
        }.check();
        }, !mDozeParameters.getProxCheckBeforePulse() || performedProxCheck, reason);
    }

    private boolean canPulse() {
@@ -262,6 +271,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;