1 /*
2  * Copyright (C) 2013 Square, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.squareup.picasso;
17 
18 import android.content.ContentResolver;
19 import android.content.Context;
20 import android.graphics.Bitmap;
21 import android.graphics.BitmapFactory;
22 import java.io.IOException;
23 import java.io.InputStream;
24 
25 import static com.squareup.picasso.Picasso.LoadedFrom.DISK;
26 
27 class ContentStreamBitmapHunter extends BitmapHunter {
28   final Context context;
29 
ContentStreamBitmapHunter(Context context, Picasso picasso, Dispatcher dispatcher, Cache cache, Stats stats, Action action)30   ContentStreamBitmapHunter(Context context, Picasso picasso, Dispatcher dispatcher, Cache cache,
31       Stats stats, Action action) {
32     super(picasso, dispatcher, cache, stats, action);
33     this.context = context;
34   }
35 
decode(Request data)36   @Override Bitmap decode(Request data)
37       throws IOException {
38     return decodeContentStream(data);
39   }
40 
getLoadedFrom()41   @Override Picasso.LoadedFrom getLoadedFrom() {
42     return DISK;
43   }
44 
decodeContentStream(Request data)45   protected Bitmap decodeContentStream(Request data) throws IOException {
46     ContentResolver contentResolver = context.getContentResolver();
47     BitmapFactory.Options options = null;
48     if (data.hasSize()) {
49       options = new BitmapFactory.Options();
50       options.inJustDecodeBounds = true;
51       InputStream is = null;
52       try {
53         is = contentResolver.openInputStream(data.uri);
54         BitmapFactory.decodeStream(is, null, options);
55       } finally {
56         Utils.closeQuietly(is);
57       }
58       calculateInSampleSize(data.targetWidth, data.targetHeight, options);
59     }
60     InputStream is = contentResolver.openInputStream(data.uri);
61     try {
62       return BitmapFactory.decodeStream(is, null, options);
63     } finally {
64       Utils.closeQuietly(is);
65     }
66   }
67 }
68