diff options
| author | Aravind Akella <aakella@google.com> | 2013-10-24 12:48:54 -0700 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2013-10-24 12:48:54 -0700 |
| commit | 62c49dffde910f2c276610831704ee94ac61b1c2 (patch) | |
| tree | 6dec288e875ba1aaece387ed8ccc1563a5ceafd4 /core/java/android | |
| parent | 34cafa4b9a82dde09740139f8a3ef95a11a30027 (diff) | |
| parent | 11e0c0e63c70f8bdfb416661a56663a2da426f41 (diff) | |
am 11e0c0e6: am 1ba90786: am 28e26eb3: Merge "Fix for ClassCastException in SystemSensorManager." into klp-dev
* commit '11e0c0e63c70f8bdfb416661a56663a2da426f41':
Fix for ClassCastException in SystemSensorManager.
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/hardware/SystemSensorManager.java | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/core/java/android/hardware/SystemSensorManager.java b/core/java/android/hardware/SystemSensorManager.java index 14f67c582894..50fdb4170c60 100644 --- a/core/java/android/hardware/SystemSensorManager.java +++ b/core/java/android/hardware/SystemSensorManager.java @@ -358,14 +358,20 @@ public class SystemSensorManager extends SensorManager { mListener = listener; } + @Override public void addSensorEvent(Sensor sensor) { SensorEvent t = new SensorEvent(Sensor.getMaxLengthValuesArray(sensor, mManager.mTargetSdkLevel)); - mSensorsEvents.put(sensor.getHandle(), t); + synchronized (mSensorsEvents) { + mSensorsEvents.put(sensor.getHandle(), t); + } } + @Override public void removeSensorEvent(Sensor sensor) { - mSensorsEvents.delete(sensor.getHandle()); + synchronized (mSensorsEvents) { + mSensorsEvents.delete(sensor.getHandle()); + } } // Called from native code. @@ -374,9 +380,14 @@ public class SystemSensorManager extends SensorManager { protected void dispatchSensorEvent(int handle, float[] values, int inAccuracy, long timestamp) { final Sensor sensor = sHandleToSensor.get(handle); - SensorEvent t = mSensorsEvents.get(handle); + SensorEvent t = null; + synchronized (mSensorsEvents) { + t = mSensorsEvents.get(handle); + } + if (t == null) { - Log.e(TAG, "Error: Sensor Event is null for Sensor: " + sensor); + // This may happen if the client has unregistered and there are pending events in + // the queue waiting to be delivered. Ignore. return; } // Copy from the values array. @@ -427,14 +438,20 @@ public class SystemSensorManager extends SensorManager { mListener = listener; } + @Override public void addSensorEvent(Sensor sensor) { TriggerEvent t = new TriggerEvent(Sensor.getMaxLengthValuesArray(sensor, mManager.mTargetSdkLevel)); - mTriggerEvents.put(sensor.getHandle(), t); + synchronized (mTriggerEvents) { + mTriggerEvents.put(sensor.getHandle(), t); + } } + @Override public void removeSensorEvent(Sensor sensor) { - mTriggerEvents.delete(sensor.getHandle()); + synchronized (mTriggerEvents) { + mTriggerEvents.delete(sensor.getHandle()); + } } // Called from native code. @@ -443,7 +460,10 @@ public class SystemSensorManager extends SensorManager { protected void dispatchSensorEvent(int handle, float[] values, int accuracy, long timestamp) { final Sensor sensor = sHandleToSensor.get(handle); - TriggerEvent t = mTriggerEvents.get(handle); + TriggerEvent t = null; + synchronized (mTriggerEvents) { + t = mTriggerEvents.get(handle); + } if (t == null) { Log.e(TAG, "Error: Trigger Event is null for Sensor: " + sensor); return; |
