diff options
| -rw-r--r-- | services/core/java/com/android/server/display/LocalDisplayAdapter.java | 14 | ||||
| -rw-r--r-- | services/tests/displayservicetests/src/com/android/server/display/LocalDisplayAdapterTest.java | 4 |
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 { |