Merge "Only set ready early in AR.finish if it is a self-contained op" into udc-dev

This commit is contained in:
Evan Rosky
2023-04-07 16:41:24 +00:00
committed by Android (Google) Code Review
2 changed files with 21 additions and 6 deletions

View File

@@ -3522,7 +3522,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
final boolean endTask = task.getTopNonFinishingActivity() == null final boolean endTask = task.getTopNonFinishingActivity() == null
&& !task.isClearingToReuseTask(); && !task.isClearingToReuseTask();
mTransitionController.requestCloseTransitionIfNeeded(endTask ? task : this); final Transition newTransition =
mTransitionController.requestCloseTransitionIfNeeded(endTask ? task : this);
if (isState(RESUMED)) { if (isState(RESUMED)) {
if (endTask) { if (endTask) {
mAtmService.getTaskChangeNotificationController().notifyTaskRemovalStarted( mAtmService.getTaskChangeNotificationController().notifyTaskRemovalStarted(
@@ -3576,7 +3577,16 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
} else if (!isState(PAUSING)) { } else if (!isState(PAUSING)) {
if (mVisibleRequested) { if (mVisibleRequested) {
// Prepare and execute close transition. // Prepare and execute close transition.
prepareActivityHideTransitionAnimation(); if (mTransitionController.isShellTransitionsEnabled()) {
setVisibility(false);
if (newTransition != null) {
// This is a transition specifically for this close operation, so set
// ready now.
newTransition.setReady(mDisplayContent, true);
}
} else {
prepareActivityHideTransitionAnimation();
}
} }
final boolean removedActivity = completeFinishing("finishIfPossible") == null; final boolean removedActivity = completeFinishing("finishIfPossible") == null;

View File

@@ -577,12 +577,16 @@ class TransitionController {
return transition; return transition;
} }
/** Requests transition for a window container which will be removed or invisible. */ /**
void requestCloseTransitionIfNeeded(@NonNull WindowContainer<?> wc) { * Requests transition for a window container which will be removed or invisible.
if (mTransitionPlayer == null) return; * @return the new transition if it was created for this request, `null` otherwise.
*/
Transition requestCloseTransitionIfNeeded(@NonNull WindowContainer<?> wc) {
if (mTransitionPlayer == null) return null;
Transition out = null;
if (wc.isVisibleRequested()) { if (wc.isVisibleRequested()) {
if (!isCollecting()) { if (!isCollecting()) {
requestStartTransition(createTransition(TRANSIT_CLOSE, 0 /* flags */), out = requestStartTransition(createTransition(TRANSIT_CLOSE, 0 /* flags */),
wc.asTask(), null /* remoteTransition */, null /* displayChange */); wc.asTask(), null /* remoteTransition */, null /* displayChange */);
} }
collectExistenceChange(wc); collectExistenceChange(wc);
@@ -591,6 +595,7 @@ class TransitionController {
// collecting, this should be a member just in case. // collecting, this should be a member just in case.
collect(wc); collect(wc);
} }
return out;
} }
/** @see Transition#collect */ /** @see Transition#collect */