[automerge] [DO NOT MERGE] Fix regression for enter PIP when onUserLeaveHint 2p: 0207f039d2

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16730784

Change-Id: I8a5d5c7e45f6e484d954db21de9972318645c07d
This commit is contained in:
Presubmit Automerger Backend
2022-01-30 03:43:28 +00:00
2 changed files with 36 additions and 8 deletions

View File

@@ -6921,7 +6921,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
@Override @Override
void prepareSurfaces() { void prepareSurfaces() {
final boolean show = isVisible() || isAnimating(TRANSITION | PARENTS, final boolean show = isVisible() || isAnimating(PARENTS,
ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_RECENTS); ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_RECENTS);
if (mSurfaceControl != null) { if (mSurfaceControl != null) {

View File

@@ -80,7 +80,6 @@ import static com.android.server.wm.ActivityRecord.State.RESUMED;
import static com.android.server.wm.ActivityRecord.State.STARTED; import static com.android.server.wm.ActivityRecord.State.STARTED;
import static com.android.server.wm.ActivityRecord.State.STOPPED; import static com.android.server.wm.ActivityRecord.State.STOPPED;
import static com.android.server.wm.ActivityRecord.State.STOPPING; import static com.android.server.wm.ActivityRecord.State.STOPPING;
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION;
import static com.android.server.wm.TaskFragment.TASK_FRAGMENT_VISIBILITY_INVISIBLE; import static com.android.server.wm.TaskFragment.TASK_FRAGMENT_VISIBILITY_INVISIBLE;
import static com.android.server.wm.TaskFragment.TASK_FRAGMENT_VISIBILITY_VISIBLE; import static com.android.server.wm.TaskFragment.TASK_FRAGMENT_VISIBILITY_VISIBLE;
import static com.android.server.wm.TaskFragment.TASK_FRAGMENT_VISIBILITY_VISIBLE_BEHIND_TRANSLUCENT; import static com.android.server.wm.TaskFragment.TASK_FRAGMENT_VISIBILITY_VISIBLE_BEHIND_TRANSLUCENT;
@@ -3124,7 +3123,7 @@ public class ActivityRecordTests extends WindowTestsBase {
} }
@Test @Test
public void testInClosingAnimation_doNotHideSurface() { public void testInClosingAnimation_visibilityNotCommitted_doNotHideSurface() {
final WindowState app = createWindow(null, TYPE_APPLICATION, "app"); final WindowState app = createWindow(null, TYPE_APPLICATION, "app");
makeWindowVisibleAndDrawn(app); makeWindowVisibleAndDrawn(app);
@@ -3133,16 +3132,45 @@ public class ActivityRecordTests extends WindowTestsBase {
mDisplayContent.mClosingApps.add(app.mActivityRecord); mDisplayContent.mClosingApps.add(app.mActivityRecord);
mDisplayContent.prepareAppTransition(TRANSIT_CLOSE); mDisplayContent.prepareAppTransition(TRANSIT_CLOSE);
// Update visibility and call to remove window // Remove window during transition, so it is requested to hide, but won't be committed until
app.mActivityRecord.commitVisibility(false, false); // the transition is finished.
app.mActivityRecord.onRemovedFromDisplay();
assertTrue(mDisplayContent.mClosingApps.contains(app.mActivityRecord));
assertFalse(app.mActivityRecord.isVisibleRequested());
assertTrue(app.mActivityRecord.isVisible());
assertTrue(app.mActivityRecord.isSurfaceShowing());
// Start transition.
app.mActivityRecord.prepareSurfaces(); app.mActivityRecord.prepareSurfaces();
// Because the app is waiting for transition, it should not hide the surface. // Because the app is waiting for transition, it should not hide the surface.
assertTrue(app.mActivityRecord.isSurfaceShowing()); assertTrue(app.mActivityRecord.isSurfaceShowing());
}
// Ensure onAnimationFinished will callback when the closing animation is finished. @Test
verify(app.mActivityRecord).onAnimationFinished(eq(ANIMATION_TYPE_APP_TRANSITION), public void testInClosingAnimation_visibilityCommitted_hideSurface() {
eq(null)); final WindowState app = createWindow(null, TYPE_APPLICATION, "app");
makeWindowVisibleAndDrawn(app);
// Put the activity in close transition.
mDisplayContent.mOpeningApps.clear();
mDisplayContent.mClosingApps.add(app.mActivityRecord);
mDisplayContent.prepareAppTransition(TRANSIT_CLOSE);
// Commit visibility before start transition.
app.mActivityRecord.commitVisibility(false, false);
assertFalse(app.mActivityRecord.isVisibleRequested());
assertFalse(app.mActivityRecord.isVisible());
assertTrue(app.mActivityRecord.isSurfaceShowing());
// Start transition.
app.mActivityRecord.prepareSurfaces();
// Because the app visibility has been committed before the transition start, it should hide
// the surface.
assertFalse(app.mActivityRecord.isSurfaceShowing());
} }
private void assertHasStartingWindow(ActivityRecord atoken) { private void assertHasStartingWindow(ActivityRecord atoken) {