diff options
author | Sam Judd <sam@bu.mp> | 2013-07-19 18:20:02 -0700 |
---|---|---|
committer | Sam Judd <sam@bu.mp> | 2013-07-19 18:48:07 -0700 |
commit | ffecc1458c51228061cfed14d7f81c7b59db3f61 (patch) | |
tree | 3e6858dc79e3ae579028f423e4785e91585f31d3 /samples | |
parent | 633966f8087dc4ef5e52ef0f559ec8090fbbc945 (diff) | |
download | glide-ffecc1458c51228061cfed14d7f81c7b59db3f61.tar.gz |
Use Glide's Volley api in flickr sample
Diffstat (limited to 'samples')
6 files changed, 28 insertions, 231 deletions
diff --git a/samples/flickr/src/com/bumptech/flickr/FlickrModelLoader.java b/samples/flickr/src/com/bumptech/flickr/FlickrModelLoader.java index d8d10953..2165b1bf 100644 --- a/samples/flickr/src/com/bumptech/flickr/FlickrModelLoader.java +++ b/samples/flickr/src/com/bumptech/flickr/FlickrModelLoader.java @@ -3,27 +3,16 @@ package com.bumptech.flickr; import com.android.volley.RequestQueue; import com.bumptech.flickr.api.Api; import com.bumptech.flickr.api.Photo; -import com.bumptech.glide.loader.stream.StreamLoader; -import com.bumptech.glide.loader.model.ModelLoader; +import com.bumptech.glide.loader.model.VolleyModelLoader; /** * An implementation of ModelStreamLoader that leverages the StreamOpener class and the ExecutorService backing the * ImageManager to download the image and resize it in memory before saving the resized version * directly to the disk cache. */ -public class FlickrModelLoader implements ModelLoader<Photo> { - private final RequestQueue requestQueue; - private StreamLoader current; - +public class FlickrModelLoader extends VolleyModelLoader<Photo> { public FlickrModelLoader(RequestQueue requestQueue) { - this.requestQueue = requestQueue; - } - - @Override - public StreamLoader getStreamOpener(Photo model, int width, int height) { - clear(); - current = new VolleyStreamLoader(requestQueue, Api.getPhotoURL(model, width, height)); - return current; + super(requestQueue); } @Override @@ -32,10 +21,7 @@ public class FlickrModelLoader implements ModelLoader<Photo> { } @Override - public void clear() { - if (current != null) { - current.cancel(); - current = null; - } + protected String getUrl(Photo model, int width, int height) { + return Api.getPhotoURL(model, width, height); } } diff --git a/samples/flickr/src/com/bumptech/flickr/FlickrPhotoGrid.java b/samples/flickr/src/com/bumptech/flickr/FlickrPhotoGrid.java index 5db19a69..f01c3f7b 100644 --- a/samples/flickr/src/com/bumptech/flickr/FlickrPhotoGrid.java +++ b/samples/flickr/src/com/bumptech/flickr/FlickrPhotoGrid.java @@ -10,7 +10,6 @@ import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import com.actionbarsherlock.app.SherlockFragment; -import com.bumptech.flickr.api.Downloader; import com.bumptech.flickr.api.Photo; import com.bumptech.glide.Glide; import com.bumptech.glide.presenter.ImagePresenter; @@ -112,7 +111,7 @@ public class FlickrPhotoGrid extends SherlockFragment implements PhotoViewer { final Animation fadeIn = AnimationUtils.loadAnimation(getActivity(), R.anim.fade_in); imagePresenter = new ImagePresenter.Builder<Photo>() .setImageView(imageView) - .setModelLoader(new FlickrModelLoader(Downloader.get(getActivity()).getQueue())) + .setModelLoader(new FlickrModelLoader(Glide.get().getRequestQueue(getActivity()))) .setImageLoader(new CenterCrop(Glide.get().getImageManager(getActivity()))) .setImageSetCallback(new ImageSetCallback() { @Override diff --git a/samples/flickr/src/com/bumptech/flickr/FlickrPhotoList.java b/samples/flickr/src/com/bumptech/flickr/FlickrPhotoList.java index 36827b87..bca42f68 100644 --- a/samples/flickr/src/com/bumptech/flickr/FlickrPhotoList.java +++ b/samples/flickr/src/com/bumptech/flickr/FlickrPhotoList.java @@ -9,7 +9,6 @@ import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.actionbarsherlock.app.SherlockFragment; -import com.bumptech.flickr.api.Downloader; import com.bumptech.flickr.api.Photo; import com.bumptech.glide.Glide; @@ -103,7 +102,7 @@ public class FlickrPhotoList extends SherlockFragment implements PhotoViewer { Glide.load(current) .into(viewHolder.imageView) - .with(new FlickrModelLoader(Downloader.get(getActivity()).getQueue())) + .with(new FlickrModelLoader(Glide.get().getRequestQueue(getActivity()))) .centerCrop() .animate(R.anim.fade_in) .begin(); diff --git a/samples/flickr/src/com/bumptech/flickr/VolleyStreamLoader.java b/samples/flickr/src/com/bumptech/flickr/VolleyStreamLoader.java deleted file mode 100644 index aa20a613..00000000 --- a/samples/flickr/src/com/bumptech/flickr/VolleyStreamLoader.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.bumptech.flickr; - -import com.android.volley.NetworkResponse; -import com.android.volley.Request; -import com.android.volley.RequestQueue; -import com.android.volley.Response; -import com.android.volley.VolleyError; -import com.bumptech.glide.loader.stream.StreamLoader; - -import java.io.ByteArrayInputStream; -import java.net.URL; - -/** - * Created with IntelliJ IDEA. - * User: sam - * Date: 7/19/13 - * Time: 8:51 AM - * To change this template use File | Settings | File Templates. - */ -public class VolleyStreamLoader implements StreamLoader { - private final RequestQueue requestQueue; - private final URL url; - private Request current = null; - - public VolleyStreamLoader(RequestQueue requestQueue, URL url) { - this.requestQueue = requestQueue; - this.url = url; - } - - @Override - public void loadStream(final StreamReadyCallback cb) { - current = requestQueue.add(new Request<ByteArrayInputStream>(Request.Method.GET, url.toString(), new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - cb.onException(error); - } - }) { - @Override - protected Response<ByteArrayInputStream> parseNetworkResponse(NetworkResponse response) { - return Response.success(new ByteArrayInputStream(response.data), getCacheEntry()); - } - - @Override - protected void deliverResponse(ByteArrayInputStream response) { - cb.onStreamReady(response); - } - }); - } - - @Override - public void cancel() { - if (current != null) { - current.cancel(); - current = null; - } - } -} diff --git a/samples/flickr/src/com/bumptech/flickr/api/Api.java b/samples/flickr/src/com/bumptech/flickr/api/Api.java index 82f64637..22ac5c97 100644 --- a/samples/flickr/src/com/bumptech/flickr/api/Api.java +++ b/samples/flickr/src/com/bumptech/flickr/api/Api.java @@ -2,22 +2,21 @@ package com.bumptech.flickr.api; import android.content.Context; import com.android.volley.Request; -import com.bumptech.flickr.R; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.StringRequest; +import com.bumptech.glide.Glide; import com.bumptech.glide.util.Log; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; -import java.io.File; -import java.net.MalformedURLException; -import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; /** * Created with IntelliJ IDEA. @@ -28,8 +27,6 @@ import java.util.Set; */ public class Api { private static Api API; - public static final String SEARCH_COMPLETED_ACTION = "search_completed"; - private static final String API_KEY = "f0e6fbb5fdf1f3842294a1d21f84e8a6"; private static final String SIGNED_API_URL = "http://api.flickr.com/services/rest/?method=%s&format=json&api_key=" + API_KEY; private static final String PHOTO_URL = "http://farm%s.staticflickr.com/%s/%s_%s_%s.jpg"; @@ -49,6 +46,8 @@ public class Api { Collections.sort(SORTED_SIZE_KEYS); } + private final RequestQueue requestQueue; + private static String getSizeKey(int width, int height) { final int largestEdge = Math.max(width, height); @@ -66,33 +65,19 @@ public class Api { public void onSearchCompleted(List<Photo> photos); } - public interface PhotoCallback { - public void onDownloadComplete(String path); - } - - private final Downloader downloader; - private Set<String> downloadedFilesNames = new HashSet<String>(); - private final String sizeKey; - public static Api get(Context applicationContext) { if (API == null) { - API = new Api(applicationContext, applicationContext.getResources().getDimensionPixelSize(R.dimen.large_photo_side)); + API = new Api(applicationContext); } return API; } - protected Api(Context applicationContext, int maxPhotoSize) { - this.downloader = Downloader.get(applicationContext); - this.sizeKey = getSizeKey(maxPhotoSize, maxPhotoSize); + protected Api(Context applicationContext) { + this.requestQueue = Glide.get().getRequestQueue(applicationContext); } - public static URL getPhotoURL(Photo photo, int width, int height) { - try { - return new URL(getPhotoUrl(photo, getSizeKey(width, height))); - } catch (MalformedURLException e) { - e.printStackTrace(); - return null; - } + public static String getPhotoURL(Photo photo, int width, int height) { + return getPhotoUrl(photo, getSizeKey(width, height)); } private static String getUrlForMethod(String method) { @@ -109,12 +94,12 @@ public class Api { public void search(String text, final SearchCallback cb) { Log.d("API: searching"); - downloader.download(getSearchUrl(text), new Downloader.StringCallback() { + requestQueue.add(new StringRequest(Request.Method.GET, getSearchUrl(text), new Response.Listener<String>() { @Override - public void onDownloadReady(String result) { + public void onResponse(String response) { try { //cut out initial flickJsonApi( - JSONObject searchResults = new JSONObject(result.substring(14, result.length()-1)); + JSONObject searchResults = new JSONObject(response.substring(14, response.length()-1)); JSONArray photos = searchResults.getJSONObject("photos").getJSONArray("photo"); List<Photo> results = new ArrayList<Photo>(photos.length()); for (int i = 0; i < photos.length(); i++) { @@ -125,25 +110,11 @@ public class Api { e.printStackTrace(); } } - }); - } - - public Request downloadPhoto(Photo photo, File cacheDir, final PhotoCallback cb) { - File out = new File(cacheDir.getPath() + File.separator + photo.id + photo.secret + sizeKey); - final String path = out.getPath(); - Request result = null; - if (downloadedFilesNames.contains(path)) { - cb.onDownloadComplete(path); - } else { - Log.d("API: missing photo, downloading"); - result = downloader.download(getPhotoUrl(photo, sizeKey), out, new Downloader.DiskCallback() { - @Override - public void onDownloadReady(String path) { - downloadedFilesNames.add(path); - cb.onDownloadComplete(path); - } - }); - } - return result; + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + error.printStackTrace(); + } + })); } } diff --git a/samples/flickr/src/com/bumptech/flickr/api/Downloader.java b/samples/flickr/src/com/bumptech/flickr/api/Downloader.java deleted file mode 100644 index 32e9309f..00000000 --- a/samples/flickr/src/com/bumptech/flickr/api/Downloader.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.bumptech.flickr.api; - -import android.content.Context; -import com.android.volley.NetworkResponse; -import com.android.volley.Request; -import com.android.volley.RequestQueue; -import com.android.volley.Response; -import com.android.volley.VolleyError; -import com.android.volley.toolbox.StringRequest; -import com.android.volley.toolbox.Volley; - -import java.io.BufferedOutputStream; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; - -/** - * Created with IntelliJ IDEA. - * User: sam - * Date: 1/6/13 - * Time: 10:36 AM - * To change this template use File | Settings | File Templates. - */ -public class Downloader { - private static Downloader DOWNLOADER; - private final RequestQueue queue; - - public static Downloader get(Context context) { - if (DOWNLOADER == null) { - DOWNLOADER = new Downloader(context); - } - return DOWNLOADER; - } - - public Downloader(Context context) { - queue = Volley.newRequestQueue(context); - } - - public RequestQueue getQueue() { - return queue; - } - - public interface StringCallback { - public void onDownloadReady(String result); - } - - public interface DiskCallback { - public void onDownloadReady(String path); - } - - public void download(String url, final StringCallback cb) { - queue.add(new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { - @Override - public void onResponse(String response) { - cb.onDownloadReady(response); - } - }, new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - error.printStackTrace(); - } - })); - } - - public Request download(String url, final File out, final DiskCallback cb) { - return queue.add(new Request<String>(Request.Method.GET, url, new Response.ErrorListener() { - @Override - public void onErrorResponse(VolleyError error) { - error.printStackTrace(); - } - }) { - @Override - protected Response<String> parseNetworkResponse(NetworkResponse response) { - OutputStream os = null; - try { - os = new BufferedOutputStream(new FileOutputStream(out)); - os.write(response.data); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } finally { - if (os != null) { - try { - os.close(); - } catch (IOException e) { } - } - } - return Response.success(out.getAbsolutePath(), getCacheEntry()); - } - - @Override - protected void deliverResponse(String response) { - cb.onDownloadReady(response); - } - }); - - } -} |