diff --git a/services/core/java/com/android/server/policy/DeviceStateProviderImpl.java b/services/core/java/com/android/server/policy/DeviceStateProviderImpl.java index 321bb8c0251d4..cc1f8d620d1ff 100644 --- a/services/core/java/com/android/server/policy/DeviceStateProviderImpl.java +++ b/services/core/java/com/android/server/policy/DeviceStateProviderImpl.java @@ -158,7 +158,6 @@ public final class DeviceStateProviderImpl implements DeviceStateProvider, // switch there is no need to register for a callback. boolean shouldListenToLidSwitch = false; - final SensorManager sensorManager = mContext.getSystemService(SensorManager.class); // The set of Sensor(s) that this instance should register to receive SensorEvent(s) from. final ArraySet sensorsToListenTo = new ArraySet<>(); @@ -182,19 +181,10 @@ public final class DeviceStateProviderImpl implements DeviceStateProvider, List sensorConditions = conditions.getSensor(); for (int j = 0; j < sensorConditions.size(); j++) { SensorCondition sensorCondition = sensorConditions.get(j); - final int expectedSensorType = sensorCondition.getType().intValue(); + final String expectedSensorType = sensorCondition.getType(); final String expectedSensorName = sensorCondition.getName(); - List sensors = sensorManager.getSensorList(expectedSensorType); - Sensor foundSensor = null; - for (int sensorIndex = 0; sensorIndex < sensors.size(); sensorIndex++) { - Sensor sensor = sensors.get(sensorIndex); - if (sensor.getName().equals(expectedSensorName)) { - foundSensor = sensor; - break; - } - } - + final Sensor foundSensor = findSensor(expectedSensorType, expectedSensorName); if (foundSensor == null) { throw new IllegalStateException("Failed to find Sensor with type: " + expectedSensorType + " and name: " + expectedSensorName); @@ -221,12 +211,33 @@ public final class DeviceStateProviderImpl implements DeviceStateProvider, inputManager.registerLidSwitchCallback(this); } + final SensorManager sensorManager = mContext.getSystemService(SensorManager.class); for (int i = 0; i < sensorsToListenTo.size(); i++) { Sensor sensor = sensorsToListenTo.valueAt(i); sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_FASTEST); } } + @Nullable + private Sensor findSensor(String type, String name) { + final SensorManager sensorManager = mContext.getSystemService(SensorManager.class); + final List sensors = sensorManager.getSensorList(Sensor.TYPE_ALL); + for (int sensorIndex = 0; sensorIndex < sensors.size(); sensorIndex++) { + final Sensor sensor = sensors.get(sensorIndex); + final String sensorType = sensor.getStringType(); + final String sensorName = sensor.getName(); + + if (sensorType == null || sensorName == null) { + continue; + } + + if (sensorType.equals(type) && sensorName.equals(name)) { + return sensor; + } + } + return null; + } + @Override public void setListener(Listener listener) { synchronized (mLock) { diff --git a/services/core/xsd/device-state-config/device-state-config.xsd b/services/core/xsd/device-state-config/device-state-config.xsd index 0d8c08c93ff26..501450398fc3c 100644 --- a/services/core/xsd/device-state-config/device-state-config.xsd +++ b/services/core/xsd/device-state-config/device-state-config.xsd @@ -57,8 +57,8 @@ + - diff --git a/services/core/xsd/device-state-config/schema/current.txt b/services/core/xsd/device-state-config/schema/current.txt index 667d1add5a98a..b396af0fa0c65 100644 --- a/services/core/xsd/device-state-config/schema/current.txt +++ b/services/core/xsd/device-state-config/schema/current.txt @@ -44,10 +44,10 @@ package com.android.server.policy.devicestate.config { public class SensorCondition { ctor public SensorCondition(); method public String getName(); - method public java.math.BigInteger getType(); + method public String getType(); method public java.util.List getValue(); method public void setName(String); - method public void setType(java.math.BigInteger); + method public void setType(String); } public class XmlParser { diff --git a/services/tests/servicestests/src/com/android/server/policy/DeviceStateProviderImplTest.java b/services/tests/servicestests/src/com/android/server/policy/DeviceStateProviderImplTest.java index 92942bb915283..e816cbebd73f1 100644 --- a/services/tests/servicestests/src/com/android/server/policy/DeviceStateProviderImplTest.java +++ b/services/tests/servicestests/src/com/android/server/policy/DeviceStateProviderImplTest.java @@ -23,6 +23,7 @@ import static com.android.server.policy.DeviceStateProviderImpl.DEFAULT_DEVICE_S import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; @@ -170,16 +171,16 @@ public final class DeviceStateProviderImplTest { @Test public void create_sensor() throws Exception { - Sensor sensor = newSensor("sensor", Sensor.TYPE_HINGE_ANGLE); - when(mSensorManager.getSensorList(eq(sensor.getType()))).thenReturn(List.of(sensor)); + Sensor sensor = newSensor("sensor", Sensor.STRING_TYPE_HINGE_ANGLE); + when(mSensorManager.getSensorList(anyInt())).thenReturn(List.of(sensor)); String configString = "\n" + " \n" + " 1\n" + " \n" + " \n" + + " " + sensor.getStringType() + "\n" + " " + sensor.getName() + "\n" - + " " + sensor.getType() + "\n" + " \n" + " 90\n" + " \n" @@ -190,8 +191,8 @@ public final class DeviceStateProviderImplTest { + " 2\n" + " \n" + " \n" + + " " + sensor.getStringType() + "\n" + " " + sensor.getName() + "\n" - + " " + sensor.getType() + "\n" + " \n" + " 90\n" + " 180\n" @@ -203,8 +204,8 @@ public final class DeviceStateProviderImplTest { + " 3\n" + " \n" + " \n" + + " " + sensor.getStringType() + "\n" + " " + sensor.getName() + "\n" - + " " + sensor.getType() + "\n" + " \n" + " 180\n" + " \n" @@ -262,13 +263,13 @@ public final class DeviceStateProviderImplTest { assertEquals(1, mIntegerCaptor.getValue().intValue()); } - private static Sensor newSensor(String name, int type) throws Exception { + private static Sensor newSensor(String name, String type) throws Exception { Constructor constructor = Sensor.class.getDeclaredConstructor(); constructor.setAccessible(true); Sensor sensor = constructor.newInstance(); FieldSetter.setField(sensor, Sensor.class.getDeclaredField("mName"), name); - FieldSetter.setField(sensor, Sensor.class.getDeclaredField("mType"), type); + FieldSetter.setField(sensor, Sensor.class.getDeclaredField("mStringType"), type); return sensor; }