package ee.ajapaik.android.network; import java.io.FilterOutputStream; import java.io.IOException; import java.io.OutputStream; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntity; public class ProgressMultipartEntity extends MultipartEntity { private final Listener listener; public ProgressMultipartEntity(HttpMultipartMode mode, Listener listener) { super(mode); this.listener = listener; } @Override public void writeTo(OutputStream out) throws IOException { super.writeTo(new ProgressOutputStream(out, listener)); } public static interface Listener { public void onProgress(long progress); } private static class ProgressOutputStream extends FilterOutputStream { private Listener listener; private long progress; public ProgressOutputStream(OutputStream out, Listener listener) { super(out); this.listener = listener; progress = 0; } @Override public void write(byte[] buffer, int offset, int length) throws IOException { out.write(buffer, offset, length); progress += length; listener.onProgress(progress); } @Override public void write(int oneByte) throws IOException { out.write(oneByte); progress++; listener.onProgress(progress); } } }