Merge "Fix 4027057: Improve resolution of RecentApps thumbnail images." into honeycomb-mr1
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/RecentAppsPanel.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/RecentAppsPanel.java
index 737a52b..c5a7df2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/RecentAppsPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/RecentAppsPanel.java
@@ -513,9 +513,7 @@
             paint.setFilterBitmap(true);
             paint.setAlpha(255);
             final int srcWidth = thumbnail.getWidth();
-            final int height = thumbnail.getHeight();
-            final int srcHeight = srcWidth > height ? height
-                    : (height - height * srcWidth / height);
+            final int srcHeight = thumbnail.getHeight();
             canvas.drawBitmap(thumbnail,
                     new Rect(0, 0, srcWidth-1, srcHeight-1),
                     new RectF(GLOW_PADDING,
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index 8ccfbba..33e6a36 100644
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -4727,7 +4727,15 @@
         SystemProperties.set(StrictMode.VISUAL_PROPERTY, value);
     }
 
-    public Bitmap screenshotApplications(IBinder appToken, int maxWidth, int maxHeight) {
+    /**
+     * Takes a snapshot of the screen.  In landscape mode this grabs the whole screen.
+     * In portrait mode, it grabs the upper region of the screen based on the vertical dimension
+     * of the target image.
+     * 
+     * @param width the width of the target bitmap
+     * @param height the height of the target bitmap
+     */
+    public Bitmap screenshotApplications(IBinder appToken, int width, int height) {
         if (!checkCallingPermission(android.Manifest.permission.READ_FRAME_BUFFER,
                 "screenshotApplications()")) {
             throw new SecurityException("Requires READ_FRAME_BUFFER permission");
@@ -4739,7 +4747,7 @@
         final Rect frame = new Rect();
 
         float scale;
-        int sw, sh, dw, dh;
+        int dw, dh;
         int rot;
 
         synchronized(mWindowMap) {
@@ -4807,7 +4815,7 @@
 
             // Constrain frame to the screen size.
             frame.intersect(0, 0, dw, dh);
-            
+
             if (frame.isEmpty() || maxLayer == 0) {
                 return null;
             }
@@ -4818,15 +4826,7 @@
             int fh = frame.height();
 
             // First try reducing to fit in x dimension.
-            scale = maxWidth/(float)fw;
-            sw = maxWidth;
-            sh = (int)(fh*scale);
-            if (sh > maxHeight) {
-                // y dimension became too long; constrain by that.
-                scale = maxHeight/(float)fh;
-                sw = (int)(fw*scale);
-                sh = maxHeight;
-            }
+            scale = width/(float)fw;
 
             // The screen shot will contain the entire screen.
             dw = (int)(dw*scale);
@@ -4845,8 +4845,8 @@
                     + ") to layer " + maxLayer);
             return null;
         }
-        
-        Bitmap bm = Bitmap.createBitmap(sw, sh, rawss.getConfig());
+
+        Bitmap bm = Bitmap.createBitmap(width, height, rawss.getConfig());
         Matrix matrix = new Matrix();
         ScreenRotationAnimation.createRotationMatrix(rot, dw, dh, matrix);
         matrix.postTranslate(-(int)(frame.left*scale), -(int)(frame.top*scale));