820 lines
28 KiB
Java
820 lines
28 KiB
Java
package com.gh.gamecenter.download;
|
|
|
|
import android.os.Bundle;
|
|
import android.os.Message;
|
|
import android.support.annotation.Nullable;
|
|
import android.support.v4.app.Fragment;
|
|
import android.support.v4.util.ArrayMap;
|
|
import android.support.v7.widget.LinearLayoutManager;
|
|
import android.support.v7.widget.RecyclerView;
|
|
import android.text.TextUtils;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.View.OnClickListener;
|
|
import android.view.View.OnLongClickListener;
|
|
import android.view.ViewGroup;
|
|
import android.widget.ImageView;
|
|
import android.widget.LinearLayout;
|
|
import android.widget.LinearLayout.LayoutParams;
|
|
import android.widget.ProgressBar;
|
|
import android.widget.TextView;
|
|
import android.widget.Toast;
|
|
|
|
import com.gh.common.constant.Constants;
|
|
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.PackageUtils;
|
|
import com.gh.common.util.PlatformUtils;
|
|
import com.gh.common.util.SpeedUtils;
|
|
import com.gh.common.view.Gh_LinearLayout;
|
|
import com.gh.common.view.VerticalItemDecoration;
|
|
import com.gh.download.DataWatcher;
|
|
import com.gh.download.DownloadEntry;
|
|
import com.gh.download.DownloadManager;
|
|
import com.gh.download.DownloadStatus;
|
|
import com.gh.gamecenter.MainActivity;
|
|
import com.gh.gamecenter.R;
|
|
import com.gh.gamecenter.eventbus.EBDownloadChanged;
|
|
import com.gh.gamecenter.eventbus.EBDownloadDelete;
|
|
import com.gh.gamecenter.eventbus.EBMiPush;
|
|
import com.gh.gamecenter.eventbus.EBPackage;
|
|
import com.gh.gamecenter.eventbus.EBPutUrl;
|
|
import com.gh.gamecenter.eventbus.EBShowDone;
|
|
import com.gh.gamecenter.eventbus.EBUISwitch;
|
|
import com.gh.gamecenter.manager.PackageManager;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map.Entry;
|
|
|
|
import de.greenrobot.event.EventBus;
|
|
|
|
/**
|
|
* 下载管理 fragment
|
|
*
|
|
* @author 黄壮华
|
|
*
|
|
*/
|
|
public class DownLoadManagerFragment extends Fragment {
|
|
|
|
private View view;
|
|
private RecyclerView downloadmanager_rv_show;
|
|
private LinearLayoutManager linearLayoutManager;
|
|
|
|
private TextView downloadmanager_tv_none;
|
|
|
|
private ArrayMap<String, Integer> locationMap;
|
|
private ArrayMap<String, String> statusMap;
|
|
private ArrayMap<String, String> urlMap;
|
|
private List<DownloadStatus> statusList;
|
|
private List<DownloadEntry> list;
|
|
private ArrayMap<String, Boolean> isShowMap;
|
|
private ArrayList<String> deleteList;
|
|
|
|
private int oldClickViewPosition;
|
|
|
|
private String path;
|
|
|
|
private boolean isDestroy = false;
|
|
|
|
private DataWatcher dataWatcher = new DataWatcher() {
|
|
@Override
|
|
public void onDataChanged(
|
|
HashMap<String, DownloadEntry> downloadingEntries) {
|
|
for (Entry<String, DownloadEntry> entry : downloadingEntries
|
|
.entrySet()) {
|
|
|
|
Integer location = locationMap.get(entry.getValue().getUrl());
|
|
|
|
if (location != null) {
|
|
if (!"pause".equals(statusMap
|
|
.get(entry.getValue().getUrl()))) {
|
|
list.set(location.intValue(), entry.getValue());
|
|
downloadmanager_rv_show.getAdapter().notifyItemChanged(
|
|
location.intValue() + 1);
|
|
statusList.set(location.intValue(), entry.getValue()
|
|
.getStatus());
|
|
if (entry.getValue().getStatus() == DownloadStatus.neterror) {
|
|
downloadmanager_rv_show.getAdapter()
|
|
.notifyItemChanged(0);
|
|
}
|
|
}
|
|
} else {
|
|
if (!deleteList.contains(entry.getValue().getUrl())) {
|
|
DownloadStatus status = entry.getValue().getStatus();
|
|
if (status.equals(DownloadStatus.downloading)
|
|
|| status.equals(DownloadStatus.waiting)) {
|
|
list.add(entry.getValue());
|
|
if (list.size() == 1) {
|
|
EventBus.getDefault().post(
|
|
new EBDownloadChanged("download",
|
|
View.VISIBLE, 1));
|
|
} else {
|
|
EventBus.getDefault().post(
|
|
new EBDownloadChanged("download",
|
|
View.VISIBLE, list.size()));
|
|
}
|
|
locationMap.put(entry.getValue().getUrl(),
|
|
list.size() - 1);
|
|
downloadmanager_rv_show.getAdapter()
|
|
.notifyItemInserted(list.size());
|
|
statusList.add(list.size() - 1, status);
|
|
if (list.size() == 1) {
|
|
downloadmanager_rv_show.getAdapter()
|
|
.notifyDataSetChanged();
|
|
if (downloadmanager_tv_none.getVisibility() == View.VISIBLE) {
|
|
downloadmanager_tv_none
|
|
.setVisibility(View.GONE);
|
|
}
|
|
} else {
|
|
downloadmanager_rv_show.getAdapter()
|
|
.notifyItemInserted(list.size());
|
|
downloadmanager_rv_show.getAdapter()
|
|
.notifyItemChanged(0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (entry.getValue().getStatus().equals(DownloadStatus.done)) {
|
|
urlMap.put(PackageUtils.getPackageNameByPath(getActivity(),
|
|
entry.getValue().getPath()), entry.getValue()
|
|
.getUrl());
|
|
statusList.set(location, DownloadStatus.done);
|
|
downloadmanager_rv_show.getAdapter().notifyItemChanged(0);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
public void setPath(String path) {
|
|
this.path = path;
|
|
}
|
|
|
|
@Override
|
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
|
|
|
super.onCreate(savedInstanceState);
|
|
|
|
view = View.inflate(getActivity(), R.layout.downloadmanager, null);
|
|
|
|
list = new ArrayList<DownloadEntry>();
|
|
locationMap = new ArrayMap<String, Integer>();
|
|
statusMap = new ArrayMap<String, String>();
|
|
urlMap = new ArrayMap<String, String>();
|
|
statusList = new ArrayList<DownloadStatus>();
|
|
isShowMap = new ArrayMap<String, Boolean>();
|
|
deleteList = new ArrayList<String>();
|
|
oldClickViewPosition = -1;
|
|
|
|
linearLayoutManager = new LinearLayoutManager(getActivity());
|
|
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
|
|
downloadmanager_rv_show = (RecyclerView) view
|
|
.findViewById(R.id.downloadmanager_rv_show);
|
|
downloadmanager_rv_show.setHasFixedSize(true);
|
|
downloadmanager_rv_show.addItemDecoration(new VerticalItemDecoration(
|
|
getActivity(), 1));
|
|
downloadmanager_rv_show.setAdapter(new DownLoadListAdapter());
|
|
downloadmanager_rv_show.setLayoutManager(linearLayoutManager);
|
|
|
|
if (path != null) {
|
|
showPluginDialog(path);
|
|
}
|
|
|
|
EventBus.getDefault().register(this);
|
|
|
|
downloadmanager_tv_none = (TextView) view
|
|
.findViewById(R.id.downloadmanager_tv_none);
|
|
}
|
|
|
|
@Override
|
|
@Nullable
|
|
public View onCreateView(LayoutInflater inflater,
|
|
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
|
if (container != null) {
|
|
container.removeView(view);
|
|
}
|
|
return view;
|
|
}
|
|
|
|
private class DownloadViewHolder extends RecyclerView.ViewHolder implements
|
|
OnClickListener, OnLongClickListener {
|
|
private Gh_LinearLayout view;
|
|
private ImageView dm_item_iv_icon;
|
|
private ProgressBar dm_item_progressbar;
|
|
private TextView dm_item_tv_title, dm_item_tv_downloads,
|
|
dm_item_tv_speed, dm_item_tv_startorpause;
|
|
private LinearLayout dm_item, dm_item_ll_delete;
|
|
|
|
private TextView dm_item_top_tv_allstart;
|
|
|
|
public DownloadViewHolder(View convertView) {
|
|
super(convertView);
|
|
if ((Integer) convertView.getTag() == 1) {
|
|
dm_item_top_tv_allstart = (TextView) convertView
|
|
.findViewById(R.id.dm_item_top_tv_allstart);
|
|
dm_item_top_tv_allstart.setOnClickListener(this);
|
|
} else {
|
|
view = (Gh_LinearLayout) convertView;
|
|
view.setOnClickListener(this);
|
|
view.setOnLongClickListener(this);
|
|
dm_item = (LinearLayout) convertView.findViewById(R.id.dm_item);
|
|
dm_item_iv_icon = (ImageView) convertView
|
|
.findViewById(R.id.dm_item_iv_icon);
|
|
dm_item_tv_title = (TextView) convertView
|
|
.findViewById(R.id.dm_item_tv_title);
|
|
dm_item_progressbar = (ProgressBar) convertView
|
|
.findViewById(R.id.dm_item_progressbar);
|
|
dm_item_tv_downloads = (TextView) convertView
|
|
.findViewById(R.id.dm_item_tv_downloads);
|
|
dm_item_tv_speed = (TextView) convertView
|
|
.findViewById(R.id.dm_item_tv_speed);
|
|
dm_item_tv_startorpause = (TextView) convertView
|
|
.findViewById(R.id.dm_item_tv_startorpause);
|
|
dm_item_tv_startorpause.setOnClickListener(this);
|
|
dm_item_ll_delete = (LinearLayout) convertView
|
|
.findViewById(R.id.dm_item_ll_delete);
|
|
dm_item_ll_delete.setOnClickListener(this);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean onLongClick(View v) {
|
|
|
|
if (dm_item_ll_delete.getVisibility() == View.VISIBLE) {
|
|
((Gh_LinearLayout) v).hideDeleteView();
|
|
isShowMap.put(list.get(getPosition() - 1).getUrl(), false);
|
|
oldClickViewPosition = -1;
|
|
} else {
|
|
if (oldClickViewPosition != getPosition()
|
|
&& oldClickViewPosition != -1) {
|
|
if (linearLayoutManager
|
|
.findViewByPosition(oldClickViewPosition) != null) {
|
|
((Gh_LinearLayout) linearLayoutManager
|
|
.findViewByPosition(oldClickViewPosition))
|
|
.hideDeleteView();
|
|
} else {
|
|
downloadmanager_rv_show.getAdapter().notifyItemChanged(
|
|
oldClickViewPosition);
|
|
}
|
|
isShowMap.put(list.get(oldClickViewPosition - 1).getUrl(),
|
|
false);
|
|
}
|
|
((Gh_LinearLayout) v).showDeleteView(getPosition());
|
|
isShowMap.put(list.get(getPosition() - 1).getUrl(), true);
|
|
oldClickViewPosition = getPosition();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void onClick(View v) {
|
|
if (v == view) {
|
|
if (dm_item_ll_delete.getVisibility() == View.VISIBLE) {
|
|
((Gh_LinearLayout) v).hideDeleteView();
|
|
isShowMap.put(list.get(getPosition() - 1).getUrl(), false);
|
|
oldClickViewPosition = -1;
|
|
} else {
|
|
if (oldClickViewPosition != getPosition()
|
|
&& oldClickViewPosition != -1) {
|
|
if (linearLayoutManager
|
|
.findViewByPosition(oldClickViewPosition) != null) {
|
|
((Gh_LinearLayout) linearLayoutManager
|
|
.findViewByPosition(oldClickViewPosition))
|
|
.hideDeleteView();
|
|
} else {
|
|
downloadmanager_rv_show.getAdapter()
|
|
.notifyItemChanged(oldClickViewPosition);
|
|
}
|
|
isShowMap.put(list.get(oldClickViewPosition - 1)
|
|
.getUrl(), false);
|
|
}
|
|
((Gh_LinearLayout) v).showDeleteView(getPosition());
|
|
isShowMap.put(list.get(getPosition() - 1).getUrl(), true);
|
|
oldClickViewPosition = getPosition();
|
|
}
|
|
} else if (v == dm_item_tv_startorpause) {
|
|
String str = dm_item_tv_startorpause.getText().toString();
|
|
String url = list.get(getPosition() - 1).getUrl();
|
|
DownloadManager.getInstance(getActivity()).put(url, System.currentTimeMillis());
|
|
if ("继续".equals(str) || "下载".equals(str)) {
|
|
dm_item_tv_startorpause
|
|
.setBackgroundResource(R.drawable.textview_gray_style);
|
|
dm_item_tv_startorpause.setTextColor(0xFF999999);
|
|
dm_item_tv_startorpause.setText("暂停");
|
|
dm_item_tv_downloads.setText(SpeedUtils.getSpeed(list.get(
|
|
getPosition() - 1).getSpeed())
|
|
+ "(剩"
|
|
+ SpeedUtils
|
|
.getRemainTime(list.get(getPosition() - 1)
|
|
.getSize(),
|
|
list.get(getPosition() - 1)
|
|
.getProgress(),
|
|
list.get(getPosition() - 1)
|
|
.getSpeed() * 1024) + ")");
|
|
statusMap.put(url, "downloading");
|
|
statusList.set(getPosition() - 1,
|
|
DownloadStatus.downloading);
|
|
downloadmanager_rv_show.getAdapter().notifyItemChanged(0);
|
|
Message msg = Message.obtain();
|
|
msg.what = Constants.CONTINUE_DOWNLOAD_TASK;
|
|
msg.obj = url;
|
|
DownloadManager.getInstance(getActivity()).sendMessageDelayed(msg, 1000);
|
|
} else if ("安装".equals(str)) {
|
|
DownloadEntry downloadEntry = list.get(getPosition() - 1);
|
|
final String path = downloadEntry.getPath();
|
|
if (downloadEntry.getMeta().get("isPlugin") != null) {
|
|
Map<String, Object> kv6 = new HashMap<String, Object>();
|
|
kv6.put("操作", "点击安装完成");
|
|
DataUtils.onEvent(getActivity(), "插件化",
|
|
downloadEntry.getName(), kv6);
|
|
}
|
|
if (FileUtils.isEmptyFile(path)) {
|
|
Toast.makeText(getActivity(), "解析包错误",
|
|
Toast.LENGTH_SHORT).show();
|
|
dm_item_ll_delete.performClick();
|
|
} else {
|
|
if (list.get(getPosition() - 1).getName()
|
|
.contains("光环助手")) {
|
|
startActivity(PackageUtils.getInstallIntent(path));
|
|
} else {
|
|
PackageManager manager = new PackageManager(
|
|
getActivity());
|
|
if (manager.launchSetup(path)) {
|
|
startActivity(PackageUtils
|
|
.getInstallIntent(path));
|
|
} else {
|
|
DialogUtils.showPluginDialog(getActivity(), new DialogUtils.ConfiremListener() {
|
|
@Override
|
|
public void onConfirem() {
|
|
MainActivity.uninstallMap.put(
|
|
PackageUtils.getPackageNameByPath(getActivity(), path), path);
|
|
startActivity(PackageUtils.getUninstallIntent(getActivity(),
|
|
path));
|
|
}
|
|
}, null);
|
|
}
|
|
}
|
|
}
|
|
} else if ("插件化".equals(str)) {
|
|
DownloadEntry downloadEntry = list.get(getPosition() - 1);
|
|
showPluginDialog(downloadEntry.getPath());
|
|
} else if ("暂停".equals(str)) {
|
|
dm_item_tv_startorpause
|
|
.setBackgroundResource(R.drawable.textview_blue_style);
|
|
dm_item_tv_startorpause.setTextColor(0xFFFFFFFF);
|
|
dm_item_tv_startorpause.setText("继续");
|
|
dm_item_tv_downloads.setText("");
|
|
statusMap.put(url, "pause");
|
|
statusList.set(getPosition() - 1, DownloadStatus.pause);
|
|
downloadmanager_rv_show.getAdapter().notifyItemChanged(0);
|
|
Message msg = Message.obtain();
|
|
msg.what = Constants.PAUSE_DOWNLOAD_TASK;
|
|
msg.obj = url;
|
|
DownloadManager.getInstance(getActivity()).sendMessageDelayed(msg, 1000);
|
|
} else if ("等待".equals(str)) {
|
|
Toast.makeText(getActivity(), "最多同时有3个下载任务",
|
|
Toast.LENGTH_SHORT).show();
|
|
} else if ("启动".equals(str)) {
|
|
|
|
Map<String, Object> kv = new HashMap<String, Object>();
|
|
kv.put("版本",
|
|
list.get(getPosition() - 1).getMeta()
|
|
.get("platform"));
|
|
DataUtils.onEvent(getActivity(), "游戏启动",
|
|
list.get(getPosition() - 1).getName(), kv);
|
|
|
|
PackageUtils.launchApplicationByPackageName(
|
|
getActivity(),
|
|
list.get(getPosition() - 1).getMeta()
|
|
.get("packageName"));
|
|
}
|
|
} else if (v == dm_item_top_tv_allstart) {
|
|
String str = dm_item_top_tv_allstart.getText().toString();
|
|
if ("全部开始".equals(str)) {
|
|
for (int i = 0, size = list.size(); i < size; i++) {
|
|
if (!DownloadStatus.done
|
|
.equals(list.get(i).getStatus())) {
|
|
View view = downloadmanager_rv_show
|
|
.getChildAt(i + 1);
|
|
if (view != null) {
|
|
TextView tv = (TextView) view
|
|
.findViewById(R.id.dm_item_tv_startorpause);
|
|
if (tv.getText().toString().equals("继续")) {
|
|
tv.performClick();
|
|
}
|
|
} else {
|
|
DownloadManager.getInstance(getActivity()).put(list.get(i).getUrl(),
|
|
System.currentTimeMillis());
|
|
Message msg = Message.obtain();
|
|
msg.what = Constants.CONTINUE_DOWNLOAD_TASK;
|
|
msg.obj = list.get(i).getUrl();
|
|
DownloadManager.getInstance(getActivity()).sendMessageDelayed(msg, 1000);
|
|
statusMap.put(list.get(i).getUrl(),
|
|
"downloading");
|
|
statusList.set(i, DownloadStatus.downloading);
|
|
}
|
|
}
|
|
}
|
|
dm_item_top_tv_allstart.setText("全部暂停");
|
|
dm_item_top_tv_allstart.setTextColor(0xff999999);
|
|
} else {
|
|
for (int i = 0, size = list.size(); i < size; i++) {
|
|
if (!DownloadStatus.done
|
|
.equals(list.get(i).getStatus())) {
|
|
View view = downloadmanager_rv_show
|
|
.getChildAt(i + 1);
|
|
if (view != null) {
|
|
TextView tv = (TextView) view
|
|
.findViewById(R.id.dm_item_tv_startorpause);
|
|
if (tv.getText().toString().equals("暂停")) {
|
|
tv.performClick();
|
|
} else if (tv.getText().toString().equals("等待")) {
|
|
DownloadManager.getInstance(getActivity())
|
|
.pause(list.get(i).getUrl());
|
|
statusList.set(i, DownloadStatus.pause);
|
|
}
|
|
} else {
|
|
DownloadManager.getInstance(getActivity()).put(list.get(i).getUrl(),
|
|
System.currentTimeMillis());
|
|
Message msg = Message.obtain();
|
|
msg.what = Constants.PAUSE_DOWNLOAD_TASK;
|
|
msg.obj = list.get(i).getUrl();
|
|
DownloadManager.getInstance(getActivity()).sendMessageDelayed(msg, 1000);
|
|
statusList.set(i, DownloadStatus.pause);
|
|
}
|
|
}
|
|
}
|
|
dm_item_top_tv_allstart.setText("全部开始");
|
|
dm_item_top_tv_allstart.setTextColor(0xff1BA4FC);
|
|
}
|
|
} else if (v == dm_item_ll_delete) {
|
|
final int position = getPosition();
|
|
if (position - 1 >= 0 && position - 1 < list.size()) {
|
|
DownloadEntry entry = list.remove(position - 1);
|
|
deleteList.add(entry.getUrl());
|
|
isShowMap.put(entry.getUrl(), false);
|
|
if (oldClickViewPosition == position) {
|
|
oldClickViewPosition = -1;
|
|
}
|
|
statusMap.remove(entry.getUrl());
|
|
locationMap.remove(entry.getUrl());
|
|
if (position - 1 < statusList.size()) {
|
|
statusList.remove(position - 1);
|
|
}
|
|
downloadmanager_rv_show.getAdapter().notifyItemChanged(0);
|
|
if (list.isEmpty()) {
|
|
EventBus.getDefault().post(
|
|
new EBDownloadChanged("download", View.GONE, 0));
|
|
locationMap.clear();
|
|
downloadmanager_rv_show.getAdapter().notifyDataSetChanged();
|
|
if (downloadmanager_tv_none.getVisibility() == View.GONE) {
|
|
downloadmanager_tv_none.setVisibility(View.VISIBLE);
|
|
}
|
|
} else {
|
|
EventBus.getDefault().post(
|
|
new EBDownloadChanged("download", View.VISIBLE,
|
|
list.size()));
|
|
for (int i = 0, size = list.size(); i < size; i++) {
|
|
locationMap.put(list.get(i).getUrl(), i);
|
|
}
|
|
downloadmanager_rv_show.getAdapter().notifyItemRemoved(
|
|
position);
|
|
}
|
|
EBDownloadDelete delete = new EBDownloadDelete(entry.getName(),
|
|
entry.getMeta().get("platform"), entry.getUrl());
|
|
String PluginPlatform = entry.getMeta().get("PluginPlatform");
|
|
if (PluginPlatform != null) {
|
|
delete.setPluginPlatform(PluginPlatform);
|
|
}
|
|
EventBus.getDefault().post(delete);
|
|
|
|
DownloadManager.getInstance(getActivity()).cancel(
|
|
entry.getUrl());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// 显示插件化
|
|
private void showPluginDialog(final String path) {
|
|
DialogUtils.showPluginDialog(getActivity(), new DialogUtils.ConfiremListener() {
|
|
@Override
|
|
public void onConfirem() {
|
|
for (DownloadEntry downloadEntry : DownloadManager.getInstance(
|
|
getActivity()).getAll()) {
|
|
if (downloadEntry.getMeta().get("isPlugin") != null
|
|
&& downloadEntry.getPath().equals(path)) {
|
|
Map<String, Object> kv6 = new HashMap<String, Object>();
|
|
kv6.put("操作", "点击插件化安装完成");
|
|
DataUtils.onEvent(getActivity(), "插件化", downloadEntry.getName(), kv6);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (FileUtils.isEmptyFile(path)) {
|
|
Toast.makeText(getActivity(), "解析包错误", Toast.LENGTH_SHORT).show();
|
|
} else {
|
|
MainActivity.uninstallMap.put(PackageUtils.getPackageNameByPath(getActivity(), path), path);
|
|
startActivity(PackageUtils.getUninstallIntent(getActivity(), path));
|
|
}
|
|
}
|
|
}, null);
|
|
}
|
|
|
|
private class DownLoadListAdapter extends
|
|
RecyclerView.Adapter<DownloadViewHolder> {
|
|
|
|
@Override
|
|
public int getItemCount() {
|
|
if (list.isEmpty()) {
|
|
return 0;
|
|
}
|
|
return list.size() + 1;
|
|
}
|
|
|
|
@Override
|
|
public void onBindViewHolder(DownloadViewHolder viewHolder, int position) {
|
|
if (position == 0) {
|
|
int dlNumber = 0;
|
|
int dnNumber = 0;
|
|
int wtNumber = 0;
|
|
for (int i = 0, size = statusList.size(); i < size; i++) {
|
|
if (DownloadStatus.downloading.equals(statusList.get(i))) {
|
|
dlNumber++;
|
|
} else if (DownloadStatus.done.equals(statusList.get(i))) {
|
|
dnNumber++;
|
|
} else if (DownloadStatus.waiting.equals(statusList.get(i))) {
|
|
wtNumber++;
|
|
}
|
|
}
|
|
if (dnNumber == statusList.size()) {
|
|
viewHolder.dm_item_top_tv_allstart.setVisibility(View.GONE);
|
|
} else if ((dlNumber + wtNumber) != (statusList.size() - dnNumber)) {
|
|
viewHolder.dm_item_top_tv_allstart
|
|
.setVisibility(View.VISIBLE);
|
|
viewHolder.dm_item_top_tv_allstart.setText("全部开始");
|
|
viewHolder.dm_item_top_tv_allstart.setTextColor(0xff1BA4FC);
|
|
} else {
|
|
viewHolder.dm_item_top_tv_allstart
|
|
.setVisibility(View.VISIBLE);
|
|
viewHolder.dm_item_top_tv_allstart.setText("全部暂停");
|
|
viewHolder.dm_item_top_tv_allstart.setTextColor(0xff999999);
|
|
}
|
|
} else {
|
|
|
|
DownloadEntry entry = list.get(position - 1);
|
|
|
|
if (!viewHolder.view.isSliding()) {
|
|
Boolean isShow = isShowMap.get(entry.getUrl());
|
|
if (isShow != null && isShow.booleanValue()) {
|
|
LayoutParams lparams = new LayoutParams(
|
|
LayoutParams.MATCH_PARENT, DisplayUtils.dip2px(
|
|
getActivity(), 96));
|
|
viewHolder.dm_item.setLayoutParams(lparams);
|
|
viewHolder.dm_item_ll_delete
|
|
.setVisibility(View.VISIBLE);
|
|
} else {
|
|
LayoutParams lparams = new LayoutParams(
|
|
LayoutParams.MATCH_PARENT, DisplayUtils.dip2px(
|
|
getActivity(), 66));
|
|
viewHolder.dm_item.setLayoutParams(lparams);
|
|
viewHolder.dm_item_ll_delete.setVisibility(View.GONE);
|
|
}
|
|
}
|
|
|
|
String icon = entry.getMeta().get("icon");
|
|
if (!TextUtils.isEmpty(icon)) {
|
|
ImageUtils.getInstance(getActivity()).display(icon,
|
|
viewHolder.dm_item_iv_icon);
|
|
} else {
|
|
viewHolder.dm_item_iv_icon
|
|
.setImageResource(R.drawable.logo);
|
|
}
|
|
if (entry.getName().contains("光环助手")) {
|
|
viewHolder.dm_item_tv_title.setText(entry.getName());
|
|
} else {
|
|
String platform = entry.getMeta().get("platform");
|
|
if ("local_plugin".equals(platform)) {
|
|
viewHolder.dm_item_tv_title.setText(entry.getName());
|
|
} else {
|
|
platform = PlatformUtils.getInstance(getActivity())
|
|
.getPlatformName(platform);
|
|
if (platform == null) {
|
|
viewHolder.dm_item_tv_title
|
|
.setText(entry.getName());
|
|
} else {
|
|
viewHolder.dm_item_tv_title.setText(entry.getName()
|
|
+ " - " + platform);
|
|
}
|
|
}
|
|
}
|
|
viewHolder.dm_item_progressbar.setProgress((int) (entry
|
|
.getPercent() * 10));
|
|
switch (entry.getStatus()) {
|
|
case done:
|
|
EventBus.getDefault().post(
|
|
new EBPutUrl(PackageUtils.getPackageNameByPath(
|
|
getActivity(), entry.getPath()), entry
|
|
.getUrl()));
|
|
viewHolder.dm_item_tv_downloads.setText("下载完成");
|
|
viewHolder.dm_item_tv_startorpause
|
|
.setBackgroundResource(R.drawable.textview_blue_style);
|
|
viewHolder.dm_item_tv_startorpause.setTextColor(0xFFFFFFFF);
|
|
if (entry.getMeta().get("isPlugin") != null
|
|
&& PackageManager.isInstalled(entry.getMeta().get(
|
|
"package_name"))) {
|
|
viewHolder.dm_item_tv_startorpause.setText("插件化");
|
|
viewHolder.dm_item_tv_startorpause
|
|
.setBackgroundResource(R.drawable.textview_orange_style);
|
|
} else {
|
|
viewHolder.dm_item_tv_startorpause.setText("安装");
|
|
viewHolder.dm_item_tv_startorpause
|
|
.setBackgroundResource(R.drawable.textview_blue_style);
|
|
}
|
|
viewHolder.dm_item_tv_speed.setText("100%");
|
|
break;
|
|
case downloading:
|
|
if (!"pause".equals(statusMap.get(entry.getUrl()))) {
|
|
viewHolder.dm_item_tv_downloads.setText(SpeedUtils
|
|
.getSpeed(entry.getSpeed())
|
|
+ "(剩"
|
|
+ SpeedUtils.getRemainTime(entry.getSize(),
|
|
entry.getProgress(),
|
|
entry.getSpeed() * 1024) + ")");
|
|
viewHolder.dm_item_tv_startorpause
|
|
.setBackgroundResource(R.drawable.textview_gray_style);
|
|
viewHolder.dm_item_tv_startorpause
|
|
.setTextColor(0xFF999999);
|
|
viewHolder.dm_item_tv_startorpause.setText("暂停");
|
|
viewHolder.dm_item_tv_speed.setText(entry.getPercent()
|
|
+ "%");
|
|
}
|
|
break;
|
|
case waiting:
|
|
viewHolder.dm_item_tv_downloads.setText("");
|
|
viewHolder.dm_item_tv_startorpause
|
|
.setBackgroundResource(R.drawable.textview_gray_style);
|
|
viewHolder.dm_item_tv_startorpause.setTextColor(0xFF999999);
|
|
viewHolder.dm_item_tv_startorpause.setText("等待");
|
|
viewHolder.dm_item_tv_speed.setText(entry.getPercent()
|
|
+ "%");
|
|
break;
|
|
case pause:
|
|
case timeout:
|
|
case neterror:
|
|
viewHolder.dm_item_tv_downloads.setText("");
|
|
viewHolder.dm_item_tv_startorpause
|
|
.setBackgroundResource(R.drawable.textview_blue_style);
|
|
viewHolder.dm_item_tv_startorpause.setTextColor(0xFFFFFFFF);
|
|
viewHolder.dm_item_tv_startorpause.setText("继续");
|
|
viewHolder.dm_item_tv_speed.setText(entry.getPercent()
|
|
+ "%");
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public int getItemViewType(int position) {
|
|
|
|
if (position == 0) {
|
|
return 1;
|
|
}
|
|
return super.getItemViewType(position);
|
|
}
|
|
|
|
@Override
|
|
public DownloadViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
|
|
View view;
|
|
if (i == 1) {
|
|
view = LayoutInflater.from(viewGroup.getContext()).inflate(
|
|
R.layout.downloadmanager_item_top, viewGroup, false);
|
|
} else {
|
|
view = LayoutInflater.from(viewGroup.getContext()).inflate(
|
|
R.layout.downloadmanager_item, viewGroup, false);
|
|
}
|
|
view.setTag(i);
|
|
return new DownloadViewHolder(view);
|
|
}
|
|
}
|
|
|
|
public void onEventMainThread(EBMiPush mipush) {
|
|
if ("plugin_install".equals(mipush.getFrom())) {
|
|
String path = (String) mipush.getObj();
|
|
showPluginDialog(path);
|
|
}
|
|
}
|
|
|
|
public void onEventMainThread(EBPackage busFour) {
|
|
String packageName = busFour.getPackageName();
|
|
String url = urlMap.get(packageName);
|
|
if (url != null) {
|
|
int location = locationMap.get(url).intValue();
|
|
if ("安装".equals(busFour.getType())) {
|
|
list.remove(location);
|
|
if (list.isEmpty()) {
|
|
EventBus.getDefault().post(
|
|
new EBDownloadChanged("download", View.GONE, 0));
|
|
locationMap.clear();
|
|
downloadmanager_rv_show.getAdapter().notifyDataSetChanged();
|
|
if (downloadmanager_tv_none.getVisibility() == View.GONE) {
|
|
downloadmanager_tv_none.setVisibility(View.VISIBLE);
|
|
}
|
|
} else {
|
|
EventBus.getDefault().post(
|
|
new EBDownloadChanged("download", View.VISIBLE,
|
|
list.size()));
|
|
for (int i = 0, size = list.size(); i < size; i++) {
|
|
locationMap.put(list.get(i).getUrl(), i);
|
|
}
|
|
downloadmanager_rv_show.getAdapter().notifyItemRemoved(
|
|
location + 1);
|
|
}
|
|
} else if ("卸载".equals(busFour.getType())) {
|
|
downloadmanager_rv_show.getAdapter().notifyItemChanged(
|
|
location + 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void onEventMainThread(EBUISwitch busNine) {
|
|
if ("DownloadManagerActivity".equals(busNine.getFrom())) {
|
|
if (busNine.getPosition() != 0) {
|
|
deleteList.clear();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void onEventMainThread(EBShowDone showDone) {
|
|
if ("下载管理".equals(showDone.getFrom())
|
|
&& downloadmanager_rv_show != null) {
|
|
downloadmanager_rv_show.smoothScrollToPosition(showDone
|
|
.getPosition());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onResume() {
|
|
super.onResume();
|
|
list = DownloadManager.getInstance(getActivity()).getAll();
|
|
locationMap.clear();
|
|
statusMap.clear();
|
|
urlMap.clear();
|
|
for (int i = 0, size = list.size(); i < size; i++) {
|
|
DownloadEntry downloadEntry = list.get(i);
|
|
locationMap.put(downloadEntry.getUrl(), i);
|
|
statusMap.put(downloadEntry.getUrl(), downloadEntry.getStatus()
|
|
.name());
|
|
statusList.add(downloadEntry.getStatus());
|
|
if (DownloadStatus.done.equals(downloadEntry.getStatus())) {
|
|
urlMap.put(PackageUtils.getPackageNameByPath(getActivity(),
|
|
downloadEntry.getPath()), downloadEntry.getUrl());
|
|
}
|
|
}
|
|
|
|
DownloadManager.getInstance(getActivity()).addObserver(dataWatcher);
|
|
|
|
downloadmanager_rv_show.getAdapter().notifyDataSetChanged();
|
|
|
|
if (list.isEmpty()) {
|
|
downloadmanager_tv_none.setVisibility(View.VISIBLE);
|
|
}
|
|
|
|
}
|
|
|
|
@Override
|
|
public void onPause() {
|
|
super.onPause();
|
|
DownloadManager.getInstance(getActivity()).removeObserver(dataWatcher);
|
|
}
|
|
|
|
@Override
|
|
public void onDestroy() {
|
|
|
|
super.onDestroy();
|
|
isDestroy = true;
|
|
EventBus.getDefault().unregister(this);
|
|
view = null;
|
|
downloadmanager_rv_show = null;
|
|
linearLayoutManager = null;
|
|
downloadmanager_tv_none = null;
|
|
locationMap = null;
|
|
statusMap = null;
|
|
urlMap = null;
|
|
statusList = null;
|
|
list = null;
|
|
isShowMap = null;
|
|
deleteList = null;
|
|
path = null;
|
|
dataWatcher = null;
|
|
}
|
|
}
|