package io.github.mayubao.kuaichuan.ui.adapter; import android.content.Context; import android.graphics.BitmapFactory; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import io.github.mayubao.kuaichuan.AppContext; import io.github.mayubao.kuaichuan.Constant; import io.github.mayubao.kuaichuan.R; import io.github.mayubao.kuaichuan.core.entity.FileInfo; import io.github.mayubao.kuaichuan.core.utils.ApkUtils; import io.github.mayubao.kuaichuan.core.utils.FileUtils; /** * 文件接收列表 Adapter * * Created by mayubao on 2016/11/28. * Contact me 345269374@qq.com */ public class FileReceiverAdapter extends BaseAdapter { private Context mContext; private Map<String, FileInfo> mDataHashMap; private String[] mKeys; List<Map.Entry<String, FileInfo>> fileInfoMapList; public FileReceiverAdapter(Context mContext) { this.mContext = mContext; mDataHashMap = AppContext.getAppContext().getReceiverFileInfoMap(); fileInfoMapList = new ArrayList<Map.Entry<String, FileInfo>>(mDataHashMap.entrySet()); //排序 Collections.sort(fileInfoMapList, Constant.DEFAULT_COMPARATOR); } /** * 更新数据 */ public void update(){ mDataHashMap = AppContext.getAppContext().getReceiverFileInfoMap(); fileInfoMapList = new ArrayList<Map.Entry<String, FileInfo>>(mDataHashMap.entrySet()); Collections.sort(fileInfoMapList, Constant.DEFAULT_COMPARATOR); notifyDataSetChanged(); } @Override public int getCount() { return fileInfoMapList.size(); } @Override public Object getItem(int position) { return fileInfoMapList.get(position).getValue(); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { final FileInfo fileInfo = (FileInfo) getItem(position); FileSenderHolder viewHolder = null; if(convertView == null){ convertView = View.inflate(mContext, R.layout.item_transfer, null); viewHolder = new FileSenderHolder(); viewHolder.iv_shortcut = (ImageView) convertView.findViewById(R.id.iv_shortcut); viewHolder.tv_name = (TextView) convertView.findViewById(R.id.tv_name); viewHolder.tv_progress = (TextView) convertView.findViewById(R.id.tv_progress); viewHolder.pb_file = (ProgressBar) convertView.findViewById(R.id.pb_file); viewHolder.btn_operation = (Button) convertView.findViewById(R.id.btn_operation); viewHolder.iv_tick = (ImageView) convertView.findViewById(R.id.iv_tick); convertView.setTag(viewHolder); }else{ viewHolder = (FileSenderHolder) convertView.getTag(); } if(fileInfo != null){ //初始化 viewHolder.pb_file.setVisibility(View.VISIBLE); viewHolder.iv_tick.setVisibility(View.GONE); if(FileUtils.isApkFile(fileInfo.getFilePath()) || FileUtils.isMp4File(fileInfo.getFilePath())){ //Apk格式 或者MP4格式需要 缩略图 if(fileInfo.getBitmap() != null){ viewHolder.iv_shortcut.setImageBitmap(fileInfo.getBitmap()); }else{ if(FileUtils.isApkFile(fileInfo.getFilePath())){ viewHolder.iv_shortcut.setImageBitmap(BitmapFactory.decodeResource(mContext.getResources(), R.mipmap.icon_apk)); }else if(FileUtils.isMp4File(fileInfo.getFilePath())){ viewHolder.iv_shortcut.setImageBitmap(BitmapFactory.decodeResource(mContext.getResources(), R.mipmap.icon_mp4)); } } }else if(FileUtils.isJpgFile(fileInfo.getFilePath())){//图片格式 // Glide.with(mContext) // .load(fileInfo.getFilePath()) // .centerCrop() // .placeholder(R.mipmap.icon_jpg) // .crossFade() // .into(viewHolder.iv_shortcut); //文件接收时候的图片的缩略图是在FileInfo里面的 if(fileInfo.getBitmap() != null){ viewHolder.iv_shortcut.setImageBitmap(fileInfo.getBitmap()); }else{ viewHolder.iv_shortcut.setImageBitmap(BitmapFactory.decodeResource(mContext.getResources(), R.mipmap.icon_jpg)); } }else if(FileUtils.isMp3File(fileInfo.getFilePath())){//音乐格式 viewHolder.iv_shortcut.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.icon_mp3)); } viewHolder.tv_name.setText(FileUtils.getFileName(fileInfo.getFilePath())); if(fileInfo.getResult() == FileInfo.FLAG_SUCCESS){ //文件传输成功 long total = fileInfo.getSize(); viewHolder.pb_file.setVisibility(View.GONE); viewHolder.tv_progress.setText(FileUtils.getFileSize(total) + "/" + FileUtils.getFileSize(total)); viewHolder.btn_operation.setVisibility(View.VISIBLE); viewHolder.iv_tick.setVisibility(View.INVISIBLE); if(FileUtils.isApkFile(FileUtils.getLocalFilePath(fileInfo.getFilePath()))){ //Apk格式 if(!ApkUtils.isInstalled(mContext, FileUtils.getLocalFilePath(fileInfo.getFilePath()))){ //未装过改应用 需要安装 viewHolder.btn_operation.setText(mContext.getResources().getString(R.string.str_install)); viewHolder.btn_operation.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ApkUtils.install(mContext, FileUtils.getLocalFilePath(fileInfo.getFilePath())); } }); }else{//装过改应用 viewHolder.btn_operation.setText(mContext.getResources().getString(R.string.str_run)); } viewHolder.iv_tick.setVisibility(View.VISIBLE); }else if(FileUtils.isJpgFile(fileInfo.getFilePath()) ||//图片格式 FileUtils.isMp3File(fileInfo.getFilePath()) || //音乐格式 FileUtils.isMp4File(fileInfo.getFilePath())){//视屏音乐格式 //视屏格式 viewHolder.btn_operation.setText(mContext.getResources().getString(R.string.str_open)); viewHolder.btn_operation.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FileUtils.openFile(mContext, FileUtils.getLocalFilePath(fileInfo.getFilePath())); } }); } }else if(fileInfo.getResult() == FileInfo.FLAG_FAILURE) { //文件传输失败 viewHolder.pb_file.setVisibility(View.GONE); }else{//文件传输中 long progress = fileInfo.getProcceed(); long total = fileInfo.getSize(); viewHolder.tv_progress.setText(FileUtils.getFileSize(progress) + "/" + FileUtils.getFileSize(total)); int percent = (int)(progress * 100 / total); viewHolder.pb_file.setMax(100); viewHolder.pb_file.setProgress(percent); //TODO 传输过程中取消的问题 viewHolder.btn_operation.setText(mContext.getString(R.string.str_cancel)); viewHolder.btn_operation.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //可否通过广播来实现? } }); } } return convertView; } static class FileSenderHolder { ImageView iv_shortcut; TextView tv_name; TextView tv_progress; ProgressBar pb_file; Button btn_operation; ImageView iv_tick; } }