in imagepipeline/src/main/java/com/facebook/imagepipeline/producers/LocalThumbnailBitmapProducer.java [46:118]
public void produceResults(
final Consumer<CloseableReference<CloseableImage>> consumer, final ProducerContext context) {
final ProducerListener2 listener = context.getProducerListener();
final ImageRequest imageRequest = context.getImageRequest();
context.putOriginExtra("local", "thumbnail_bitmap");
final CancellationSignal cancellationSignal = new CancellationSignal();
final StatefulProducerRunnable<CloseableReference<CloseableImage>> cancellableProducerRunnable =
new StatefulProducerRunnable<CloseableReference<CloseableImage>>(
consumer, listener, context, PRODUCER_NAME) {
@Override
protected void onSuccess(@Nullable CloseableReference<CloseableImage> result) {
super.onSuccess(result);
listener.onUltimateProducerReached(context, PRODUCER_NAME, result != null);
context.putOriginExtra("local");
}
@Override
protected void onFailure(Exception e) {
super.onFailure(e);
listener.onUltimateProducerReached(context, PRODUCER_NAME, false);
context.putOriginExtra("local");
}
@Override
protected @Nullable CloseableReference<CloseableImage> getResult() throws IOException {
final Bitmap thumbnailBitmap =
mContentResolver.loadThumbnail(
imageRequest.getSourceUri(),
new Size(imageRequest.getPreferredWidth(), imageRequest.getPreferredHeight()),
cancellationSignal);
if (thumbnailBitmap == null) {
return null;
}
CloseableStaticBitmap closeableStaticBitmap =
new CloseableStaticBitmap(
thumbnailBitmap,
SimpleBitmapReleaser.getInstance(),
ImmutableQualityInfo.FULL_QUALITY,
0);
context.setExtra(ProducerContext.ExtraKeys.IMAGE_FORMAT, "thumbnail");
closeableStaticBitmap.setImageExtras(context.getExtras());
return CloseableReference.<CloseableImage>of(closeableStaticBitmap);
}
@Override
protected void onCancellation() {
super.onCancellation();
cancellationSignal.cancel();
}
@Override
protected Map<String, String> getExtraMapOnSuccess(
final @Nullable CloseableReference<CloseableImage> result) {
return ImmutableMap.of(CREATED_THUMBNAIL, String.valueOf(result != null));
}
@Override
protected void disposeResult(CloseableReference<CloseableImage> result) {
CloseableReference.closeSafely(result);
}
};
context.addCallbacks(
new BaseProducerContextCallbacks() {
@Override
public void onCancellationRequested() {
cancellableProducerRunnable.cancel();
}
});
mExecutor.execute(cancellableProducerRunnable);
}