Loading services/core/java/com/android/server/wm/WindowManagerService.java +66 −39 Original line number Diff line number Diff line Loading @@ -510,6 +510,7 @@ public class WindowManagerService extends IWindowManager.Stub boolean mClientFreezingScreen = false; int mAppsFreezingScreen = 0; int mLastWindowForcedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; int mLastKeyguardForcedOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR; int mLayoutSeq = 0; Loading Loading @@ -3727,8 +3728,11 @@ public class WindowManagerService extends IWindowManager.Stub } } public int getOrientationFromWindowsLocked() { if (mDisplayFrozen || mOpeningApps.size() > 0 || mClosingApps.size() > 0) { public int getOrientationLocked() { if (mDisplayFrozen) { if (mLastWindowForcedOrientation != ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) { if (DEBUG_ORIENTATION) Slog.v(TAG, "Display 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 Loading @@ -3736,7 +3740,7 @@ public class WindowManagerService extends IWindowManager.Stub // orientation stable until this all settles down. return mLastWindowForcedOrientation; } } else { // TODO(multidisplay): Change to the correct display. final WindowList windows = getDefaultWindowListLocked(); int pos = windows.size() - 1; Loading @@ -3746,7 +3750,7 @@ public class WindowManagerService extends IWindowManager.Stub if (win.mAppToken != null) { // We hit an application window. so the orientation will be determined by the // app window. No point in continuing further. return (mLastWindowForcedOrientation=ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); break; } if (!win.isVisibleLw() || !win.mPolicyVisibilityAfterAnim) { continue; Loading @@ -3758,12 +3762,36 @@ public class WindowManagerService extends IWindowManager.Stub } if (DEBUG_ORIENTATION) Slog.v(TAG, win + " forcing orientation to " + req); if (mPolicy.isKeyguardHostWindow(win.mAttrs)) { mLastKeyguardForcedOrientation = req; } return (mLastWindowForcedOrientation = req); } return (mLastWindowForcedOrientation=ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); mLastWindowForcedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; if (mPolicy.isKeyguardLocked()) { // The screen is locked and no top system window is requesting an orientation. // Return either the orientation of the show-when-locked app (if there is any) or // the orientation of the keyguard. No point in searching from the rest of apps. WindowState winShowWhenLocked = (WindowState) mPolicy.getWinShowWhenLockedLw(); AppWindowToken appShowWhenLocked = winShowWhenLocked == null ? null : winShowWhenLocked.mAppToken; if (appShowWhenLocked != null) { int req = appShowWhenLocked.requestedOrientation; if (req == ActivityInfo.SCREEN_ORIENTATION_BEHIND) { req = mLastKeyguardForcedOrientation; } if (DEBUG_ORIENTATION) Slog.v(TAG, "Done at " + appShowWhenLocked + " -- show when locked, return " + req); return req; } if (DEBUG_ORIENTATION) Slog.v(TAG, "No one is requesting an orientation when the screen is locked"); return mLastKeyguardForcedOrientation; } } public int getOrientationFromAppTokensLocked() { // Top system windows are not requesting an orientation. Start searching from apps. int lastOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; boolean findingBehind = false; boolean lastFullscreen = false; Loading Loading @@ -3835,8 +3863,11 @@ public class WindowManagerService extends IWindowManager.Stub findingBehind |= (or == ActivityInfo.SCREEN_ORIENTATION_BEHIND); } } if (DEBUG_ORIENTATION) Slog.v(TAG, "No app is requesting an orientation"); return ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; if (DEBUG_ORIENTATION) Slog.v(TAG, "No app is requesting an orientation, return " + mForcedAppOrientation); // 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 mForcedAppOrientation; } @Override Loading Loading @@ -3916,11 +3947,7 @@ public class WindowManagerService extends IWindowManager.Stub boolean updateOrientationFromAppTokensLocked(boolean inTransaction) { long ident = Binder.clearCallingIdentity(); try { int req = getOrientationFromWindowsLocked(); if (req == ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) { req = getOrientationFromAppTokensLocked(); } int req = getOrientationLocked(); if (req != mForcedAppOrientation) { mForcedAppOrientation = req; //send a message to Policy indicating orientation change to take Loading Loading
services/core/java/com/android/server/wm/WindowManagerService.java +66 −39 Original line number Diff line number Diff line Loading @@ -510,6 +510,7 @@ public class WindowManagerService extends IWindowManager.Stub boolean mClientFreezingScreen = false; int mAppsFreezingScreen = 0; int mLastWindowForcedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; int mLastKeyguardForcedOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR; int mLayoutSeq = 0; Loading Loading @@ -3727,8 +3728,11 @@ public class WindowManagerService extends IWindowManager.Stub } } public int getOrientationFromWindowsLocked() { if (mDisplayFrozen || mOpeningApps.size() > 0 || mClosingApps.size() > 0) { public int getOrientationLocked() { if (mDisplayFrozen) { if (mLastWindowForcedOrientation != ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) { if (DEBUG_ORIENTATION) Slog.v(TAG, "Display 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 Loading @@ -3736,7 +3740,7 @@ public class WindowManagerService extends IWindowManager.Stub // orientation stable until this all settles down. return mLastWindowForcedOrientation; } } else { // TODO(multidisplay): Change to the correct display. final WindowList windows = getDefaultWindowListLocked(); int pos = windows.size() - 1; Loading @@ -3746,7 +3750,7 @@ public class WindowManagerService extends IWindowManager.Stub if (win.mAppToken != null) { // We hit an application window. so the orientation will be determined by the // app window. No point in continuing further. return (mLastWindowForcedOrientation=ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); break; } if (!win.isVisibleLw() || !win.mPolicyVisibilityAfterAnim) { continue; Loading @@ -3758,12 +3762,36 @@ public class WindowManagerService extends IWindowManager.Stub } if (DEBUG_ORIENTATION) Slog.v(TAG, win + " forcing orientation to " + req); if (mPolicy.isKeyguardHostWindow(win.mAttrs)) { mLastKeyguardForcedOrientation = req; } return (mLastWindowForcedOrientation = req); } return (mLastWindowForcedOrientation=ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); mLastWindowForcedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; if (mPolicy.isKeyguardLocked()) { // The screen is locked and no top system window is requesting an orientation. // Return either the orientation of the show-when-locked app (if there is any) or // the orientation of the keyguard. No point in searching from the rest of apps. WindowState winShowWhenLocked = (WindowState) mPolicy.getWinShowWhenLockedLw(); AppWindowToken appShowWhenLocked = winShowWhenLocked == null ? null : winShowWhenLocked.mAppToken; if (appShowWhenLocked != null) { int req = appShowWhenLocked.requestedOrientation; if (req == ActivityInfo.SCREEN_ORIENTATION_BEHIND) { req = mLastKeyguardForcedOrientation; } if (DEBUG_ORIENTATION) Slog.v(TAG, "Done at " + appShowWhenLocked + " -- show when locked, return " + req); return req; } if (DEBUG_ORIENTATION) Slog.v(TAG, "No one is requesting an orientation when the screen is locked"); return mLastKeyguardForcedOrientation; } } public int getOrientationFromAppTokensLocked() { // Top system windows are not requesting an orientation. Start searching from apps. int lastOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; boolean findingBehind = false; boolean lastFullscreen = false; Loading Loading @@ -3835,8 +3863,11 @@ public class WindowManagerService extends IWindowManager.Stub findingBehind |= (or == ActivityInfo.SCREEN_ORIENTATION_BEHIND); } } if (DEBUG_ORIENTATION) Slog.v(TAG, "No app is requesting an orientation"); return ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; if (DEBUG_ORIENTATION) Slog.v(TAG, "No app is requesting an orientation, return " + mForcedAppOrientation); // 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 mForcedAppOrientation; } @Override Loading Loading @@ -3916,11 +3947,7 @@ public class WindowManagerService extends IWindowManager.Stub boolean updateOrientationFromAppTokensLocked(boolean inTransaction) { long ident = Binder.clearCallingIdentity(); try { int req = getOrientationFromWindowsLocked(); if (req == ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) { req = getOrientationFromAppTokensLocked(); } int req = getOrientationLocked(); if (req != mForcedAppOrientation) { mForcedAppOrientation = req; //send a message to Policy indicating orientation change to take Loading