Fix gmail flicker issue in split screen

This issue is caused by surface invisible before transition.
And this symptom caused by we got wrong resume callback by another
side split activity.

Fix this by change prioirty in TaskFragment#resumeTopActivity.
We should check non activities are pausing before checking
top activity resumed.

Fix: 257008620
Test: manual
Test: pass existing tests
Change-Id: I6ef987bf694678b8422f3e7526944ee9004c61e1
This commit is contained in:
Tony Huang
2022-11-23 17:19:54 +08:00
parent 6a110d68fd
commit b88ba47ce3

View File

@@ -1165,8 +1165,16 @@ class TaskFragment extends WindowContainer<WindowContainer> {
}
next.delayedResume = false;
final TaskDisplayArea taskDisplayArea = getDisplayArea();
// If we are currently pausing an activity, then don't do anything until that is done.
final boolean allPausedComplete = mRootWindowContainer.allPausedActivitiesComplete();
if (!allPausedComplete) {
ProtoLog.v(WM_DEBUG_STATES,
"resumeTopActivity: Skip resume: some activity pausing.");
return false;
}
final TaskDisplayArea taskDisplayArea = getDisplayArea();
// If the top activity is the resumed one, nothing to do.
if (mResumedActivity == next && next.isState(RESUMED)
&& taskDisplayArea.allResumedActivitiesComplete()) {
@@ -1189,14 +1197,6 @@ class TaskFragment extends WindowContainer<WindowContainer> {
return false;
}
// If we are currently pausing an activity, then don't do anything until that is done.
final boolean allPausedComplete = mRootWindowContainer.allPausedActivitiesComplete();
if (!allPausedComplete) {
ProtoLog.v(WM_DEBUG_STATES,
"resumeTopActivity: Skip resume: some activity pausing.");
return false;
}
// If we are sleeping, and there is no resumed activity, and the top activity is paused,
// well that is the state we want.
if (mLastPausedActivity == next && shouldSleepOrShutDownActivities()) {