Fix 1px rounding error Flag: com.android.window.flags.multi_crop Bug: 372570518 Test: atest WallpaperManagerTest (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:86b7e8d0eb8cc1ab1553718d7d4179f9ea5b9424) Merged-In: Ic9b4a15aed5a49cb729b202e0a7915f0e3c40156 Change-Id: Ic9b4a15aed5a49cb729b202e0a7915f0e3c40156
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperCropper.java b/services/core/java/com/android/server/wallpaper/WallpaperCropper.java index d5bea4a..2a7f705 100644 --- a/services/core/java/com/android/server/wallpaper/WallpaperCropper.java +++ b/services/core/java/com/android/server/wallpaper/WallpaperCropper.java
@@ -746,8 +746,8 @@ final ImageDecoder.Source srcData = ImageDecoder.createSource(wallpaper.getWallpaperFile()); final int finalScale = scale; - final int rescaledBitmapWidth = (int) (0.5f + bitmapSize.x / sampleSize); - final int rescaledBitmapHeight = (int) (0.5f + bitmapSize.y / sampleSize); + final int rescaledBitmapWidth = (int) Math.ceil(bitmapSize.x / sampleSize); + final int rescaledBitmapHeight = (int) Math.ceil(bitmapSize.y / sampleSize); Bitmap cropped = ImageDecoder.decodeBitmap(srcData, (decoder, info, src) -> { if (!multiCrop()) decoder.setTargetSampleSize(finalScale); if (multiCrop()) {
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java index 4754ffb..3c001f5 100644 --- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
@@ -2315,8 +2315,8 @@ SparseArray<Rect> relativeSuggestedCrops = mWallpaperCropper.getRelativeCropHints(wallpaper); Point croppedBitmapSize = new Point( - (int) (0.5f + wallpaper.cropHint.width() / wallpaper.mSampleSize), - (int) (0.5f + wallpaper.cropHint.height() / wallpaper.mSampleSize)); + (int) Math.ceil(wallpaper.cropHint.width() / wallpaper.mSampleSize), + (int) Math.ceil(wallpaper.cropHint.height() / wallpaper.mSampleSize)); if (croppedBitmapSize.equals(0, 0)) { // There is an ImageWallpaper, but there are no crop hints and the bitmap size is // unknown (e.g. the default wallpaper). Return a special "null" value that will be