LimitDownloadAdapter.java 4.73 KB
package com.cnlive.downloadfile.adapter;

import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

import com.cnlive.downloadfile.R;
import com.cnlive.downloadfile.download.limit.DownLoadService;
import com.cnlive.downloadfile.download.limit.DownloadInfo;
import com.cnlive.downloadfile.download.limit.DownloadStatus;

import java.util.List;

public class LimitDownloadAdapter extends RecyclerView.Adapter<LimitDownloadAdapter.UploadHolder>  {

    private Context mContext;
    private List<DownloadInfo> mdata;
    private DelectClick delectClick;


    public DelectClick getDelectClick() {
        return delectClick;
    }

    public void setDelectClick(DelectClick delectClick) {
        this.delectClick = delectClick;
    }

    public LimitDownloadAdapter(Context context , List<DownloadInfo> mdata) {
        this.mContext = context;
        this.mdata = mdata;
    }

    /**
     * 更新下载进度
     * @param info
     */
    public void updateProgress(DownloadInfo info){
        for (int i = 0; i < mdata.size(); i++){
            if (mdata.get(i).getUrl().equals(info.getUrl())){
                mdata.set(i,info);
                notifyItemChanged(i);
                break;
            }
        }
    }

    @Override
    public UploadHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(parent.getContext(), R.layout.item_download_layout,null);
        return new UploadHolder(view);
    }

    @Override
    public void onBindViewHolder(final UploadHolder holder, final int position) {

        final DownloadInfo info = mdata.get(position);
        holder.name.setText(info.getUrl().substring(info.getUrl().length()-5,info.getUrl().length()));
        if (DownloadStatus.DOWNLOAD_WAIT.equals(info.getDownloadStatus())){
            holder.main_btn_down.setText("待下载");
        }else if (DownloadStatus.DOWNLOAD_PAUSE.equals(info.getDownloadStatus())){
            holder.main_btn_down.setText("已暂停");
        }

        if (info.getTotal() == 0){
                holder.main_progress.setProgress(0);
            }else {
                float d = info.getProgress() * holder.main_progress.getMax() / info.getTotal();
                holder.main_progress.setProgress((int) d);
                if(DownloadStatus.DOWNLOAD.equals(info.getDownloadStatus())) holder.main_btn_down.setText("下载中");
            }
        holder.main_btn_down.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(holder.main_btn_down.getText().toString().equals("下载中")){//暂停
                    Intent intent = new Intent(mContext, DownLoadService.class);
                    intent.setAction(DownLoadService.ACTION_PAUSE);
                    intent.putExtra("fileUrl", info);
                    mContext.startService(intent);
                }else if(holder.main_btn_down.getText().toString().equals("已暂停")){
                    Intent intent = new Intent(mContext, DownLoadService.class);
                    intent.setAction(DownLoadService.ACTION_WAITING);
                    intent.putExtra("fileUrl", info);
                    mContext.startService(intent);
                }else {
                    Intent intent = new Intent(mContext, DownLoadService.class);
                    intent.setAction(DownLoadService.ACTION_START);
                    intent.putExtra("fileUrl", info);
                    mContext.startService(intent);
                }
            }
        });

        holder.main_btn_cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(delectClick != null){
                    delectClick.onDelectClickListener(info,position);
                }
            }
        });
    }

    @Override
    public int getItemCount() {
        return mdata.size();
    }

    public class UploadHolder extends RecyclerView.ViewHolder{

        private ProgressBar main_progress;
        private Button main_btn_down;
        private TextView name;
        private Button main_btn_cancel;

        public UploadHolder(View itemView) {
            super(itemView);
            main_progress = itemView.findViewById(R.id.main_progress);
            main_btn_down = itemView.findViewById(R.id.main_btn_down);
            name = itemView.findViewById(R.id.name);
            main_btn_cancel = itemView.findViewById(R.id.main_btn_cancel);
        }
    }

    public interface DelectClick{
        void onDelectClickListener(DownloadInfo downloadInfo,int position);
    }
}