712 lines
34 KiB
Java
712 lines
34 KiB
Java
package com.gh.gamecenter.download;
|
|
|
|
import android.content.Context;
|
|
import android.content.pm.ApplicationInfo;
|
|
import android.content.pm.PackageInfo;
|
|
import android.graphics.Bitmap;
|
|
import android.net.Uri;
|
|
import android.os.Message;
|
|
import android.support.v4.util.ArrayMap;
|
|
import android.support.v7.widget.RecyclerView;
|
|
import android.text.TextUtils;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.widget.LinearLayout;
|
|
import android.widget.TextView;
|
|
import android.widget.Toast;
|
|
|
|
import com.gh.common.constant.Constants;
|
|
import com.gh.common.util.BitmapUtils;
|
|
import com.gh.common.util.DataUtils;
|
|
import com.gh.common.util.DialogUtils;
|
|
import com.gh.common.util.DisplayUtils;
|
|
import com.gh.common.util.FileUtils;
|
|
import com.gh.common.util.ImageUtils;
|
|
import com.gh.common.util.NetworkUtils;
|
|
import com.gh.common.util.PackageUtils;
|
|
import com.gh.common.util.PlatformUtils;
|
|
import com.gh.common.util.SpeedUtils;
|
|
import com.gh.common.view.CardLinearLayout;
|
|
import com.gh.common.view.CardRelativeLayout;
|
|
import com.gh.download.DownloadEntity;
|
|
import com.gh.download.DownloadManager;
|
|
import com.gh.download.DownloadStatus;
|
|
import com.gh.gamecenter.R;
|
|
import com.gh.gamecenter.adapter.viewholder.DownloadHeadViewHolder;
|
|
import com.gh.gamecenter.adapter.viewholder.GameDownloadViewHolder;
|
|
import com.gh.gamecenter.eventbus.EBDownloadChanged;
|
|
import com.gh.gamecenter.manager.PackageManager;
|
|
|
|
import org.json.JSONException;
|
|
import org.json.JSONObject;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.Comparator;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
import de.greenrobot.event.EventBus;
|
|
|
|
/**
|
|
* Created by LGT on 2016/8/15.
|
|
*
|
|
*/
|
|
class GameDownloadFragmentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
|
|
|
private Context context;
|
|
|
|
private LinearLayout downloadmanager_tv_none;
|
|
|
|
private List<DownloadEntity> downloadingList;
|
|
private List<DownloadEntity> doneList;
|
|
|
|
private ArrayMap<String, Integer> locationMap;
|
|
private ArrayMap<String, String> statusMap;
|
|
private ArrayMap<String, String> urlMap;
|
|
private ArrayList<String> deleteList;
|
|
|
|
private String url;
|
|
|
|
private int cardMargin;
|
|
|
|
GameDownloadFragmentAdapter(Context context, LinearLayout textView, String url) {
|
|
|
|
this.context = context;
|
|
this.url = url;
|
|
|
|
downloadmanager_tv_none = textView;
|
|
|
|
locationMap = new ArrayMap<>();
|
|
statusMap = new ArrayMap<>();
|
|
urlMap = new ArrayMap<>();
|
|
deleteList = new ArrayList<>();
|
|
|
|
downloadingList = new ArrayList<>();
|
|
doneList = new ArrayList<>();
|
|
|
|
cardMargin = (int) context.getResources().getDimension(R.dimen.cardview_margin);
|
|
}
|
|
|
|
@Override
|
|
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
|
if (viewType == 0) {
|
|
View view = LayoutInflater.from(parent.getContext()).inflate(
|
|
R.layout.downloadmanager_item_head, parent, false);
|
|
return new DownloadHeadViewHolder(view);
|
|
} else {
|
|
View view = LayoutInflater.from(parent.getContext()).inflate(
|
|
R.layout.fm_downloadmanager_item, parent, false);
|
|
return new GameDownloadViewHolder(view);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
|
|
if (holder instanceof GameDownloadViewHolder) {
|
|
final GameDownloadViewHolder viewHolder = (GameDownloadViewHolder) holder;
|
|
|
|
final DownloadEntity downloadEntity;
|
|
if (doneList.size() != 0 && position > 0 && position <= doneList.size()) {
|
|
downloadEntity = doneList.get(position - 1);
|
|
|
|
// // 第一个
|
|
// if (position == 1) {
|
|
// ((CardLinearLayout) holder.itemView).setmTop(DisplayUtils.dip2px(context, 8));
|
|
// } else {
|
|
// ((CardLinearLayout) holder.itemView).setmTop(0);
|
|
// }
|
|
|
|
// 最后一个
|
|
if (position == doneList.size() && downloadingList.size() != 0) {
|
|
((CardLinearLayout) holder.itemView).setBottom(false);
|
|
((CardLinearLayout) holder.itemView).setmBottom(0);
|
|
} else {
|
|
((CardLinearLayout) holder.itemView).setBottom(true);
|
|
((CardLinearLayout) holder.itemView).setmBottom(cardMargin);
|
|
}
|
|
} else if (doneList.isEmpty()) {
|
|
downloadEntity = downloadingList.get(position - 1);
|
|
// // 第一个
|
|
// if (position == 1) {
|
|
// ((CardLinearLayout) holder.itemView).setmTop(DisplayUtils.dip2px(context, 8));
|
|
// } else {
|
|
// ((CardLinearLayout) holder.itemView).setmTop(0);
|
|
// }
|
|
|
|
// 最后一个
|
|
if (position == downloadingList.size()) {
|
|
((CardLinearLayout) holder.itemView).setBottom(true);
|
|
} else {
|
|
((CardLinearLayout) holder.itemView).setBottom(false);
|
|
}
|
|
((CardLinearLayout) holder.itemView).setmBottom(cardMargin);
|
|
} else {
|
|
downloadEntity = downloadingList.get(position - doneList.size() - 2);
|
|
|
|
// // 第一个
|
|
// if (position - doneList.size() - 2 == 0) {
|
|
// ((CardLinearLayout) holder.itemView).setmTop(DisplayUtils.dip2px(context, 8));
|
|
// } else {
|
|
// ((CardLinearLayout) holder.itemView).setmTop(0);
|
|
// }
|
|
|
|
// 最后一个
|
|
if (position - doneList.size() - 1 == downloadingList.size()) {
|
|
((CardLinearLayout) holder.itemView).setBottom(true);
|
|
} else {
|
|
((CardLinearLayout) holder.itemView).setBottom(false);
|
|
}
|
|
((CardLinearLayout) holder.itemView).setmBottom(cardMargin);
|
|
}
|
|
|
|
String icon = downloadEntity.getIcon();
|
|
if (!TextUtils.isEmpty(icon) && icon.contains("KuaiChuanIcon")) { // 来自快传的apk
|
|
try {
|
|
JSONObject jsonObject = new JSONObject(icon);
|
|
String apkPath = jsonObject.getString("KuaiChuanIcon");
|
|
android.content.pm.PackageManager pm = context.getPackageManager();
|
|
PackageInfo info = pm.getPackageArchiveInfo(apkPath,
|
|
android.content.pm.PackageManager.GET_ACTIVITIES);
|
|
if (info != null) {
|
|
ApplicationInfo appInfo = info.applicationInfo;
|
|
appInfo.sourceDir = apkPath;
|
|
appInfo.publicSourceDir = apkPath;
|
|
Bitmap bitmap = BitmapUtils.drawableToBitmap(appInfo.loadIcon(pm));
|
|
viewHolder.dm_item_iv_icon.setImageBitmap(bitmap);
|
|
}
|
|
} catch (JSONException e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
} else if (!TextUtils.isEmpty(icon)) {
|
|
// viewHolder.dm_item_iv_icon.setImageURI(icon);
|
|
ImageUtils.display(viewHolder.dm_item_iv_icon, icon);
|
|
} else {
|
|
viewHolder.dm_item_iv_icon.setImageURI(Uri.parse("res:///" + R.drawable.logo));
|
|
}
|
|
|
|
if (downloadEntity.getName().contains("光环助手")
|
|
|| !downloadEntity.isPlugin()) {
|
|
viewHolder.dm_item_tv_title.setText(downloadEntity.getName());
|
|
} else {
|
|
String platform = downloadEntity.getPlatform();
|
|
platform = PlatformUtils.getInstance(context).getPlatformName(platform);
|
|
if (platform == null) {
|
|
viewHolder.dm_item_tv_title.setText(downloadEntity.getName());
|
|
} else {
|
|
viewHolder.dm_item_tv_title.setText(downloadEntity.getName() + " - " + platform);
|
|
}
|
|
}
|
|
|
|
DownloadStatus status = downloadEntity.getStatus();
|
|
if (status.equals(DownloadStatus.done)) {
|
|
LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(
|
|
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
|
|
viewHolder.dm_item_tv_downloads.setLayoutParams(lparams);
|
|
viewHolder.dm_item_tv_downloads.setTextColor(0xFF9A9A9A);
|
|
viewHolder.dm_item_tv_downloads.setText("下载完成");
|
|
viewHolder.dm_item_iv_delete.setVisibility(View.VISIBLE);
|
|
viewHolder.dm_item_tv_startorpause.setBackgroundResource(R.drawable.game_item_btn_download_style);
|
|
if (downloadEntity.isPluggable()
|
|
&& PackageManager.isInstalled(downloadEntity.getPackageName())) {
|
|
viewHolder.dm_item_tv_startorpause.setText("安装");
|
|
viewHolder.dm_item_tv_startorpause.setBackgroundResource(R.drawable.game_item_btn_plugin_style);
|
|
} else {
|
|
viewHolder.dm_item_tv_startorpause.setText("安装");
|
|
viewHolder.dm_item_tv_startorpause.setBackgroundResource(R.drawable.game_item_btn_download_style);
|
|
}
|
|
viewHolder.dm_item_tv_speed.setText(R.string.hundred_percent);
|
|
} else if (status.equals(DownloadStatus.downloading)) {
|
|
if (!"pause".equals(statusMap.get(downloadEntity.getUrl()))) {
|
|
LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(
|
|
0, LinearLayout.LayoutParams.WRAP_CONTENT);
|
|
lparams.weight = 4;
|
|
viewHolder.dm_item_tv_downloads.setLayoutParams(lparams);
|
|
viewHolder.dm_item_tv_downloads.setTextColor(context.getResources().getColor(R.color.theme));
|
|
viewHolder.dm_item_tv_downloads.setText(String.format("%s(剩%s)",
|
|
SpeedUtils.getSpeed(downloadEntity.getSpeed()),
|
|
SpeedUtils.getRemainTime(downloadEntity.getSize(), downloadEntity.getProgress(), downloadEntity.getSpeed() * 1024)));
|
|
viewHolder.dm_item_iv_delete.setVisibility(View.GONE);
|
|
viewHolder.dm_item_tv_startorpause.setBackgroundResource(R.drawable.game_item_btn_pause_style);
|
|
viewHolder.dm_item_tv_startorpause.setText("暂停");
|
|
viewHolder.dm_item_tv_speed.setText(downloadEntity.getPercent() + "%");
|
|
}
|
|
} else if (status.equals(DownloadStatus.waiting)) {
|
|
LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(
|
|
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
|
|
viewHolder.dm_item_tv_downloads.setLayoutParams(lparams);
|
|
viewHolder.dm_item_tv_downloads.setTextColor(0xFF9A9A9A);
|
|
viewHolder.dm_item_tv_downloads.setText("等待中");
|
|
viewHolder.dm_item_iv_delete.setVisibility(View.VISIBLE);
|
|
viewHolder.dm_item_tv_startorpause.setBackgroundResource(R.drawable.game_item_btn_pause_style);
|
|
viewHolder.dm_item_tv_startorpause.setText("等待");
|
|
viewHolder.dm_item_tv_speed.setText(downloadEntity.getPercent() + "%");
|
|
} else if (status.equals(DownloadStatus.pause)
|
|
|| status.equals(DownloadStatus.timeout)
|
|
|| status.equals(DownloadStatus.neterror)) {
|
|
LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(
|
|
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
|
|
viewHolder.dm_item_tv_downloads.setLayoutParams(lparams);
|
|
viewHolder.dm_item_tv_downloads.setTextColor(0xFF9A9A9A);
|
|
viewHolder.dm_item_tv_downloads.setText("已暂停");
|
|
viewHolder.dm_item_iv_delete.setVisibility(View.VISIBLE);
|
|
viewHolder.dm_item_tv_startorpause.setBackgroundResource(R.drawable.game_item_btn_download_style);
|
|
viewHolder.dm_item_tv_startorpause.setText("继续");
|
|
viewHolder.dm_item_tv_speed.setText(downloadEntity.getPercent() + "%");
|
|
}
|
|
|
|
viewHolder.dm_item_progressbar.setProgress((int) (downloadEntity.getPercent() * 10));
|
|
|
|
viewHolder.dm_item_tv_startorpause.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
String str = ((TextView)v).getText().toString();
|
|
final String url = downloadEntity.getUrl();
|
|
DownloadManager.getInstance(context).put(url, System.currentTimeMillis());
|
|
if ("继续".equals(str) || "下载".equals(str)) {
|
|
if (NetworkUtils.isWifiConnected(context)) {
|
|
LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(
|
|
0, LinearLayout.LayoutParams.WRAP_CONTENT);
|
|
lparams.weight = 4;
|
|
viewHolder.dm_item_tv_downloads.setLayoutParams(lparams);
|
|
viewHolder.dm_item_tv_downloads.setTextColor(context.getResources().getColor(R.color.theme));
|
|
viewHolder.dm_item_tv_downloads.setText(String.format("%s(剩%s)",
|
|
SpeedUtils.getSpeed(downloadEntity.getSpeed()),
|
|
SpeedUtils.getRemainTime(downloadEntity.getSize(),
|
|
downloadEntity.getProgress(), downloadEntity.getSpeed() * 1024)));
|
|
viewHolder.dm_item_iv_delete.setVisibility(View.GONE);
|
|
|
|
viewHolder.dm_item_tv_startorpause.setBackgroundResource(R.drawable.game_item_btn_pause_style);
|
|
viewHolder.dm_item_tv_startorpause.setText("暂停");
|
|
|
|
statusMap.put(url, "downloading");
|
|
notifyItemChanged(doneList.isEmpty() ? 0 : 1 + doneList.size());
|
|
|
|
Message msg = Message.obtain();
|
|
msg.what = Constants.CONTINUE_DOWNLOAD_TASK;
|
|
msg.obj = url;
|
|
DownloadManager.getInstance(context).sendMessageDelayed(msg, 1000);
|
|
} else {
|
|
DialogUtils.showDownloadDialog(context, new DialogUtils.ConfiremListener() {
|
|
@Override
|
|
public void onConfirem() {
|
|
LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(
|
|
0, LinearLayout.LayoutParams.WRAP_CONTENT);
|
|
lparams.weight = 4;
|
|
viewHolder.dm_item_tv_downloads.setLayoutParams(lparams);
|
|
viewHolder.dm_item_tv_downloads.setTextColor(context.getResources().getColor(R.color.theme));
|
|
viewHolder.dm_item_tv_downloads.setText(String.format("%s(剩%s)",
|
|
SpeedUtils.getSpeed(downloadEntity.getSpeed()),
|
|
SpeedUtils.getRemainTime(downloadEntity.getSize(),
|
|
downloadEntity.getProgress(), downloadEntity.getSpeed() * 1024)));
|
|
viewHolder.dm_item_iv_delete.setVisibility(View.GONE);
|
|
|
|
viewHolder.dm_item_tv_startorpause.setBackgroundResource(R.drawable.game_item_btn_pause_style);
|
|
viewHolder.dm_item_tv_startorpause.setText("暂停");
|
|
|
|
statusMap.put(url, "downloading");
|
|
notifyItemChanged(doneList.isEmpty() ? 0 : 1 + doneList.size());
|
|
|
|
Message msg = Message.obtain();
|
|
msg.what = Constants.CONTINUE_DOWNLOAD_TASK;
|
|
msg.obj = url;
|
|
DownloadManager.getInstance(context).sendMessageDelayed(msg, 1000);
|
|
}
|
|
});
|
|
}
|
|
} else if ("安装".equals(str)) {
|
|
final String path = downloadEntity.getPath();
|
|
if (downloadEntity.isPluggable()
|
|
&& PackageManager.isInstalled(downloadEntity.getPackageName())) {
|
|
showPluginDialog(downloadEntity.getPath());
|
|
} else {
|
|
if (FileUtils.isEmptyFile(path)) {
|
|
Toast.makeText(context, "解析包出错(可能被误删了),请重新下载", Toast.LENGTH_SHORT).show();
|
|
removeDownload(downloadEntity);
|
|
} else {
|
|
if (downloadEntity.getName().contains("光环助手")) {
|
|
context.startActivity(PackageUtils.getInstallIntent(context, path));
|
|
} else {
|
|
PackageUtils.launchSetup(context, path);
|
|
}
|
|
}
|
|
}
|
|
} else if ("暂停".equals(str)) {
|
|
viewHolder.dm_item_tv_startorpause.setBackgroundResource(R.drawable.game_item_btn_download_style);
|
|
viewHolder.dm_item_tv_startorpause.setText("继续");
|
|
LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(
|
|
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
|
|
viewHolder.dm_item_tv_downloads.setLayoutParams(lparams);
|
|
viewHolder.dm_item_tv_downloads.setTextColor(0xFF9A9A9A);
|
|
viewHolder.dm_item_tv_downloads.setText("已暂停");
|
|
viewHolder.dm_item_iv_delete.setVisibility(View.VISIBLE);
|
|
statusMap.put(url, "pause");
|
|
notifyItemChanged(doneList.isEmpty() ? 0 : 1 + doneList.size());
|
|
Message msg = Message.obtain();
|
|
msg.what = Constants.PAUSE_DOWNLOAD_TASK;
|
|
msg.obj = url;
|
|
DownloadManager.getInstance(context).sendMessageDelayed(msg, 1000);
|
|
} else if ("等待".equals(str)) {
|
|
Toast.makeText(context, "最多只能同时启动3个下载任务", Toast.LENGTH_SHORT).show();
|
|
} else if ("启动".equals(str)) {
|
|
Map<String, Object> kv = new HashMap<>();
|
|
kv.put("版本", downloadEntity.getPlatform());
|
|
DataUtils.onEvent(context, "游戏启动", downloadEntity.getName(), kv);
|
|
|
|
PackageUtils.launchApplicationByPackageName(context, downloadEntity.getPackageName());
|
|
}
|
|
}
|
|
});
|
|
|
|
viewHolder.dm_item_tv_downloads.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
if (viewHolder.dm_item_iv_delete.getVisibility() == View.VISIBLE) {
|
|
showDeleteDialog(downloadEntity, viewHolder.getPosition());
|
|
}
|
|
}
|
|
});
|
|
|
|
viewHolder.dm_item_iv_delete.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
if (viewHolder.dm_item_iv_delete.getVisibility() == View.VISIBLE) {
|
|
showDeleteDialog(downloadEntity, viewHolder.getPosition());
|
|
}
|
|
}
|
|
});
|
|
|
|
if (downloadEntity.getUrl().equals(url)) {
|
|
viewHolder.itemView.setBackgroundColor(context.getResources().getColor(R.color.select));
|
|
} else {
|
|
viewHolder.itemView.setBackgroundResource(R.drawable.reuse_listview_item_style);
|
|
}
|
|
viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
|
|
@Override
|
|
public boolean onLongClick(View v) {
|
|
if (viewHolder.dm_item_iv_delete.getVisibility() == View.VISIBLE) {
|
|
showDeleteDialog(downloadEntity, viewHolder.getPosition());
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
});
|
|
|
|
} else if (holder instanceof DownloadHeadViewHolder) {
|
|
final DownloadHeadViewHolder viewHolder = (DownloadHeadViewHolder) holder;
|
|
if (position == 0 && doneList.size() != 0) {
|
|
CardRelativeLayout cardRelativeLayout = (CardRelativeLayout) viewHolder.itemView;
|
|
cardRelativeLayout.setmBottom(DisplayUtils.dip2px(context, 8));
|
|
viewHolder.dm_item_head_tv_task.setText("已完成");
|
|
viewHolder.dm_item_head_tv_allstart.setVisibility(View.GONE);
|
|
} else {
|
|
CardRelativeLayout cardRelativeLayout = (CardRelativeLayout) viewHolder.itemView;
|
|
if (doneList.isEmpty()) {
|
|
cardRelativeLayout.setmTop(0);
|
|
} else {
|
|
cardRelativeLayout.setmTop(DisplayUtils.dip2px(context, 8));
|
|
}
|
|
cardRelativeLayout.setmBottom(DisplayUtils.dip2px(context, 8));
|
|
viewHolder.dm_item_head_tv_task.setText("下载中");
|
|
viewHolder.dm_item_head_tv_allstart.setVisibility(View.VISIBLE);
|
|
|
|
int dlNumber = 0;
|
|
int wtNumber = 0;
|
|
for (DownloadEntity downloadEntity : downloadingList) {
|
|
if (DownloadStatus.downloading.equals(downloadEntity.getStatus())) {
|
|
dlNumber++;
|
|
} else if (DownloadStatus.waiting.equals(downloadEntity.getStatus())) {
|
|
wtNumber++;
|
|
}
|
|
}
|
|
if ((dlNumber + wtNumber) == downloadingList.size()) {
|
|
viewHolder.dm_item_head_tv_allstart.setText("全部暂停");
|
|
viewHolder.dm_item_head_tv_allstart.setTextColor(context.getResources().getColor(R.color.btn_gray));
|
|
} else {
|
|
viewHolder.dm_item_head_tv_allstart.setText("全部开始");
|
|
viewHolder.dm_item_head_tv_allstart.setTextColor(context.getResources().getColor(R.color.theme));
|
|
}
|
|
|
|
viewHolder.dm_item_head_tv_allstart.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
String str = ((TextView)v).getText().toString();
|
|
if ("全部开始".equals(str)) {
|
|
if (NetworkUtils.isWifiConnected(context)) {
|
|
for (DownloadEntity downloadEntity : downloadingList) {
|
|
DownloadManager.getInstance(context).put(downloadEntity.getUrl(),
|
|
System.currentTimeMillis());
|
|
Message msg = Message.obtain();
|
|
msg.what = Constants.CONTINUE_DOWNLOAD_TASK;
|
|
msg.obj = downloadEntity.getUrl();
|
|
DownloadManager.getInstance(context).sendMessageDelayed(msg, 1000);
|
|
statusMap.put(downloadEntity.getUrl(), "downloading");
|
|
}
|
|
viewHolder.dm_item_head_tv_allstart.setText("全部暂停");
|
|
viewHolder.dm_item_head_tv_allstart.setTextColor(context.getResources().getColor(R.color.btn_gray));
|
|
} else {
|
|
DialogUtils.showDownloadDialog(context, new DialogUtils.ConfiremListener() {
|
|
@Override
|
|
public void onConfirem() {
|
|
for (DownloadEntity downloadEntity : downloadingList) {
|
|
DownloadManager.getInstance(context).put(downloadEntity.getUrl(),
|
|
System.currentTimeMillis());
|
|
Message msg = Message.obtain();
|
|
msg.what = Constants.CONTINUE_DOWNLOAD_TASK;
|
|
msg.obj = downloadEntity.getUrl();
|
|
DownloadManager.getInstance(context).sendMessageDelayed(msg, 1000);
|
|
statusMap.put(downloadEntity.getUrl(), "downloading");
|
|
}
|
|
viewHolder.dm_item_head_tv_allstart.setText("全部暂停");
|
|
viewHolder.dm_item_head_tv_allstart.setTextColor(context.getResources().getColor(R.color.btn_gray));
|
|
}
|
|
});
|
|
}
|
|
} else {
|
|
for (DownloadEntity downloadEntity : downloadingList) {
|
|
DownloadManager.getInstance(context).put(downloadEntity.getUrl(),
|
|
System.currentTimeMillis());
|
|
Message msg = Message.obtain();
|
|
msg.what = Constants.PAUSE_DOWNLOAD_TASK;
|
|
msg.obj = downloadEntity.getUrl();
|
|
DownloadManager.getInstance(context).sendMessageDelayed(msg, 1000);
|
|
}
|
|
viewHolder.dm_item_head_tv_allstart.setText("全部开始");
|
|
viewHolder.dm_item_head_tv_allstart.setTextColor(context.getResources().getColor(R.color.theme));
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public int getItemCount() {
|
|
if (doneList.isEmpty() && downloadingList.isEmpty()) {
|
|
return 0;
|
|
}
|
|
if (doneList.isEmpty()) {
|
|
return 1 + downloadingList.size();
|
|
}
|
|
if (downloadingList.isEmpty()) {
|
|
return 1 + doneList.size();
|
|
}
|
|
return 1 + doneList.size() + 1 + downloadingList.size();
|
|
}
|
|
|
|
@Override
|
|
public int getItemViewType(int position) {
|
|
if (position == 0 || (doneList.size() > 0 && position == 1 + doneList.size())) {
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
// 显示插件化
|
|
void showPluginDialog(final String path) {
|
|
DialogUtils.showPluginDialog(context, new DialogUtils.ConfiremListener() {
|
|
@Override
|
|
public void onConfirem() {
|
|
for (DownloadEntity downloadEntity : DownloadManager.getInstance(context).getAll()) {
|
|
if (downloadEntity.isPluggable()
|
|
&& downloadEntity.getPath().equals(path)) {
|
|
Map<String, Object> kv6 = new HashMap<>();
|
|
kv6.put("操作", "点击插件化安装完成");
|
|
DataUtils.onEvent(context, "插件化", downloadEntity.getName(), kv6);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (FileUtils.isEmptyFile(path)) {
|
|
Toast.makeText(context, "解析包出错(可能被误删了),请重新下载", Toast.LENGTH_SHORT).show();
|
|
} else {
|
|
context.startActivity(PackageUtils.getUninstallIntent(context, path));
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
// 显示删除提示框
|
|
private void showDeleteDialog(final DownloadEntity entry, final int position) {
|
|
String msg;
|
|
if (doneList.size() != 0 && position <= doneList.size()) {
|
|
msg = "游戏还没安装哦,确定删除?";
|
|
} else {
|
|
msg = "游戏还没下载完,确定删除?";
|
|
}
|
|
DialogUtils.showWarningDialog(context, "删除下载", msg, new DialogUtils.ConfiremListener() {
|
|
@Override
|
|
public void onConfirem() {
|
|
removeDownload(entry);
|
|
}
|
|
});
|
|
}
|
|
|
|
private void removeDownload(DownloadEntity entry) {
|
|
Integer location = locationMap.get(entry.getUrl());
|
|
if (location == null) {
|
|
return;
|
|
}
|
|
boolean isDone = false;
|
|
for (DownloadEntity downloadEntity : doneList) {
|
|
if (entry.getUrl().equals(downloadEntity.getUrl())) {
|
|
isDone = true;
|
|
break;
|
|
}
|
|
}
|
|
if (isDone) {
|
|
if (downloadingList.isEmpty() && doneList.size() == 1) {
|
|
doneList.remove(location.intValue());
|
|
locationMap.clear();
|
|
notifyDataSetChanged();
|
|
EventBus.getDefault().post(new EBDownloadChanged("download", View.GONE, 0));
|
|
if (downloadmanager_tv_none.getVisibility() == View.GONE) {
|
|
downloadmanager_tv_none.setVisibility(View.VISIBLE);
|
|
}
|
|
} else if (doneList.size() == 1) {
|
|
doneList.remove(location.intValue());
|
|
initLocationMap();
|
|
notifyItemRangeRemoved(0, 2);
|
|
EventBus.getDefault().post(new EBDownloadChanged("download", View.VISIBLE,
|
|
doneList.size() + downloadingList.size()));
|
|
} else {
|
|
doneList.remove(location.intValue());
|
|
initLocationMap();
|
|
notifyItemRemoved(location + 1);
|
|
EventBus.getDefault().post(new EBDownloadChanged("download", View.VISIBLE,
|
|
doneList.size() + downloadingList.size()));
|
|
}
|
|
} else {
|
|
if (doneList.isEmpty() && downloadingList.size() == 1) {
|
|
downloadingList.remove(location.intValue());
|
|
locationMap.clear();
|
|
notifyDataSetChanged();
|
|
EventBus.getDefault().post(new EBDownloadChanged("download", View.GONE, 0));
|
|
if (downloadmanager_tv_none.getVisibility() == View.GONE) {
|
|
downloadmanager_tv_none.setVisibility(View.VISIBLE);
|
|
}
|
|
} else if (downloadingList.size() == 1) {
|
|
downloadingList.remove(location.intValue());
|
|
initLocationMap();
|
|
notifyItemRangeRemoved(getBase(), 2);
|
|
EventBus.getDefault().post(new EBDownloadChanged("download", View.VISIBLE,
|
|
doneList.size() + downloadingList.size()));
|
|
} else {
|
|
downloadingList.remove(location.intValue());
|
|
initLocationMap();
|
|
notifyItemRemoved(location + getBase() + 1);
|
|
EventBus.getDefault().post(new EBDownloadChanged("download", View.VISIBLE,
|
|
doneList.size() + downloadingList.size()));
|
|
}
|
|
}
|
|
|
|
deleteList.add(entry.getUrl());
|
|
statusMap.remove(entry.getUrl());
|
|
|
|
notifyItemChanged(doneList.isEmpty() ? 0 : 1 + doneList.size());
|
|
|
|
DownloadManager.getInstance(context).cancel(entry.getUrl());
|
|
}
|
|
|
|
public void initLocationMap() {
|
|
locationMap.clear();
|
|
for (int i = 0; i < doneList.size(); i++) {
|
|
locationMap.put(doneList.get(i).getUrl(), i);
|
|
}
|
|
for (int i = 0; i < downloadingList.size(); i++) {
|
|
locationMap.put(downloadingList.get(i).getUrl(), i);
|
|
}
|
|
}
|
|
|
|
List<DownloadEntity> getDownloadingList() {
|
|
return downloadingList;
|
|
}
|
|
|
|
List<DownloadEntity> getDoneList() {
|
|
return doneList;
|
|
}
|
|
|
|
public ArrayMap<String, Integer> getLocationMap() {
|
|
return locationMap;
|
|
}
|
|
|
|
Integer getLocation(String url) {
|
|
return locationMap.get(url);
|
|
}
|
|
|
|
ArrayMap<String, String> getStatusMap() {
|
|
return statusMap;
|
|
}
|
|
|
|
ArrayMap<String, String> getUrlMap() {
|
|
return urlMap;
|
|
}
|
|
|
|
public String getUrl(String packageName) {
|
|
return urlMap.get(packageName);
|
|
}
|
|
|
|
ArrayList<String> getDeleteList() {
|
|
return deleteList;
|
|
}
|
|
|
|
void initMap() {
|
|
downloadingList.clear();
|
|
doneList.clear();
|
|
statusMap.clear();
|
|
urlMap.clear();
|
|
for (DownloadEntity downloadEntity : DownloadManager.getInstance(context).getAll()) {
|
|
statusMap.put(downloadEntity.getUrl(), downloadEntity.getStatus().name());
|
|
if (DownloadStatus.done.equals(downloadEntity.getStatus())) {
|
|
urlMap.put(PackageUtils.getPackageNameByPath(context,
|
|
downloadEntity.getPath()), downloadEntity.getUrl());
|
|
doneList.add(downloadEntity);
|
|
} else {
|
|
downloadingList.add(downloadEntity);
|
|
}
|
|
}
|
|
// 排序
|
|
Comparator<DownloadEntity> comparator = new Comparator<DownloadEntity>() {
|
|
@Override
|
|
public int compare(DownloadEntity lhs, DownloadEntity rhs) {
|
|
if (rhs.getStart() > lhs.getStart()) {
|
|
return 1;
|
|
} else if (rhs.getStart() < lhs.getStart()) {
|
|
return -1;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
};
|
|
Collections.sort(downloadingList, comparator);
|
|
|
|
comparator = new Comparator<DownloadEntity>() {
|
|
@Override
|
|
public int compare(DownloadEntity lhs, DownloadEntity rhs) {
|
|
if (rhs.getEnd() > lhs.getEnd()) {
|
|
return 1;
|
|
} else if (rhs.getEnd() < lhs.getEnd()) {
|
|
return -1;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
};
|
|
Collections.sort(doneList, comparator);
|
|
|
|
initLocationMap();
|
|
}
|
|
|
|
public int getBase() {
|
|
return doneList.isEmpty() ? 0 : 1 + doneList.size();
|
|
}
|
|
|
|
public void setUrl(String url) {
|
|
this.url = url;
|
|
notifyItemRangeChanged(0, getItemCount());
|
|
}
|
|
}
|