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

Commit be1fd400 authored by Lucas Dupin's avatar Lucas Dupin Committed by Android (Google) Code Review
Browse files

Merge "Ignore wake-up sensor right after sleeping"

parents 9aff88bd 8a13aa7b
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -86,6 +86,10 @@ public class AmbientDisplayConfiguration {
                && wakeScreenGestureAvailable();
    }

    public long getWakeLockScreenDebounce() {
        return mContext.getResources().getInteger(R.integer.config_dozeWakeLockScreenDebounce);
    }

    public String doubleTapSensorType() {
        return mContext.getResources().getString(R.string.config_dozeDoubleTapSensorType);
    }
+1 −0
Original line number Diff line number Diff line
@@ -2272,6 +2272,7 @@

    <!-- If the sensor that wakes up the lock screen is available or not. -->
    <bool name="config_dozeWakeLockScreenSensorAvailable">false</bool>
    <integer name="config_dozeWakeLockScreenDebounce">3000</integer>

    <!-- Control whether the always on display mode is available. This should only be enabled on
         devices where the display has been tuned to be power efficient in DOZE and/or DOZE_SUSPEND
+1 −0
Original line number Diff line number Diff line
@@ -3404,6 +3404,7 @@

  <java-symbol type="string" name="config_dozeLongPressSensorType" />
  <java-symbol type="bool" name="config_dozeWakeLockScreenSensorAvailable" />
  <java-symbol type="integer" name="config_dozeWakeLockScreenDebounce" />

  <java-symbol type="array" name="config_allowedGlobalInstantAppSettings" />
  <java-symbol type="array" name="config_allowedSystemInstantAppSettings" />
+45 −16
Original line number Diff line number Diff line
@@ -38,6 +38,8 @@ import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;

import androidx.annotation.VisibleForTesting;

import com.android.internal.hardware.AmbientDisplayConfiguration;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto;
@@ -60,7 +62,6 @@ public class DozeSensors {
    private final Context mContext;
    private final AlarmManager mAlarmManager;
    private final SensorManager mSensorManager;
    private final TriggerSensor[] mSensors;
    private final ContentResolver mResolver;
    private final TriggerSensor mPickupSensor;
    private final DozeParameters mDozeParameters;
@@ -68,10 +69,12 @@ public class DozeSensors {
    private final WakeLock mWakeLock;
    private final Consumer<Boolean> mProxCallback;
    private final Callback mCallback;
    @VisibleForTesting
    protected final TriggerSensor[] mSensors;

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

    private long mDebounceFrom;

    public DozeSensors(Context context, AlarmManager alarmManager, SensorManager sensorManager,
            DozeParameters dozeParameters, AmbientDisplayConfiguration config, WakeLock wakeLock,
@@ -134,13 +137,21 @@ public class DozeSensors {
                        mConfig.wakeScreenGestureAvailable() && alwaysOn,
                        DozeLog.PULSE_REASON_SENSOR_WAKE_LOCK_SCREEN,
                        false /* reports touch coordinates */,
                        false /* touchscreen */),
                        false /* touchscreen */, mConfig.getWakeLockScreenDebounce()),
        };

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

    /**
     * Temporarily disable some sensors to avoid turning on the device while the user is
     * turning it off.
     */
    public void requestTemporaryDisable() {
        mDebounceFrom = SystemClock.uptimeMillis();
    }

    private Sensor findSensorWithType(String type) {
        return findSensorWithType(mSensorManager, type);
    }
@@ -320,7 +331,8 @@ public class DozeSensors {
        }
    }

    private class TriggerSensor extends TriggerEventListener {
    @VisibleForTesting
    class TriggerSensor extends TriggerEventListener {
        final Sensor mSensor;
        final boolean mConfigured;
        final int mPulseReason;
@@ -467,23 +479,25 @@ public class DozeSensors {
    /**
     * A Sensor that is injected via plugin.
     */
    private class PluginSensor extends TriggerSensor {
    @VisibleForTesting
    class PluginSensor extends TriggerSensor implements SensorManagerPlugin.SensorEventListener {

        private final SensorManagerPlugin.Sensor mPluginSensor;
        private final SensorManagerPlugin.SensorEventListener mTriggerEventListener = (event) -> {
            DozeLog.traceSensor(mContext, mPulseReason);
            mHandler.post(mWakeLock.wrap(() -> {
                if (DEBUG) Log.d(TAG, "onSensorEvent: " + triggerEventToString(event));
                mCallback.onSensorPulse(mPulseReason, true /* sensorPerformsProxCheck */, -1, -1,
                        event.getValues());
            }));
        };
        final SensorManagerPlugin.Sensor mPluginSensor;
        private long mDebounce;

        PluginSensor(SensorManagerPlugin.Sensor sensor, String setting, boolean configured,
                int pulseReason, boolean reportsTouchCoordinates, boolean requiresTouchscreen) {
            this(sensor, setting, configured, pulseReason, reportsTouchCoordinates,
                    requiresTouchscreen, 0L /* debounce */);
        }

        PluginSensor(SensorManagerPlugin.Sensor sensor, String setting, boolean configured,
                int pulseReason, boolean reportsTouchCoordinates, boolean requiresTouchscreen,
                long debounce) {
            super(null, setting, configured, pulseReason, reportsTouchCoordinates,
                    requiresTouchscreen);
            mPluginSensor = sensor;
            mDebounce = debounce;
        }

        @Override
@@ -492,11 +506,11 @@ public class DozeSensors {
            AsyncSensorManager asyncSensorManager = (AsyncSensorManager) mSensorManager;
            if (mRequested && !mDisabled && (enabledBySetting() || mIgnoresSetting)
                    && !mRegistered) {
                asyncSensorManager.registerPluginListener(mPluginSensor, mTriggerEventListener);
                asyncSensorManager.registerPluginListener(mPluginSensor, this);
                mRegistered = true;
                if (DEBUG) Log.d(TAG, "registerPluginListener");
            } else if (mRegistered) {
                asyncSensorManager.unregisterPluginListener(mPluginSensor, mTriggerEventListener);
                asyncSensorManager.unregisterPluginListener(mPluginSensor, this);
                mRegistered = false;
                if (DEBUG) Log.d(TAG, "unregisterPluginListener");
            }
@@ -524,6 +538,21 @@ public class DozeSensors {
            }
            return sb.append(']').toString();
        }

        @Override
        public void onSensorChanged(SensorManagerPlugin.SensorEvent event) {
            DozeLog.traceSensor(mContext, mPulseReason);
            mHandler.post(mWakeLock.wrap(() -> {
                final long now = SystemClock.uptimeMillis();
                if (now < mDebounceFrom + mDebounce) {
                    if (DEBUG) Log.d(TAG, "onSensorEvent dropped: " + triggerEventToString(event));
                    return;
                }
                if (DEBUG) Log.d(TAG, "onSensorEvent: " + triggerEventToString(event));
                mCallback.onSensorPulse(mPulseReason, true /* sensorPerformsProxCheck */, -1, -1,
                        event.getValues());
            }));
        }
    }

    public interface Callback {
+9 −1
Original line number Diff line number Diff line
@@ -143,8 +143,12 @@ public class DozeTriggers implements DozeMachine.Part {

        if (isWakeDisplay) {
            onWakeScreen(wakeEvent, mMachine.getState());
        } else if (isLongPress || isWakeLockScreen) {
        } else if (isLongPress) {
            requestPulse(pulseReason, sensorPerformedProxCheck);
        } else if (isWakeLockScreen) {
            if (wakeEvent) {
                requestPulse(pulseReason, sensorPerformedProxCheck);
            }
        } else {
            proximityCheckThenCall((result) -> {
                if (result == ProximityCheck.RESULT_NEAR) {
@@ -228,6 +232,7 @@ public class DozeTriggers implements DozeMachine.Part {
                if (mDockManager != null) {
                    mDockManager.addListener(mDockEventListener);
                }
                mDozeSensors.requestTemporaryDisable();
                checkTriggersAtInit();
                break;
            case DOZE:
@@ -250,6 +255,9 @@ public class DozeTriggers implements DozeMachine.Part {
                mDozeSensors.setTouchscreenSensorsListening(false);
                mDozeSensors.setProxListening(true);
                break;
            case DOZE_PULSE_DONE:
                mDozeSensors.requestTemporaryDisable();
                break;
            case FINISH:
                mBroadcastReceiver.unregister(mContext);
                mDozeHost.removeCallback(mHostCallback);
Loading