From 3047bb1114c3235276d2b6661b6b8123ca716e90 Mon Sep 17 00:00:00 2001 From: Valentin Iftime Date: Fri, 28 Dec 2018 17:02:19 +0100 Subject: [PATCH] Crop wallpaper image to preserve screen aspect ratio Bug: 121119842 Test: see bug description Change-Id: Ic7161864e738ab50ce068d5b9e89e4fca62c1bfa --- .../server/wallpaper/WallpaperManagerService.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java index f008770301457..0524584ee36cb 100644 --- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java @@ -89,6 +89,7 @@ import android.util.SparseArray; import android.util.SparseBooleanArray; import android.util.Xml; import android.view.Display; +import android.view.DisplayInfo; import android.view.IWindowManager; import com.android.internal.R; @@ -539,6 +540,20 @@ public class WallpaperManagerService extends IWallpaperManager.Stub // scale if the crop height winds up not matching the recommended metrics needScale = (wpData.mHeight != cropHint.height()); + //make sure screen aspect ratio is preserved if width is scaled under screen size + if (needScale) { + final DisplayInfo displayInfo = new DisplayInfo(); + mDisplayManager.getDisplay(DEFAULT_DISPLAY).getDisplayInfo(displayInfo); + final float scaleByHeight = (float) wpData.mHeight / (float) cropHint.height(); + final int newWidth = (int) (cropHint.width() * scaleByHeight); + if (newWidth < displayInfo.logicalWidth) { + final float screenAspectRatio = + (float) displayInfo.logicalHeight / (float) displayInfo.logicalWidth; + cropHint.bottom = (int) (cropHint.width() * screenAspectRatio); + needCrop = true; + } + } + if (DEBUG) { Slog.v(TAG, "crop: w=" + cropHint.width() + " h=" + cropHint.height()); Slog.v(TAG, "dims: w=" + wpData.mWidth + " h=" + wpData.mHeight);