diff options
| author | 2025-01-17 01:51:44 +0000 | |
|---|---|---|
| committer | 2025-01-18 00:03:29 +0000 | |
| commit | ba537f04e6b3c23b34dba38a469f3f6bb148911b (patch) | |
| tree | dc7efb91c77585330811111dc0b77654eb2b4d43 | |
| parent | 17c69415fd6a9c4e76620a0ab13ece33b168c98f (diff) | |
Caption/DesktopWindowDecor: don't show window decor for private display.
Shell/SystemUI has no access to private displays, so if a task is
starting on it, even if we get a transition signal to Shell, we should
not do anything such as adding window decoration to it since Shell has
no access to its attributes, such as its context.
This was not a problem since we used to always use the default
DEFAULT_DISPLAY Context.
Bug: 389901828
Test: atest
com.android.test.input.UinputRecordingIntegrationTests#testEvemuRecording
Test: atest
android.server.wm.multidisplay.MultiDisplayKeyguardTests#testDismissKeyguardActivity_secondaryDisplay
Flag: EXEMPT bugfix
Change-Id: I9194d6c89547f18416b4a50e7f3b659c16bef6f8
3 files changed, 11 insertions, 0 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecorViewModel.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecorViewModel.java index 792f5cad3418..7aa00370ff58 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecorViewModel.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecorViewModel.java @@ -284,6 +284,10 @@ public class CaptionWindowDecorViewModel implements WindowDecorViewModel, FocusT } private boolean shouldShowWindowDecor(RunningTaskInfo taskInfo) { + if (mDisplayController.getDisplay(taskInfo.displayId) == null) { + // If DisplayController doesn't have it tracked, it could be a private/managed display. + return false; + } if (taskInfo.getWindowingMode() == WINDOWING_MODE_FREEFORM) { return true; } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java index d6d393f2500c..b938be468a78 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java @@ -1641,6 +1641,10 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, } private boolean shouldShowWindowDecor(RunningTaskInfo taskInfo) { + if (mDisplayController.getDisplay(taskInfo.displayId) == null) { + // If DisplayController doesn't have it tracked, it could be a private/managed display. + return false; + } if (taskInfo.getWindowingMode() == WINDOWING_MODE_FREEFORM) return true; if (mSplitScreenController != null && mSplitScreenController.isTaskRootOrStageRoot(taskInfo.taskId)) { diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTestsBase.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTestsBase.kt index b44af4733fd2..908bc9952e99 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTestsBase.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTestsBase.kt @@ -31,6 +31,7 @@ import android.platform.test.flag.junit.SetFlagsRule import android.testing.TestableContext import android.util.SparseArray import android.view.Choreographer +import android.view.Display import android.view.Display.DEFAULT_DISPLAY import android.view.IWindowManager import android.view.InputChannel @@ -157,6 +158,7 @@ open class DesktopModeWindowDecorViewModelTestsBase : ShellTestCase() { protected val mockRecentsTransitionHandler = mock<RecentsTransitionHandler>() protected val motionEvent = mock<MotionEvent>() val displayLayout = mock<DisplayLayout>() + val display = mock<Display>() protected lateinit var spyContext: TestableContext private lateinit var desktopModeEventLogger: DesktopModeEventLogger @@ -183,6 +185,7 @@ open class DesktopModeWindowDecorViewModelTestsBase : ShellTestCase() { desktopModeEventLogger = mock<DesktopModeEventLogger>() whenever(mockDesktopUserRepositories.current).thenReturn(mockDesktopRepository) whenever(mockDisplayController.getDisplayContext(any())).thenReturn(spyContext) + whenever(mockDisplayController.getDisplay(any())).thenReturn(display) whenever(mockDesktopUserRepositories.getProfile(anyInt())) .thenReturn(mockDesktopRepository) desktopModeWindowDecorViewModel = DesktopModeWindowDecorViewModel( |