Loading services/core/java/com/android/server/policy/PhoneWindowManager.java +6 −2 Original line number Diff line number Diff line Loading @@ -7175,7 +7175,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } @Override public int rotationForOrientationLw(int orientation, int lastRotation) { public int rotationForOrientationLw(int orientation, int lastRotation, boolean defaultDisplay) { if (false) { Slog.v(TAG, "rotationForOrientationLw(orient=" + orientation + ", last=" + lastRotation Loading @@ -7196,7 +7196,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { } final int preferredRotation; if (mLidState == LID_OPEN && mLidOpenRotation >= 0) { if (!defaultDisplay) { // For secondary displays we ignore things like displays sensors, docking mode and // rotation lock, and always prefer a default rotation. preferredRotation = Surface.ROTATION_0; } else if (mLidState == LID_OPEN && mLidOpenRotation >= 0) { // Ignore sensor when lid switch is open and rotation is forced. preferredRotation = mLidOpenRotation; } else if (mDockMode == Intent.EXTRA_DOCK_STATE_CAR Loading services/core/java/com/android/server/policy/WindowManagerPolicy.java +4 −1 Original line number Diff line number Diff line Loading @@ -1426,10 +1426,13 @@ public interface WindowManagerPolicy extends WindowManagerPolicyConstants { * @param orientation An orientation constant, such as * {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_LANDSCAPE}. * @param lastRotation The most recently used rotation. * @param defaultDisplay Flag indicating whether the rotation is computed for the default * display. Currently for all non-default displays sensors, docking mode, * rotation lock and other factors are ignored. * @return The surface rotation to use. */ public int rotationForOrientationLw(@ActivityInfo.ScreenOrientation int orientation, int lastRotation); int lastRotation, boolean defaultDisplay); /** * Given an orientation constant and a rotation, returns true if the rotation Loading services/core/java/com/android/server/wm/DisplayContent.java +22 −11 Original line number Diff line number Diff line Loading @@ -909,6 +909,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo return mRotation; } @VisibleForTesting void setRotation(int newRotation) { mRotation = newRotation; } Loading Loading @@ -974,7 +975,11 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo final int oldRotation = mRotation; final int lastOrientation = mLastOrientation; final boolean oldAltOrientation = mAltOrientation; int rotation = mService.mPolicy.rotationForOrientationLw(lastOrientation, oldRotation); final int rotation = mService.mPolicy.rotationForOrientationLw(lastOrientation, oldRotation, isDefaultDisplay); if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Computed rotation=" + rotation + " for display id=" + mDisplayId + " based on lastOrientation=" + lastOrientation + " and oldRotation=" + oldRotation); boolean mayRotateSeamlessly = mService.mPolicy.shouldRotateSeamlessly(oldRotation, rotation); Loading Loading @@ -1010,7 +1015,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo final boolean altOrientation = !mService.mPolicy.rotationHasCompatibleMetricsLw( lastOrientation, rotation); if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Selected orientation " + lastOrientation if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Display id=" + mDisplayId + " selected orientation " + lastOrientation + ", got rotation " + rotation + " which has " + (altOrientation ? "incompatible" : "compatible") + " metrics"); Loading @@ -1019,7 +1025,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo return false; } if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Rotation changed to " + rotation if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Display id=" + mDisplayId + " rotation changed to " + rotation + (altOrientation ? " (alt)" : "") + " from " + oldRotation + (oldAltOrientation ? " (alt)" : "") + ", lastOrientation=" + lastOrientation); Loading Loading @@ -1647,8 +1654,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo if (mService.mDisplayFrozen) { if (mLastWindowForcedOrientation != SCREEN_ORIENTATION_UNSPECIFIED) { if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Display is frozen, return " + mLastWindowForcedOrientation); if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Display id=" + mDisplayId + " is frozen, return " + mLastWindowForcedOrientation); // If the display is frozen, some activities may be in the middle of restarting, and // thus have removed their old window. If the window has the flag to hide the lock // screen, then the lock screen can re-appear and inflict its own orientation on us. Loading @@ -1660,8 +1667,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo // window. We don't want to check the show when locked window directly though as // things aren't stable while the display is frozen, for example the window could be // momentarily unavailable due to activity relaunch. if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Display is frozen while keyguard locked, " + "return " + mLastOrientation); if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Display id=" + mDisplayId + " is frozen while keyguard locked, return " + mLastOrientation); return mLastOrientation; } } else { Loading Loading @@ -3503,19 +3510,22 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo // In a car, you cannot physically rotate the screen, so it doesn't make sense to // allow anything but the default orientation. if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Forcing UNSPECIFIED orientation in car. Ignoring " + orientation); "Forcing UNSPECIFIED orientation in car for display id=" + mDisplayId + ". Ignoring " + orientation); return SCREEN_ORIENTATION_UNSPECIFIED; } if (orientation != SCREEN_ORIENTATION_UNSET && orientation != SCREEN_ORIENTATION_BEHIND) { if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "App is requesting an orientation, return " + orientation); "App is requesting an orientation, return " + orientation + " for display id=" + mDisplayId); return orientation; } if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "No app is requesting an orientation, return " + mLastOrientation); "No app is requesting an orientation, return " + mLastOrientation + " for display id=" + mDisplayId); // The next app has not been requested to be visible, so we keep the current orientation // to prevent freezing/unfreezing the display too early. return mLastOrientation; Loading Loading @@ -3708,7 +3718,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo return SCREEN_ORIENTATION_UNSET; } } if (DEBUG_ORIENTATION) Slog.v(TAG_WM, win + " forcing orientation to " + req); if (DEBUG_ORIENTATION) Slog.v(TAG_WM, win + " forcing orientation to " + req + " for display id=" + mDisplayId); return (mLastWindowForcedOrientation = req); } Loading services/core/java/com/android/server/wm/WindowManagerService.java +2 −2 Original line number Diff line number Diff line Loading @@ -2423,8 +2423,8 @@ public class WindowManagerService extends IWindowManager.Stub final int oldRotation = defaultDisplayContent.getRotation(); final boolean oldAltOrientation = defaultDisplayContent.getAltOrientation(); final int rotation = mPolicy.rotationForOrientationLw(lastOrientation, oldRotation); final int rotation = mPolicy.rotationForOrientationLw(lastOrientation, oldRotation, true /* defaultDisplay */); boolean altOrientation = !mPolicy.rotationHasCompatibleMetricsLw( lastOrientation, rotation); if (oldRotation == rotation && oldAltOrientation == altOrientation) { Loading services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java +1 −2 Original line number Diff line number Diff line Loading @@ -445,8 +445,7 @@ class TestWindowManagerPolicy implements WindowManagerPolicy { } @Override public int rotationForOrientationLw(int orientation, int lastRotation) { public int rotationForOrientationLw(int orientation, int lastRotation, boolean defaultDisplay) { return rotationToReport; } Loading Loading
services/core/java/com/android/server/policy/PhoneWindowManager.java +6 −2 Original line number Diff line number Diff line Loading @@ -7175,7 +7175,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } @Override public int rotationForOrientationLw(int orientation, int lastRotation) { public int rotationForOrientationLw(int orientation, int lastRotation, boolean defaultDisplay) { if (false) { Slog.v(TAG, "rotationForOrientationLw(orient=" + orientation + ", last=" + lastRotation Loading @@ -7196,7 +7196,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { } final int preferredRotation; if (mLidState == LID_OPEN && mLidOpenRotation >= 0) { if (!defaultDisplay) { // For secondary displays we ignore things like displays sensors, docking mode and // rotation lock, and always prefer a default rotation. preferredRotation = Surface.ROTATION_0; } else if (mLidState == LID_OPEN && mLidOpenRotation >= 0) { // Ignore sensor when lid switch is open and rotation is forced. preferredRotation = mLidOpenRotation; } else if (mDockMode == Intent.EXTRA_DOCK_STATE_CAR Loading
services/core/java/com/android/server/policy/WindowManagerPolicy.java +4 −1 Original line number Diff line number Diff line Loading @@ -1426,10 +1426,13 @@ public interface WindowManagerPolicy extends WindowManagerPolicyConstants { * @param orientation An orientation constant, such as * {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_LANDSCAPE}. * @param lastRotation The most recently used rotation. * @param defaultDisplay Flag indicating whether the rotation is computed for the default * display. Currently for all non-default displays sensors, docking mode, * rotation lock and other factors are ignored. * @return The surface rotation to use. */ public int rotationForOrientationLw(@ActivityInfo.ScreenOrientation int orientation, int lastRotation); int lastRotation, boolean defaultDisplay); /** * Given an orientation constant and a rotation, returns true if the rotation Loading
services/core/java/com/android/server/wm/DisplayContent.java +22 −11 Original line number Diff line number Diff line Loading @@ -909,6 +909,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo return mRotation; } @VisibleForTesting void setRotation(int newRotation) { mRotation = newRotation; } Loading Loading @@ -974,7 +975,11 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo final int oldRotation = mRotation; final int lastOrientation = mLastOrientation; final boolean oldAltOrientation = mAltOrientation; int rotation = mService.mPolicy.rotationForOrientationLw(lastOrientation, oldRotation); final int rotation = mService.mPolicy.rotationForOrientationLw(lastOrientation, oldRotation, isDefaultDisplay); if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Computed rotation=" + rotation + " for display id=" + mDisplayId + " based on lastOrientation=" + lastOrientation + " and oldRotation=" + oldRotation); boolean mayRotateSeamlessly = mService.mPolicy.shouldRotateSeamlessly(oldRotation, rotation); Loading Loading @@ -1010,7 +1015,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo final boolean altOrientation = !mService.mPolicy.rotationHasCompatibleMetricsLw( lastOrientation, rotation); if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Selected orientation " + lastOrientation if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Display id=" + mDisplayId + " selected orientation " + lastOrientation + ", got rotation " + rotation + " which has " + (altOrientation ? "incompatible" : "compatible") + " metrics"); Loading @@ -1019,7 +1025,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo return false; } if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Rotation changed to " + rotation if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Display id=" + mDisplayId + " rotation changed to " + rotation + (altOrientation ? " (alt)" : "") + " from " + oldRotation + (oldAltOrientation ? " (alt)" : "") + ", lastOrientation=" + lastOrientation); Loading Loading @@ -1647,8 +1654,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo if (mService.mDisplayFrozen) { if (mLastWindowForcedOrientation != SCREEN_ORIENTATION_UNSPECIFIED) { if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Display is frozen, return " + mLastWindowForcedOrientation); if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Display id=" + mDisplayId + " is frozen, return " + mLastWindowForcedOrientation); // If the display is frozen, some activities may be in the middle of restarting, and // thus have removed their old window. If the window has the flag to hide the lock // screen, then the lock screen can re-appear and inflict its own orientation on us. Loading @@ -1660,8 +1667,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo // window. We don't want to check the show when locked window directly though as // things aren't stable while the display is frozen, for example the window could be // momentarily unavailable due to activity relaunch. if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Display is frozen while keyguard locked, " + "return " + mLastOrientation); if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Display id=" + mDisplayId + " is frozen while keyguard locked, return " + mLastOrientation); return mLastOrientation; } } else { Loading Loading @@ -3503,19 +3510,22 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo // In a car, you cannot physically rotate the screen, so it doesn't make sense to // allow anything but the default orientation. if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Forcing UNSPECIFIED orientation in car. Ignoring " + orientation); "Forcing UNSPECIFIED orientation in car for display id=" + mDisplayId + ". Ignoring " + orientation); return SCREEN_ORIENTATION_UNSPECIFIED; } if (orientation != SCREEN_ORIENTATION_UNSET && orientation != SCREEN_ORIENTATION_BEHIND) { if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "App is requesting an orientation, return " + orientation); "App is requesting an orientation, return " + orientation + " for display id=" + mDisplayId); return orientation; } if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "No app is requesting an orientation, return " + mLastOrientation); "No app is requesting an orientation, return " + mLastOrientation + " for display id=" + mDisplayId); // The next app has not been requested to be visible, so we keep the current orientation // to prevent freezing/unfreezing the display too early. return mLastOrientation; Loading Loading @@ -3708,7 +3718,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo return SCREEN_ORIENTATION_UNSET; } } if (DEBUG_ORIENTATION) Slog.v(TAG_WM, win + " forcing orientation to " + req); if (DEBUG_ORIENTATION) Slog.v(TAG_WM, win + " forcing orientation to " + req + " for display id=" + mDisplayId); return (mLastWindowForcedOrientation = req); } Loading
services/core/java/com/android/server/wm/WindowManagerService.java +2 −2 Original line number Diff line number Diff line Loading @@ -2423,8 +2423,8 @@ public class WindowManagerService extends IWindowManager.Stub final int oldRotation = defaultDisplayContent.getRotation(); final boolean oldAltOrientation = defaultDisplayContent.getAltOrientation(); final int rotation = mPolicy.rotationForOrientationLw(lastOrientation, oldRotation); final int rotation = mPolicy.rotationForOrientationLw(lastOrientation, oldRotation, true /* defaultDisplay */); boolean altOrientation = !mPolicy.rotationHasCompatibleMetricsLw( lastOrientation, rotation); if (oldRotation == rotation && oldAltOrientation == altOrientation) { Loading
services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java +1 −2 Original line number Diff line number Diff line Loading @@ -445,8 +445,7 @@ class TestWindowManagerPolicy implements WindowManagerPolicy { } @Override public int rotationForOrientationLw(int orientation, int lastRotation) { public int rotationForOrientationLw(int orientation, int lastRotation, boolean defaultDisplay) { return rotationToReport; } Loading