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