diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 04b6d470467a6..e35579b90c0cc 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -3114,10 +3114,6 @@ class Task extends TaskFragment { }); } - boolean isFocusableAndVisible() { - return isTopActivityFocusable() && shouldBeVisible(null /* starting */); - } - void positionChildAtTop(ActivityRecord child) { positionChildAt(child, POSITION_TOP); } @@ -5037,7 +5033,10 @@ class Task extends TaskFragment { if (topFragment == f) { return; } - + if (!f.isFocusableAndVisible()) { + // No need to resume activity in TaskFragment that is not visible. + return; + } resumed[0] |= f.resumeTopActivity(prev, options, deferPause); }, true); return resumed[0]; diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java index 6c31716f86347..70b0ccd764744 100644 --- a/services/core/java/com/android/server/wm/TaskFragment.java +++ b/services/core/java/com/android/server/wm/TaskFragment.java @@ -1262,6 +1262,10 @@ class TaskFragment extends WindowContainer { return getVisibility(starting) != TASK_FRAGMENT_VISIBILITY_INVISIBLE; } + boolean isFocusableAndVisible() { + return isTopActivityFocusable() && shouldBeVisible(null /* starting */); + } + final boolean startPausing(boolean uiSleeping, ActivityRecord resuming, String reason) { return startPausing(mTaskSupervisor.mUserLeaving, uiSleeping, resuming, reason); }