Use Matrix.setRectToRect() replace RectUtils.letterBox()

Bug: 284236964
Flag: aconfig launcher.enable_add_app_widget_via_config_activity_v2 DISABLED
Test: manual
Change-Id: Ia83f3415442c2359bffb1efcfd1ee96bf17ab9ff
diff --git a/src/com/android/launcher3/RectUtils.kt b/src/com/android/launcher3/RectUtils.kt
deleted file mode 100644
index 68d2eaf..0000000
--- a/src/com/android/launcher3/RectUtils.kt
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.launcher3
-
-import android.graphics.Rect
-
-/**
- * Fit [this] into [targetRect] with letter boxing. After calling this method, [this] will be
- * modified to be letter boxed.
- *
- * @param targetRect target [Rect] that [this] should be fitted into
- */
-fun Rect.letterBox(targetRect: Rect) {
-    letterBox(targetRect, this)
-}
-
-/**
- * Fit [this] into [targetRect] with letter boxing. After calling this method, [resultRect] will be
- * modified to be letter boxed.
- *
- * @param targetRect target [Rect] that [this] should be fitted into
- * @param resultRect the letter boxed [Rect]
- */
-fun Rect.letterBox(targetRect: Rect, resultRect: Rect) {
-    val widthRatio: Float = 1f * targetRect.width() / width()
-    val heightRatio: Float = 1f * targetRect.height() / height()
-    if (widthRatio < heightRatio) {
-        val scaledHeight: Int = (widthRatio * height()).toInt()
-        val verticalPadding: Int = (targetRect.height() - scaledHeight) / 2
-        resultRect.set(
-            targetRect.left,
-            targetRect.top + verticalPadding,
-            targetRect.right,
-            targetRect.bottom - verticalPadding
-        )
-    } else {
-        val scaledWidth: Int = (heightRatio * width()).toInt()
-        val horizontalPadding: Int = (targetRect.width() - scaledWidth) / 2
-        resultRect.set(
-            targetRect.left + horizontalPadding,
-            targetRect.top,
-            targetRect.right - horizontalPadding,
-            targetRect.bottom
-        )
-    }
-}
diff --git a/src/com/android/launcher3/widget/PendingAppWidgetHostView.java b/src/com/android/launcher3/widget/PendingAppWidgetHostView.java
index 7f9a1fc..9c9b80d 100644
--- a/src/com/android/launcher3/widget/PendingAppWidgetHostView.java
+++ b/src/com/android/launcher3/widget/PendingAppWidgetHostView.java
@@ -29,9 +29,11 @@
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Color;
+import android.graphics.Matrix;
 import android.graphics.Paint;
 import android.graphics.PorterDuff;
 import android.graphics.Rect;
+import android.graphics.RectF;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
@@ -53,7 +55,6 @@
 import com.android.launcher3.Launcher;
 import com.android.launcher3.LauncherAppState;
 import com.android.launcher3.R;
-import com.android.launcher3.RectUtilsKt;
 import com.android.launcher3.icons.FastBitmapDrawable;
 import com.android.launcher3.icons.IconCache.ItemInfoUpdateReceiver;
 import com.android.launcher3.model.data.ItemInfoWithIcon;
@@ -77,9 +78,9 @@
 
     private final Rect mRect = new Rect();
 
-    private final Rect mPreviewBitmapRect = new Rect();
-    private final Rect mCanvasRect = new Rect();
-    private final Rect mLetterBoxedPreviewBitmapRect = new Rect();
+    private final Matrix mMatrix = new Matrix();
+    private final RectF mPreviewBitmapRect = new RectF();
+    private final RectF mCanvasRect = new RectF();
 
     private final LauncherWidgetHolder mWidgetHolder;
     private final LauncherAppWidgetProviderInfo mAppwidget;
@@ -458,9 +459,8 @@
             mPreviewBitmapRect.set(0, 0, mPreviewBitmap.getWidth(), mPreviewBitmap.getHeight());
             mCanvasRect.set(0, 0, getWidth(), getHeight());
 
-            RectUtilsKt.letterBox(mPreviewBitmapRect, mCanvasRect, mLetterBoxedPreviewBitmapRect);
-            canvas.drawBitmap(mPreviewBitmap, mPreviewBitmapRect, mLetterBoxedPreviewBitmapRect,
-                    mPreviewPaint);
+            mMatrix.setRectToRect(mPreviewBitmapRect, mCanvasRect, Matrix.ScaleToFit.CENTER);
+            canvas.drawBitmap(mPreviewBitmap, mMatrix, mPreviewPaint);
             return;
         }
         if (mCenterDrawable == null) {
diff --git a/tests/src/com/android/launcher3/RectUtilsTest.kt b/tests/src/com/android/launcher3/RectUtilsTest.kt
deleted file mode 100644
index f0d22eb..0000000
--- a/tests/src/com/android/launcher3/RectUtilsTest.kt
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.launcher3
-
-import android.graphics.Rect
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
-import com.google.common.truth.Truth.assertThat
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@SmallTest
-@RunWith(AndroidJUnit4::class)
-class RectUtilsTest {
-
-    private val srcRect = Rect()
-    private val destRect = Rect()
-    private val letterBoxedRect = Rect()
-
-    @Test
-    fun letterBoxSelf_toSameRect_noScale() {
-        srcRect.set(0, 0, 100, 100)
-        destRect.set(0, 0, 100, 100)
-
-        srcRect.letterBox(destRect)
-
-        assertThat(srcRect).isEqualTo(Rect(0, 0, 100, 100))
-    }
-
-    @Test
-    fun letterBox_toSameRect_noScale() {
-        srcRect.set(0, 0, 100, 100)
-        destRect.set(0, 0, 100, 100)
-
-        srcRect.letterBox(destRect, letterBoxedRect)
-
-        assertThat(letterBoxedRect).isEqualTo(Rect(0, 0, 100, 100))
-        assertThat(srcRect).isEqualTo(Rect(0, 0, 100, 100))
-    }
-
-    @Test
-    fun letterBoxSelf_toSmallHeight_scaleDownHorizontally() {
-        srcRect.set(0, 0, 2893, 2114)
-        destRect.set(0, 0, 939, 520)
-
-        srcRect.letterBox(destRect)
-
-        assertThat(srcRect).isEqualTo(Rect(114, 0, 825, 520))
-    }
-
-    @Test
-    fun letterBoxRect_toSmallHeight_scaleDownHorizontally() {
-        srcRect.set(0, 0, 2893, 2114)
-        destRect.set(0, 0, 939, 520)
-
-        srcRect.letterBox(destRect, letterBoxedRect)
-
-        assertThat(letterBoxedRect).isEqualTo(Rect(114, 0, 825, 520))
-        assertThat(srcRect).isEqualTo(Rect(0, 0, 2893, 2114))
-    }
-
-    @Test
-    fun letterBoxSelf_toSmallHeightWithOffset_scaleDownHorizontally() {
-        srcRect.set(0, 0, 2893, 2114)
-        destRect.set(10, 20, 949, 540)
-
-        srcRect.letterBox(destRect)
-
-        assertThat(srcRect).isEqualTo(Rect(124, 20, 835, 540))
-    }
-
-    @Test
-    fun letterBoxRect_toSmallHeightWithOffset_scaleDownHorizontally() {
-        srcRect.set(0, 0, 2893, 2114)
-        destRect.set(10, 20, 949, 540)
-
-        srcRect.letterBox(destRect, letterBoxedRect)
-
-        assertThat(letterBoxedRect).isEqualTo(Rect(124, 20, 835, 540))
-        assertThat(srcRect).isEqualTo(Rect(0, 0, 2893, 2114))
-    }
-
-    @Test
-    fun letterBoxSelf_toSmallWidth_scaleDownVertically() {
-        srcRect.set(0, 0, 2893, 2114)
-        destRect.set(0, 0, 520, 939)
-
-        srcRect.letterBox(destRect)
-
-        assertThat(srcRect).isEqualTo(Rect(0, 280, 520, 659))
-    }
-
-    @Test
-    fun letterBoxRect_toSmallWidth_scaleDownVertically() {
-        srcRect.set(0, 0, 2893, 2114)
-        destRect.set(0, 0, 520, 939)
-
-        srcRect.letterBox(destRect, letterBoxedRect)
-
-        assertThat(letterBoxedRect).isEqualTo(Rect(0, 280, 520, 659))
-        assertThat(srcRect).isEqualTo(Rect(0, 0, 2893, 2114))
-    }
-
-    @Test
-    fun letterBoxSelf_toSmallWidthWithOffset_scaleDownVertically() {
-        srcRect.set(0, 0, 2893, 2114)
-        destRect.set(40, 60, 560, 999)
-
-        srcRect.letterBox(destRect)
-
-        assertThat(srcRect).isEqualTo(Rect(40, 340, 560, 719))
-    }
-
-    @Test
-    fun letterBoxRect_toSmallWidthWithOffset_scaleDownVertically() {
-        srcRect.set(0, 0, 2893, 2114)
-        destRect.set(40, 60, 560, 999)
-
-        srcRect.letterBox(destRect, letterBoxedRect)
-
-        assertThat(letterBoxedRect).isEqualTo(Rect(40, 340, 560, 719))
-        assertThat(srcRect).isEqualTo(Rect(0, 0, 2893, 2114))
-    }
-}