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

Commit d121ac12 authored by Ashutosh Joshi's avatar Ashutosh Joshi
Browse files

Orientation Listener looks for the "right" Device Orientation Sensor.

Some variants of devices expose the Orientation listener as a wake up
listener. On such devices, the WOL switches to using the accelerometer
as the provider of orienation. This is not desirable.

Test: dumpsys sensorservice. Ensure that WOL is subscribed to the device
orientation listener and not the accelerometer.

Change-Id: I6a41769843eaa25d50109add3c8587fa67dfbaa7
parent 200cd63f
Loading
Loading
Loading
Loading
+23 −1
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import android.util.proto.ProtoOutputStream;
import android.view.Surface;

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

/**
 * A special helper class used by the WindowManager
@@ -90,7 +91,28 @@ public abstract class WindowOrientationListener {
        mHandler = handler;
        mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
        mRate = rate;
        mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_DEVICE_ORIENTATION);
        List<Sensor> l = mSensorManager.getSensorList(Sensor.TYPE_DEVICE_ORIENTATION);
        Sensor wakeUpDeviceOrientationSensor = null;
        Sensor nonWakeUpDeviceOrientationSensor = null;
        /**
         *  Prefer the wakeup form of the sensor if implemented.
         *  It's OK to look for just two types of this sensor and use
         *  the last found. Typical devices will only have one sensor of
         *  this type.
         */
        for (Sensor s : l) {
            if (s.isWakeUpSensor()) {
                wakeUpDeviceOrientationSensor = s;
            } else {
                nonWakeUpDeviceOrientationSensor = s;
            }
        }

        if (wakeUpDeviceOrientationSensor != null) {
            mSensor = wakeUpDeviceOrientationSensor;
        } else {
            mSensor = nonWakeUpDeviceOrientationSensor;
        }

        if (mSensor != null) {
            mOrientationJudge = new OrientationSensorJudge();