Skip to content

Commit 88aa367

Browse files
committed
Merge branch 'krzysiekbielicki-issue-616'
2 parents 547ebdb + 9805471 commit 88aa367

File tree

8 files changed

+31
-13
lines changed

8 files changed

+31
-13
lines changed

picasso/src/main/java/com/squareup/picasso/AssetRequestHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ Bitmap decodeAsset(Request data, String filePath) throws IOException {
5858
} finally {
5959
Utils.closeQuietly(is);
6060
}
61-
calculateInSampleSize(data.targetWidth, data.targetHeight, options);
61+
calculateInSampleSize(data.targetWidth, data.targetHeight, options, data);
6262
}
6363
InputStream is = assetManager.open(filePath);
6464
try {

picasso/src/main/java/com/squareup/picasso/ContactsPhotoRequestHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ private Bitmap decodeStream(InputStream stream, Request data) throws IOException
116116
} finally {
117117
Utils.closeQuietly(is);
118118
}
119-
calculateInSampleSize(data.targetWidth, data.targetHeight, options);
119+
calculateInSampleSize(data.targetWidth, data.targetHeight, options, data);
120120
}
121121
return BitmapFactory.decodeStream(stream, null, options);
122122
}

picasso/src/main/java/com/squareup/picasso/ContentStreamRequestHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ protected Bitmap decodeContentStream(Request data) throws IOException {
5151
} finally {
5252
Utils.closeQuietly(is);
5353
}
54-
calculateInSampleSize(data.targetWidth, data.targetHeight, options);
54+
calculateInSampleSize(data.targetWidth, data.targetHeight, options, data);
5555
}
5656
InputStream is = contentResolver.openInputStream(data.uri);
5757
try {

picasso/src/main/java/com/squareup/picasso/MediaStoreRequestHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class MediaStoreRequestHandler extends ContentStreamRequestHandler {
7070
options.inJustDecodeBounds = true;
7171

7272
calculateInSampleSize(data.targetWidth, data.targetHeight, picassoKind.width,
73-
picassoKind.height, options);
73+
picassoKind.height, options, data);
7474

7575
Bitmap bitmap;
7676

picasso/src/main/java/com/squareup/picasso/NetworkRequestHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,13 +107,13 @@ private Bitmap decodeStream(InputStream stream, Request data) throws IOException
107107
byte[] bytes = Utils.toByteArray(stream);
108108
if (calculateSize) {
109109
BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);
110-
calculateInSampleSize(data.targetWidth, data.targetHeight, options);
110+
calculateInSampleSize(data.targetWidth, data.targetHeight, options, data);
111111
}
112112
return BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);
113113
} else {
114114
if (calculateSize) {
115115
BitmapFactory.decodeStream(stream, null, options);
116-
calculateInSampleSize(data.targetWidth, data.targetHeight, options);
116+
calculateInSampleSize(data.targetWidth, data.targetHeight, options, data);
117117

118118
markStream.reset(mark);
119119
}

picasso/src/main/java/com/squareup/picasso/RequestHandler.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,17 +135,21 @@ static boolean requiresInSampleSize(BitmapFactory.Options options) {
135135
return options != null && options.inJustDecodeBounds;
136136
}
137137

138-
static void calculateInSampleSize(int reqWidth, int reqHeight, BitmapFactory.Options options) {
139-
calculateInSampleSize(reqWidth, reqHeight, options.outWidth, options.outHeight, options);
138+
static void calculateInSampleSize(int reqWidth, int reqHeight, BitmapFactory.Options options,
139+
Request request) {
140+
calculateInSampleSize(reqWidth, reqHeight, options.outWidth, options.outHeight, options,
141+
request);
140142
}
141143

142144
static void calculateInSampleSize(int reqWidth, int reqHeight, int width, int height,
143-
BitmapFactory.Options options) {
145+
BitmapFactory.Options options, Request request) {
144146
int sampleSize = 1;
145147
if (height > reqHeight || width > reqWidth) {
146148
final int heightRatio = (int) Math.floor((float) height / (float) reqHeight);
147149
final int widthRatio = (int) Math.floor((float) width / (float) reqWidth);
148-
sampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
150+
sampleSize = request.centerInside
151+
? Math.max(heightRatio, widthRatio)
152+
: Math.min(heightRatio, widthRatio);
149153
}
150154
options.inSampleSize = sampleSize;
151155
options.inJustDecodeBounds = false;

picasso/src/main/java/com/squareup/picasso/ResourceRequestHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ private static Bitmap decodeResource(Resources resources, int id, Request data)
4949
final BitmapFactory.Options options = createBitmapOptions(data);
5050
if (requiresInSampleSize(options)) {
5151
BitmapFactory.decodeResource(resources, id, options);
52-
calculateInSampleSize(data.targetWidth, data.targetHeight, options);
52+
calculateInSampleSize(data.targetWidth, data.targetHeight, options, data);
5353
}
5454
return BitmapFactory.decodeResource(resources, id, options);
5555
}

picasso/src/test/java/com/squareup/picasso/RequestHandlerTest.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import android.graphics.Bitmap;
1919
import android.graphics.BitmapFactory;
20-
2120
import org.junit.Test;
2221
import org.junit.runner.RunWith;
2322
import org.robolectric.RobolectricTestRunner;
@@ -55,10 +54,25 @@ public class RequestHandlerTest {
5554

5655
@Test public void calculateInSampleSizeNoResize() {
5756
final BitmapFactory.Options options = new BitmapFactory.Options();
58-
calculateInSampleSize(100, 100, 150, 150, options);
57+
Request data = new Request.Builder(URI_1).build();
58+
calculateInSampleSize(100, 100, 150, 150, options, data);
5959
assertThat(options.inSampleSize).isEqualTo(1);
6060
}
6161

62+
@Test public void calculateInSampleSizeResize() {
63+
final BitmapFactory.Options options = new BitmapFactory.Options();
64+
Request data = new Request.Builder(URI_1).build();
65+
calculateInSampleSize(100, 100, 200, 200, options, data);
66+
assertThat(options.inSampleSize).isEqualTo(2);
67+
}
68+
69+
@Test public void calculateInSampleSizeResizeCenterInside() {
70+
final BitmapFactory.Options options = new BitmapFactory.Options();
71+
Request data = new Request.Builder(URI_1).centerInside().resize(100, 100).build();
72+
calculateInSampleSize(data.targetWidth, data.targetHeight, 400, 200, options, data);
73+
assertThat(options.inSampleSize).isEqualTo(4);
74+
}
75+
6276
@Test public void nullBitmapOptionsIfNoResizing() {
6377
// No resize must return no bitmap options
6478
final Request noResize = new Request.Builder(URI_1).build();

0 commit comments

Comments
 (0)