diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityRecord.java | 18 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/Task.java | 22 |
2 files changed, 13 insertions, 27 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index e8094fbe5c69..b37f272216be 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -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) { diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 816d0a27e05a..f97f768872fd 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -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); |