diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/DisplayContent.java | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 5cb39d44586f..4964ade090f1 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -3250,25 +3250,43 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp Slog.e(TAG, "ShouldShowSystemDecors shouldn't be updated when the flag is off."); } - final boolean shouldShow; - if (isDefaultDisplay) { - shouldShow = true; - } else if (isPrivate()) { - shouldShow = false; - } else { - shouldShow = mDisplay.canHostTasks(); + final boolean shouldShowContent; + if (!allowContentModeSwitch()) { + return; } + shouldShowContent = mDisplay.canHostTasks(); - if (shouldShow == mWmService.mDisplayWindowSettings.shouldShowSystemDecorsLocked(this)) { + if (shouldShowContent == mWmService.mDisplayWindowSettings + .shouldShowSystemDecorsLocked(this)) { return; } - mWmService.mDisplayWindowSettings.setShouldShowSystemDecorsLocked(this, shouldShow); + mWmService.mDisplayWindowSettings.setShouldShowSystemDecorsLocked(this, shouldShowContent); - if (!shouldShow) { + if (!shouldShowContent) { clearAllTasksOnDisplay(null /* clearTasksCallback */, false /* isRemovingDisplay */); } } + private boolean allowContentModeSwitch() { + // The default display should always show system decorations. + if (isDefaultDisplay) { + return false; + } + + // Private display should never show system decorations. + if (isPrivate()) { + return false; + } + + // TODO(b/391965805): Remove this after introducing FLAG_ALLOW_SYSTEM_DECORATIONS_CHANGE. + // Virtual displays cannot add or remove system decorations during their lifecycle. + if (mDisplay.getType() == Display.TYPE_VIRTUAL) { + return false; + } + + return true; + } + DisplayCutout loadDisplayCutout(int displayWidth, int displayHeight) { if (mDisplayPolicy == null || mInitialDisplayCutout == null) { return null; |