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

Commit 219f3c71 authored by Jeff Brown's avatar Jeff Brown Committed by Android (Google) Code Review
Browse files

Merge "Make SENSOR orientation modes trump rotation lock. Bug: 5371750"

parents 39382aa7 4dfce20c
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);
    }