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

Commit dec6cf4f authored by Jeff Brown's avatar Jeff Brown
Browse files

Override app requested orientation when docked.

Applies to docks, lid switch, HDMI and rotation lock.
We always choose a mode that is compatible with the application's
request, so if in a landscape dock, we might override a request
for seascape but we leave requests for portrait alone.

Bug: 5620454
Change-Id: Ib0c4f60f7f9e3aeafaba9c717233a950fccb8af2
parent 9058435d
Loading
Loading
Loading
Loading
+21 −10
Original line number Diff line number Diff line
@@ -3097,7 +3097,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                sensorRotation = lastRotation;
            }

            int preferredRotation = -1;
            final int preferredRotation;
            if (mHdmiPlugged) {
                // Ignore sensor when plugged into HDMI.
                preferredRotation = mHdmiRotation;
@@ -3146,28 +3146,39 @@ public class PhoneWindowManager implements WindowManagerPolicy {
            } else if (mUserRotationMode == WindowManagerPolicy.USER_ROTATION_LOCKED) {
                // Apply rotation lock.
                preferredRotation = mUserRotation;
            } else {
                // No overriding preference.
                // We will do exactly what the application asked us to do.
                preferredRotation = -1;
            }

            // TODO: Sometimes, we might want to override the application-requested
            //       orientation, such as when HDMI is plugged in or when docked.
            //       We can do that by modifying the appropriate cases above to return
            //       the preferred orientation directly instead of continuing on down here.

            switch (orientation) {
                case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT:
                    // Always return portrait if orientation set to portrait.
                    // Return portrait unless overridden.
                    if (isAnyPortrait(preferredRotation)) {
                        return preferredRotation;
                    }
                    return mPortraitRotation;

                case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE:
                    // Always return landscape if orientation set to landscape.
                    // Return landscape unless overridden.
                    if (isLandscapeOrSeascape(preferredRotation)) {
                        return preferredRotation;
                    }
                    return mLandscapeRotation;

                case ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT:
                    // Always return portrait if orientation set to portrait.
                    // Return reverse portrait unless overridden.
                    if (isAnyPortrait(preferredRotation)) {
                        return preferredRotation;
                    }
                    return mUpsideDownRotation;

                case ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE:
                    // Always return seascape if orientation set to reverse landscape.
                    // Return seascape unless overridden.
                    if (isLandscapeOrSeascape(preferredRotation)) {
                        return preferredRotation;
                    }
                    return mSeascapeRotation;

                case ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE: