summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java18
-rw-r--r--services/core/java/com/android/server/wm/Task.java22
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);