From e8d18853de15224bd3089d617febf14c6f659e70 Mon Sep 17 00:00:00 2001 From: Anh Pham Date: Thu, 10 Jun 2021 10:58:31 +0200 Subject: [PATCH] Throw Exception only if sensors are in capped set. Test: atest CtsSensorTestCases CtsSensorRatePermissionTestCases Bug: 190567703 Change-Id: Ic35228c1d2e244c2dcaf252ae106f5d4f693b35b --- .../android/hardware/SystemSensorManager.java | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/core/java/android/hardware/SystemSensorManager.java b/core/java/android/hardware/SystemSensorManager.java index bc2dcb3b4e624..fe8dc46aff4de 100644 --- a/core/java/android/hardware/SystemSensorManager.java +++ b/core/java/android/hardware/SystemSensorManager.java @@ -571,7 +571,9 @@ public class SystemSensorManager extends SensorManager { } int sensorHandle = (sensor == null) ? -1 : sensor.getHandle(); - if (rate > CAPPED_SAMPLING_RATE_LEVEL + if (sensor != null + && isSensorInCappedSet(sensor.getType()) + && rate > CAPPED_SAMPLING_RATE_LEVEL && mIsPackageDebuggable && !mHasHighSamplingRateSensorsPermission && Compatibility.isChangeEnabled(CHANGE_ID_SAMPLING_RATE_SENSORS_PERMISSION)) { @@ -782,7 +784,8 @@ public class SystemSensorManager extends SensorManager { Sensor sensor, int rateUs, int maxBatchReportLatencyUs) { if (mNativeSensorEventQueue == 0) throw new NullPointerException(); if (sensor == null) throw new NullPointerException(); - if (rateUs < CAPPED_SAMPLING_PERIOD_US + if (mManager.isSensorInCappedSet(sensor.getType()) + && rateUs < CAPPED_SAMPLING_PERIOD_US && mManager.mIsPackageDebuggable && !mManager.mHasHighSamplingRateSensorsPermission && Compatibility.isChangeEnabled(CHANGE_ID_SAMPLING_RATE_SENSORS_PERMISSION)) { @@ -1015,4 +1018,20 @@ public class SystemSensorManager extends SensorManager { mNativeInstance, handle, parameter.type, parameter.floatValues, parameter.intValues) == 0; } + + /** + * Checks if a sensor should be capped according to HIGH_SAMPLING_RATE_SENSORS + * permission. + * + * This needs to be kept in sync with the list defined on the native side + * in frameworks/native/services/sensorservice/SensorService.cpp + */ + private boolean isSensorInCappedSet(int sensorType) { + return (sensorType == Sensor.TYPE_ACCELEROMETER + || sensorType == Sensor.TYPE_ACCELEROMETER_UNCALIBRATED + || sensorType == Sensor.TYPE_GYROSCOPE + || sensorType == Sensor.TYPE_GYROSCOPE_UNCALIBRATED + || sensorType == Sensor.TYPE_MAGNETIC_FIELD + || sensorType == Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED); + } }