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
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user