docs: public DataSource<CloseableReference<PooledByteBuffer>> fetchEncodedImage(
        ImageRequest imageRequest, Object callerContext, @Nullable RequestListener requestListener) {
      Preconditions.checkNotNull(imageRequest.getSourceUri());
      try {
        Producer<CloseableReference<PooledByteBuffer>> producerSequence =
            mProducerSequenceFactory.getEncodedImageProducerSequence(imageRequest);
        // The resize options are used to determine whether images are going to be downsampled during
        // decode or not. For the case where the image has to be downsampled and it's a local image it
        // will be kept as a FileInputStream until decoding instead of reading it in memory. Since
        // this method returns an encoded image, it should always be read into memory. Therefore, the
        // resize options are ignored to avoid treating the image as if it was to be downsampled
        // during decode.
        if (imageRequest.getResizeOptions() != null) {
          imageRequest = ImageRequestBuilder.fromRequest(imageRequest)
              .setResizeOptions(null)
              .build();
        }
        return submitFetchRequest(
            producerSequence,
            imageRequest,
            ImageRequest.RequestLevel.FULL_FETCH,
            callerContext,
            requestListener);
      } catch (Exception exception) {
        return DataSources.immediateFailedDataSource(exception);
      }
    }