/* * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ package com.facebook.drawee.backends.volley; import android.graphics.Bitmap; import android.net.Uri; import com.facebook.datasource.AbstractDataSource; import com.facebook.datasource.DataSource; import com.facebook.drawee.controller.AbstractDraweeControllerBuilder; import com.android.volley.VolleyError; import com.android.volley.toolbox.ImageLoader; /** * {@link DataSource} that wraps Volley {@link ImageLoader}. */ public class VolleyDataSource extends AbstractDataSource<Bitmap> { private ImageLoader.ImageContainer mImageContainer; public VolleyDataSource( final ImageLoader imageLoader, final Uri imageRequest, final AbstractDraweeControllerBuilder.CacheLevel cacheLevel) { String uriString = imageRequest.toString(); int maxWidth = 0; int maxHeight = 0; if (cacheLevel != AbstractDraweeControllerBuilder.CacheLevel.FULL_FETCH) { if (!imageLoader.isCached(uriString, maxWidth, maxHeight)) { mImageContainer = null; setFailure(new NullPointerException("Image not found in bitmap-cache.")); return; } } mImageContainer = imageLoader.get( uriString, new ImageLoader.ImageListener() { @Override public void onErrorResponse(VolleyError error) { setFailure(error.getCause()); } @Override public void onResponse(final ImageLoader.ImageContainer response, boolean isImmediate) { if (response.getBitmap() != null) { setResult(response.getBitmap(), true); } } }, maxWidth, maxHeight); } @Override public boolean close() { if (mImageContainer != null) { mImageContainer.cancelRequest(); } return super.close(); } }