From 5b56c5fb355c90713cb6ace02a9af36c5145ce1c Mon Sep 17 00:00:00 2001 From: Evan Laird <evanlaird@google.com> Date: Wed, 22 May 2024 20:55:08 -0400 Subject: [PATCH] Add pixel scaling to ScreenDecorationUtils SreenDecorationUtils was querying rounded_corner_radius directly using static methods defined in RoundedCorners.java, and was not taking into consideration the potential for physical pixel scaling. This CL replicates the logic that exists in RoundedCorners.java and ScreenDecorations.java to implement similar scaling in the static getter. Test: manual Flag: NONE Bug: 335357341 (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:1bd662453b41f64bcafdb125aae73782bdc40a4c) Merged-In: I3ce403510b3ca35970685fc97a4fbcedaeb79151 Change-Id: I3ce403510b3ca35970685fc97a4fbcedaeb79151 --- .../policy/ScreenDecorationsUtils.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/core/java/com/android/internal/policy/ScreenDecorationsUtils.java b/core/java/com/android/internal/policy/ScreenDecorationsUtils.java index ec6283922807..067e5e8813a7 100644 --- a/core/java/com/android/internal/policy/ScreenDecorationsUtils.java +++ b/core/java/com/android/internal/policy/ScreenDecorationsUtils.java @@ -18,6 +18,9 @@ package com.android.internal.policy; import android.content.Context; import android.content.res.Resources; +import android.util.DisplayUtils; +import android.view.Display; +import android.view.DisplayInfo; import android.view.RoundedCorners; import com.android.internal.R; @@ -57,11 +60,31 @@ public class ScreenDecorationsUtils { bottomRadius = defaultRadius; } + // If the physical pixels are scaled, apply it here + float scale = getPhysicalPixelDisplaySizeRatio(context); + if (scale != 1f) { + topRadius = topRadius * scale; + bottomRadius = bottomRadius * scale; + } + // Always use the smallest radius to make sure the rounded corners will // completely cover the display. return Math.min(topRadius, bottomRadius); } + static float getPhysicalPixelDisplaySizeRatio(Context context) { + DisplayInfo displayInfo = new DisplayInfo(); + context.getDisplay().getDisplayInfo(displayInfo); + final Display.Mode maxDisplayMode = + DisplayUtils.getMaximumResolutionDisplayMode(displayInfo.supportedModes); + if (maxDisplayMode == null) { + return 1f; + } + return DisplayUtils.getPhysicalPixelDisplaySizeRatio( + maxDisplayMode.getPhysicalWidth(), maxDisplayMode.getPhysicalHeight(), + displayInfo.getNaturalWidth(), displayInfo.getNaturalHeight()); + } + /** * If live rounded corners are supported on windows. */ -- GitLab