summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ebru Kurnaz <ebrukurnaz@google.com> 2025-02-10 15:55:40 +0000
committer Ebru Kurnaz <ebrukurnaz@google.com> 2025-02-12 06:59:14 -0800
commita1ecd7ecbf9f5890ea58609d0ea40ada00e62c78 (patch)
treecdf913dd5b900889810e122cc3d22f409f560248
parenta2dff5f2edfda3fa67dde2aa7f28e4845a3ed15a (diff)
Update base density for external displays to achieve 10.4mm touch target
size Flag: com.android.server.display.feature.flags.base_density_for_external_displays Test: atest LocalDisplayAdapterTest Bug: 392854227 Change-Id: I93615a6f4a53c6b8790acc527b6d2c90e1a4d89f
-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 {