package com.zhan_dui.download.alfred.defaults;
import android.os.Handler;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import com.zhan_dui.download.alfred.missions.M3U8Mission;
import com.zhan_dui.download.alfred.missions.Mission;
import com.zhan_dui.model.DownloadRecord;
import java.util.ArrayList;
/**
* Created by daimajia on 14-4-4.
*/
public abstract class MissionListenerForAdapter extends BaseAdapter implements Mission.MissionListener<M3U8Mission>{
protected ArrayList<M3U8Mission> onGoingMissions = new ArrayList<M3U8Mission>();
protected ArrayList<DownloadRecord> mCompletedMissions = new ArrayList<DownloadRecord>();
public MissionListenerForAdapter(){
new Thread(){
@Override
public void run() {
super.run();
mCompletedMissions.addAll(DownloadRecord.getAllDownloaded());
updateUI();
}
}.start();
}
@Override
public int getCount() {
return mCompletedMissions.size() + onGoingMissions.size();
}
@Override
public Object getItem(int position) {
if(position < onGoingMissions.size()){
return onGoingMissions.get(position);
}else{
return mCompletedMissions.get(position - onGoingMissions.size());
}
}
@Override
public long getItemId(int position) {
return position;
}
public abstract View getView(int position, View convertView, ViewGroup parent);
@Override
public synchronized void onStart(M3U8Mission mission) {
onGoingMissions.add(mission);
ArrayList<DownloadRecord> records = new ArrayList<DownloadRecord>();
records.addAll(DownloadRecord.getAllDownloaded());
mCompletedMissions = records;
updateUI();
}
@Override
public void onMetaDataPrepared(M3U8Mission mission) {}
@Override
public void onPercentageChange(M3U8Mission mission) {
updateUI();
}
@Override
public void onSpeedChange(M3U8Mission mission) {}
@Override
public void onError(M3U8Mission mission, Exception e) {}
@Override
public void onSuccess(M3U8Mission mission) {
updateUI();
}
@Override
public synchronized void onFinish(M3U8Mission mission) {
onGoingMissions.remove(mission);
reloadData();
}
@Override
public void onPause(M3U8Mission mission) {}
@Override
public void onResume(M3U8Mission mission) {}
@Override
public void onCancel(M3U8Mission mission) {
onGoingMissions.remove(mission);
reloadData();
}
public void updateUI(){
WindTalker.sendEmptyMessage(0);
}
public void reloadData(){
ArrayList<DownloadRecord> records = new ArrayList<DownloadRecord>();
records.addAll(DownloadRecord.getAllDownloaded());
mCompletedMissions = records;
updateUI();
}
private Handler WindTalker = new Handler(){
@Override
public void handleMessage(android.os.Message msg) {
super.handleMessage(msg);
notifyDataSetChanged();
}
};
public boolean isDownloadingRightNow(String url){
for(M3U8Mission mission : onGoingMissions){
if(mission.getUri().equals(url)){
return true;
}
}
return false;
}
}