Merge "Use rotation animation for orientation change of non-occluded activity" into rvc-dev
This commit is contained in:
@@ -1185,6 +1185,9 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
|
|||||||
}
|
}
|
||||||
|
|
||||||
activity.onRemovedFromDisplay();
|
activity.onRemovedFromDisplay();
|
||||||
|
if (activity == mFixedRotationLaunchingApp) {
|
||||||
|
setFixedRotationLaunchingAppUnchecked(null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1468,6 +1471,12 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
|
|||||||
// It has been set and not yet finished.
|
// It has been set and not yet finished.
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
if (!r.occludesParent() || r.isVisible()) {
|
||||||
|
// While entering or leaving a translucent or floating activity (e.g. dialog style),
|
||||||
|
// there is a visible activity in the background. Then it still needs rotation animation
|
||||||
|
// to cover the activity configuration change.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (checkOpening) {
|
if (checkOpening) {
|
||||||
if (!mAppTransition.isTransitionSet() || !mOpeningApps.contains(r)) {
|
if (!mAppTransition.isTransitionSet() || !mOpeningApps.contains(r)) {
|
||||||
// Apply normal rotation animation in case of the activity set different requested
|
// Apply normal rotation animation in case of the activity set different requested
|
||||||
@@ -5636,6 +5645,12 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
|
|||||||
*/
|
*/
|
||||||
void onStartRecentsAnimation(@NonNull ActivityRecord r) {
|
void onStartRecentsAnimation(@NonNull ActivityRecord r) {
|
||||||
mAnimatingRecents = r;
|
mAnimatingRecents = r;
|
||||||
|
if (r.isVisible() && mFocusedApp != null && !mFocusedApp.occludesParent()) {
|
||||||
|
// The recents activity has shown with the orientation determined by the top
|
||||||
|
// activity, keep its current orientation to avoid flicking by the configuration
|
||||||
|
// change of visible activity.
|
||||||
|
return;
|
||||||
|
}
|
||||||
rotateInDifferentOrientationIfNeeded(r);
|
rotateInDifferentOrientationIfNeeded(r);
|
||||||
if (r.hasFixedRotationTransform()) {
|
if (r.hasFixedRotationTransform()) {
|
||||||
// Set the record so we can recognize it to continue to update display orientation
|
// Set the record so we can recognize it to continue to update display orientation
|
||||||
|
|||||||
@@ -1506,6 +1506,7 @@ public class ActivityRecordTests extends ActivityTestsBase {
|
|||||||
.setRotation((mActivity.getWindowConfiguration().getRotation() + 1) % 4)
|
.setRotation((mActivity.getWindowConfiguration().getRotation() + 1) % 4)
|
||||||
.build();
|
.build();
|
||||||
setRotatedScreenOrientationSilently(mActivity);
|
setRotatedScreenOrientationSilently(mActivity);
|
||||||
|
mActivity.setVisible(false);
|
||||||
|
|
||||||
final IWindowSession session = WindowManagerGlobal.getWindowSession();
|
final IWindowSession session = WindowManagerGlobal.getWindowSession();
|
||||||
spyOn(session);
|
spyOn(session);
|
||||||
|
|||||||
@@ -456,6 +456,7 @@ public class AppWindowTokenTests extends WindowTestsBase {
|
|||||||
@Test
|
@Test
|
||||||
public void testTransferStartingWindowSetFixedRotation() {
|
public void testTransferStartingWindowSetFixedRotation() {
|
||||||
final ActivityRecord topActivity = createTestActivityRecordForGivenTask(mTask);
|
final ActivityRecord topActivity = createTestActivityRecordForGivenTask(mTask);
|
||||||
|
topActivity.setVisible(false);
|
||||||
mTask.positionChildAt(topActivity, POSITION_TOP);
|
mTask.positionChildAt(topActivity, POSITION_TOP);
|
||||||
mActivity.addStartingWindow(mPackageName,
|
mActivity.addStartingWindow(mPackageName,
|
||||||
android.R.style.Theme, null, "Test", 0, 0, 0, 0, null, true, true, false, true,
|
android.R.style.Theme, null, "Test", 0, 0, 0, 0, null, true, true, false, true,
|
||||||
|
|||||||
@@ -1081,6 +1081,7 @@ public class DisplayContentTests extends WindowTestsBase {
|
|||||||
mDisplayContent.onRequestedOverrideConfigurationChanged(config);
|
mDisplayContent.onRequestedOverrideConfigurationChanged(config);
|
||||||
|
|
||||||
final ActivityRecord app = mAppWindow.mActivityRecord;
|
final ActivityRecord app = mAppWindow.mActivityRecord;
|
||||||
|
app.setVisible(false);
|
||||||
mDisplayContent.prepareAppTransition(WindowManager.TRANSIT_ACTIVITY_OPEN,
|
mDisplayContent.prepareAppTransition(WindowManager.TRANSIT_ACTIVITY_OPEN,
|
||||||
false /* alwaysKeepCurrent */);
|
false /* alwaysKeepCurrent */);
|
||||||
mDisplayContent.mOpeningApps.add(app);
|
mDisplayContent.mOpeningApps.add(app);
|
||||||
@@ -1135,6 +1136,7 @@ public class DisplayContentTests extends WindowTestsBase {
|
|||||||
// Launch another activity before the transition is finished.
|
// Launch another activity before the transition is finished.
|
||||||
final ActivityRecord app2 = new ActivityTestsBase.StackBuilder(mWm.mRoot)
|
final ActivityRecord app2 = new ActivityTestsBase.StackBuilder(mWm.mRoot)
|
||||||
.setDisplay(mDisplayContent).build().getTopMostActivity();
|
.setDisplay(mDisplayContent).build().getTopMostActivity();
|
||||||
|
app2.setVisible(false);
|
||||||
mDisplayContent.mOpeningApps.add(app2);
|
mDisplayContent.mOpeningApps.add(app2);
|
||||||
app2.setRequestedOrientation(newOrientation);
|
app2.setRequestedOrientation(newOrientation);
|
||||||
|
|
||||||
@@ -1277,6 +1279,14 @@ public class DisplayContentTests extends WindowTestsBase {
|
|||||||
mDisplayContent.setFixedRotationLaunchingAppUnchecked(mAppWindow.mActivityRecord);
|
mDisplayContent.setFixedRotationLaunchingAppUnchecked(mAppWindow.mActivityRecord);
|
||||||
displayRotation.setRotation((displayRotation.getRotation() + 1) % 4);
|
displayRotation.setRotation((displayRotation.getRotation() + 1) % 4);
|
||||||
assertTrue(displayRotation.updateRotationUnchecked(false));
|
assertTrue(displayRotation.updateRotationUnchecked(false));
|
||||||
|
|
||||||
|
// The recents activity should not apply fixed rotation if the top activity is not opaque.
|
||||||
|
mDisplayContent.mFocusedApp = mAppWindow.mActivityRecord;
|
||||||
|
doReturn(false).when(mDisplayContent.mFocusedApp).occludesParent();
|
||||||
|
doReturn(ROTATION_90).when(mDisplayContent).rotationForActivityInDifferentOrientation(
|
||||||
|
eq(recentsActivity));
|
||||||
|
mDisplayContent.mFixedRotationTransitionListener.onStartRecentsAnimation(recentsActivity);
|
||||||
|
assertFalse(recentsActivity.hasFixedRotationTransform());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -517,6 +517,7 @@ public class SizeCompatTests extends ActivityTestsBase {
|
|||||||
setUpApp(new TestDisplayContent.Builder(mService, dw, dh).setNotch(notchHeight).build());
|
setUpApp(new TestDisplayContent.Builder(mService, dw, dh).setNotch(notchHeight).build());
|
||||||
addStatusBar(mActivity.mDisplayContent);
|
addStatusBar(mActivity.mDisplayContent);
|
||||||
|
|
||||||
|
mActivity.setVisible(false);
|
||||||
mActivity.mDisplayContent.prepareAppTransition(WindowManager.TRANSIT_ACTIVITY_OPEN,
|
mActivity.mDisplayContent.prepareAppTransition(WindowManager.TRANSIT_ACTIVITY_OPEN,
|
||||||
false /* alwaysKeepCurrent */);
|
false /* alwaysKeepCurrent */);
|
||||||
mActivity.mDisplayContent.mOpeningApps.add(mActivity);
|
mActivity.mDisplayContent.mOpeningApps.add(mActivity);
|
||||||
|
|||||||
Reference in New Issue
Block a user