Loading services/core/java/com/android/server/wm/ActivityRecord.java +1 −1 Original line number Diff line number Diff line Loading @@ -2085,7 +2085,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A /** Returns true if this activity is opaque and fills the entire space of this task. */ boolean occludesParent() { return mOccludesParent; return !finishing && mOccludesParent; } boolean setOccludesParent(boolean occludesParent) { Loading services/core/java/com/android/server/wm/ActivityStack.java +3 −4 Original line number Diff line number Diff line Loading @@ -2343,7 +2343,7 @@ class ActivityStack extends Task { // Starting activity cannot be occluding activity, otherwise starting window could be // remove immediately without transferring to starting activity. final ActivityRecord occludingActivity = getActivity( (ar) -> !ar.finishing && ar.occludesParent(), true, r); (ar) -> ar.occludesParent(), true, 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 Loading Loading @@ -3076,9 +3076,8 @@ class ActivityStack extends Task { } // See if there is an occluding activity on-top of this one. final ActivityRecord occludingActivity = getActivity((ar) -> ar.occludesParent() && !ar.finishing, r, false /*includeBoundary*/, true /*traverseTopToBottom*/); final ActivityRecord occludingActivity = getActivity((ar) -> ar.occludesParent(), r, false /*includeBoundary*/, true /*traverseTopToBottom*/); if (occludingActivity != null) return false; if (r.finishing) Slog.e(TAG, "willActivityBeVisible: Returning false," Loading services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java +29 −1 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECOND import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; import static android.content.pm.ActivityInfo.FLAG_RESUME_WHILE_PAUSING; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doCallRealMethod; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock; Loading Loading @@ -56,7 +57,6 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import android.app.ActivityManager; import android.app.IApplicationThread; Loading Loading @@ -1156,6 +1156,34 @@ public class ActivityStackTests extends ActivityTestsBase { assertThat(result).isEqualTo(taskTop); } @Test public void testCheckBehindFullscreenActivity() { final ActivityRecord bottomActivity = new ActivityBuilder(mService).setStack(mStack).setTask(mTask).build(); final ActivityRecord topActivity = new ActivityBuilder(mService).setStack(mStack).setTask(mTask).build(); doReturn(true).when(mStack).shouldBeVisible(any()); assertTrue(mStack.checkBehindFullscreenActivity(bottomActivity, null /* handleBehindFullscreenActivity */)); assertFalse(mStack.checkBehindFullscreenActivity(topActivity, null /* handleBehindFullscreenActivity */)); doReturn(false).when(topActivity).occludesParent(); assertFalse(mStack.checkBehindFullscreenActivity(bottomActivity, null /* handleBehindFullscreenActivity */)); assertFalse(mStack.checkBehindFullscreenActivity(topActivity, null /* handleBehindFullscreenActivity */)); final ActivityRecord finishingActivity = new ActivityBuilder(mService).setStack(mStack).setTask(mTask).build(); finishingActivity.finishing = true; doCallRealMethod().when(finishingActivity).occludesParent(); assertFalse(mStack.checkBehindFullscreenActivity(bottomActivity, null /* handleBehindFullscreenActivity */)); assertFalse(mStack.checkBehindFullscreenActivity(topActivity, null /* handleBehindFullscreenActivity */)); } @Test public void testClearUnknownAppVisibilityBehindFullscreenActivity() { final UnknownAppVisibilityController unknownAppVisibilityController = Loading Loading
services/core/java/com/android/server/wm/ActivityRecord.java +1 −1 Original line number Diff line number Diff line Loading @@ -2085,7 +2085,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A /** Returns true if this activity is opaque and fills the entire space of this task. */ boolean occludesParent() { return mOccludesParent; return !finishing && mOccludesParent; } boolean setOccludesParent(boolean occludesParent) { Loading
services/core/java/com/android/server/wm/ActivityStack.java +3 −4 Original line number Diff line number Diff line Loading @@ -2343,7 +2343,7 @@ class ActivityStack extends Task { // Starting activity cannot be occluding activity, otherwise starting window could be // remove immediately without transferring to starting activity. final ActivityRecord occludingActivity = getActivity( (ar) -> !ar.finishing && ar.occludesParent(), true, r); (ar) -> ar.occludesParent(), true, 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 Loading Loading @@ -3076,9 +3076,8 @@ class ActivityStack extends Task { } // See if there is an occluding activity on-top of this one. final ActivityRecord occludingActivity = getActivity((ar) -> ar.occludesParent() && !ar.finishing, r, false /*includeBoundary*/, true /*traverseTopToBottom*/); final ActivityRecord occludingActivity = getActivity((ar) -> ar.occludesParent(), r, false /*includeBoundary*/, true /*traverseTopToBottom*/); if (occludingActivity != null) return false; if (r.finishing) Slog.e(TAG, "willActivityBeVisible: Returning false," Loading
services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java +29 −1 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECOND import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; import static android.content.pm.ActivityInfo.FLAG_RESUME_WHILE_PAUSING; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doCallRealMethod; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock; Loading Loading @@ -56,7 +57,6 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import android.app.ActivityManager; import android.app.IApplicationThread; Loading Loading @@ -1156,6 +1156,34 @@ public class ActivityStackTests extends ActivityTestsBase { assertThat(result).isEqualTo(taskTop); } @Test public void testCheckBehindFullscreenActivity() { final ActivityRecord bottomActivity = new ActivityBuilder(mService).setStack(mStack).setTask(mTask).build(); final ActivityRecord topActivity = new ActivityBuilder(mService).setStack(mStack).setTask(mTask).build(); doReturn(true).when(mStack).shouldBeVisible(any()); assertTrue(mStack.checkBehindFullscreenActivity(bottomActivity, null /* handleBehindFullscreenActivity */)); assertFalse(mStack.checkBehindFullscreenActivity(topActivity, null /* handleBehindFullscreenActivity */)); doReturn(false).when(topActivity).occludesParent(); assertFalse(mStack.checkBehindFullscreenActivity(bottomActivity, null /* handleBehindFullscreenActivity */)); assertFalse(mStack.checkBehindFullscreenActivity(topActivity, null /* handleBehindFullscreenActivity */)); final ActivityRecord finishingActivity = new ActivityBuilder(mService).setStack(mStack).setTask(mTask).build(); finishingActivity.finishing = true; doCallRealMethod().when(finishingActivity).occludesParent(); assertFalse(mStack.checkBehindFullscreenActivity(bottomActivity, null /* handleBehindFullscreenActivity */)); assertFalse(mStack.checkBehindFullscreenActivity(topActivity, null /* handleBehindFullscreenActivity */)); } @Test public void testClearUnknownAppVisibilityBehindFullscreenActivity() { final UnknownAppVisibilityController unknownAppVisibilityController = Loading