summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorAravind Akella <aakella@google.com>2013-10-24 12:48:54 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2013-10-24 12:48:54 -0700
commit62c49dffde910f2c276610831704ee94ac61b1c2 (patch)
tree6dec288e875ba1aaece387ed8ccc1563a5ceafd4 /core/java/android
parent34cafa4b9a82dde09740139f8a3ef95a11a30027 (diff)
parent11e0c0e63c70f8bdfb416661a56663a2da426f41 (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.java34
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;