[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:
@@ -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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user