code: public DataSource<CloseableReference<CloseableImage>> fetchDecodedImage(
        ImageRequest imageRequest,
        Object callerContext,
        ImageRequest.RequestLevel lowestPermittedRequestLevelOnSubmit,
        @Nullable RequestListener requestListener) {
      try {
        Producer<CloseableReference<CloseableImage>> producerSequence =
            mProducerSequenceFactory.getDecodedImageProducerSequence(imageRequest);
        return submitFetchRequest(
            producerSequence,
            imageRequest,
            lowestPermittedRequestLevelOnSubmit,
            callerContext,
            requestListener);
      } catch (Exception exception) {
        return DataSources.immediateFailedDataSource(exception);
      }
    }
docs: Submits a request for execution and returns a DataSource representing the pending decoded
  image(s).
  
  <p>The returned DataSource must be closed once the client has finished with it.
  
  @param imageRequest the request to submit
  @param callerContext the caller context for image request
  @param lowestPermittedRequestLevelOnSubmit the lowest request level permitted for image reques
  @param requestListener additional image request listener independent of ImageRequest listeners
  @return a DataSource representing the pending decoded image(s)