Apply new keyguard orientation when it becomes non-rotatable
Notification shade window didn't update its orientation layout params sometimes when switching displays, it worked only if there was a coincidental call about other state change right after display switch. Added explicit applying of the state if the value of the resource that shows if the rotation is allowed has changed. Bug: 216622540 Test: atest com.android.systemui.statusbar.phone.NotificationShadeWindowControllerImplTest Test: manually fold several times from portrait orientation on the inner screen to AOD screen Change-Id: Ic071a614df33386796881029a17b55eb989e40d5
This commit is contained in:
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user