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

Commit 6612727c authored by John Spurlock's avatar John Spurlock
Browse files

Doze: allow devices to opt-out of sigmotion trigger.

For devices with unreliable significant motion sensors, allow
the tease signal to be disabled via device config.

Also add doze state to dream service dumpsys.

Bug:15863249
Change-Id: I23eeec09c69cc3bd43b187e49555391ac0a99d9f
parent f41fc966
Loading
Loading
Loading
Loading
+21 −16
Original line number Diff line number Diff line
@@ -898,10 +898,17 @@ public class DreamService extends Service implements Window.Callback {
    }

    @Override
    protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
    protected void dump(final FileDescriptor fd, PrintWriter pw, final String[] args) {
        DumpUtils.dumpAsync(mHandler, new Dump() {
            @Override
            public void dump(PrintWriter pw) {
                dumpOnHandler(fd, pw, args);
            }
        }, pw, 1000);
    }

    /** @hide */
    protected void dumpOnHandler(FileDescriptor fd, PrintWriter pw, String[] args) {
        pw.print(TAG + ": ");
        if (mWindowToken == null) {
            pw.println("stopped");
@@ -918,8 +925,6 @@ public class DreamService extends Service implements Window.Callback {
        if (isDozing()) pw.print(" dozing");
        pw.println();
    }
        }, pw, 1000);
    }

    private final class DreamServiceWrapper extends IDreamService.Stub {
        @Override
+3 −0
Original line number Diff line number Diff line
@@ -157,5 +157,8 @@

    <!-- Set to true to enable the user switcher on the keyguard. -->
    <bool name="config_keyguardUserSwitcher">false</bool>

    <!-- Doze: should the significant motion sensor be used as a tease signal? -->
    <bool name="doze_tease_on_significant_motion">true</bool>
</resources>
+39 −7
Original line number Diff line number Diff line
@@ -25,13 +25,18 @@ import android.hardware.SensorManager;
import android.hardware.TriggerEvent;
import android.hardware.TriggerEventListener;
import android.os.PowerManager;
import android.os.SystemProperties;
import android.os.Vibrator;
import android.service.dreams.DozeHardware;
import android.service.dreams.DreamService;
import android.util.Log;

import com.android.systemui.R;
import com.android.systemui.SystemUIApplication;

import java.io.FileDescriptor;
import java.io.PrintWriter;

public class DozeService extends DreamService {
    private static final boolean DEBUG = false;

@@ -48,12 +53,25 @@ public class DozeService extends DreamService {
    private PowerManager.WakeLock mWakeLock;
    private boolean mDreaming;
    private boolean mTeaseReceiverRegistered;
    private boolean mSigMotionConfigured;
    private boolean mSigMotionEnabled;

    public DozeService() {
        if (DEBUG) Log.d(mTag, "new DozeService()");
        setDebug(DEBUG);
    }

    @Override
    protected void dumpOnHandler(FileDescriptor fd, PrintWriter pw, String[] args) {
        super.dumpOnHandler(fd, pw, args);
        pw.print("  mDreaming: "); pw.println(mDreaming);
        pw.print("  mDozeHardware: "); pw.println(mDozeHardware);
        pw.print("  mTeaseReceiverRegistered: "); pw.println(mTeaseReceiverRegistered);
        pw.print("  mSigMotionSensor: "); pw.println(mSigMotionSensor);
        pw.print("  mSigMotionConfigured: "); pw.println(mSigMotionConfigured);
        pw.print("  mSigMotionEnabled: "); pw.println(mSigMotionEnabled);
    }

    @Override
    public void onCreate() {
        if (DEBUG) Log.d(mTag, "onCreate");
@@ -70,6 +88,8 @@ public class DozeService extends DreamService {
        mSigMotionSensor = mSensors.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION);
        mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
        mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, mTag);
        mSigMotionConfigured = SystemProperties.getBoolean("doze.tease.sigmotion",
                mContext.getResources().getBoolean(R.bool.doze_tease_on_significant_motion));
    }

    @Override
@@ -156,27 +176,39 @@ public class DozeService extends DreamService {

    private void listenForTeaseSignals(boolean listen) {
        if (DEBUG) Log.d(mTag, "listenForTeaseSignals: " + listen);
        if (mHost == null) return;
        listenForSignificantMotion(listen);
        listenForBroadcast(listen);
        listenForNotifications(listen);
    }

    private void listenForSignificantMotion(boolean listen) {
        if (!mSigMotionConfigured || mSigMotionSensor == null) return;
        if (listen) {
            mSigMotionEnabled =
                    mSensors.requestTriggerSensor(mSigMotionListener, mSigMotionSensor);
        } else if (mSigMotionEnabled) {
            mSensors.cancelTriggerSensor(mSigMotionListener, mSigMotionSensor);
        }
    }

    private void listenForBroadcast(boolean listen) {
        if (listen) {
            mContext.registerReceiver(mTeaseReceiver, new IntentFilter(TEASE_ACTION));
            mTeaseReceiverRegistered = true;
            mHost.addCallback(mHostCallback);
        } else {
            if (mTeaseReceiverRegistered) {
                mContext.unregisterReceiver(mTeaseReceiver);
            }
            mTeaseReceiverRegistered = false;
            mHost.removeCallback(mHostCallback);
        }
    }

    private void listenForSignificantMotion(boolean listen) {
        if (mSigMotionSensor == null) return;
    private void listenForNotifications(boolean listen) {
        if (mHost == null) return;
        if (listen) {
            mSensors.requestTriggerSensor(mSigMotionListener, mSigMotionSensor);
            mHost.addCallback(mHostCallback);
        } else {
            mSensors.cancelTriggerSensor(mSigMotionListener, mSigMotionSensor);
            mHost.removeCallback(mHostCallback);
        }
    }