FileAdapter.java 6.32 KB
package com.cnlive.cnUploadDemo.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

import com.cnlive.cnUploadDemo.utils.DemoUtils;
import com.cnlive.cnUploadDemo.R;
import com.cnlive.cnUploadDemo.model.UploadFile;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * Created by Lynn on 2017/8/10.
 */

public class FileAdapter extends BaseAdapter {
    private List<UploadFile> mUploadFiles;
    private LayoutInflater mInflater;

    public FileAdapter(Context context, List<UploadFile> uploadFiles) {
        this.mUploadFiles = new ArrayList<>();
        if (uploadFiles != null) {
            this.mUploadFiles.addAll(uploadFiles);
        }
        this.mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return mUploadFiles.size();
    }

    @Override
    public UploadFile getItem(int i) {
        return mUploadFiles.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(final int i, View view, ViewGroup viewGroup) {
        ViewHolder viewHolder;
        if (view == null) {
            view = mInflater.inflate(R.layout.upload_list_item, viewGroup, false);
            viewHolder = new ViewHolder();
            viewHolder.fileIcon = view.findViewById(R.id.file_icon);
            viewHolder.fileNameTextView = view.findViewById(R.id.file_name);
            viewHolder.fileSummaryLayout = view.findViewById(R.id.file_summary_layout);
            viewHolder.fileSizeTextView = view.findViewById(R.id.file_size);
            viewHolder.fileModiyTextView = view.findViewById(R.id.file_last_modiy);
            viewHolder.uploadSummaryLayout = view.findViewById(R.id.progress_summary_layout);
            viewHolder.uploadProgressBar = view.findViewById(R.id.upload_progress_bar);
            viewHolder.progressTextView = view.findViewById(R.id.upload_progress_txt);
            viewHolder.uploadBtn = view.findViewById(R.id.upload_btn);
            view.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) view.getTag();
        }
        viewHolder.fileIcon.setImageDrawable(mUploadFiles.get(i).icon);
        viewHolder.fileNameTextView.setText(mUploadFiles.get(i).file.getName());

        if (!mUploadFiles.get(i).file.isDirectory()) {
            viewHolder.fileSizeTextView.setVisibility(View.VISIBLE);
            long size = mUploadFiles.get(i).file.length();
            String sizeStr = "unkown-size";

            if (size >= 1024 * 1024) {
                sizeStr = ((int) (size / 1024 / 1024) * 100) / 100 + "MB";
            } else {
                sizeStr = (mUploadFiles.get(i).file.length() / 1024) + "kb";
            }
            viewHolder.fileSizeTextView.setText(sizeStr);
            String modiyStr = DemoUtils.formatDate(mUploadFiles.get(i).file.lastModified());
            viewHolder.fileModiyTextView.setText(modiyStr);
            if (mUploadFiles.get(i).status > UploadFile.STATUS_NOT_START) {
                viewHolder.uploadSummaryLayout.setVisibility(View.VISIBLE);
                viewHolder.uploadProgressBar.setProgress(mUploadFiles.get(i).progress);
                viewHolder.fileSummaryLayout.setVisibility(View.GONE);
                viewHolder.uploadBtn.setVisibility(View.GONE);

                switch (mUploadFiles.get(i).status) {
                    case UploadFile.STATUS_STARTED:
                        viewHolder.progressTextView.setText("准备上传");
                        break;
                    case UploadFile.STATUS_INIT:
                        viewHolder.progressTextView.setText("初始化完成");
                        break;
                    case UploadFile.STATUS_UPLOADPART:
                        viewHolder.progressTextView.setText("分块上传.."
                                + mUploadFiles.get(i).progress + "%");
                        break;
                    case UploadFile.STATUS_LISTING:
                        viewHolder.progressTextView.setText("获取上传的快..");
                        break;
                    case UploadFile.STATUS_COMPLETE:
                        viewHolder.progressTextView.setText("合并完成");
                        break;
                    case UploadFile.STATUS_UPLOADING:
                        viewHolder.progressTextView.setText(mUploadFiles
                                .get(i).progress + "%");
                        break;
                    case UploadFile.STATUS_FINISH:
                        viewHolder.progressTextView.setText("完成上传");
                        break;
                    case UploadFile.STATUS_FAIL:
                        viewHolder.progressTextView.setText("上传失败");
                        break;

                    case UploadFile.STATUS_INIT_FAIL:
                        viewHolder.progressTextView.setText("上传失败");
                        break;
                    case UploadFile.STATUS_UPLOADPART_FAIL:
                        viewHolder.progressTextView.setText("分块上传失败");
                        break;
                    case UploadFile.STATUS_LISTING_FAIL:
                        viewHolder.progressTextView.setText("获取块失败");
                        break;
                    case UploadFile.STATUS_COMPLETE_FAIL:
                        viewHolder.progressTextView.setText("文件合并失败");
                        break;
                }
            } else {
                viewHolder.fileSummaryLayout.setVisibility(View.VISIBLE);
                viewHolder.uploadBtn.setVisibility(View.VISIBLE);
                viewHolder.uploadSummaryLayout.setVisibility(View.GONE);
            }
        } else {
            viewHolder.fileSummaryLayout.setVisibility(View.GONE);
            viewHolder.uploadSummaryLayout.setVisibility(View.GONE);
            viewHolder.uploadBtn.setVisibility(View.GONE);
        }

        return view;
    }

    public void fillDatas(Map<String, List<UploadFile>> dataSource, File currentDir) {
        this.mUploadFiles.clear();
        this.mUploadFiles.addAll(dataSource.get(currentDir.getPath()));
        this.notifyDataSetChanged();
    }

    public void updateCurrent() {
        this.notifyDataSetChanged();
    }
}