package com.novelbook.android; import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.os.Build; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import com.novelbook.android.Activity_base; import com.novelbook.android.R; import com.novelbook.android.adapter.BookListAdapter; import com.novelbook.android.bean.Cataloge; import com.novelbook.android.db.Chapter; import com.novelbook.android.db.DownloadTask; import com.novelbook.android.db.Novel; import com.novelbook.android.service.ServiceDownload; import com.novelbook.android.utils.FileUtils; import com.novelbook.android.utils.Fileutil; import com.novelbook.android.utils.ImageUtil; import org.litepal.LitePal; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; public class Activity_cache extends Activity_base { public static final String TAG=Activity_cache.class.getSimpleName(); @BindView(R.id.recycleView) RecyclerView mRecyclerView; @BindView(R.id.tvMsg) TextView tvMsg; private List mData; private CacheAdapter mAdapter; // private String cacheSize; @Override public int getLayoutRes() { return R.layout.activitycache; } @Override protected void initViews() { } @Override protected void setTitle() { } @Override protected void initData() { initiDownloadReceiver(); showProgressDialog(true,"正在加载..."); new Thread() { @Override public void run() { // if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { mData = LitePal.where("id >0").order("id desc").find(DownloadTask.class);//findAll(DownloadTask.class); //cacheSize = FileUtils.getCachedSize(); /* mData.sort(new Comparator(){ public int compare(DownloadTask arg0, DownloadTask arg1) { int i = arg0.getFinishedChpats()/arg0.getTotalChapts() > arg1.getFinishedChpats()/arg1.getTotalChapts() ?1:-1; return i; }});*/ // } handler.sendEmptyMessage(1); } }.start(); } @Override public void fillData() { mAdapter = new CacheAdapter(this,mData,R.layout.recycle_list_item_cache,new OnItemClickLitener() { @Override public void onItemClick(View view, int position) { Novel novel = LitePal.find(Novel.class,mData.get(position).getNovelId()); showBookDetail(novel); } @Override public void onItemLongClick(View view, int position) { final AlertDialog.Builder normalDialog = new AlertDialog.Builder(Activity_cache.this); normalDialog.setTitle("删除此下载任务并清除缓存吗"); normalDialog.setMessage("确定删除吗?"); normalDialog.setPositiveButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); normalDialog.setNegativeButton("删除", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { DownloadTask cl = mData.get(position); cl.delete(); // Chapter.deleteByTask(); //TODO:clear cache ? mAdapter.removeData(position); } }); normalDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { } }); // 显示 normalDialog.show(); // mAdapter.removeData(position); } }); if (mAdapter != null) { mAdapter.setNorecord(R.string.msgLoading); } mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); mRecyclerView.setAdapter(mAdapter ); if (mAdapter != null) { mAdapter.setNorecord(R.string.noRecord); } if( mData.size()>0){ tvMsg.setText(String.format("共有%s条下载记录",mData.size())); }else{ tvMsg.setText(R.string.noRecord); } } private IntentFilter filter; DownloadProcessReceiver receiver; void initiDownloadReceiver(){ filter = new IntentFilter("ServiceDownload.ChapterContent.finished"); filter.addCategory(Intent.CATEGORY_DEFAULT); receiver = new DownloadProcessReceiver(); } class DownloadProcessReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent){ int taskId =0; int progress=0; int status=0; // tvMsg.setVisibility(View.GONE); if( intent.hasExtra("network")){ String txt = intent.getStringExtra("network"); tvMsg.setText(txt); tvMsg.setVisibility(View.VISIBLE); return; } if( intent.hasExtra("progress")){ progress = intent.getIntExtra("progress",0); } if( intent.hasExtra("taskId")){ taskId = intent.getIntExtra("taskId",0); } if( intent.hasExtra("status")){ status = intent.getIntExtra("status",0); } Log.d(TAG, String.format("onReceive: taskId %s progress %s ",taskId,progress)); for(DownloadTask dt : mData){ if(taskId == dt.getId()){ dt.setFinishedChpats(progress); if(status==1){ dt.setStatus(1); dt.setDownSatus(DownloadTask.DownStatus.下载完成); }else if(dt.getDownSatus()!=DownloadTask.DownStatus.暂停下载) { dt.setDownSatus(DownloadTask.DownStatus.正在下载); dt.setStatus(0); } // dt = LitePal.find(DownloadTask.class,taskId); }else{ if(dt.getDownSatus()==DownloadTask.DownStatus.正在下载) { dt.setDownSatus(DownloadTask.DownStatus.排队中); } } } mAdapter.setData(mData); } } private void startDownloadService(int taskId,boolean start) { Intent serviceIntent = new Intent(this, ServiceDownload.class); serviceIntent.putExtra("taskId",taskId); serviceIntent.putExtra("start",start); startService(serviceIntent); } @Override protected void onResume() { super.onResume(); registerReceiver(receiver, filter); } @Override public void onPause() { super.onPause(); unregisterReceiver(receiver); } class CacheAdapter extends RecyclerView.Adapter { private final int EMPTY_VIEW = 1; private final int PROGRESS_VIEW = 2; private final int IMAGE_VIEW = 3; private Context context; private List mDatas = new ArrayList(); private OnItemClickLitener mOnItemClickLitener; private int listItemID; private int norecord =R.string.noRecord; public CacheAdapter(Context context, List mDatas, int listItemID, OnItemClickLitener clickLitener) { this.context = context; this.mDatas = mDatas; this.mOnItemClickLitener = clickLitener; this.listItemID = listItemID; } public CacheAdapter(Context context, OnItemClickLitener clickLitener) { this.context = context; this.mOnItemClickLitener = clickLitener; } @Override public int getItemViewType(int position) { if (mDatas.size() == 0) { return EMPTY_VIEW; } else if (mDatas.get(position) == null) { return PROGRESS_VIEW; } else { return super.getItemViewType(position); } } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if(viewType == EMPTY_VIEW){ EmptyViewHolder holder = new EmptyViewHolder (LayoutInflater.from(context).inflate(R.layout.recycle_list_empty_item, parent, false)); return holder; } CacheAdapter.MyViewHolder holder = new CacheAdapter.MyViewHolder(LayoutInflater.from( context).inflate(listItemID, parent, false)); return holder; } public void setParameters(List mDatas, int listItemID) { this.mDatas = mDatas; this.listItemID = listItemID; } public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener) { this.mOnItemClickLitener = mOnItemClickLitener; } @Override public void onBindViewHolder( RecyclerView.ViewHolder hd, int position) { if (hd instanceof EmptyViewHolder) { EmptyViewHolder holder = ( EmptyViewHolder)hd; holder.tvEmpty.setVisibility(View.VISIBLE); holder.tvEmpty.setText(norecord); return; } MyViewHolder holder = ( MyViewHolder)hd; holder.tvTitle.setText(mDatas.get(position).getNovelTitle()); holder.tvSource.setText(mDatas.get(position).getDomainName()); boolean finished = mData.get(position).getFinishedChpats() == mData.get(position).getTotalChapts(); holder.tvSize.setText( FileUtils.getCacheSizeK(mData.get(position).getNovelId())); if( mData.get(position).getTotalChapts() >0) { float progress = mData.get(position).getFinishedChpats() * 100 / mData.get(position).getTotalChapts(); holder.tvProgress.setText(String.format("%s/%s", mData.get(position).getFinishedChpats() > mData.get(position).getTotalChapts() ? mData.get(position).getTotalChapts() : mData.get(position).getFinishedChpats(), mData.get(position).getTotalChapts())); holder.barProgress.setProgress((int) progress); holder.tvStatus.setText(mData.get(position).getDownSatus() == DownloadTask.DownStatus.正在下载 ? "正在下载" : mData.get(position).getDownSatus() == DownloadTask.DownStatus.暂停下载 ? "暂停下载" : "休眠中"); holder.tvStatus.setText(mData.get(position).getStatus() == 1 || mData.get(position).getFinishedChpats() >= mData.get(position).getTotalChapts() ? "下载完成" : holder.tvStatus.getText()); holder.tvStatus.setText(mData.get(position).getDownSatus() == DownloadTask.DownStatus.排队中 ? "排队中" : holder.tvStatus.getText()); int img = R.mipmap.play; img = mData.get(position).getDownSatus() == DownloadTask.DownStatus.正在下载 ? R.mipmap.pause : R.mipmap.play; holder.imgStart.setImageResource(img); holder.imgStart.setEnabled(true); if (mData.get(position).getStatus() == 1 || mData.get(position).getFinishedChpats() >= mData.get(position).getTotalChapts()) { holder.tvStatus.setText("下载完成"); holder.imgStart.setEnabled(false); holder.imgStart.setImageResource(R.mipmap.pause); } } // holder.imgStart.setVisibility(View.GONE); holder.imgStart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int pos = holder.getLayoutPosition(); if(mData.get(position).getDownSatus() != DownloadTask.DownStatus.正在下载) { startDownloadService(mData.get(pos).getId(),true); holder.imgStart.setImageResource( R.mipmap.pause); mData.get(pos).setDownSatus(DownloadTask.DownStatus.排队中); }else{ startDownloadService(mData.get(pos).getId(),false); holder.imgStart.setImageResource( R.mipmap.play); mData.get(pos).setDownSatus(DownloadTask.DownStatus.暂停下载); } mData.get(pos).update( mData.get(pos).getId()); } }); // 如果设置了回调,则设置点击事件 if (mOnItemClickLitener != null) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int pos = holder.getLayoutPosition(); mOnItemClickLitener.onItemClick(holder.itemView, pos); } }); } holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { int pos = holder.getLayoutPosition(); mOnItemClickLitener.onItemLongClick(holder.itemView, pos); return false; } }); } @Override public int getItemCount() { return mDatas.size(); } public void addData(int position) { // mDatas.add(position, "Insert One"); // notifyItemInserted(position); } public void removeData(int position) { mDatas.remove(position); notifyItemRemoved(position); notifyDataSetChanged(); } public void setData(List data) { mData = data; notifyDataSetChanged(); } public void setNorecord(int msgLoading) { norecord = msgLoading; } public int getNorecord() { return norecord; } class EmptyViewHolder extends RecyclerView.ViewHolder { @BindView(R.id.tvLoadText) TextView tvEmpty; public EmptyViewHolder(View itemView) { super(itemView); ButterKnife.bind(this, itemView); } } class MyViewHolder extends RecyclerView.ViewHolder { @BindView(R.id.tvTitle) TextView tvTitle; @BindView(R.id.tvProgress) TextView tvProgress; @BindView(R.id.tvStatus) TextView tvStatus; @BindView(R.id.barProgress) ProgressBar barProgress; @BindView(R.id.imgStart) ImageView imgStart; @BindView(R.id.tvSource) TextView tvSource; @BindView(R.id.tvSize) TextView tvSize; public MyViewHolder(View view) { super(view); ButterKnife.bind(this, view); //tvTitle = (TextView) view.findViewById(R.id.title); // tvAuthor = (TextView) view.findViewById(R.id.author); } } } interface OnItemClickLitener { void onItemClick(View view, int position); void onItemLongClick(View itemView, int pos); } }