Loading services/core/java/com/android/server/wm/ActivityRecord.java +1 −1 Original line number Diff line number Diff line Loading @@ -4714,7 +4714,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; } Loading services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +79 −0 Original line number Diff line number Diff line Loading @@ -2732,6 +2732,85 @@ public class ActivityRecordTests extends WindowTestsBase { > activity.getConfiguration().windowConfiguration.getAppBounds().height()); } @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); Loading services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java +10 −3 Original line number Diff line number Diff line Loading @@ -861,6 +861,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; Loading Loading @@ -986,6 +987,11 @@ class WindowTestsBase extends SystemServiceTestsBase { return this; } ActivityBuilder setVisible(boolean visible) { mVisible = visible; return this; } ActivityRecord build() { SystemServicesTestRule.checkHoldsLock(mService.mGlobalLock); try { Loading Loading @@ -1068,10 +1074,11 @@ class WindowTestsBase extends SystemServiceTestsBase { // root tasks (e.g. home root task). mTask.moveToFront("createActivity"); } // Make visible by default... if (mVisible) { activity.mVisibleRequested = true; activity.setVisible(true); } } final WindowProcessController wpc; if (mWpc != null) { Loading Loading
services/core/java/com/android/server/wm/ActivityRecord.java +1 −1 Original line number Diff line number Diff line Loading @@ -4714,7 +4714,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; } Loading
services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +79 −0 Original line number Diff line number Diff line Loading @@ -2732,6 +2732,85 @@ public class ActivityRecordTests extends WindowTestsBase { > activity.getConfiguration().windowConfiguration.getAppBounds().height()); } @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); Loading
services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java +10 −3 Original line number Diff line number Diff line Loading @@ -861,6 +861,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; Loading Loading @@ -986,6 +987,11 @@ class WindowTestsBase extends SystemServiceTestsBase { return this; } ActivityBuilder setVisible(boolean visible) { mVisible = visible; return this; } ActivityRecord build() { SystemServicesTestRule.checkHoldsLock(mService.mGlobalLock); try { Loading Loading @@ -1068,10 +1074,11 @@ class WindowTestsBase extends SystemServiceTestsBase { // root tasks (e.g. home root task). mTask.moveToFront("createActivity"); } // Make visible by default... if (mVisible) { activity.mVisibleRequested = true; activity.setVisible(true); } } final WindowProcessController wpc; if (mWpc != null) { Loading