diff options
| -rw-r--r-- | core/java/android/hardware/SystemSensorManager.java | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/core/java/android/hardware/SystemSensorManager.java b/core/java/android/hardware/SystemSensorManager.java index 51506b00b892..80cbde75efd2 100644 --- a/core/java/android/hardware/SystemSensorManager.java +++ b/core/java/android/hardware/SystemSensorManager.java @@ -16,12 +16,10 @@ package android.hardware; -import android.Manifest; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.content.pm.PackageManager; import android.os.Handler; import android.os.Looper; import android.os.MemoryFile; @@ -51,8 +49,9 @@ import java.util.Map; */ public class SystemSensorManager extends SensorManager { //TODO: disable extra logging before release - private static boolean DEBUG_DYNAMIC_SENSOR = true; - private static int MIN_DIRECT_CHANNEL_BUFFER_SIZE = 104; + private static final boolean DEBUG_DYNAMIC_SENSOR = true; + private static final int MIN_DIRECT_CHANNEL_BUFFER_SIZE = 104; + private static final int MAX_LISTENER_COUNT = 128; private static native void nativeClassInit(); private static native long nativeCreate(String opPackageName); @@ -157,6 +156,11 @@ public class SystemSensorManager extends SensorManager { Log.e(TAG, "maxBatchReportLatencyUs and delayUs should be non-negative"); return false; } + if (mSensorListeners.size() >= MAX_LISTENER_COUNT) { + throw new IllegalStateException("register failed, " + + "the sensor listeners size has exceeded the maximum limit " + + MAX_LISTENER_COUNT); + } // Invariants to preserve: // - one Looper per SensorEventListener @@ -216,6 +220,12 @@ public class SystemSensorManager extends SensorManager { if (sensor.getReportingMode() != Sensor.REPORTING_MODE_ONE_SHOT) return false; + if (mTriggerListeners.size() >= MAX_LISTENER_COUNT) { + throw new IllegalStateException("request failed, " + + "the trigger listeners size has exceeded the maximum limit " + + MAX_LISTENER_COUNT); + } + synchronized (mTriggerListeners) { TriggerEventQueue queue = mTriggerListeners.get(listener); if (queue == null) { |