Merge "Use normal rotation if orientation is changed by resume-scheduled app" into rvc-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
75a288bf07
@@ -1496,6 +1496,15 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
|
|||||||
// intermediate orientation change, it is more stable to freeze the display.
|
// intermediate orientation change, it is more stable to freeze the display.
|
||||||
return false;
|
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()) {
|
} else if (r != topRunningActivity()) {
|
||||||
// If the transition has not started yet, the activity must be the top.
|
// If the transition has not started yet, the activity must be the top.
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -1275,6 +1275,27 @@ public class DisplayContentTests extends WindowTestsBase {
|
|||||||
assertTrue(displayContent.getPinnedStackController().isPipActiveOrWindowingModeChanging());
|
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
|
@Test
|
||||||
public void testRecentsNotRotatingWithFixedRotation() {
|
public void testRecentsNotRotatingWithFixedRotation() {
|
||||||
final DisplayRotation displayRotation = mDisplayContent.getDisplayRotation();
|
final DisplayRotation displayRotation = mDisplayContent.getDisplayRotation();
|
||||||
|
|||||||
Reference in New Issue
Block a user