diff options
author | Jeff Brown <jeffbrown@google.com> | 2011-01-23 13:16:01 -0800 |
---|---|---|
committer | Jeff Brown <jeffbrown@google.com> | 2011-01-24 13:46:57 -0800 |
commit | 4519f07e9c6b993fbe7a3d3df24d71d9450a54f1 (patch) | |
tree | 3c642e9c740a54941ab46d80ebc5668ce9ab4cc3 /policy | |
parent | a6ce081970a78233ba6b9792149ee5f1390cba7b (diff) | |
download | frameworks_base-4519f07e9c6b993fbe7a3d3df24d71d9450a54f1.zip frameworks_base-4519f07e9c6b993fbe7a3d3df24d71d9450a54f1.tar.gz frameworks_base-4519f07e9c6b993fbe7a3d3df24d71d9450a54f1.tar.bz2 |
New orientation listener.
The objective in this listener is to be more careful about the
signal processing to prevent spurious orientation changes
and to make all of the tweakable factors physically meaningful.
The calibration is defined in terms of time constants and
does not assume a particular discrete sampling rate. This is
useful because it allows us to change the accelerometer sampling
interval if desired without having to change the calibration.
Moreover, the accelerometer sampling interval can vary +/- 20ms
from one sample to the next even in normal circumstances.
Proposed orientation changes are weighted by confidence factors
that vary exponentially in relation to how close the device
is to the ideal orientation change posture (screen is vertical,
angle is exactly at the midpoint of the orientation quadrant,
and no external acceleration beside gravity). When not in an ideal
posture, the device takes proportionally longer to settle into a
new orientation state.
Added a little tool to plot the log output of the
WindowOrientationListener. Check the README for more information
about how to use it.
Change-Id: I787f02d03582ff26367df65eda8d9ce85c5cb343
Diffstat (limited to 'policy')
-rwxr-xr-x | policy/src/com/android/internal/policy/impl/PhoneWindowManager.java | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java index 67e0e67..9b5c42e 100755 --- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java @@ -389,6 +389,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { resolver.registerContentObserver(Settings.System.getUriFor( Settings.System.SCREEN_OFF_TIMEOUT), false, this); resolver.registerContentObserver(Settings.System.getUriFor( + Settings.System.WINDOW_ORIENTATION_LISTENER_LOG), false, this); + resolver.registerContentObserver(Settings.System.getUriFor( Settings.System.POINTER_LOCATION), false, this); resolver.registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.DEFAULT_INPUT_METHOD), false, this); @@ -759,6 +761,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { updateOrientationListenerLp(); } + mOrientationListener.setLogEnabled( + Settings.System.getInt(resolver, + Settings.System.WINDOW_ORIENTATION_LISTENER_LOG, 0) != 0); + if (mSystemReady) { int pointerLocation = Settings.System.getInt(resolver, Settings.System.POINTER_LOCATION, 0); @@ -2492,18 +2498,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { return mSeascapeRotation; case ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE: //return either landscape rotation based on the sensor - mOrientationListener.setAllow180Rotation( - isLandscapeOrSeascape(Surface.ROTATION_180)); return getCurrentLandscapeRotation(lastRotation); case ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT: - mOrientationListener.setAllow180Rotation( - !isLandscapeOrSeascape(Surface.ROTATION_180)); return getCurrentPortraitRotation(lastRotation); } - mOrientationListener.setAllow180Rotation(mAllowAllRotations || - orientation == ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR); - // case for nosensor meaning ignore sensor and consider only lid // or orientation sensor disabled //or case.unspecified @@ -2519,7 +2518,15 @@ public class PhoneWindowManager implements WindowManagerPolicy { return mUserRotation; } else { if (useSensorForOrientationLp(orientation)) { - return mOrientationListener.getCurrentRotation(lastRotation); + // Disable 180 degree rotation unless allowed by default for the device + // or explicitly requested by the application. + int rotation = mOrientationListener.getCurrentRotation(lastRotation); + if (rotation == Surface.ROTATION_180 + && !mAllowAllRotations + && orientation != ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR) { + return lastRotation; + } + return rotation; } return Surface.ROTATION_0; } |