package com.koushikdutta.ion; import com.koushikdutta.async.DataEmitter; import com.koushikdutta.async.future.Future; import com.koushikdutta.async.future.FutureCallback; import com.koushikdutta.async.http.AsyncHttpRequest; import com.koushikdutta.async.http.libcore.RawHeaders; import com.koushikdutta.ion.bitmap.BitmapInfo; import java.io.InputStream; /** * Created by koush on 5/22/13. */ public interface Loader { public static class LoaderEmitter { public static final int LOADED_FROM_MEMORY = 0; public static final int LOADED_FROM_CACHE = 1; public static final int LOADED_FROM_CONDITIONAL_CACHE = 2; public static final int LOADED_FROM_NETWORK = 3; public LoaderEmitter(DataEmitter emitter, int length, int loadedFrom, RawHeaders headers, AsyncHttpRequest request) { this.length = length; this.emitter = emitter; this.loadedFrom = loadedFrom; this.headers = headers; this.request = request; } DataEmitter emitter; int length; public DataEmitter getDataEmitter() { return emitter; } public int length() { return length; } int loadedFrom; public int loadedFrom() { return loadedFrom; } RawHeaders headers; public RawHeaders getHeaders() { return headers; } AsyncHttpRequest request; public AsyncHttpRequest getRequest() { return request; } } /** * returns a Future if this loader can handle a request as a stream. * this implies that the stream is essentially non blocking... * ie file or memory based. * @param ion * @param request * @return */ public Future<InputStream> load(Ion ion, AsyncHttpRequest request); /** * returns a Future if this loader can handle a request * otherwise it returns null, and Ion continues to the next loader. * @param ion * @param request * @param callback * @return */ public Future<DataEmitter> load(Ion ion, AsyncHttpRequest request, FutureCallback<LoaderEmitter> callback); /** * returns a future if the laoder can handle the request as a bitmap * otherwise it returns null * @param ion * @param key * @param uri * @param resizeWidth * @param resizeHeight * @return */ public Future<BitmapInfo> loadBitmap(Ion ion, String key, String uri, int resizeWidth, int resizeHeight, boolean animateGif); /** * Resolve a request into another request. * @param ion * @param request * @return */ public Future<AsyncHttpRequest> resolve(Ion ion, AsyncHttpRequest request); }