From 1026b4585bb1187ae11aa2bfcb6d1b3324c7d42f Mon Sep 17 00:00:00 2001 From: Ats Jenk Date: Mon, 13 Mar 2023 15:41:21 -0700 Subject: [PATCH] Use system density for window decoration There is a prototype feature to allow overriding density for desktop tasks. This override should not apply to the window decoration. If the override system property is detected, use the system density for the window decoration. Bug: 272529050 Test: set 272 dpi for desktop tasks, move a fullscreen task to desktop, observe that task is using a different density, but window decoration is using the system density Test: remove desktop task density override, observe that desktop task window decoration using task density (which matches system) Change-Id: I1c8db490e527381b2adaa0a657050822763e1516 --- .../wm/shell/desktopmode/DesktopTasksController.kt | 12 ++++++++---- .../windowdecor/DesktopModeWindowDecoration.java | 13 +++++++++++++ .../wm/shell/windowdecor/WindowDecoration.java | 14 ++++++++++++-- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt index 2abc48da6fbe4..31c5e33f21e32 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt @@ -279,10 +279,6 @@ class DesktopTasksController( } } - private fun isDesktopDensityOverrideSet(): Boolean { - return DESKTOP_DENSITY_OVERRIDE in DESKTOP_DENSITY_ALLOWED_RANGE - } - private fun getFullscreenDensityDpi(): Int { return context.resources.displayMetrics.densityDpi } @@ -354,5 +350,13 @@ class DesktopTasksController( private val DESKTOP_DENSITY_OVERRIDE = SystemProperties.getInt("persist.wm.debug.desktop_mode_density", 0) private val DESKTOP_DENSITY_ALLOWED_RANGE = (100..1000) + + /** + * Check if desktop density override is enabled + */ + @JvmStatic + fun isDesktopDensityOverrideSet(): Boolean { + return DESKTOP_DENSITY_OVERRIDE in DESKTOP_DENSITY_ALLOWED_RANGE + } } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java index 72da1089c91cf..3c0ef965f4f56 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java @@ -23,6 +23,7 @@ import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.res.ColorStateList; +import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Point; @@ -46,6 +47,7 @@ import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.desktopmode.DesktopModeStatus; +import com.android.wm.shell.desktopmode.DesktopTasksController; /** * Defines visuals and behaviors of a window decoration of a caption bar and shadows. It works with @@ -95,6 +97,17 @@ public class DesktopModeWindowDecoration extends WindowDecoration mSurfaceControlViewHostFactory = surfaceControlViewHostFactory; mDisplay = mDisplayController.getDisplay(mTaskInfo.displayId); - mDecorWindowContext = mContext.createConfigurationContext(mTaskInfo.getConfiguration()); + mDecorWindowContext = mContext.createConfigurationContext( + getConfigurationWithOverrides(mTaskInfo)); + } + + /** + * Get {@link Configuration} from supplied {@link RunningTaskInfo}. + * + * Allows values to be overridden before returning the configuration. + */ + protected Configuration getConfigurationWithOverrides(RunningTaskInfo taskInfo) { + return taskInfo.getConfiguration(); } /** @@ -165,7 +175,7 @@ public abstract class WindowDecoration outResult.mRootView = rootView; rootView = null; // Clear it just in case we use it accidentally - final Configuration taskConfig = mTaskInfo.getConfiguration(); + final Configuration taskConfig = getConfigurationWithOverrides(mTaskInfo); if (oldTaskConfig.densityDpi != taskConfig.densityDpi || mDisplay == null || mDisplay.getDisplayId() != mTaskInfo.displayId) {