From d121ac12fd44762dc7b799edb87b5f1a5c268365 Mon Sep 17 00:00:00 2001 From: Ashutosh Joshi Date: Fri, 12 Jan 2018 15:28:28 -0800 Subject: 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 --- .../server/policy/WindowOrientationListener.java | 24 +++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/policy/WindowOrientationListener.java b/services/core/java/com/android/server/policy/WindowOrientationListener.java index 1b5a5216909d..48a196dfcff1 100644 --- a/services/core/java/com/android/server/policy/WindowOrientationListener.java +++ b/services/core/java/com/android/server/policy/WindowOrientationListener.java @@ -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 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(); -- cgit v1.2.3-59-g8ed1b