package julianwi.javainstaller;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.Handler;
import android.widget.ProgressBar;
import android.widget.TextView;
public class Download implements Runnable {
private ProgressBar progress;
private URL url;
private Handler handler;
private String path;
private TextView tv;
private Context ctx;
public Download(ProgressBar Progress, TextView tv, URL url, Handler Handler, String destpath, Context c){
progress = Progress;
this.url = url;
handler = Handler;
path = destpath;
this.tv = tv;
ctx = c;
}
public void run() {
InputStream input = null;
OutputStream output = null;
URLConnection connection = null;
HttpURLConnection httpconnection = null;
try {
connection = url.openConnection();
connection.connect();
if(connection instanceof HttpURLConnection){
httpconnection = (HttpURLConnection) connection;
// expect HTTP 200 OK, so we don't mistakenly save error report
// instead of the file
if (httpconnection.getResponseCode() != HttpURLConnection.HTTP_OK) {
final String error = "Server returned HTTP " + httpconnection.getResponseCode() + " " + httpconnection.getResponseMessage();
handler.post(new Error(new Exception(error), ctx)/*new Runnable() {
@Override
public void run() {
new Error("HTTP Error", error);
}
}*/);
System.out.println("Server returned HTTP " + httpconnection.getResponseCode()
+ " " + httpconnection.getResponseMessage());
}
}
// this will be useful to display download percentage
// might be -1: server did not report the length
int fileLength = connection.getContentLength();
// download the file
input = connection.getInputStream();
output = new FileOutputStream(path);
final byte data[] = new byte[1024];
long total = 0;
int count;
while ((count = input.read(data, 0, 1024)) != -1) {
total += count;
final int percent = (int) (total * 100 / fileLength);
final String status = total/1024+"/"+fileLength/1024+"kb "+percent+"/100%";
handler.post(new Runnable() {
@Override
public void run() {
progress.setProgress(percent);
tv.setText(status);
}
});
output.write(data, 0, count);
}
input.close();
output.close();
//progress.dismiss();
} catch(Exception e){
e.printStackTrace();
handler.post(new Error(e, ctx));
//progress.dismiss();
/*final String error = e.getMessage();
handler.post(new Runnable() {
@Override
public void run() {
new Error("Error", error);
}
});*/
}
}
}