summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/system-current.txt2
-rw-r--r--core/java/android/companion/virtual/sensor/VirtualSensorConfig.java6
-rw-r--r--core/tests/coretests/src/android/companion/virtual/sensor/VirtualSensorConfigTest.java19
-rw-r--r--services/companion/java/com/android/server/companion/virtual/SensorController.java3
4 files changed, 28 insertions, 2 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index 8a6faa109522..aefa93a0a875 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -3362,7 +3362,7 @@ package android.companion.virtual.sensor {
}
public static final class VirtualSensorConfig.Builder {
- ctor public VirtualSensorConfig.Builder(int, @NonNull String);
+ ctor public VirtualSensorConfig.Builder(@IntRange(from=1) int, @NonNull String);
method @NonNull public android.companion.virtual.sensor.VirtualSensorConfig build();
method @NonNull public android.companion.virtual.sensor.VirtualSensorConfig.Builder setDirectChannelTypesSupported(int);
method @NonNull public android.companion.virtual.sensor.VirtualSensorConfig.Builder setHighestDirectReportRateLevel(int);
diff --git a/core/java/android/companion/virtual/sensor/VirtualSensorConfig.java b/core/java/android/companion/virtual/sensor/VirtualSensorConfig.java
index ffbdff8c2e3b..401e754abca6 100644
--- a/core/java/android/companion/virtual/sensor/VirtualSensorConfig.java
+++ b/core/java/android/companion/virtual/sensor/VirtualSensorConfig.java
@@ -17,6 +17,7 @@
package android.companion.virtual.sensor;
+import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
@@ -167,7 +168,10 @@ public final class VirtualSensorConfig implements Parcelable {
* @param name The name of the sensor. Must be unique among all sensors with the same type
* that belong to the same virtual device.
*/
- public Builder(int type, @NonNull String name) {
+ public Builder(@IntRange(from = 1) int type, @NonNull String name) {
+ if (type <= 0) {
+ throw new IllegalArgumentException("Virtual sensor type must be positive");
+ }
mType = type;
mName = Objects.requireNonNull(name);
}
diff --git a/core/tests/coretests/src/android/companion/virtual/sensor/VirtualSensorConfigTest.java b/core/tests/coretests/src/android/companion/virtual/sensor/VirtualSensorConfigTest.java
index 16ed3ef42da3..17b064c12598 100644
--- a/core/tests/coretests/src/android/companion/virtual/sensor/VirtualSensorConfigTest.java
+++ b/core/tests/coretests/src/android/companion/virtual/sensor/VirtualSensorConfigTest.java
@@ -26,6 +26,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.testng.Assert.assertThrows;
+import android.hardware.Sensor;
import android.os.Parcel;
import android.platform.test.annotations.Presubmit;
@@ -67,6 +68,24 @@ public class VirtualSensorConfigTest {
}
@Test
+ public void virtualSensorConfig_invalidName_throwsException() {
+ assertThrows(
+ NullPointerException.class,
+ () -> new VirtualSensorConfig.Builder(TYPE_ACCELEROMETER, null));
+ }
+
+ @Test
+ public void virtualSensorConfig_invalidType_throwsException() {
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> new VirtualSensorConfig.Builder(Sensor.TYPE_ALL, SENSOR_NAME));
+
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> new VirtualSensorConfig.Builder(0, SENSOR_NAME));
+ }
+
+ @Test
public void hardwareBufferDirectChannelTypeSupported_throwsException() {
assertThrows(
IllegalArgumentException.class,
diff --git a/services/companion/java/com/android/server/companion/virtual/SensorController.java b/services/companion/java/com/android/server/companion/virtual/SensorController.java
index 864fe0f5edc1..7df0d861dc22 100644
--- a/services/companion/java/com/android/server/companion/virtual/SensorController.java
+++ b/services/companion/java/com/android/server/companion/virtual/SensorController.java
@@ -99,6 +99,9 @@ public class SensorController {
private int createSensorInternal(IBinder sensorToken, VirtualSensorConfig config)
throws SensorCreationException {
+ if (config.getType() <= 0) {
+ throw new SensorCreationException("Received an invalid virtual sensor type.");
+ }
final int handle = mSensorManagerInternal.createRuntimeSensor(mVirtualDeviceId,
config.getType(), config.getName(),
config.getVendor() == null ? "" : config.getVendor(), config.getFlags(),