package com.example.ipcplayer.activity;
import java.io.File;
import java.net.URL;
import com.example.ipcplayer.R;
import com.example.ipcplayer.download.DownloadConfig;
import com.example.ipcplayer.download.DownloadInfo;
import com.example.ipcplayer.download.DownloadListener;
import com.example.ipcplayer.download.DownloadRunnable;
import com.example.ipcplayer.thread.ThreadF;
import com.example.ipcplayer.utils.FileUtil;
import com.example.ipcplayer.utils.LogUtil;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.TextView;
public class DownloadActivity extends Activity implements DownloadListener{
private static String TAG = DownloadActivity.class.getSimpleName();
TextView mFileNameTv;
TextView mUrlTv;
TextView mStatusTv;
ProgressBar progressBar;
Button mPauseBtn;
Button mCancelBtn;
TextView mTotalSizeTv;
TextView mDownloadSizeTv;
DownloadRunnable mDownloadRunnable ;
String mUrl ;
String mDownloadFile ;
private long mDownloadSize;
private long mTotalSize;
private String mStatus ;
private static final int REFRESH = 0;
private static final int FINISH = 1;
private static final int ERROR = 11;
private static final int ERROR_HTTP_FORBID = 12;
private static final int ERROR_HTTP_EXCEPTION = 13;
private static final int ERROR_HTTP_UNAVAILABLE = 14;
private Thread mDownloadThread;
private DownloadInfo mDownloadInfo;
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
LogUtil.d(TAG + " handleMessage ");
if(mDownloadInfo == null){
mDownloadInfo = new DownloadInfo();
}
mDownloadInfo = (DownloadInfo) msg.obj;
mDownloadSize = mDownloadInfo.getmDownloadSize();
LogUtil.d(TAG + " mDownloadSize = " + mDownloadSize);
mTotalSize = mDownloadInfo.getmTotalSize();
LogUtil.d(TAG + " mTotalSize = " + mTotalSize);
mStatus = mDownloadInfo.getmDownloadState();
LogUtil.d(TAG + " mStatus = " + mStatus);
switch (msg.what) {
case REFRESH:
LogUtil.d(TAG + " REFRESH ");
progressBar.setProgress((int) (mDownloadSize*100 / mTotalSize));
mStatusTv.setText(" status : " +mStatus);
mTotalSizeTv.setText(mTotalSize + "");
mDownloadSizeTv.setText(mDownloadSize + "");
break;
case FINISH:
mStatusTv.setText(" status : " +mStatus);
break ;
case ERROR:
int errorCode = mDownloadInfo.getmErrorCode();
if(ERROR_HTTP_FORBID == errorCode){
mStatusTv.setText(" status: http forbided ");
}else if(ERROR_HTTP_EXCEPTION == errorCode){
mStatusTv.setText(" status: http exception ");
}else if(ERROR_HTTP_UNAVAILABLE == errorCode){
mStatusTv.setText(" stattus: network unavailable ");
}
default:
break;
}
}
};
private String mDownloadPath;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
LogUtil.d(TAG + " onCreate ");
setContentView(R.layout.download);
mFileNameTv = (TextView) findViewById(R.id.filename);
mUrlTv = (TextView) findViewById(R.id.url);
mStatusTv = (TextView) findViewById(R.id.status);
progressBar = (ProgressBar) findViewById(R.id.progressbar);
progressBar.setProgress(0);
progressBar.setMax(100);
mPauseBtn = (Button) findViewById(R.id.pausebtn);
mPauseBtn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(mDownloadRunnable.isDownloading()){
mDownloadRunnable.cancelDownload();
mPauseBtn.setText("Go");
}else {
mDownloadRunnable.resumeDownload();
ThreadF.getInstance().submit(mDownloadRunnable);
mPauseBtn.setText("Pause");
}
}
});
mCancelBtn = (Button) findViewById(R.id.cancelbtn);
mCancelBtn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mDownloadRunnable.cancelDownload();
}
});
mTotalSizeTv = (TextView) findViewById(R.id.totalsize);
mDownloadSizeTv = (TextView) findViewById(R.id.downloadsize);
mDownloadInfo = new DownloadInfo();
mUrl = DownloadConfig.sUrls[0];
mUrlTv.setText(mUrl);
LogUtil.d(TAG + " mUrl = " + mUrl);
// mDownloadFile = FileUtil.getIPCDownloadDir() + File.separator+"first.mp3";
mDownloadPath = FileUtil.getIPCDownloadDir().getAbsolutePath();
mFileNameTv.setText(mDownloadFile);
// File downloadFile = new File(mDownloadFile);
LogUtil.d(TAG + " mDownloadFile = " + mDownloadFile);
// URL url = new URL(mUrl);
mDownloadRunnable = new DownloadRunnable(this,mUrl,mDownloadPath);
mDownloadRunnable.setDownloadListener(this);
ThreadF.getInstance().submit(mDownloadRunnable);
}
@Override
public void updateProgress(DownloadInfo downloadInfo) {
// TODO Auto-generated method stub
LogUtil.d(TAG + " updateProgress ");
Message msg = new Message();
msg.what = REFRESH;
msg.obj = downloadInfo;
mHandler.sendMessageDelayed(msg, 1);
}
@Override
public void errorDownload(DownloadInfo downloadInfo) {
// TODO Auto-generated method stub
Message msg = new Message();
msg.what = ERROR;
msg.obj = downloadInfo;
mHandler.sendMessage(msg);
}
@Override
public void finishDownload(DownloadInfo downloadInfo) {
// TODO Auto-generated method stub
Message msg = new Message();
msg.what = FINISH;
msg.obj = downloadInfo;
mHandler.sendMessage(msg);
}
@Override
public void preDownload(DownloadInfo downloadInfo) {
// TODO Auto-generated method stub
}
}