diff --git a/services/core/java/com/android/server/wm/EnsureActivitiesVisibleHelper.java b/services/core/java/com/android/server/wm/EnsureActivitiesVisibleHelper.java index 8d3e071166937..aa5e20d9ec7f3 100644 --- a/services/core/java/com/android/server/wm/EnsureActivitiesVisibleHelper.java +++ b/services/core/java/com/android/server/wm/EnsureActivitiesVisibleHelper.java @@ -104,7 +104,8 @@ class EnsureActivitiesVisibleHelper { for (int i = mTaskFragment.mChildren.size() - 1; i >= 0; --i) { final WindowContainer child = mTaskFragment.mChildren.get(i); final TaskFragment childTaskFragment = child.asTaskFragment(); - if (childTaskFragment != null && childTaskFragment.topRunningActivity() != null) { + if (childTaskFragment != null + && childTaskFragment.getTopNonFinishingActivity() != null) { childTaskFragment.updateActivityVisibilities(starting, configChanges, preserveWindows, notifyClients); mBehindFullyOccludedContainer |= diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java index 3298d1184cdca..043bc0700ab47 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java @@ -121,6 +121,7 @@ import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Point; import android.graphics.Rect; +import android.os.Binder; import android.os.Build; import android.os.Bundle; import android.os.PersistableBundle; @@ -3358,6 +3359,29 @@ public class ActivityRecordTests extends WindowTestsBase { noProcActivity.mInputDispatchingTimeoutMillis); } + @Test + public void testEnsureActivitiesVisibleAnotherUserTasks() { + // Create an activity with hierarchy: + // RootTask + // - TaskFragment + // - Activity + DisplayContent display = createNewDisplay(); + Task rootTask = createTask(display); + ActivityRecord activity = createActivityRecord(rootTask); + final TaskFragment taskFragment = new TaskFragment(mAtm, new Binder(), + true /* createdByOrganizer */, true /* isEmbedded */); + activity.getTask().addChild(taskFragment, POSITION_TOP); + activity.reparent(taskFragment, POSITION_TOP); + + // Ensure the activity visibility is updated even it is not shown to current user. + activity.mVisibleRequested = true; + doReturn(false).when(activity).showToCurrentUser(); + spyOn(taskFragment); + doReturn(false).when(taskFragment).shouldBeVisible(any()); + display.ensureActivitiesVisible(null, 0, false, false); + assertFalse(activity.mVisibleRequested); + } + private ICompatCameraControlCallback getCompatCameraControlCallback() { return new ICompatCameraControlCallback.Stub() { @Override