summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2011-01-21 15:02:26 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2011-01-21 15:02:26 -0800
commit80f3376b3a0f9c677c37c98382d1021bed6c5633 (patch)
tree4f306a4f5d1b6a982a72c4943c6f9a874e37030d /core
parentd75ee6f13aca098f5200e81cc339e7ca70dff01d (diff)
parentb92a40ebfaf49783f942b75b413e1499e149c3bb (diff)
downloadframeworks_base-80f3376b3a0f9c677c37c98382d1021bed6c5633.zip
frameworks_base-80f3376b3a0f9c677c37c98382d1021bed6c5633.tar.gz
frameworks_base-80f3376b3a0f9c677c37c98382d1021bed6c5633.tar.bz2
am b92a40eb: am 12d014fd: Merge "fix [3355413] Gyro calls onAccuracyChanged and reports accuracy as UNRELIABLE" into gingerbread
* commit 'b92a40ebfaf49783f942b75b413e1499e149c3bb': fix [3355413] Gyro calls onAccuracyChanged and reports accuracy as UNRELIABLE
Diffstat (limited to 'core')
-rw-r--r--core/java/android/hardware/SensorManager.java29
1 files changed, 26 insertions, 3 deletions
diff --git a/core/java/android/hardware/SensorManager.java b/core/java/android/hardware/SensorManager.java
index 4a75514..f079e42 100644
--- a/core/java/android/hardware/SensorManager.java
+++ b/core/java/android/hardware/SensorManager.java
@@ -25,6 +25,7 @@ import android.os.ServiceManager;
import android.util.Log;
import android.util.SparseArray;
import android.util.SparseBooleanArray;
+import android.util.SparseIntArray;
import android.view.IRotationWatcher;
import android.view.IWindowManager;
import android.view.Surface;
@@ -489,6 +490,8 @@ public class SensorManager
private final Handler mHandler;
private SensorEvent mValuesPool;
public SparseBooleanArray mSensors = new SparseBooleanArray();
+ public SparseBooleanArray mFirstEvent = new SparseBooleanArray();
+ public SparseIntArray mSensorAccuracies = new SparseIntArray();
ListenerDelegate(SensorEventListener listener, Sensor sensor, Handler handler) {
mSensorEventListener = listener;
@@ -499,10 +502,30 @@ public class SensorManager
mHandler = new Handler(looper) {
@Override
public void handleMessage(Message msg) {
- SensorEvent t = (SensorEvent)msg.obj;
- if (t.accuracy >= 0) {
- mSensorEventListener.onAccuracyChanged(t.sensor, t.accuracy);
+ final SensorEvent t = (SensorEvent)msg.obj;
+ final int handle = t.sensor.getHandle();
+
+ switch (t.sensor.getType()) {
+ // Only report accuracy for sensors that support it.
+ case Sensor.TYPE_MAGNETIC_FIELD:
+ case Sensor.TYPE_ORIENTATION:
+ // call onAccuracyChanged() only if the value changes
+ final int accuracy = mSensorAccuracies.get(handle);
+ if ((t.accuracy >= 0) && (accuracy != t.accuracy)) {
+ mSensorAccuracies.put(handle, t.accuracy);
+ mSensorEventListener.onAccuracyChanged(t.sensor, t.accuracy);
+ }
+ break;
+ default:
+ // For other sensors, just report the accuracy once
+ if (mFirstEvent.get(handle) == false) {
+ mFirstEvent.put(handle, true);
+ mSensorEventListener.onAccuracyChanged(
+ t.sensor, SENSOR_STATUS_ACCURACY_HIGH);
+ }
+ break;
}
+
mSensorEventListener.onSensorChanged(t);
returnToPool(t);
}