Merge "Avoid applying closing animation for invisible activity." into sc-dev
This commit is contained in:
@@ -4593,7 +4593,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
||||
if (visible) {
|
||||
displayContent.mOpeningApps.add(this);
|
||||
mEnteringAnimation = true;
|
||||
} else {
|
||||
} else if (mVisible) {
|
||||
displayContent.mClosingApps.add(this);
|
||||
mEnteringAnimation = false;
|
||||
}
|
||||
|
||||
@@ -2699,6 +2699,85 @@ public class ActivityRecordTests extends WindowTestsBase {
|
||||
assertFalse("Starting window should not be present", activity.hasStartingWindow());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetVisibility_visibleToVisible() {
|
||||
final ActivityRecord activity = new ActivityBuilder(mAtm)
|
||||
.setCreateTask(true).build();
|
||||
// By default, activity is visible.
|
||||
assertTrue(activity.isVisible());
|
||||
assertTrue(activity.mVisibleRequested);
|
||||
assertTrue(activity.mDisplayContent.mOpeningApps.contains(activity));
|
||||
assertFalse(activity.mDisplayContent.mClosingApps.contains(activity));
|
||||
|
||||
// Request the activity to be visible. Although the activity is already visible, app
|
||||
// transition animation should be applied on this activity. This might be unnecessary, but
|
||||
// until we verify no logic relies on this behavior, we'll keep this as is.
|
||||
activity.setVisibility(true);
|
||||
assertTrue(activity.isVisible());
|
||||
assertTrue(activity.mVisibleRequested);
|
||||
assertTrue(activity.mDisplayContent.mOpeningApps.contains(activity));
|
||||
assertFalse(activity.mDisplayContent.mClosingApps.contains(activity));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetVisibility_visibleToInvisible() {
|
||||
final ActivityRecord activity = new ActivityBuilder(mAtm)
|
||||
.setCreateTask(true).build();
|
||||
// By default, activity is visible.
|
||||
assertTrue(activity.isVisible());
|
||||
assertTrue(activity.mVisibleRequested);
|
||||
assertTrue(activity.mDisplayContent.mOpeningApps.contains(activity));
|
||||
assertFalse(activity.mDisplayContent.mClosingApps.contains(activity));
|
||||
|
||||
// Request the activity to be invisible. Since the visibility changes, app transition
|
||||
// animation should be applied on this activity.
|
||||
activity.setVisibility(false);
|
||||
assertTrue(activity.isVisible());
|
||||
assertFalse(activity.mVisibleRequested);
|
||||
assertFalse(activity.mDisplayContent.mOpeningApps.contains(activity));
|
||||
assertTrue(activity.mDisplayContent.mClosingApps.contains(activity));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetVisibility_invisibleToVisible() {
|
||||
final ActivityRecord activity = new ActivityBuilder(mAtm)
|
||||
.setCreateTask(true).setVisible(false).build();
|
||||
// Activiby is invisible. However ATMS requests it to become visible, since this is a top
|
||||
// activity.
|
||||
assertFalse(activity.isVisible());
|
||||
assertTrue(activity.mVisibleRequested);
|
||||
assertTrue(activity.mDisplayContent.mOpeningApps.contains(activity));
|
||||
assertFalse(activity.mDisplayContent.mClosingApps.contains(activity));
|
||||
|
||||
// Request the activity to be visible. Since the visibility changes, app transition
|
||||
// animation should be applied on this activity.
|
||||
activity.setVisibility(true);
|
||||
assertFalse(activity.isVisible());
|
||||
assertTrue(activity.mVisibleRequested);
|
||||
assertTrue(activity.mDisplayContent.mOpeningApps.contains(activity));
|
||||
assertFalse(activity.mDisplayContent.mClosingApps.contains(activity));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetVisibility_invisibleToInvisible() {
|
||||
final ActivityRecord activity = new ActivityBuilder(mAtm)
|
||||
.setCreateTask(true).setVisible(false).build();
|
||||
// Activiby is invisible. However ATMS requests it to become visible, since this is a top
|
||||
// activity.
|
||||
assertFalse(activity.isVisible());
|
||||
assertTrue(activity.mVisibleRequested);
|
||||
assertTrue(activity.mDisplayContent.mOpeningApps.contains(activity));
|
||||
assertFalse(activity.mDisplayContent.mClosingApps.contains(activity));
|
||||
|
||||
// Request the activity to be invisible. Since the activity is already invisible, no app
|
||||
// transition should be applied on this activity.
|
||||
activity.setVisibility(false);
|
||||
assertFalse(activity.isVisible());
|
||||
assertFalse(activity.mVisibleRequested);
|
||||
assertFalse(activity.mDisplayContent.mOpeningApps.contains(activity));
|
||||
assertFalse(activity.mDisplayContent.mClosingApps.contains(activity));
|
||||
}
|
||||
|
||||
private void assertHasStartingWindow(ActivityRecord atoken) {
|
||||
assertNotNull(atoken.mStartingSurface);
|
||||
assertNotNull(atoken.mStartingData);
|
||||
|
||||
@@ -805,6 +805,7 @@ class WindowTestsBase extends SystemServiceTestsBase {
|
||||
private Bundle mIntentExtras;
|
||||
private boolean mOnTop = false;
|
||||
private ActivityInfo.WindowLayout mWindowLayout;
|
||||
private boolean mVisible = true;
|
||||
|
||||
ActivityBuilder(ActivityTaskManagerService service) {
|
||||
mService = service;
|
||||
@@ -930,6 +931,11 @@ class WindowTestsBase extends SystemServiceTestsBase {
|
||||
return this;
|
||||
}
|
||||
|
||||
ActivityBuilder setVisible(boolean visible) {
|
||||
mVisible = visible;
|
||||
return this;
|
||||
}
|
||||
|
||||
ActivityRecord build() {
|
||||
SystemServicesTestRule.checkHoldsLock(mService.mGlobalLock);
|
||||
try {
|
||||
@@ -1012,9 +1018,10 @@ class WindowTestsBase extends SystemServiceTestsBase {
|
||||
// root tasks (e.g. home root task).
|
||||
mTask.moveToFront("createActivity");
|
||||
}
|
||||
// Make visible by default...
|
||||
activity.mVisibleRequested = true;
|
||||
activity.setVisible(true);
|
||||
if (mVisible) {
|
||||
activity.mVisibleRequested = true;
|
||||
activity.setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
final WindowProcessController wpc;
|
||||
|
||||
Reference in New Issue
Block a user