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

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

Merge "AOD: Prolong AOD2 after interaction, turn off AOD when prox covered" into oc-dev

am: 490ef3cd

Change-Id: I6a808b422c23e0bd695d8422150e57ed9cf874ad
parents 7096e0e0 490ef3cd
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -33,6 +33,8 @@ public interface DozeHost {
    boolean isPulsingBlocked();

    void startPendingIntentDismissingKeyguard(PendingIntent intent);
    void abortPulsing();
    void extendPulse();

    interface Callback {
        default void onNotificationHeadsUp() {}
+10 −1
Original line number Diff line number Diff line
@@ -58,12 +58,15 @@ public class DozeMachine {
        /** Pulse is done showing. Followed by transition to DOZE or DOZE_AOD. */
        DOZE_PULSE_DONE,
        /** Doze is done. DozeService is finished. */
        FINISH;
        FINISH,
        /** AOD, but the display is temporarily off. */
        DOZE_AOD_PAUSED;

        boolean canPulse() {
            switch (this) {
                case DOZE:
                case DOZE_AOD:
                case DOZE_AOD_PAUSED:
                    return true;
                default:
                    return false;
@@ -85,6 +88,7 @@ public class DozeMachine {
                case UNINITIALIZED:
                case INITIALIZED:
                case DOZE:
                case DOZE_AOD_PAUSED:
                    return Display.STATE_OFF;
                case DOZE_PULSING:
                case DOZE_AOD:
@@ -241,6 +245,11 @@ public class DozeMachine {
        if (mState == State.FINISH) {
            return State.FINISH;
        }
        if ((mState == State.DOZE_AOD_PAUSED || mState == State.DOZE_AOD || mState == State.DOZE)
                && requestedState == State.DOZE_PULSE_DONE) {
            Log.i(TAG, "Dropping pulse done because current state is already done: " + mState);
            return mState;
        }
        if (requestedState == State.DOZE_REQUEST_PULSE && !mState.canPulse()) {
            Log.i(TAG, "Dropping pulse request because current state can't pulse: " + mState);
            return mState;
+51 −1
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@ import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.hardware.TriggerEvent;
import android.hardware.TriggerEventListener;
@@ -40,6 +42,7 @@ import com.android.systemui.util.wakelock.WakeLock;

import java.io.PrintWriter;
import java.util.List;
import java.util.function.Consumer;

public class DozeSensors {

@@ -55,18 +58,22 @@ public class DozeSensors {
    private final DozeParameters mDozeParameters;
    private final AmbientDisplayConfiguration mConfig;
    private final WakeLock mWakeLock;
    private final Consumer<Boolean> mProxCallback;
    private final Callback mCallback;

    private final Handler mHandler = new Handler();
    private final ProxSensor mProxSensor;


    public DozeSensors(Context context, SensorManager sensorManager, DozeParameters dozeParameters,
            AmbientDisplayConfiguration config, WakeLock wakeLock, Callback callback) {
            AmbientDisplayConfiguration config, WakeLock wakeLock, Callback callback,
            Consumer<Boolean> proxCallback) {
        mContext = context;
        mSensorManager = sensorManager;
        mDozeParameters = dozeParameters;
        mConfig = config;
        mWakeLock = wakeLock;
        mProxCallback = proxCallback;
        mResolver = mContext.getContentResolver();

        mSensors = new TriggerSensor[] {
@@ -86,6 +93,8 @@ public class DozeSensors {
                        true /* configured */,
                        DozeLog.PULSE_REASON_SENSOR_DOUBLE_TAP)
        };

        mProxSensor = new ProxSensor();
        mCallback = callback;
    }

@@ -129,6 +138,10 @@ public class DozeSensors {
        }
    }

    public void setProxListening(boolean listen) {
        mProxSensor.setRegistered(listen);
    }

    private final ContentObserver mSettingsObserver = new ContentObserver(mHandler) {
        @Override
        public void onChange(boolean selfChange, Uri uri, int userId) {
@@ -152,6 +165,43 @@ public class DozeSensors {
        }
    }

    private class ProxSensor implements SensorEventListener {

        boolean mRegistered;
        Boolean mCurrentlyFar;

        void setRegistered(boolean register) {
            if (mRegistered == register) {
                // Send an update even if we don't re-register.
                mHandler.post(() -> {
                    if (mCurrentlyFar != null) {
                        mProxCallback.accept(mCurrentlyFar);
                    }
                });
                return;
            }
            if (register) {
                mRegistered = mSensorManager.registerListener(this,
                        mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY),
                        SensorManager.SENSOR_DELAY_NORMAL, mHandler);
            } else {
                mSensorManager.unregisterListener(this);
                mRegistered = false;
                mCurrentlyFar = null;
            }
        }

        @Override
        public void onSensorChanged(SensorEvent event) {
            mCurrentlyFar = event.values[0] >= event.sensor.getMaximumRange();
            mProxCallback.accept(mCurrentlyFar);
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
        }
    }

    private class TriggerSensor extends TriggerEventListener {
        final Sensor mSensor;
        final boolean mConfigured;
+35 −1
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ import java.io.PrintWriter;
public class DozeTriggers implements DozeMachine.Part {

    private static final String TAG = "DozeTriggers";
    private static final boolean DEBUG = DozeService.DEBUG;

    /** adb shell am broadcast -a com.android.systemui.doze.pulse com.android.systemui */
    private static final String PULSE_ACTION = "com.android.systemui.doze.pulse";
@@ -81,7 +82,7 @@ public class DozeTriggers implements DozeMachine.Part {
        mWakeLock = wakeLock;
        mAllowPulseTriggers = allowPulseTriggers;
        mDozeSensors = new DozeSensors(context, mSensorManager, dozeParameters, config,
                wakeLock, this::onSensor);
                wakeLock, this::onSensor, this::onProximityFar);
        mUiModeManager = mContext.getSystemService(UiModeManager.class);
    }

@@ -113,6 +114,22 @@ public class DozeTriggers implements DozeMachine.Part {
        }
    }

    private void onProximityFar(boolean far) {
        final boolean near = !far;
        DozeMachine.State state = mMachine.getState();
        if (near && state == DozeMachine.State.DOZE_PULSING) {
            if (DEBUG) Log.i(TAG, "Prox NEAR, ending pulse");
            mMachine.requestState(DozeMachine.State.DOZE_PULSE_DONE);
        }
        if (far && state == DozeMachine.State.DOZE_AOD_PAUSED) {
            if (DEBUG) Log.i(TAG, "Prox FAR, unpausing AOD");
            mMachine.requestState(DozeMachine.State.DOZE_AOD);
        } else if (near && state == DozeMachine.State.DOZE_AOD) {
            if (DEBUG) Log.i(TAG, "Prox NEAR, pausing AOD");
            mMachine.requestState(DozeMachine.State.DOZE_AOD_PAUSED);
        }
    }

    private void onCarMode() {
        mMachine.requestState(DozeMachine.State.FINISH);
    }
@@ -131,15 +148,21 @@ public class DozeTriggers implements DozeMachine.Part {
                break;
            case DOZE:
            case DOZE_AOD:
            case DOZE_AOD_PAUSED:
                mDozeSensors.setProxListening(newState != DozeMachine.State.DOZE);
                mDozeSensors.setListening(true);
                if (oldState != DozeMachine.State.INITIALIZED) {
                    mDozeSensors.reregisterAllSensors();
                }
                break;
            case DOZE_PULSING:
                mDozeSensors.setProxListening(true);
                break;
            case FINISH:
                mBroadcastReceiver.unregister(mContext);
                mDozeHost.removeCallback(mHostCallback);
                mDozeSensors.setListening(false);
                mDozeSensors.setProxListening(false);
                break;
            default:
        }
@@ -156,6 +179,7 @@ public class DozeTriggers implements DozeMachine.Part {

    private void requestPulse(final int reason, boolean performedProxCheck) {
        Assert.isMainThread();
        mDozeHost.extendPulse();
        if (mPulsePending || !mAllowPulseTriggers || !canPulse()) {
            return;
        }
@@ -286,6 +310,8 @@ public class DozeTriggers implements DozeMachine.Part {
    }

    private class TriggerReceiver extends BroadcastReceiver {
        private boolean mRegistered;

        @Override
        public void onReceive(Context context, Intent intent) {
            if (PULSE_ACTION.equals(intent.getAction())) {
@@ -301,14 +327,22 @@ public class DozeTriggers implements DozeMachine.Part {
        }

        public void register(Context context) {
            if (mRegistered) {
                return;
            }
            IntentFilter filter = new IntentFilter(PULSE_ACTION);
            filter.addAction(UiModeManager.ACTION_ENTER_CAR_MODE);
            filter.addAction(Intent.ACTION_USER_SWITCHED);
            context.registerReceiver(this, filter);
            mRegistered = true;
        }

        public void unregister(Context context) {
            if (!mRegistered) {
                return;
            }
            context.unregisterReceiver(this);
            mRegistered = false;
        }
    }

+3 −0
Original line number Diff line number Diff line
@@ -75,11 +75,14 @@ public class DozeUi implements DozeMachine.Part {
                scheduleTimeTick();
                break;
            case DOZE:
            case DOZE_AOD_PAUSED:
                unscheduleTimeTick();
                break;
            case DOZE_REQUEST_PULSE:
                pulseWhileDozing(DozeLog.PULSE_REASON_NOTIFICATION /* TODO */);
                break;
            case DOZE_PULSE_DONE:
                mHost.abortPulsing();
            case INITIALIZED:
                mHost.startDozing();
                break;
Loading