/* * 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 javax.annotation.concurrent.ThreadSafe; import com.facebook.common.references.CloseableReference; import com.facebook.datasource.DataSource; import com.facebook.imagepipeline.producers.Producer; import com.facebook.imagepipeline.producers.SettableProducerContext; import com.facebook.imagepipeline.listener.RequestListener; /** * DataSource<CloseableReference<T>> backed by a Producer<CloseableReference<T>> * * @param <T> */ @ThreadSafe public class CloseableProducerToDataSourceAdapter<T> extends AbstractProducerToDataSourceAdapter<CloseableReference<T>> { public static <T> DataSource<CloseableReference<T>> create( Producer<CloseableReference<T>> producer, SettableProducerContext settableProducerContext, RequestListener listener) { return new CloseableProducerToDataSourceAdapter<T>( producer, settableProducerContext, listener); } private CloseableProducerToDataSourceAdapter( Producer<CloseableReference<T>> producer, SettableProducerContext settableProducerContext, RequestListener listener) { super(producer, settableProducerContext, listener); } @Override @Nullable public CloseableReference<T> getResult() { return CloseableReference.cloneOrNull(super.getResult()); } @Override protected void closeResult(CloseableReference<T> result) { CloseableReference.closeSafely(result); } @Override protected void onNewResultImpl(CloseableReference<T> result, boolean isLast) { super.onNewResultImpl(CloseableReference.cloneOrNull(result), isLast); } }