package com.gh.gamecenter.adapter; import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Environment; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.gh.common.util.DisplayUtils; import com.gh.common.util.PackageUtils; import com.gh.common.util.SpeedUtils; import com.gh.gamecenter.FileReceiverActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.adapter.viewholder.KcSelectGameViewHolder; import com.gh.gamecenter.kuaichuan.FileInfo; import java.text.DecimalFormat; import java.util.List; /** * Created by khy on 2017/1/22. */ public class FileReceiverAdapter extends RecyclerView.Adapter { private Context mContext; private List mFileInfos; private long lastProgress; private OnReceiverCancelListener cancelListener; public FileReceiverAdapter(FileReceiverActivity activity, List infos) { this.mContext = activity; this.cancelListener = activity; mFileInfos = infos; } /** * 更新数据 */ public void update(){ // mFileInfos = (List) AppController.get("FileInfo", false); notifyItemRangeChanged(0, getItemCount()); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(mContext).inflate(R.layout.kc_game_select_item, parent, false); return new KcSelectGameViewHolder(view); } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { final FileInfo fileInfo = mFileInfos.get(position); if (holder instanceof KcSelectGameViewHolder) { final KcSelectGameViewHolder viewHolder = (KcSelectGameViewHolder) holder; viewHolder.gameNameAndSize.setText(fileInfo.getName()); viewHolder.downloadStatus.setVisibility(View.VISIBLE); viewHolder.sendOverIcon.setVisibility(View.GONE); viewHolder.gameProgressbar.setMax(100); viewHolder.gameProgressbar.setVisibility(View.VISIBLE); viewHolder.gameLlInfo.setVisibility(View.VISIBLE); viewHolder.gameSize.setVisibility(View.GONE); viewHolder.gameNameAndSize.setPadding(0, 0, 0, DisplayUtils.dip2px(mContext, 5)); if (fileInfo.getBitmap() != null) { viewHolder.gameThumb.setImageBitmap(fileInfo.getBitmap()); } else { viewHolder.gameThumb.setImageResource(R.drawable.ocupy); } viewHolder.downloadSpeed.setText("等待中"); viewHolder.downloadSpeed.setTextColor(mContext.getResources().getColor(R.color.content)); viewHolder.gameProgressbar.setProgress(0); viewHolder.sendOverIcon.setVisibility(View.GONE); viewHolder.downloadStatus.setText("取消"); viewHolder.downloadStatus.setTextColor(mContext.getResources().getColor(R.color.content)); viewHolder.downloadStatus.setBackgroundResource(R.drawable.kuaichuan_cancel_bg); int percent = (int)(fileInfo.getProgress() * 100 / fileInfo.getSize()); viewHolder.downloadPercentage.setText(percent + "%"); if (fileInfo.getResult() == FileInfo.FLAG_SUCCESS || fileInfo.getResult() == FileInfo.FLAG_INSTALLED) { // 传输完成... viewHolder.gameProgressbar.setProgress(100); viewHolder.downloadPercentage.setText("100%"); if (fileInfo.getResult() == FileInfo.FLAG_SUCCESS) { viewHolder.downloadStatus.setText("安装"); viewHolder.downloadStatus.setTextColor(Color.WHITE); viewHolder.downloadStatus.setBackgroundResource(R.drawable.game_item_btn_download_style); } else { viewHolder.downloadStatus.setText("已安装"); viewHolder.downloadStatus.setTextColor(mContext.getResources().getColor(R.color.theme)); viewHolder.downloadStatus.setBackgroundDrawable(new ColorDrawable(0)); } double size = (((float)fileInfo.getSize()/1024)/1024); DecimalFormat df = new DecimalFormat("0.00"); String sizeName = df.format(size) + "MB"; viewHolder.downloadSpeed.setTextColor(mContext.getResources().getColor(R.color.content)); viewHolder.downloadSpeed.setText(sizeName + "/" + sizeName); } else if (fileInfo.getResult() == FileInfo.FLAG_FAILURE || fileInfo.getResult() == FileInfo.FLAG_NO_MEMORY) { // 传输失败... double sizeMb = (((float)fileInfo.getSize()/1024)/1024); double curSizeMb = (((float)fileInfo.getProgress()/1024)/1024); DecimalFormat df = new DecimalFormat("0.00"); String sizeName = df.format(sizeMb) + "MB"; String curSizeName = df.format(curSizeMb) + "MB"; viewHolder.downloadSpeed.setTextColor(mContext.getResources().getColor(R.color.content)); viewHolder.downloadSpeed.setText(curSizeName + "/" + sizeName); viewHolder.downloadStatus.setTextColor(mContext.getResources().getColor(R.color.type_huodong)); viewHolder.downloadStatus.setBackgroundDrawable(new ColorDrawable(0)); viewHolder.gameProgressbar.setProgress(percent); // viewHolder.downloadPercentage.setText(percent + "%"); if (fileInfo.getResult() == FileInfo.FLAG_FAILURE) { viewHolder.downloadStatus.setText("传输失败"); } else { viewHolder.downloadStatus.setText("空间不足"); } } else if (fileInfo.getResult() == FileInfo.FLAG_CANCEL) { // 取消传输 double sizeMb = (((float)fileInfo.getSize()/1024)/1024); double curSizeMb = (((float)fileInfo.getProgress()/1024)/1024); DecimalFormat df = new DecimalFormat("0.00"); String sizeName = df.format(sizeMb) + "MB"; String curSizeName = df.format(curSizeMb) + "MB"; viewHolder.downloadSpeed.setTextColor(mContext.getResources().getColor(R.color.content)); viewHolder.downloadSpeed.setText(curSizeName + "/" + sizeName); viewHolder.downloadStatus.setText("已取消"); viewHolder.downloadStatus.setBackgroundDrawable(new ColorDrawable(0)); viewHolder.gameProgressbar.setProgress(percent); // viewHolder.downloadPercentage.setText(percent + "%"); } else if (fileInfo.getResult() == FileInfo.FLAG_DEFAULT){ // 传输中... viewHolder.gameProgressbar.setProgress(percent); viewHolder.downloadStatus.setText("取消"); viewHolder.downloadStatus.setTextColor(mContext.getResources().getColor(R.color.content)); viewHolder.downloadStatus.setBackgroundResource(R.drawable.kuaichuan_cancel_bg); long speed = (fileInfo.getProgress() - lastProgress) / 1024; if (speed < 0) { speed = 0; } // viewHolder.downloadPercentage.setText(percent + "%"); viewHolder.downloadSpeed.setTextColor(mContext.getResources().getColor(R.color.theme)); viewHolder.downloadSpeed.setText(String.format("%s(剩%s)", SpeedUtils.getSpeed(speed), SpeedUtils.getRemainTime(fileInfo.getSize(), fileInfo.getProgress(), speed * 1024))); lastProgress = fileInfo.getProgress(); } viewHolder.downloadStatus.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String s = viewHolder.downloadStatus.getText().toString(); if ("取消".equals(s)) { cancelListener.OnCancelPosition(position); } else if ("安装".equals(s)) { PackageUtils.launchSetup(mContext, Environment.getExternalStorageDirectory() + "/GH-KC/" + fileInfo.getName() + ".apk"); } } }); } } @Override public int getItemCount() { if (mFileInfos == null) { return 0; } return mFileInfos.size(); } public interface OnReceiverCancelListener { void OnCancelPosition(int position); } }