summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ebru Kurnaz <ebrukurnaz@google.com> 2025-02-12 09:21:35 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2025-02-12 09:21:35 -0800
commit76c89720edff36e1d0dfc61bd0972fe04102a945 (patch)
tree0c3e54052e9af974a359ec6a6bc1a5a5002e6ace
parent5fc9a84bb779a06335169efbb6aeb72b52e85eb1 (diff)
parenta1ecd7ecbf9f5890ea58609d0ea40ada00e62c78 (diff)
Merge "Update base density for external displays to achieve 10.4mm touch target size" into main
-rw-r--r--services/core/java/com/android/server/display/LocalDisplayAdapter.java14
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/LocalDisplayAdapterTest.java4
2 files changed, 13 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
index 83ca563e0534..324f95a5974b 100644
--- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
@@ -35,6 +35,7 @@ import android.os.Looper;
import android.os.PowerManager;
import android.os.SystemProperties;
import android.os.Trace;
+import android.util.DisplayMetrics;
import android.util.DisplayUtils;
import android.util.LongSparseArray;
import android.util.Slog;
@@ -84,6 +85,10 @@ final class LocalDisplayAdapter extends DisplayAdapter {
private static final String PROPERTY_EMULATOR_CIRCULAR = "ro.boot.emulator.circular";
private static final double DEFAULT_DISPLAY_SIZE = 24.0;
+ // Touch target size 10.4mm in inches (divided by mm per inch 25.4)
+ private static final double EXTERNAL_DISPLAY_BASE_TOUCH_TARGET_SIZE_IN_INCHES = 10.4 / 25.4;
+
+ private static final double BASE_TOUCH_TARGET_SIZE_DP = 48.0;
private final LongSparseArray<LocalDisplayDevice> mDevices = new LongSparseArray<>();
@@ -530,17 +535,20 @@ final class LocalDisplayAdapter extends DisplayAdapter {
if (densityMapping == null) {
if (getFeatureFlags().isBaseDensityForExternalDisplaysEnabled()
&& !mStaticDisplayInfo.isInternal) {
- double dpi;
+ double ppi;
if (mActiveSfDisplayMode.xDpi > 0 && mActiveSfDisplayMode.yDpi > 0) {
- dpi = Math.sqrt((Math.pow(mActiveSfDisplayMode.xDpi, 2)
+ ppi = Math.sqrt((Math.pow(mActiveSfDisplayMode.xDpi, 2)
+ Math.pow(mActiveSfDisplayMode.yDpi, 2)) / 2);
} else {
// xDPI and yDPI is missing, calculate DPI from display resolution and
// default display size
- dpi = Math.sqrt(Math.pow(mInfo.width, 2) + Math.pow(mInfo.height, 2))
+ ppi = Math.sqrt(Math.pow(mInfo.width, 2) + Math.pow(mInfo.height, 2))
/ DEFAULT_DISPLAY_SIZE;
}
+ double pixels = ppi * EXTERNAL_DISPLAY_BASE_TOUCH_TARGET_SIZE_IN_INCHES;
+ double dpi =
+ pixels * DisplayMetrics.DENSITY_DEFAULT / BASE_TOUCH_TARGET_SIZE_DP;
return (int) (dpi + 0.5);
}
return (int) (mStaticDisplayInfo.density * 160 + 0.5);
diff --git a/services/tests/displayservicetests/src/com/android/server/display/LocalDisplayAdapterTest.java b/services/tests/displayservicetests/src/com/android/server/display/LocalDisplayAdapterTest.java
index b9cea0c72306..f8b4113a3c04 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/LocalDisplayAdapterTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/LocalDisplayAdapterTest.java
@@ -550,10 +550,10 @@ public class LocalDisplayAdapterTest {
assertDisplayDpi(
mListener.addedDisplays.get(0).getDisplayDeviceInfoLocked(), PORT_A, 100, 100,
- 100);
+ 136);
assertDisplayDpi(
mListener.addedDisplays.get(1).getDisplayDeviceInfoLocked(), PORT_B, 100, 100,
- 100);
+ 136);
}
private static class DisplayModeWrapper {