Implement new rotation policy.
Rotation lock does not override NOSENSOR mode anymore.
Centralize the rotation policy settings into a new class shared by
the System UI and Settings applications.
Add a new setting to specify whether rotation-lock is being hidden
because the "auto-rotate screen" option has been toggled in the
Accessibility settings panel.
Bug: 6523269
Change-Id: I15173280d25bc5d101e89a9c65913aefc53fc33a
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 1033296..9ef8d6b 100755
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -346,6 +346,7 @@
int mUserRotationMode = WindowManagerPolicy.USER_ROTATION_FREE;
int mUserRotation = Surface.ROTATION_0;
+ boolean mAccelerometerDefault;
int mAllowAllRotations = -1;
boolean mCarDockEnablesAccelerometer;
@@ -358,8 +359,6 @@
boolean mScreenOnFully = false;
boolean mOrientationSensorEnabled = false;
int mCurrentAppOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
- static final int DEFAULT_ACCELEROMETER_ROTATION = 0;
- int mAccelerometerDefault = DEFAULT_ACCELEROMETER_ROTATION;
boolean mHasSoftInput = false;
int mPointerLocationMode = 0; // guarded by mLock
@@ -617,7 +616,7 @@
// orientation management,
return true;
}
- if (mAccelerometerDefault == 0) {
+ if (mUserRotationMode == USER_ROTATION_LOCKED) {
// If the setting for using the sensor by default is enabled, then
// we will always leave it on. Note that the user could go to
// a window that forces an orientation that does not use the
@@ -1076,19 +1075,21 @@
mIncallPowerBehavior = Settings.Secure.getInt(resolver,
Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR,
Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_DEFAULT);
- int accelerometerDefault = Settings.System.getInt(resolver,
- Settings.System.ACCELEROMETER_ROTATION, DEFAULT_ACCELEROMETER_ROTATION);
-
- // set up rotation lock state
- mUserRotationMode = (accelerometerDefault == 0)
- ? WindowManagerPolicy.USER_ROTATION_LOCKED
- : WindowManagerPolicy.USER_ROTATION_FREE;
- mUserRotation = Settings.System.getInt(resolver,
- Settings.System.USER_ROTATION,
- Surface.ROTATION_0);
- if (mAccelerometerDefault != accelerometerDefault) {
- mAccelerometerDefault = accelerometerDefault;
+ // Configure rotation lock.
+ int userRotation = Settings.System.getInt(resolver,
+ Settings.System.USER_ROTATION, Surface.ROTATION_0);
+ if (mUserRotation != userRotation) {
+ mUserRotation = userRotation;
+ updateRotation = true;
+ }
+ int userRotationMode = Settings.System.getInt(resolver,
+ Settings.System.ACCELEROMETER_ROTATION, 0) != 0 ?
+ WindowManagerPolicy.USER_ROTATION_FREE :
+ WindowManagerPolicy.USER_ROTATION_LOCKED;
+ if (mUserRotationMode != userRotationMode) {
+ mUserRotationMode = userRotationMode;
+ updateRotation = true;
updateOrientationListenerLp();
}
@@ -3670,7 +3671,7 @@
// Ignore sensor when plugged into HDMI.
// Note that the dock orientation overrides the HDMI orientation.
preferredRotation = mHdmiRotation;
- } else if ((mAccelerometerDefault != 0 /* implies not rotation locked */
+ } else if ((mUserRotationMode == WindowManagerPolicy.USER_ROTATION_FREE
&& (orientation == ActivityInfo.SCREEN_ORIENTATION_USER
|| orientation == ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED))
|| orientation == ActivityInfo.SCREEN_ORIENTATION_SENSOR
@@ -3693,8 +3694,12 @@
} else {
preferredRotation = lastRotation;
}
- } else if (mUserRotationMode == WindowManagerPolicy.USER_ROTATION_LOCKED) {
- // Apply rotation lock.
+ } else if (mUserRotationMode == WindowManagerPolicy.USER_ROTATION_LOCKED
+ && orientation != ActivityInfo.SCREEN_ORIENTATION_NOSENSOR) {
+ // Apply rotation lock. Does not apply to NOSENSOR.
+ // The idea is that the user rotation expresses a weak preference for the direction
+ // of gravity and as NOSENSOR is never affected by gravity, then neither should
+ // NOSENSOR be affected by rotation lock (although it will be affected by docks).
preferredRotation = mUserRotation;
} else {
// No overriding preference.
@@ -4325,8 +4330,7 @@
pw.print(prefix); pw.print("mUserRotationMode="); pw.print(mUserRotationMode);
pw.print(" mUserRotation="); pw.print(mUserRotation);
pw.print(" mAllowAllRotations="); pw.println(mAllowAllRotations);
- pw.print(prefix); pw.print("mAccelerometerDefault="); pw.print(mAccelerometerDefault);
- pw.print(" mCurrentAppOrientation="); pw.println(mCurrentAppOrientation);
+ pw.print(prefix); pw.print(" mCurrentAppOrientation="); pw.println(mCurrentAppOrientation);
pw.print(prefix); pw.print("mCarDockEnablesAccelerometer=");
pw.print(mCarDockEnablesAccelerometer);
pw.print(" mDeskDockEnablesAccelerometer=");