Loading services/core/java/com/android/server/wm/DisplayArea.java +7 −1 Original line number Diff line number Diff line Loading @@ -551,7 +551,13 @@ public class DisplayArea<T extends WindowContainer> extends WindowContainer<T> { } final WindowManagerPolicy policy = mWmService.mPolicy; if (policy.isKeyguardHostWindow(w.mAttrs)) { if (mWmService.mKeyguardGoingAway) { // Ignore the orientation of keyguard if it is going away or is not showing while // the device is fully awake. In other words, use the orientation of keyguard if // its window is visible while the device is going to sleep or is sleeping. if (!mWmService.mAtmService.isKeyguardLocked() && mDisplayContent.getDisplayPolicy().isAwake() // Device is not going to sleep. && policy.okToAnimate(true /* ignoreScreenOn */)) { return false; } // Consider unoccluding only when all unknown visibilities have been Loading services/core/java/com/android/server/wm/DisplayContent.java +0 −6 Original line number Diff line number Diff line Loading @@ -1564,12 +1564,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp // window was transferred ({@link #mSkipAppTransitionAnimation}). return false; } if ((mAppTransition.getTransitFlags() & WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_NO_ANIMATION) != 0) { // The transition may be finished before keyguard hidden. In order to avoid the // intermediate orientation change, it is more stable to freeze the display. return false; } if (r.isState(RESUMED) && !r.getRootTask().mInResumeTopActivity) { // If the activity is executing or has done the lifecycle callback, use normal // rotation animation so the display info can be updated immediately (see Loading services/core/java/com/android/server/wm/KeyguardController.java +2 −11 Original line number Diff line number Diff line Loading @@ -72,7 +72,6 @@ class KeyguardController { private boolean mAodShowing; private boolean mKeyguardGoingAway; private boolean mDismissalRequested; private int mBeforeUnoccludeTransit; private final SparseArray<KeyguardDisplayState> mDisplayStates = new SparseArray<>(); private final ActivityTaskManagerService mService; private RootWindowContainer mRootWindowContainer; Loading Loading @@ -191,14 +190,11 @@ class KeyguardController { // Irrelevant to AOD. dismissMultiWindowModeForTaskIfNeeded(null /* currentTaskControllsingOcclusion */, false /* turningScreenOn */); setKeyguardGoingAway(false); mKeyguardGoingAway = false; if (keyguardShowing) { mDismissalRequested = false; } } // TODO(b/113840485): Check usage for non-default display mWindowManager.setKeyguardOrAodShowingOnDefaultDisplay( isKeyguardOrAodShowing(DEFAULT_DISPLAY)); // Update the sleep token first such that ensureActivitiesVisible has correct sleep token // state when evaluating visibilities. Loading @@ -219,8 +215,8 @@ class KeyguardController { } Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "keyguardGoingAway"); mService.deferWindowLayout(); mKeyguardGoingAway = true; try { setKeyguardGoingAway(true); EventLogTags.writeWmSetKeyguardShown( 1 /* keyguardShowing */, mAodShowing ? 1 : 0, Loading Loading @@ -258,11 +254,6 @@ class KeyguardController { mWindowManager.dismissKeyguard(callback, message); } private void setKeyguardGoingAway(boolean keyguardGoingAway) { mKeyguardGoingAway = keyguardGoingAway; mWindowManager.setKeyguardGoingAway(keyguardGoingAway); } private void failCallback(IKeyguardDismissCallback callback) { try { callback.onDismissError(); Loading services/core/java/com/android/server/wm/WindowManagerService.java +1 −15 Original line number Diff line number Diff line Loading @@ -483,10 +483,7 @@ public class WindowManagerService extends IWindowManager.Stub private final DisplayAreaPolicy.Provider mDisplayAreaPolicyProvider; final private KeyguardDisableHandler mKeyguardDisableHandler; // TODO: eventually unify all keyguard state in a common place instead of having it spread over // AM's KeyguardController and the policy's KeyguardServiceDelegate. boolean mKeyguardGoingAway; boolean mKeyguardOrAodShowingOnDefaultDisplay; // VR Vr2d Display Id. int mVr2dDisplayId = INVALID_DISPLAY; boolean mVrModeEnabled = false; Loading Loading @@ -3072,17 +3069,6 @@ public class WindowManagerService extends IWindowManager.Stub mAtmInternal.notifyKeyguardFlagsChanged(callback, displayId); } public void setKeyguardGoingAway(boolean keyguardGoingAway) { synchronized (mGlobalLock) { mKeyguardGoingAway = keyguardGoingAway; } } public void setKeyguardOrAodShowingOnDefaultDisplay(boolean showing) { synchronized (mGlobalLock) { mKeyguardOrAodShowingOnDefaultDisplay = showing; } } // ------------------------------------------------------------- // Misc IWindowSession methods Loading services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +5 −10 Original line number Diff line number Diff line Loading @@ -100,7 +100,6 @@ import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doCallRealMethod; import android.annotation.SuppressLint; import android.app.ActivityTaskManager; import android.app.WindowConfiguration; import android.app.servertransaction.FixedRotationAdjustmentsItem; Loading Loading @@ -792,15 +791,9 @@ public class DisplayContentTests extends WindowTestsBase { } @Test @SuppressLint("InlinedApi") public void testOrientationDefinedByKeyguard() { final DisplayContent dc = createNewDisplay(); // When display content is created its configuration is not yet initialized, which could // cause unnecessary configuration propagation, so initialize it here. final Configuration config = new Configuration(); dc.computeScreenConfiguration(config); dc.onRequestedOverrideConfigurationChanged(config); final DisplayContent dc = mDisplayContent; dc.getDisplayPolicy().setAwake(true); // Create a window that requests landscape orientation. It will define device orientation // by default. Loading @@ -815,10 +808,12 @@ public class DisplayContentTests extends WindowTestsBase { SCREEN_ORIENTATION_LANDSCAPE, dc.getOrientation()); keyguard.mAttrs.screenOrientation = SCREEN_ORIENTATION_PORTRAIT; mAtm.mKeyguardController.setKeyguardShown(true /* keyguardShowing */, false /* aodShowing */); assertEquals("Visible keyguard must influence device orientation", SCREEN_ORIENTATION_PORTRAIT, dc.getOrientation()); mWm.setKeyguardGoingAway(true); mAtm.mKeyguardController.keyguardGoingAway(0 /* flags */); assertEquals("Keyguard that is going away must not influence device orientation", SCREEN_ORIENTATION_LANDSCAPE, dc.getOrientation()); } Loading Loading
services/core/java/com/android/server/wm/DisplayArea.java +7 −1 Original line number Diff line number Diff line Loading @@ -551,7 +551,13 @@ public class DisplayArea<T extends WindowContainer> extends WindowContainer<T> { } final WindowManagerPolicy policy = mWmService.mPolicy; if (policy.isKeyguardHostWindow(w.mAttrs)) { if (mWmService.mKeyguardGoingAway) { // Ignore the orientation of keyguard if it is going away or is not showing while // the device is fully awake. In other words, use the orientation of keyguard if // its window is visible while the device is going to sleep or is sleeping. if (!mWmService.mAtmService.isKeyguardLocked() && mDisplayContent.getDisplayPolicy().isAwake() // Device is not going to sleep. && policy.okToAnimate(true /* ignoreScreenOn */)) { return false; } // Consider unoccluding only when all unknown visibilities have been Loading
services/core/java/com/android/server/wm/DisplayContent.java +0 −6 Original line number Diff line number Diff line Loading @@ -1564,12 +1564,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp // window was transferred ({@link #mSkipAppTransitionAnimation}). return false; } if ((mAppTransition.getTransitFlags() & WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_NO_ANIMATION) != 0) { // The transition may be finished before keyguard hidden. In order to avoid the // intermediate orientation change, it is more stable to freeze the display. return false; } if (r.isState(RESUMED) && !r.getRootTask().mInResumeTopActivity) { // If the activity is executing or has done the lifecycle callback, use normal // rotation animation so the display info can be updated immediately (see Loading
services/core/java/com/android/server/wm/KeyguardController.java +2 −11 Original line number Diff line number Diff line Loading @@ -72,7 +72,6 @@ class KeyguardController { private boolean mAodShowing; private boolean mKeyguardGoingAway; private boolean mDismissalRequested; private int mBeforeUnoccludeTransit; private final SparseArray<KeyguardDisplayState> mDisplayStates = new SparseArray<>(); private final ActivityTaskManagerService mService; private RootWindowContainer mRootWindowContainer; Loading Loading @@ -191,14 +190,11 @@ class KeyguardController { // Irrelevant to AOD. dismissMultiWindowModeForTaskIfNeeded(null /* currentTaskControllsingOcclusion */, false /* turningScreenOn */); setKeyguardGoingAway(false); mKeyguardGoingAway = false; if (keyguardShowing) { mDismissalRequested = false; } } // TODO(b/113840485): Check usage for non-default display mWindowManager.setKeyguardOrAodShowingOnDefaultDisplay( isKeyguardOrAodShowing(DEFAULT_DISPLAY)); // Update the sleep token first such that ensureActivitiesVisible has correct sleep token // state when evaluating visibilities. Loading @@ -219,8 +215,8 @@ class KeyguardController { } Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "keyguardGoingAway"); mService.deferWindowLayout(); mKeyguardGoingAway = true; try { setKeyguardGoingAway(true); EventLogTags.writeWmSetKeyguardShown( 1 /* keyguardShowing */, mAodShowing ? 1 : 0, Loading Loading @@ -258,11 +254,6 @@ class KeyguardController { mWindowManager.dismissKeyguard(callback, message); } private void setKeyguardGoingAway(boolean keyguardGoingAway) { mKeyguardGoingAway = keyguardGoingAway; mWindowManager.setKeyguardGoingAway(keyguardGoingAway); } private void failCallback(IKeyguardDismissCallback callback) { try { callback.onDismissError(); Loading
services/core/java/com/android/server/wm/WindowManagerService.java +1 −15 Original line number Diff line number Diff line Loading @@ -483,10 +483,7 @@ public class WindowManagerService extends IWindowManager.Stub private final DisplayAreaPolicy.Provider mDisplayAreaPolicyProvider; final private KeyguardDisableHandler mKeyguardDisableHandler; // TODO: eventually unify all keyguard state in a common place instead of having it spread over // AM's KeyguardController and the policy's KeyguardServiceDelegate. boolean mKeyguardGoingAway; boolean mKeyguardOrAodShowingOnDefaultDisplay; // VR Vr2d Display Id. int mVr2dDisplayId = INVALID_DISPLAY; boolean mVrModeEnabled = false; Loading Loading @@ -3072,17 +3069,6 @@ public class WindowManagerService extends IWindowManager.Stub mAtmInternal.notifyKeyguardFlagsChanged(callback, displayId); } public void setKeyguardGoingAway(boolean keyguardGoingAway) { synchronized (mGlobalLock) { mKeyguardGoingAway = keyguardGoingAway; } } public void setKeyguardOrAodShowingOnDefaultDisplay(boolean showing) { synchronized (mGlobalLock) { mKeyguardOrAodShowingOnDefaultDisplay = showing; } } // ------------------------------------------------------------- // Misc IWindowSession methods Loading
services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +5 −10 Original line number Diff line number Diff line Loading @@ -100,7 +100,6 @@ import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doCallRealMethod; import android.annotation.SuppressLint; import android.app.ActivityTaskManager; import android.app.WindowConfiguration; import android.app.servertransaction.FixedRotationAdjustmentsItem; Loading Loading @@ -792,15 +791,9 @@ public class DisplayContentTests extends WindowTestsBase { } @Test @SuppressLint("InlinedApi") public void testOrientationDefinedByKeyguard() { final DisplayContent dc = createNewDisplay(); // When display content is created its configuration is not yet initialized, which could // cause unnecessary configuration propagation, so initialize it here. final Configuration config = new Configuration(); dc.computeScreenConfiguration(config); dc.onRequestedOverrideConfigurationChanged(config); final DisplayContent dc = mDisplayContent; dc.getDisplayPolicy().setAwake(true); // Create a window that requests landscape orientation. It will define device orientation // by default. Loading @@ -815,10 +808,12 @@ public class DisplayContentTests extends WindowTestsBase { SCREEN_ORIENTATION_LANDSCAPE, dc.getOrientation()); keyguard.mAttrs.screenOrientation = SCREEN_ORIENTATION_PORTRAIT; mAtm.mKeyguardController.setKeyguardShown(true /* keyguardShowing */, false /* aodShowing */); assertEquals("Visible keyguard must influence device orientation", SCREEN_ORIENTATION_PORTRAIT, dc.getOrientation()); mWm.setKeyguardGoingAway(true); mAtm.mKeyguardController.keyguardGoingAway(0 /* flags */); assertEquals("Keyguard that is going away must not influence device orientation", SCREEN_ORIENTATION_LANDSCAPE, dc.getOrientation()); } Loading