summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2011-01-14 16:02:07 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-01-14 16:02:07 -0800
commit88471b25632818a8bc79193e20bd04a8be39f660 (patch)
tree96ac4b6ed3ec232e32429acd561fe3727991ca50
parent6f92dbc49f8ed797bc56e5b84bb897736322ab2d (diff)
parentfcbbb31f27f00efe7314031bac23e1e011954ad6 (diff)
downloadframeworks_base-88471b25632818a8bc79193e20bd04a8be39f660.zip
frameworks_base-88471b25632818a8bc79193e20bd04a8be39f660.tar.gz
frameworks_base-88471b25632818a8bc79193e20bd04a8be39f660.tar.bz2
Merge "DO NOT MERGE Added check to make orientation calculations more robust" into honeycomb
-rwxr-xr-xcore/java/android/view/WindowOrientationListener.java11
1 files changed, 11 insertions, 0 deletions
diff --git a/core/java/android/view/WindowOrientationListener.java b/core/java/android/view/WindowOrientationListener.java
index 2a76e33..6095a64 100755
--- a/core/java/android/view/WindowOrientationListener.java
+++ b/core/java/android/view/WindowOrientationListener.java
@@ -234,6 +234,14 @@ public abstract class WindowOrientationListener {
// high time constant.
private static final float MAX_DEVIATION_FROM_GRAVITY = 1.5f;
+ // Minimum acceleration considered, in m/s^2. Below this threshold sensor noise will have
+ // significant impact on the calculations and in case of the vector (0, 0, 0) there is no
+ // defined rotation or tilt at all. Low or zero readings can happen when space travelling
+ // or free falling, but more commonly when shaking or getting bad readings from the sensor.
+ // The accelerometer is turned off when not used and polling it too soon after it is
+ // turned on may result in (0, 0, 0).
+ private static final float MIN_ABS_ACCELERATION = 1.5f;
+
// Actual sampling period corresponding to SensorManager.SENSOR_DELAY_NORMAL. There's no
// way to get this information from SensorManager.
// Note the actual period is generally 3-30ms larger than this depending on the device, but
@@ -347,6 +355,9 @@ public abstract class WindowOrientationListener {
float deviation = Math.abs(magnitude - SensorManager.STANDARD_GRAVITY);
handleAccelerationDistrust(deviation);
+ if (magnitude < MIN_ABS_ACCELERATION) {
+ return; // Ignore tilt and orientation when (0, 0, 0) or low reading
+ }
// only filter tilt when we're accelerating
float alpha = 1;