package com.cat.adapter;
import java.util.ArrayList;
import java.util.HashMap;
import com.cat.activity.R;
import com.ta.util.TALogger;
import com.ta.util.download.DownLoadCallback;
import com.ta.util.download.DownloadManager;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class DownloadListAdapter extends BaseAdapter
{
private Context mContext;
private ArrayList<HashMap<Integer, String>> dataList;
private DownloadManager downloadManager;
private ListView downloadList;
public DownloadListAdapter(Context context, ListView listView)
{
mContext = context;
this.downloadList = listView;
dataList = new ArrayList<HashMap<Integer, String>>();
downloadManager = DownloadManager.getDownloadManager();
downloadManager.setDownLoadCallback(new DownLoadCallback()
{
@Override
public void onSuccess(String url)
{
// TODO Auto-generated method stub
Toast.makeText(mContext, "下载完成", Toast.LENGTH_LONG).show();
removeItem(url);
}
@Override
public void onLoading(String url, long totalSize, long currentSize,
long speed)
{
// TODO Auto-generated method stub
super.onLoading(url, totalSize, currentSize, speed);
long downloadPercent = currentSize * 100 / totalSize;
View taskListItem = downloadList.findViewWithTag(url);
ViewHolder viewHolder = new ViewHolder(taskListItem);
viewHolder.setData(url, speed + "kbs" + "|"
+ totalSize + "|" + currentSize,
downloadPercent + "");
TALogger.d(DownloadListAdapter.this, "speed" + speed + "kbps"
+ "downloadPercent" + downloadPercent);
}
});
}
@Override
public int getCount()
{
return dataList.size();
}
@Override
public Object getItem(int position)
{
return dataList.get(position);
}
@Override
public long getItemId(int position)
{
return position;
}
public void addItem(String url)
{
addItem(url, false);
}
public void addItem(String url, boolean isPaused)
{
HashMap<Integer, String> item = new HashMap<Integer, String>();
item.put(ViewHolder.KEY_URL, url);
dataList.add(item);
this.notifyDataSetChanged();
}
public void removeItem(String url)
{
String tmp;
for (int i = 0; i < dataList.size(); i++)
{
tmp = dataList.get(i).get(ViewHolder.KEY_URL);
if (tmp.equals(url))
{
dataList.remove(i);
this.notifyDataSetChanged();
}
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
if (convertView == null)
{
convertView = LayoutInflater.from(mContext).inflate(
R.layout.download_list_item, null);
}
HashMap<Integer, String> itemData = dataList.get(position);
String url = itemData.get(ViewHolder.KEY_URL);
convertView.setTag(url);
ViewHolder viewHolder = new ViewHolder(convertView);
viewHolder.setData(itemData);
viewHolder.continueButton.setOnClickListener(new DownloadBtnListener(
url, viewHolder));
viewHolder.pauseButton.setOnClickListener(new DownloadBtnListener(url,
viewHolder));
viewHolder.deleteButton.setOnClickListener(new DownloadBtnListener(url,
viewHolder));
return convertView;
}
private class DownloadBtnListener implements View.OnClickListener
{
private String url;
private ViewHolder mViewHolder;
public DownloadBtnListener(String url, ViewHolder viewHolder)
{
this.url = url;
this.mViewHolder = viewHolder;
}
@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.btn_continue:
downloadManager.continueHandler(url);
mViewHolder.continueButton.setVisibility(View.GONE);
mViewHolder.pauseButton.setVisibility(View.VISIBLE);
break;
case R.id.btn_pause:
downloadManager.pauseHandler(url);
mViewHolder.continueButton.setVisibility(View.VISIBLE);
mViewHolder.pauseButton.setVisibility(View.GONE);
break;
case R.id.btn_delete:
downloadManager.deleteHandler(url);
removeItem(url);
break;
}
}
}
}