diff options
author | Dianne Hackborn <hackbod@google.com> | 2011-01-14 16:02:07 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-01-14 16:02:07 -0800 |
commit | 88471b25632818a8bc79193e20bd04a8be39f660 (patch) | |
tree | 96ac4b6ed3ec232e32429acd561fe3727991ca50 | |
parent | 6f92dbc49f8ed797bc56e5b84bb897736322ab2d (diff) | |
parent | fcbbb31f27f00efe7314031bac23e1e011954ad6 (diff) | |
download | frameworks_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-x | core/java/android/view/WindowOrientationListener.java | 11 |
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; |