Files
assistant-android/app/src/main/java/com/gh/gamecenter/download/DownLoadManagerFragment.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;
}
}