Merge "Fix flicker while resizing split screen" into tm-dev

This commit is contained in:
Jerry Chang
2022-04-25 08:15:55 +00:00
committed by Android (Google) Code Review
2 changed files with 13 additions and 27 deletions

View File

@@ -5524,8 +5524,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
}
/** @return {@code true} if this activity should be made visible. */
private boolean shouldBeVisible(boolean behindFullscreenActivity, boolean ignoringKeyguard) {
updateVisibilityIgnoringKeyguard(behindFullscreenActivity);
private boolean shouldBeVisible(boolean behindOccludedContainer, boolean ignoringKeyguard) {
updateVisibilityIgnoringKeyguard(behindOccludedContainer);
if (ignoringKeyguard) {
return visibleIgnoringKeyguard;
@@ -5583,20 +5583,20 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
return differentUidOverlayActivity != null;
}
void updateVisibilityIgnoringKeyguard(boolean behindFullscreenActivity) {
visibleIgnoringKeyguard = (!behindFullscreenActivity || mLaunchTaskBehind)
void updateVisibilityIgnoringKeyguard(boolean behindOccludedContainer) {
visibleIgnoringKeyguard = (!behindOccludedContainer || mLaunchTaskBehind)
&& showToCurrentUser();
}
boolean shouldBeVisible() {
final Task rootTask = getRootTask();
if (rootTask == null) {
final Task task = getTask();
if (task == null) {
return false;
}
final boolean behindFullscreenActivity = !rootTask.shouldBeVisible(null /* starting */)
|| rootTask.getOccludingActivityAbove(this) != null;
return shouldBeVisible(behindFullscreenActivity, false /* ignoringKeyguard */);
final boolean behindOccludedContainer = !task.shouldBeVisible(null /* starting */)
|| task.getOccludingActivityAbove(this) != null;
return shouldBeVisible(behindOccludedContainer, false /* ignoringKeyguard */);
}
void makeVisibleIfNeeded(ActivityRecord starting, boolean reportToClient) {

View File

@@ -5053,21 +5053,9 @@ class Task extends TaskFragment {
positionChildAtTop(rTask);
}
Task task = null;
if (!newTask && isOrhasTask) {
// Starting activity cannot be occluding activity, otherwise starting window could be
// remove immediately without transferring to starting activity.
final ActivityRecord occludingActivity = getOccludingActivityAbove(r);
if (occludingActivity != null) {
// Here it is! Now, if this is not yet visible (occluded by another task) to the
// user, then just add it without starting; it will get started when the user
// navigates back to it.
ProtoLog.i(WM_DEBUG_ADD_REMOVE, "Adding activity %s to task %s "
+ "callers: %s", r, task,
new RuntimeException("here").fillInStackTrace());
rTask.positionChildAtTop(r);
ActivityOptions.abort(options);
return;
}
if (!newTask && isOrhasTask && !r.shouldBeVisible()) {
ActivityOptions.abort(options);
return;
}
// Place a new activity at top of root task, so it is next to interact with the user.
@@ -5697,9 +5685,7 @@ class Task extends TaskFragment {
return false;
}
// See if there is an occluding activity on-top of this one.
final ActivityRecord occludingActivity = getOccludingActivityAbove(r);
if (occludingActivity != null) return false;
if (!r.shouldBeVisible()) return false;
if (r.finishing) Slog.e(TAG, "willActivityBeVisible: Returning false,"
+ " would have returned true for r=" + r);