Merge "Use normal rotation if orientation is changed by resume-scheduled app" into rvc-qpr-dev am: 75a288bf07
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12735136 Change-Id: I90985605c563686b09b332f5928a18f0b3d67699
This commit is contained in:
@@ -1496,6 +1496,15 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
|
||||
// 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
|
||||
// updateDisplayAndOrientation). This prevents a compatibility issue such as
|
||||
// calling setRequestedOrientation in Activity#onCreate and then get display info.
|
||||
// If fixed rotation is applied, the display rotation will still be the old one,
|
||||
// unless the client side gets the rotation again after the adjustments arrive.
|
||||
return false;
|
||||
}
|
||||
} else if (r != topRunningActivity()) {
|
||||
// If the transition has not started yet, the activity must be the top.
|
||||
return false;
|
||||
|
||||
@@ -1275,6 +1275,27 @@ public class DisplayContentTests extends WindowTestsBase {
|
||||
assertTrue(displayContent.getPinnedStackController().isPipActiveOrWindowingModeChanging());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNoFixedRotationOnResumedScheduledApp() {
|
||||
final ActivityRecord app = new ActivityTestsBase.StackBuilder(mWm.mRoot)
|
||||
.setDisplay(mDisplayContent).build().getTopMostActivity();
|
||||
app.setVisible(false);
|
||||
app.setState(ActivityStack.ActivityState.RESUMED, "test");
|
||||
mDisplayContent.prepareAppTransition(WindowManager.TRANSIT_ACTIVITY_OPEN,
|
||||
false /* alwaysKeepCurrent */);
|
||||
mDisplayContent.mOpeningApps.add(app);
|
||||
final int newOrientation = getRotatedOrientation(mDisplayContent);
|
||||
app.setRequestedOrientation(newOrientation);
|
||||
|
||||
// The condition should reject using fixed rotation because the resumed client in real case
|
||||
// might get display info immediately. And the fixed rotation adjustments haven't arrived
|
||||
// client side so the info may be inconsistent with the requested orientation.
|
||||
verify(mDisplayContent).handleTopActivityLaunchingInDifferentOrientation(eq(app),
|
||||
eq(true) /* checkOpening */);
|
||||
assertFalse(app.isFixedRotationTransforming());
|
||||
assertFalse(mDisplayContent.hasTopFixedRotationLaunchingApp());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRecentsNotRotatingWithFixedRotation() {
|
||||
final DisplayRotation displayRotation = mDisplayContent.getDisplayRotation();
|
||||
|
||||
Reference in New Issue
Block a user