1 package com.bumptech.glide.load.model; 2 3 import android.os.ParcelFileDescriptor; 4 5 import com.bumptech.glide.load.Encoder; 6 7 import java.io.InputStream; 8 import java.io.OutputStream; 9 10 /** 11 * A source encoder that writes a {@link com.bumptech.glide.load.model.ImageVideoWrapper} to disk by preferentially 12 * writing data from the wrapper's {@link java.io.InputStream} and falling back to the wrapper's 13 * {@link android.os.ParcelFileDescriptor} if the {@link java.io.InputStream} isn't available. 14 */ 15 public class ImageVideoWrapperEncoder implements Encoder<ImageVideoWrapper> { 16 private final Encoder<InputStream> streamEncoder; 17 private final Encoder<ParcelFileDescriptor> fileDescriptorEncoder; 18 private String id; 19 20 public ImageVideoWrapperEncoder(Encoder<InputStream> streamEncoder, 21 Encoder<ParcelFileDescriptor> fileDescriptorEncoder) { 22 this.streamEncoder = streamEncoder; 23 this.fileDescriptorEncoder = fileDescriptorEncoder; 24 } 25 26 @Override 27 public boolean encode(ImageVideoWrapper data, OutputStream os) { 28 if (data.getStream() != null) { 29 return streamEncoder.encode(data.getStream(), os); 30 } else { 31 return fileDescriptorEncoder.encode(data.getFileDescriptor(), os); 32 } 33 } 34 35 @Override 36 public String getId() { 37 if (id == null) { 38 id = streamEncoder.getId() + fileDescriptorEncoder.getId(); 39 } 40 return id; 41 } 42 } 43