Indicate potential incomplete transition
To catch the case such as when an activity is still pausing, and a caller sets transition to ready too early. And then when resuming next activity in the same task, its visibility will be updated without an associated transition. Previously, the visibility will be skipped because the activity is a child of the task in transition participant but itself is not in participants. Bug: 269732484 Test: TransitionTests Change-Id: I9a184b97974f337fb123e11853bea50ace9bf843
This commit is contained in:
@@ -5225,7 +5225,16 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
||||
Debug.getCallers(6));
|
||||
|
||||
// Before setting mVisibleRequested so we can track changes.
|
||||
mTransitionController.collect(this);
|
||||
boolean isCollecting = false;
|
||||
if (mTransitionController.isShellTransitionsEnabled()) {
|
||||
isCollecting = mTransitionController.isCollecting();
|
||||
if (isCollecting) {
|
||||
mTransitionController.collect(this);
|
||||
} else {
|
||||
Slog.e(TAG, "setVisibility=" + visible + " while transition is not collecting "
|
||||
+ this + " caller=" + Debug.getCallers(8));
|
||||
}
|
||||
}
|
||||
|
||||
onChildVisibilityRequested(visible);
|
||||
|
||||
@@ -5297,9 +5306,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
||||
}
|
||||
|
||||
// Defer committing visibility until transition starts.
|
||||
if (inTransition()) {
|
||||
if (!visible && mTransitionController.inPlayingTransition(this)
|
||||
&& mTransitionController.isCollecting(this)) {
|
||||
if (isCollecting) {
|
||||
// It may be occluded by the activity above that calls convertFromTranslucent().
|
||||
if (!visible && mTransitionController.inPlayingTransition(this)) {
|
||||
mTransitionChangeFlags |= FLAG_IS_OCCLUDED;
|
||||
}
|
||||
return;
|
||||
@@ -5319,11 +5328,11 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
||||
* Then its visibility will be committed until the transition is ready.
|
||||
*/
|
||||
private boolean deferCommitVisibilityChange(boolean visible) {
|
||||
if (mTransitionController.isShellTransitionsEnabled()) {
|
||||
// Shell transition doesn't use opening/closing sets.
|
||||
return false;
|
||||
}
|
||||
if (!mDisplayContent.mAppTransition.isTransitionSet()) {
|
||||
if (mTransitionController.isShellTransitionsEnabled()) {
|
||||
// Shell transition doesn't use opening/closing sets.
|
||||
return false;
|
||||
}
|
||||
// Defer committing visibility for non-home app which is animating by recents.
|
||||
if (isActivityTypeHome() || !isAnimating(PARENTS, ANIMATION_TYPE_RECENTS)) {
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user