package org.awesomeapp.messenger.tasks; import android.content.Context; import android.util.Log; import com.bumptech.glide.Glide; import com.bumptech.glide.GlideBuilder; import com.bumptech.glide.Priority; import com.bumptech.glide.load.DecodeFormat; import com.bumptech.glide.load.data.DataFetcher; import com.bumptech.glide.load.model.GenericLoaderFactory; import com.bumptech.glide.load.model.ModelLoader; import com.bumptech.glide.load.model.ModelLoaderFactory; import com.bumptech.glide.load.model.stream.StreamModelLoader; import com.bumptech.glide.module.GlideModule; import com.bumptech.glide.request.target.ViewTarget; import java.io.IOException; import java.io.InputStream; import java.util.Date; import im.zom.messenger.R; import info.guardianproject.iocipher.File; import info.guardianproject.iocipher.FileInputStream; /** * Created by n8fr8 on 12/17/15. */ public class GlideVFSLoader implements StreamModelLoader<info.guardianproject.iocipher.FileInputStream> { private final Context context; public GlideVFSLoader(Context context) { this.context = context.getApplicationContext(); } @Override public DataFetcher<InputStream> getResourceFetcher(final info.guardianproject.iocipher.FileInputStream model, int width, int height) { return new VFSDataFetcher(context, model); } public static class Factory implements ModelLoaderFactory<info.guardianproject.iocipher.FileInputStream, InputStream> { @Override public ModelLoader<FileInputStream, InputStream> build(Context context, GenericLoaderFactory factories) { return new GlideVFSLoader(context); } @Override public void teardown() { } } } class VFSDataFetcher implements DataFetcher<InputStream> { private final Context context; private InputStream vfsFileStream; public VFSDataFetcher(Context context, info.guardianproject.iocipher.FileInputStream vfsFileStream) { // explode model fields so that they can't be modified (finals in OBBFile are optional) this.context = context; this.vfsFileStream = vfsFileStream; } @Override public InputStream loadData(Priority priority) throws Exception { return vfsFileStream; } @Override public void cleanup() { try { if (vfsFileStream != null) { vfsFileStream.close(); } } catch (IOException e) { Log.w("VFSDataFetcher", "Cannot clean up after stream", e); } } @Override public String getId() { return context.getPackageName() + "@" + new Date().getTime() + Math.random(); } @Override public void cancel() { // do nothing try { if (vfsFileStream != null) { vfsFileStream.close(); } } catch (IOException e) { Log.w("VFSDataFetcher", "Cannot clean up after stream", e); } } }