diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowControllerImpl.java index 9f9e7d9a276ea..5caf4f604fcdf 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowControllerImpl.java @@ -26,6 +26,7 @@ import static com.android.systemui.statusbar.NotificationRemoteInputManager.ENAB import android.app.IActivityManager; import android.content.Context; import android.content.pm.ActivityInfo; +import android.content.res.Configuration; import android.graphics.PixelFormat; import android.graphics.Region; import android.os.Binder; @@ -117,6 +118,7 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW * @see #batchApplyWindowLayoutParams(Runnable) */ private int mDeferWindowLayoutParams; + private boolean mLastKeyguardRotationAllowed; @Inject public NotificationShadeWindowControllerImpl(Context context, WindowManager windowManager, @@ -143,7 +145,7 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW mScreenOffAnimationController = screenOffAnimationController; dumpManager.registerDumpable(getClass().getName(), this); mAuthController = authController; - + mLastKeyguardRotationAllowed = mKeyguardStateController.isKeyguardScreenRotationAllowed(); mLockScreenDisplayTimeout = context.getResources() .getInteger(R.integer.config_lockScreenDisplayTimeout); ((SysuiStatusBarStateController) statusBarStateController) @@ -779,6 +781,17 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW setKeyguardDark(useDarkText); } + @Override + public void onConfigChanged(Configuration newConfig) { + final boolean newScreenRotationAllowed = mKeyguardStateController + .isKeyguardScreenRotationAllowed(); + + if (mLastKeyguardRotationAllowed != newScreenRotationAllowed) { + apply(mCurrentState); + mLastKeyguardRotationAllowed = newScreenRotationAllowed; + } + } + /** * When keyguard will be dismissed but didn't start animation yet. */ diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowControllerImplTest.java index 671ab597eb2a0..c797bc8bdf60f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowControllerImplTest.java @@ -32,6 +32,8 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.IActivityManager; +import android.content.pm.ActivityInfo; +import android.content.res.Configuration; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper.RunWithLooper; import android.view.View; @@ -227,6 +229,36 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase { assertThat((mLayoutParameters.getValue().flags & FLAG_ALT_FOCUSABLE_IM) == 0).isTrue(); } + @Test + public void rotationBecameAllowed_layoutParamsUpdated() { + mNotificationShadeWindowController.setKeyguardShowing(true); + when(mKeyguardStateController.isKeyguardScreenRotationAllowed()).thenReturn(false); + mNotificationShadeWindowController.onConfigChanged(new Configuration()); + clearInvocations(mWindowManager); + + when(mKeyguardStateController.isKeyguardScreenRotationAllowed()).thenReturn(true); + mNotificationShadeWindowController.onConfigChanged(new Configuration()); + + verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture()); + assertThat(mLayoutParameters.getValue().screenOrientation) + .isEqualTo(ActivityInfo.SCREEN_ORIENTATION_USER); + } + + @Test + public void rotationBecameNotAllowed_layoutParamsUpdated() { + mNotificationShadeWindowController.setKeyguardShowing(true); + when(mKeyguardStateController.isKeyguardScreenRotationAllowed()).thenReturn(true); + mNotificationShadeWindowController.onConfigChanged(new Configuration()); + clearInvocations(mWindowManager); + + when(mKeyguardStateController.isKeyguardScreenRotationAllowed()).thenReturn(false); + mNotificationShadeWindowController.onConfigChanged(new Configuration()); + + verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture()); + assertThat(mLayoutParameters.getValue().screenOrientation) + .isEqualTo(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); + } + @Test public void batchApplyWindowLayoutParams_doesNotDispatchEvents() { mNotificationShadeWindowController.setForceDozeBrightness(true);