/* * 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.imagepipeline.datasource; import javax.annotation.Nullable; import android.graphics.Bitmap; import com.facebook.datasource.BaseDataSubscriber; import com.facebook.datasource.DataSource; import com.facebook.datasource.DataSubscriber; import com.facebook.imagepipeline.image.CloseableBitmap; import com.facebook.imagepipeline.image.CloseableImage; import com.facebook.common.references.CloseableReference; /** * Implementation of {@link DataSubscriber} for cases where the client wants access to a bitmap. * * <p> * Sample usage: * <pre> * <code> * dataSource.subscribe( * new BaseBitmapDataSubscriber() { * {@literal @}Override * public void onNewResultImpl(@Nullable Bitmap bitmap) { * // Pass bitmap to system, which makes a copy of the bitmap. * updateStatus(bitmap); * // No need to do any cleanup. * } * * {@literal @}Override * public void onFailureImpl(DataSource dataSource) { * // No cleanup required here. * } * }); * </code> * </pre> */ public abstract class BaseBitmapDataSubscriber extends BaseDataSubscriber<CloseableReference<CloseableImage>> { @Override public void onNewResultImpl(DataSource<CloseableReference<CloseableImage>> dataSource) { if (!dataSource.isFinished()) { return; } CloseableReference<CloseableImage> closeableImageRef = dataSource.getResult(); Bitmap bitmap = null; if (closeableImageRef != null && closeableImageRef.get() instanceof CloseableBitmap) { bitmap = ((CloseableBitmap) closeableImageRef.get()).getUnderlyingBitmap(); } try { onNewResultImpl(bitmap); } finally { CloseableReference.closeSafely(closeableImageRef); } } /** * The bitmap provided to this method is only guaranteed to be around for the lifespan of the * method. * * <p>The framework will free the bitmap's memory after this method has completed. * @param bitmap */ protected abstract void onNewResultImpl(@Nullable Bitmap bitmap); }