Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4dfce20c authored by Jeff Brown's avatar Jeff Brown
Browse files

Make SENSOR orientation modes trump rotation lock.

Bug: 5371750

Change-Id: I4d18b6c8ba1de0afd5929ddb8d7123272e35fbe2
parent 66fb1f3f
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -192,11 +192,12 @@ interface IWindowManager
    int getPreferredOptionsPanelGravity();

	/**
	 * Lock the device orientation to the current rotation. Sensor input will
	 * be ignored until thawRotation() is called.
	 * Lock the device orientation to the specified rotation, or to the
	 * current rotation if -1.  Sensor input will be ignored until
	 * thawRotation() is called.
	 * @hide
	 */
	void freezeRotation();
	void freezeRotation(int rotation);

	/**
	 * Release the orientation lock imposed by freezeRotation().
+3 −2
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.os.AsyncTask;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.provider.Settings;
import android.util.Log;
import android.util.Slog;
import android.view.IWindowManager;
import android.widget.CompoundButton;
@@ -63,13 +64,13 @@ public class AutoRotateController implements CompoundButton.OnCheckedChangeListe
                    try {
                        IWindowManager wm = IWindowManager.Stub.asInterface(
                                ServiceManager.getService(Context.WINDOW_SERVICE));
                        ContentResolver cr = mContext.getContentResolver();
                        if (autorotate) {
                            wm.thawRotation();
                        } else {
                            wm.freezeRotation();
                            wm.freezeRotation(-1);
                        }
                    } catch (RemoteException exc) {
                        Log.w(TAG, "Unable to save auto-rotate setting");
                    }
                }
            });
+6 −6
Original line number Diff line number Diff line
@@ -2947,10 +2947,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                // enable 180 degree rotation while docked.
                preferredRotation = mDeskDockEnablesAccelerometer
                        ? sensorRotation : mDeskDockRotation;
            } else if (mUserRotationMode == WindowManagerPolicy.USER_ROTATION_LOCKED) {
                // Ignore sensor when user locked rotation.
                preferredRotation = mUserRotation;
            } else if ((mAccelerometerDefault != 0
            } else if ((mAccelerometerDefault != 0 /* implies not rotation locked */
                            && (orientation == ActivityInfo.SCREEN_ORIENTATION_USER
                                    || orientation == ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED))
                    || orientation == ActivityInfo.SCREEN_ORIENTATION_SENSOR
@@ -2973,6 +2970,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                } else {
                    preferredRotation = lastRotation;
                }
            } else if (mUserRotationMode == WindowManagerPolicy.USER_ROTATION_LOCKED) {
                // Apply rotation lock.
                preferredRotation = mUserRotation;
            }

            // TODO: Sometimes, we might want to override the application-requested
@@ -3018,8 +3018,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                    return mPortraitRotation;

                default:
                    // For USER, UNSPECIFIED and NOSENSOR, just return the preferred
                    // orientation we already calculated.
                    // For USER, UNSPECIFIED, NOSENSOR, SENSOR and FULL_SENSOR,
                    // just return the preferred orientation we already calculated.
                    if (preferredRotation >= 0) {
                        return preferredRotation;
                    }
+9 −2
Original line number Diff line number Diff line
@@ -5050,16 +5050,23 @@ public class WindowManagerService extends IWindowManager.Stub
    /**
     * Freeze rotation changes.  (Enable "rotation lock".)
     * Persists across reboots.
     * @param rotation The desired rotation to freeze to, or -1 to use the
     * current rotation.
     */
    public void freezeRotation() {
    public void freezeRotation(int rotation) {
        if (!checkCallingPermission(android.Manifest.permission.SET_ORIENTATION,
                "freezeRotation()")) {
            throw new SecurityException("Requires SET_ORIENTATION permission");
        }
        if (rotation < -1 || rotation > Surface.ROTATION_270) {
            throw new IllegalArgumentException("Rotation argument must be -1 or a valid "
                    + "rotation constant.");
        }

        if (DEBUG_ORIENTATION) Slog.v(TAG, "freezeRotation: mRotation=" + mRotation);

        mPolicy.setUserRotationMode(WindowManagerPolicy.USER_ROTATION_LOCKED, mRotation);
        mPolicy.setUserRotationMode(WindowManagerPolicy.USER_ROTATION_LOCKED,
                rotation == -1 ? mRotation : rotation);
        updateRotationUnchecked(false);
    }