Fixing issue where widget previews were being scaled up.

Change-Id: I94eaa1beb0579c8045a3b4c6ff72f7b9622a62ff
diff --git a/res/layout-sw720dp/apps_customize_widget.xml b/res/layout-sw720dp/apps_customize_widget.xml
deleted file mode 100644
index e707ef7..0000000
--- a/res/layout-sw720dp/apps_customize_widget.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 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.
--->
-<com.android.launcher2.PagedViewWidget
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher"
-
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:layout_weight="1"
-    android:orientation="vertical"
-
-    launcher:blurColor="#FF6B8CF0"
-    launcher:outlineColor="#FF8CD2FF"
-
-    android:background="@drawable/focusable_view_bg"
-    android:focusable="true">
-
-    <LinearLayout
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginBottom="4dp"
-        android:orientation="vertical">
-        <!-- The name of the widget. -->
-        <TextView xmlns:android="http://schemas.android.com/apk/res/android"
-            android:id="@+id/widget_name"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_weight="0"
-            android:gravity="left|bottom"
-            android:singleLine="true"
-            android:ellipsize="marquee"
-            android:fadingEdge="horizontal"
-
-            android:textColor="#FFBBBBBB"
-            android:textSize="14sp"
-            android:shadowColor="#FF000000"
-            android:shadowDx="0.0"
-            android:shadowDy="1.0"
-            android:shadowRadius="1.0" />
-
-        <!-- The original dimensions of the widget (can't be the same text as above due to different
-             style. -->
-        <TextView
-            android:id="@+id/widget_dims"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_weight="0"
-            android:gravity="left|bottom"
-
-            android:textColor="#FF999999"
-            android:textSize="12sp"
-            android:shadowColor="#99000000"
-            android:shadowDx="0.0"
-            android:shadowDy="1.0"
-            android:shadowRadius="1.0" />
-    </LinearLayout>
-
-    <!-- The icon of the widget. -->
-    <ImageView
-        android:id="@+id/widget_preview"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_weight="1"
-        android:adjustViewBounds="true"
-        android:scaleType="fitStart" />
-</com.android.launcher2.PagedViewWidget>
diff --git a/res/layout/apps_customize_widget.xml b/res/layout/apps_customize_widget.xml
index 2c11c1d..704401a 100644
--- a/res/layout/apps_customize_widget.xml
+++ b/res/layout/apps_customize_widget.xml
@@ -68,6 +68,7 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_weight="1"
-        android:padding="8dp"
+        android:paddingTop="@dimen/app_widget_preview_padding_top"
+        android:paddingLeft="@dimen/app_widget_preview_padding_left"
         android:scaleType="matrix" />
 </com.android.launcher2.PagedViewWidget>
diff --git a/res/values-sw720dp/dimens.xml b/res/values-sw720dp/dimens.xml
new file mode 100644
index 0000000..0373295
--- /dev/null
+++ b/res/values-sw720dp/dimens.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 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.
+-->
+
+<resources>
+    <dimen name="app_widget_preview_padding_left">0dp</dimen>
+    <dimen name="app_widget_preview_padding_top">10dp</dimen>
+</resources>
\ No newline at end of file
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 124cf16..9ba77a9 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -108,6 +108,8 @@
     <dimen name="app_widget_padding_right">16dp</dimen>
     <dimen name="app_widget_padding_top">16dp</dimen>
     <dimen name="app_widget_padding_bottom">16dp</dimen>
+    <dimen name="app_widget_preview_padding_left">8dp</dimen>
+    <dimen name="app_widget_preview_padding_top">8dp</dimen>
 
 <!-- Folders -->
     <!-- The size of the image which sits behind the preview of the folder contents -->
diff --git a/src/com/android/launcher2/AppsCustomizePagedView.java b/src/com/android/launcher2/AppsCustomizePagedView.java
index 5a54c78..4d8a9cf 100644
--- a/src/com/android/launcher2/AppsCustomizePagedView.java
+++ b/src/com/android/launcher2/AppsCustomizePagedView.java
@@ -949,18 +949,22 @@
                 Log.w(LOG_TAG, "Can't load icon drawable 0x" + Integer.toHexString(info.icon)
                         + " for provider: " + info.provider);
             } else {
-                // Scale down the preview to something that is closer to the cellWidth/Height
-                int imageWidth = drawable.getIntrinsicWidth();
-                int imageHeight = drawable.getIntrinsicHeight();
-                int bitmapWidth = imageWidth;
-                int bitmapHeight = imageHeight;
-                if (imageWidth > imageHeight) {
-                    bitmapWidth = cellWidth;
-                    bitmapHeight = (int) (imageHeight * ((float) bitmapWidth / imageWidth));
+                // Map the target width/height to the cell dimensions
+                int targetWidth = mWidgetSpacingLayout.estimateCellWidth(cellHSpan);
+                int targetHeight = mWidgetSpacingLayout.estimateCellHeight(cellVSpan);
+                int targetCellWidth;
+                int targetCellHeight;
+                if (targetWidth >= targetHeight) {
+                    targetCellWidth = Math.min(targetWidth, cellWidth);
+                    targetCellHeight = (int) (cellHeight * ((float) targetCellWidth / cellWidth));
                 } else {
-                    bitmapHeight = cellHeight;
-                    bitmapWidth = (int) (imageWidth * ((float) bitmapHeight / imageHeight));
+                    targetCellHeight = Math.min(targetHeight, cellHeight);
+                    targetCellWidth = (int) (cellWidth * ((float) targetCellHeight / cellHeight));
                 }
+                // Map the preview to the target cell dimensions
+                int bitmapWidth = Math.min(targetCellWidth, drawable.getIntrinsicWidth());
+                int bitmapHeight = (int) (drawable.getIntrinsicHeight() *
+                        ((float) bitmapWidth / drawable.getIntrinsicWidth()));
 
                 preview = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Config.ARGB_8888);
                 renderDrawableToBitmap(drawable, preview, 0, 0, bitmapWidth, bitmapHeight);
@@ -989,7 +993,7 @@
                 }
             } else {
                 // Otherwise, ensure that we are properly sized within the cellWidth/Height
-                if (targetWidth > targetHeight) {
+                if (targetWidth >= targetHeight) {
                     bitmapWidth = Math.min(targetWidth, cellWidth);
                     bitmapHeight = (int) (targetHeight * ((float) bitmapWidth / targetWidth));
                     iconScale = Math.min((float) bitmapHeight / (mAppIconSize + 2 * minOffset), 1f);