From 2ac46f1bda969b2d042ac35ba89cda3e595d1c4a Mon Sep 17 00:00:00 2001 From: Alan Viverette Date: Thu, 4 Feb 2016 16:58:14 -0500 Subject: [PATCH] Ensure Bitmap.getDefaultDensity() matches DENSITY_DEVICE Otherwise bitmaps constructed without a target display are incorrectly scaled by a factor of (DENSITY_DEVICE / DENSITY_DEFAULT) when rendered to a Canvas whose density has been specified correctly. Bug: 26817900 Change-Id: I45edfc7c0cbdf84a267d5bedacb0548659ede301 --- core/java/android/app/ActivityThread.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 805b2034ff056..6424520df3ec4 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -4822,14 +4822,12 @@ public final class ActivityThread { } private void updateDefaultDensity() { - if (mCurDefaultDisplayDpi != Configuration.DENSITY_DPI_UNDEFINED - && mCurDefaultDisplayDpi != DisplayMetrics.DENSITY_DEVICE - && !mDensityCompatMode) { - Slog.i(TAG, "Switching default density from " - + DisplayMetrics.DENSITY_DEVICE + " to " - + mCurDefaultDisplayDpi); - DisplayMetrics.DENSITY_DEVICE = mCurDefaultDisplayDpi; - Bitmap.setDefaultDensity(DisplayMetrics.DENSITY_DEFAULT); + final int densityDpi = mCurDefaultDisplayDpi; + if (!mDensityCompatMode + && densityDpi != Configuration.DENSITY_DPI_UNDEFINED + && densityDpi != DisplayMetrics.DENSITY_DEVICE) { + DisplayMetrics.DENSITY_DEVICE = densityDpi; + Bitmap.setDefaultDensity(densityDpi); } }