12d923581ee57592181845aa98231eec988fab9f6Sam Juddpackage com.bumptech.glide.volley; 2633966f8087dc4ef5e52ef0f559ec8090fbbc945Sam Judd 3633966f8087dc4ef5e52ef0f559ec8090fbbc945Sam Juddimport com.android.volley.NetworkResponse; 4633966f8087dc4ef5e52ef0f559ec8090fbbc945Sam Juddimport com.android.volley.Request; 5633966f8087dc4ef5e52ef0f559ec8090fbbc945Sam Juddimport com.android.volley.RequestQueue; 6633966f8087dc4ef5e52ef0f559ec8090fbbc945Sam Juddimport com.android.volley.Response; 798df997689b40779cc93b3678f559cf7ae32f13eSam Juddimport com.android.volley.toolbox.HttpHeaderParser; 89bebdf4ee5dcaa1569bea3985dfe08f93ed8bd38Sam Juddimport com.bumptech.glide.Priority; 9bcf4a0dae04a4ad14287eeb34069a97c96fe9bb1Sam Juddimport com.bumptech.glide.load.data.DataFetcher; 10633966f8087dc4ef5e52ef0f559ec8090fbbc945Sam Judd 11633966f8087dc4ef5e52ef0f559ec8090fbbc945Sam Juddimport java.io.ByteArrayInputStream; 120ae32dc10d668a04f9f0484d587aefe5a7210e1cSam Juddimport java.io.InputStream; 13633966f8087dc4ef5e52ef0f559ec8090fbbc945Sam Judd 14633966f8087dc4ef5e52ef0f559ec8090fbbc945Sam Judd/** 15bcf4a0dae04a4ad14287eeb34069a97c96fe9bb1Sam Judd * A DataFetcher backed by volley for fetching images via http. 16633966f8087dc4ef5e52ef0f559ec8090fbbc945Sam Judd */ 17bcf4a0dae04a4ad14287eeb34069a97c96fe9bb1Sam Juddpublic class VolleyStreamFetcher implements DataFetcher<InputStream> { 18633966f8087dc4ef5e52ef0f559ec8090fbbc945Sam Judd private final RequestQueue requestQueue; 19633966f8087dc4ef5e52ef0f559ec8090fbbc945Sam Judd private final String url; 20c9348b94306eb775d5f52273b836a839355541c5Sam Judd private VolleyRequestFuture<InputStream> requestFuture; 21633966f8087dc4ef5e52ef0f559ec8090fbbc945Sam Judd 22fdb5f853e615ab46a4f3dea3a46bfca09c75f27aSam Judd @SuppressWarnings("unused") 230ae32dc10d668a04f9f0484d587aefe5a7210e1cSam Judd public VolleyStreamFetcher(RequestQueue requestQueue, String url) { 2445d19e27d8f8cc8f24f9a68efdf9f28e5f97851eSam Judd this(requestQueue, url, null); 25d50efbfe3f305040ff0f1880238a1517ab7091c5Sam Judd } 26d50efbfe3f305040ff0f1880238a1517ab7091c5Sam Judd 2745d19e27d8f8cc8f24f9a68efdf9f28e5f97851eSam Judd public VolleyStreamFetcher(RequestQueue requestQueue, String url, VolleyRequestFuture<InputStream> requestFuture) { 28633966f8087dc4ef5e52ef0f559ec8090fbbc945Sam Judd this.requestQueue = requestQueue; 29633966f8087dc4ef5e52ef0f559ec8090fbbc945Sam Judd this.url = url; 30b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd this.requestFuture = requestFuture; 31b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd if (requestFuture == null) { 32b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd this.requestFuture = VolleyRequestFuture.newFuture(); 33b215b51a0ba86c2db14bd735cc0207cf3f1c7cd8Sam Judd } 34633966f8087dc4ef5e52ef0f559ec8090fbbc945Sam Judd } 35633966f8087dc4ef5e52ef0f559ec8090fbbc945Sam Judd 36633966f8087dc4ef5e52ef0f559ec8090fbbc945Sam Judd @Override 37bcf4a0dae04a4ad14287eeb34069a97c96fe9bb1Sam Judd public InputStream loadData(Priority priority) throws Exception { 389bebdf4ee5dcaa1569bea3985dfe08f93ed8bd38Sam Judd GlideRequest request = new GlideRequest(url, requestFuture, glideToVolleyPriority(priority)); 390ae32dc10d668a04f9f0484d587aefe5a7210e1cSam Judd 40c9348b94306eb775d5f52273b836a839355541c5Sam Judd requestFuture.setRequest(requestQueue.add(request)); 410ae32dc10d668a04f9f0484d587aefe5a7210e1cSam Judd 420ae32dc10d668a04f9f0484d587aefe5a7210e1cSam Judd return requestFuture.get(); 430ae32dc10d668a04f9f0484d587aefe5a7210e1cSam Judd } 440ae32dc10d668a04f9f0484d587aefe5a7210e1cSam Judd 450ae32dc10d668a04f9f0484d587aefe5a7210e1cSam Judd @Override 467f6d858477e6852fff5c5e49897fc2f9e7140edcSam Judd public void cleanup() { 477f6d858477e6852fff5c5e49897fc2f9e7140edcSam Judd // Do nothing. 487f6d858477e6852fff5c5e49897fc2f9e7140edcSam Judd } 497f6d858477e6852fff5c5e49897fc2f9e7140edcSam Judd 507f6d858477e6852fff5c5e49897fc2f9e7140edcSam Judd @Override 5178bad2aa32f824f9e098b5058dfa3506a7ed3f62Sam Judd public String getId() { 5278bad2aa32f824f9e098b5058dfa3506a7ed3f62Sam Judd return url; 5378bad2aa32f824f9e098b5058dfa3506a7ed3f62Sam Judd } 5478bad2aa32f824f9e098b5058dfa3506a7ed3f62Sam Judd 5578bad2aa32f824f9e098b5058dfa3506a7ed3f62Sam Judd @Override 56633966f8087dc4ef5e52ef0f559ec8090fbbc945Sam Judd public void cancel() { 57c9348b94306eb775d5f52273b836a839355541c5Sam Judd VolleyRequestFuture<InputStream> localFuture = requestFuture; 5898df997689b40779cc93b3678f559cf7ae32f13eSam Judd if (localFuture != null) { 59c9348b94306eb775d5f52273b836a839355541c5Sam Judd localFuture.cancel(true); 6098df997689b40779cc93b3678f559cf7ae32f13eSam Judd } 61633966f8087dc4ef5e52ef0f559ec8090fbbc945Sam Judd } 62d50efbfe3f305040ff0f1880238a1517ab7091c5Sam Judd 639bebdf4ee5dcaa1569bea3985dfe08f93ed8bd38Sam Judd private static Request.Priority glideToVolleyPriority(Priority priority) { 649bebdf4ee5dcaa1569bea3985dfe08f93ed8bd38Sam Judd switch (priority) { 651d11261d4ec2ab97c5eec91a3d1c14625c5b23caSam Judd case LOW: 661d11261d4ec2ab97c5eec91a3d1c14625c5b23caSam Judd return Request.Priority.LOW; 671d11261d4ec2ab97c5eec91a3d1c14625c5b23caSam Judd case HIGH: 681d11261d4ec2ab97c5eec91a3d1c14625c5b23caSam Judd return Request.Priority.HIGH; 691d11261d4ec2ab97c5eec91a3d1c14625c5b23caSam Judd case IMMEDIATE: 701d11261d4ec2ab97c5eec91a3d1c14625c5b23caSam Judd return Request.Priority.IMMEDIATE; 711d11261d4ec2ab97c5eec91a3d1c14625c5b23caSam Judd default: 721d11261d4ec2ab97c5eec91a3d1c14625c5b23caSam Judd return Request.Priority.NORMAL; 731d11261d4ec2ab97c5eec91a3d1c14625c5b23caSam Judd 741d11261d4ec2ab97c5eec91a3d1c14625c5b23caSam Judd } 751d11261d4ec2ab97c5eec91a3d1c14625c5b23caSam Judd } 761d11261d4ec2ab97c5eec91a3d1c14625c5b23caSam Judd 7798df997689b40779cc93b3678f559cf7ae32f13eSam Judd private static class GlideRequest extends Request<byte[]> { 78c9348b94306eb775d5f52273b836a839355541c5Sam Judd private final VolleyRequestFuture<InputStream> future; 791d11261d4ec2ab97c5eec91a3d1c14625c5b23caSam Judd private Priority priority; 80d50efbfe3f305040ff0f1880238a1517ab7091c5Sam Judd 811d11261d4ec2ab97c5eec91a3d1c14625c5b23caSam Judd public GlideRequest(String url, VolleyRequestFuture<InputStream> future, Priority priority) { 820ae32dc10d668a04f9f0484d587aefe5a7210e1cSam Judd super(Method.GET, url, future); 830ae32dc10d668a04f9f0484d587aefe5a7210e1cSam Judd this.future = future; 841d11261d4ec2ab97c5eec91a3d1c14625c5b23caSam Judd this.priority = priority; 851d11261d4ec2ab97c5eec91a3d1c14625c5b23caSam Judd } 861d11261d4ec2ab97c5eec91a3d1c14625c5b23caSam Judd 871d11261d4ec2ab97c5eec91a3d1c14625c5b23caSam Judd @Override 881d11261d4ec2ab97c5eec91a3d1c14625c5b23caSam Judd public Priority getPriority() { 891d11261d4ec2ab97c5eec91a3d1c14625c5b23caSam Judd return priority; 90d50efbfe3f305040ff0f1880238a1517ab7091c5Sam Judd } 91d50efbfe3f305040ff0f1880238a1517ab7091c5Sam Judd 92d50efbfe3f305040ff0f1880238a1517ab7091c5Sam Judd @Override 9398df997689b40779cc93b3678f559cf7ae32f13eSam Judd protected Response<byte[]> parseNetworkResponse(NetworkResponse response) { 9498df997689b40779cc93b3678f559cf7ae32f13eSam Judd return Response.success(response.data, HttpHeaderParser.parseCacheHeaders(response)); 95d50efbfe3f305040ff0f1880238a1517ab7091c5Sam Judd } 96d50efbfe3f305040ff0f1880238a1517ab7091c5Sam Judd 97d50efbfe3f305040ff0f1880238a1517ab7091c5Sam Judd @Override 9898df997689b40779cc93b3678f559cf7ae32f13eSam Judd protected void deliverResponse(byte[] response) { 9998df997689b40779cc93b3678f559cf7ae32f13eSam Judd future.onResponse(new ByteArrayInputStream(response)); 1000ae32dc10d668a04f9f0484d587aefe5a7210e1cSam Judd } 101d50efbfe3f305040ff0f1880238a1517ab7091c5Sam Judd } 102633966f8087dc4ef5e52ef0f559ec8090fbbc945Sam Judd} 103