diff --git a/app/src/main/java/com/gh/base/BaseDetailActivity.java b/app/src/main/java/com/gh/base/BaseDetailActivity.java index 455b93ce7b..cbc12ed63b 100644 --- a/app/src/main/java/com/gh/base/BaseDetailActivity.java +++ b/app/src/main/java/com/gh/base/BaseDetailActivity.java @@ -386,7 +386,7 @@ public abstract class BaseDetailActivity extends BaseActivity implements View.On detail_pb_progressbar.setProgress(0); detail_tv_per.setText("0.0%"); - DownloadManager.getInstance(BaseDetailActivity.this).putStatus(apkEntity.getUrl(), "downloading"); +// DownloadManager.getInstance(BaseDetailActivity.this).putStatus(apkEntity.getUrl(), "downloading"); } else { toast(msg); } diff --git a/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java b/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java index c969211957..350899aac1 100644 --- a/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java +++ b/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java @@ -246,7 +246,7 @@ public class DetailDownloadUtils { mViewHolder.downloadPb.setProgress(0); mViewHolder.downloadPer.setText("0.0%"); - DownloadManager.getInstance(mViewHolder.context).putStatus(apkEntity.getUrl(), "downloading"); +// DownloadManager.getInstance(mViewHolder.context).putStatus(apkEntity.getUrl(), "downloading"); } else { Utils.toast(mViewHolder.context, msg); } diff --git a/app/src/main/java/com/gh/common/util/DialogUtils.java b/app/src/main/java/com/gh/common/util/DialogUtils.java index 32a3aae34f..054b3c2d94 100644 --- a/app/src/main/java/com/gh/common/util/DialogUtils.java +++ b/app/src/main/java/com/gh/common/util/DialogUtils.java @@ -400,6 +400,10 @@ public class DialogUtils { }, null); } + public static void showDownloadDialog(Context context, ConfirmListener listener, CancelListener cancelListener){ + showWarningDialog(context, "下载提示", "您当前使用的网络为2G/3G/4G,开始下载将会消耗移动流量,确定下载?", "取消", "确定", listener, cancelListener); + } + public static void showDownloadDialog(Context context, ConfirmListener listener) { showWarningDialog(context, "下载提示", "您当前使用的网络为2G/3G/4G,开始下载将会消耗移动流量,确定下载?", listener); } diff --git a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java index dca6deadd8..eb0a889a5f 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java @@ -65,7 +65,12 @@ public class DownloadItemUtils { } else { if (!queue.contains(platform)) { queue.offer(platform); + if (AppDebugConfig.IS_DEBUG) { + AppDebugConfig.logMethodWithParams(DownloadItemUtils.class, queue.size(), gameEntity.getBrief(), downloadEntity.getPlatform(), index); + } + // 有两个平台同时下载的时候启用 if (queue.size() == 2) { + //TODO fuck this Message msg = Message.obtain(); msg.obj = downloadEntity.getName(); msg.what = DownloadConfig.DOWNLOAD_ROLL; @@ -220,8 +225,7 @@ public class DownloadItemUtils { holder.gameProgressbar.setVisibility(View.VISIBLE); holder.gameInfo.setVisibility(View.VISIBLE); - String platform = PlatformUtils.getInstance(context) - .getPlatformName(downloadEntity.getPlatform()); + String platform = PlatformUtils.getInstance(context).getPlatformName(downloadEntity.getPlatform()); DownloadStatus status = downloadEntity.getStatus(); if (status.equals(DownloadStatus.downloading)) { @@ -399,7 +403,7 @@ public class DownloadItemUtils { downloadBtn.setBackgroundResource(R.drawable.game_item_btn_downloading_style); downloadBtn.setTextColor(ContextCompat.getColorStateList(context, R.color.text_downloading_style)); - DownloadManager.getInstance(context).putStatus(gameEntity.getApk().get(0).getUrl(), "downloading"); +// DownloadManager.getInstance(context).putStatus(gameEntity.getApk().get(0).getUrl(), "downloading"); } else { Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); } @@ -419,7 +423,7 @@ public class DownloadItemUtils { downloadBtn.setBackgroundResource(R.drawable.game_item_btn_downloading_style); downloadBtn.setTextColor(ContextCompat.getColorStateList(context, R.color.text_downloading_style)); - DownloadManager.getInstance(context).putStatus(gameEntity.getApk().get(0).getUrl(), "downloading"); +// DownloadManager.getInstance(context).putStatus(gameEntity.getApk().get(0).getUrl(), "downloading"); } else { Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); } diff --git a/app/src/main/java/com/gh/common/view/DownloadDialog.java b/app/src/main/java/com/gh/common/view/DownloadDialog.java index ef5ed0d467..7753dbc477 100644 --- a/app/src/main/java/com/gh/common/view/DownloadDialog.java +++ b/app/src/main/java/com/gh/common/view/DownloadDialog.java @@ -399,7 +399,7 @@ public class DownloadDialog implements OnCollectionCallBackListener { if (collectionAdapter != null) { collectionAdapter.removeDownloadEntityByUrl(url); } - DownloadManager.getInstance(mContext).putStatus(url, "delete"); +// DownloadManager.getInstance(mContext).putStatus(url, "delete"); } } diff --git a/app/src/main/java/com/gh/download/DownloadManager.java b/app/src/main/java/com/gh/download/DownloadManager.java index a1ddfb7888..9130c3a56c 100644 --- a/app/src/main/java/com/gh/download/DownloadManager.java +++ b/app/src/main/java/com/gh/download/DownloadManager.java @@ -10,6 +10,7 @@ import android.support.v4.util.ArrayMap; import android.widget.Toast; import com.gh.common.constant.Config; +import com.gh.common.util.AppDebugConfig; import com.gh.common.util.DataCollectionUtils; import com.gh.common.util.DialogUtils; import com.gh.common.util.MD5Utils; @@ -36,7 +37,6 @@ import org.greenrobot.eventbus.EventBus; import java.io.File; import java.util.ArrayList; import java.util.List; -import java.util.Map.Entry; import java.util.concurrent.LinkedBlockingQueue; public class DownloadManager implements DownloadStatusListener { @@ -49,8 +49,14 @@ public class DownloadManager implements DownloadStatusListener { private ArrayMap lastTimeMap; private ArrayMap> platformMap; private ArrayMap> gameMap; - private ArrayMap statusMap; + /** + * TODO change to {@link DownloadStatus} + */ + private ArrayMap statusMap; + private ArrayMap downloadingMap; + + private DownloadDao mDownloadDao; @Override public void onTaskCancelled(DownloadEntity entity) { @@ -61,6 +67,9 @@ public class DownloadManager implements DownloadStatusListener { DownloadNotification.showDownloadingNotification(mContext); + DownloadManager.getInstance(mContext).putStatus(entity.getUrl(), "delete"); + + downloadingMap.remove(entity.getUrl()); } @Override @@ -68,11 +77,15 @@ public class DownloadManager implements DownloadStatusListener { EventBus.getDefault().post(new EBDownloadStatus("download")); DownloadNotification.showDownloadingNotification(mContext); + + downloadingMap.put(entity.getUrl(), entity); + } @Override public void onTaskError(DownloadEntity entity) { DownloadNotification.showDownloadingNotification(mContext); + downloadingMap.remove(entity.getUrl()); } @Override @@ -84,6 +97,7 @@ public class DownloadManager implements DownloadStatusListener { public void onTaskDone(DownloadEntity entity) { DownloadNotification.showDownloadingNotification(mContext); DownloadNotification.showDownloadDoneNotification(mContext, entity); + downloadingMap.remove(entity.getUrl()); } @Override @@ -92,7 +106,8 @@ public class DownloadManager implements DownloadStatusListener { } private DownloadManager(Context context) { - mContext = context; + mContext = context.getApplicationContext(); + mDownloadDao = DownloadDao.getInstance(mContext); //TODO unregister this DownloadStatusManager.getInstance().registerTaskStatusListener(this); @@ -106,6 +121,7 @@ public class DownloadManager implements DownloadStatusListener { platformMap = new ArrayMap<>(); gameMap = new ArrayMap<>(); statusMap = new ArrayMap<>(); + downloadingMap = new ArrayMap<>(); mHandler = new Handler(Looper.getMainLooper()) { @Override @@ -135,6 +151,30 @@ public class DownloadManager implements DownloadStatusListener { } } }; + + List list = getAll(); + for (DownloadEntity downloadEntity : list) { + statusMap.put(downloadEntity.getUrl(), downloadEntity.getStatus().name()); + if (!DownloadStatus.done.equals(downloadEntity.getStatus())) { + downloadingMap.put(downloadEntity.getUrl(), downloadEntity); + } + } + + } + + public ArrayMap getDownloadingMap() { + return downloadingMap; + } + + public static DownloadManager getInstance(Context context) { + if (mInstance == null) { + synchronized (DownloadManager.class) { + if (mInstance == null) { + mInstance = new DownloadManager(context.getApplicationContext()); + } + } + } + return mInstance; } public static void createDownload(Context context, @@ -192,7 +232,16 @@ public class DownloadManager implements DownloadStatusListener { downloadEntity.setPluggable(true); } downloadEntity.setPlugin(gameEntity.getTag() != null && gameEntity.getTag().size() != 0); - DownloadManager.getInstance(context.getApplicationContext()).add(downloadEntity); + + DownloadManager.getInstance(context).add(downloadEntity); + + if (AppDebugConfig.IS_DEBUG) { + AppDebugConfig.logMethodWithParams(DownloadManager.class, apkEntity.getUrl(), downloadEntity.getUrl(), method, entrance, location); + } + + //TODO remove + DownloadManager.getInstance(context).putStatus(downloadEntity.getUrl(), "downloading"); + // 收集下载数据 DataCollectionUtils.uploadDownload(context, downloadEntity, "开始"); } @@ -208,25 +257,16 @@ public class DownloadManager implements DownloadStatusListener { checkDownloadEntryRecordValidate(url); if (isFileCompleted(url)) { downloadEntity.setStatus(DownloadStatus.done); - DataChanger.getInstance().notifyDataChanged(downloadEntity); + DataChanger.INSTANCE.notifyDataChanged(downloadEntity); } else if (!isTaskDownloading(url)) { mContext.startService(getIntent(downloadEntity, DownloadStatus.add)); } + put(url, System.currentTimeMillis()); + putStatus(url, DownloadStatus.downloading.name()); } Utils.log(DownloadManager.class.getSimpleName(), "add"); } - public static DownloadManager getInstance(Context context) { - if (mInstance == null) { - synchronized (DownloadManager.class) { - if (mInstance == null) { - mInstance = new DownloadManager(context.getApplicationContext()); - } - } - } - return mInstance; - } - /** * 根据url到本地sqlite数据库中查找并获取该文件的保存路径, 并检查改路径下文件是否存在,不存在则删除该条无效记录 * @@ -237,7 +277,7 @@ public class DownloadManager implements DownloadStatusListener { if (entry != null && ((int) entry.getPercent()) != 0) { File file = new File(entry.getPath()); if (!file.exists()) { - DownloadDao.getInstance(mContext).delete(url); + mDownloadDao.delete(url); Utils.log(DownloadManager.class.getSimpleName(), "文件不存在,删除该条无效数据库记录!"); return true; } @@ -254,18 +294,16 @@ public class DownloadManager implements DownloadStatusListener { public boolean isFileCompleted(String url) { DownloadEntity entry = get(url); - if (entry != null) { - if (entry.getPercent() == 100) { - Utils.log(DownloadManager.class.getSimpleName(), "文件已经下载完成!"); - return true; - } + if (entry != null && entry.getPercent() == 100) { + Utils.log(DownloadManager.class.getSimpleName(), "文件已经下载完成!"); + return true; } return false; } public boolean isTaskDownloading(String url) { - if (DataChanger.getInstance().getDownloadingTasks().get(url) != null) { + if (DataChanger.INSTANCE.getDownloadingTasks().get(url) != null) { Utils.log(DownloadManager.class.getSimpleName(), url + "正在下载!"); return true; } @@ -286,7 +324,22 @@ public class DownloadManager implements DownloadStatusListener { * @return null表示下载列表中不存在该任务,否则返回下载任务 */ public DownloadEntity get(String url) { - return DownloadDao.getInstance(mContext).get(url); + return mDownloadDao.get(url); + } + + /** + * 根据包名获取某一个下载任务 + * + * @param packageName 包名 + * @return null表示下载列表中不存在该任务,否则返回下载任务 + */ + public DownloadEntity getByPackage(String packageName) { + for (DownloadEntity downloadEntity : mDownloadDao.getAll()) { + if (packageName.equals(downloadEntity.getPackageName())) { + return downloadEntity; + } + } + return null; } public void put(String url, long time) { @@ -333,43 +386,48 @@ public class DownloadManager implements DownloadStatusListener { */ public List getAll() { Utils.log(DownloadManager.class.getSimpleName(), "getAll"); - return DownloadDao.getInstance(mContext).getAll(); + return mDownloadDao.getAll(); } public ArrayMap getEntryMap(String name) { return gameMap.get(name); } - public void putStatus(String url, String status) { + void putStatus(String url, String status) { statusMap.put(url, status); + onTaskStatusChanged(get(url)); } public String getStatus(String url) { return statusMap.get(url); } + public ArrayMap getStatusMap() { + return statusMap; + } + public void sendMessageDelayed(Message msg, long delayMillis) { mHandler.sendMessageDelayed(msg, delayMillis); } /** - * 根据url恢复下载 + * 根据url恢复下载 //TODO 这个可以删除的,全都在add判断,add的时候不需要关注任务真实状态 * * @param url */ - public void resume(String url) { + @Deprecated + void resume(String url) { DownloadEntity entry = get(url); // 暂停任务后,把文件删除,然后点继续,文件不存在,需要重新加入下载队列进行下载 if (checkDownloadEntryRecordValidate(url)) { - Toast.makeText(mContext, "文件不存在!已重新加入下载队列", Toast.LENGTH_SHORT) - .show(); + Toast.makeText(mContext, "文件不存在!已重新加入下载队列", Toast.LENGTH_SHORT).show(); add(entry); } else { if (entry != null) { if (isFileCompleted(url)) { entry.setStatus(DownloadStatus.done); - DataChanger.getInstance().notifyDataChanged(entry); + DataChanger.INSTANCE.notifyDataChanged(entry); } else if (!isTaskDownloading(url)) { mContext.startService(getIntent(entry, DownloadStatus.resume)); } @@ -388,13 +446,13 @@ public class DownloadManager implements DownloadStatusListener { } public void cancel(String url, boolean isDeleteFile) { - DownloadEntity entry = DownloadDao.getInstance(mContext).get(url); + DownloadEntity entry = mDownloadDao.get(url); if (entry != null) { if (isDeleteFile) { FileUtils.deleteFile(entry.getPath()); } - DownloadDao.getInstance(mContext).delete(url); - Utils.log(DownloadManager.class.getSimpleName(), "cancle==>file and record were deleted!"); + mDownloadDao.delete(url); + Utils.log(DownloadManager.class.getSimpleName(), "cancel==>file and record were deleted!"); } if (entry != null) { entry.setStatus(DownloadStatus.cancel); @@ -406,10 +464,9 @@ public class DownloadManager implements DownloadStatusListener { /** * 取消并删除所有下载任务(包括下载中、等待、暂停状态的任务) */ - public void cancleAll() { - for (Entry entry : DataChanger.getInstance() - .getDownloadEntries().entrySet()) { - cancel(entry.getValue().getUrl(), true); + public void cancelAll() { + for (DownloadEntity entry : DataChanger.INSTANCE.getDownloadEntries().values()) { + cancel(entry.getUrl(), true); } Utils.log(DownloadManager.class.getSimpleName(), "cancel all"); } @@ -418,9 +475,8 @@ public class DownloadManager implements DownloadStatusListener { * 开始所有下载任务 */ public void startAll() { - for (Entry entry : DataChanger.getInstance() - .getDownloadEntries().entrySet()) { - add(entry.getValue()); + for (DownloadEntity entry : downloadingMap.values()) { + add(entry); } Utils.log(DownloadManager.class.getSimpleName(), "start all"); } @@ -429,10 +485,8 @@ public class DownloadManager implements DownloadStatusListener { * 暂停所有正在下载的任务 */ public void pauseAll() { - for (Entry entry : DataChanger.getInstance().getDownloadEntries().entrySet()) { - if (entry.getValue().getStatus() == DownloadStatus.downloading) { - pause(entry.getValue().getUrl()); - } + for (DownloadEntity entity : DataChanger.INSTANCE.getDownloadEntries().values()) { + pause(entity.getUrl()); } Utils.log(DownloadManager.class.getSimpleName(), "pause all"); } @@ -444,40 +498,32 @@ public class DownloadManager implements DownloadStatusListener { */ public void pause(String url) { checkDownloadEntryRecordValidate(url); - DownloadEntity entry = DataChanger.getInstance().getDownloadEntries() - .get(url); + DownloadEntity entry = DataChanger.INSTANCE.getDownloadEntries().get(url); if (entry != null) { mContext.startService(getIntent(entry, DownloadStatus.pause)); + put(url, System.currentTimeMillis()); + statusMap.put(url, DownloadStatus.pause.name()); } Utils.log(DownloadManager.class.getSimpleName(), "pause"); } - /** - * 根据包名获取某一个下载任务 - * - * @param packageName 包名 - * @return null表示下载列表中不存在该任务,否则返回下载任务 - */ - public DownloadEntity getByPackage(String packageName) { - for (DownloadEntity downloadEntity : DownloadDao.getInstance(mContext).getAll()) { - if (packageName.equals(downloadEntity.getPackageName())) { - return downloadEntity; - } + public void pause(DownloadEntity entity) { + if (entity != null) { + pause(entity.getUrl()); } - return null; } /** * 检查数据库中当前是下载状态,但并未在下载进程中的下载数据 */ public void checkAll() { - final List urlList = new ArrayList<>(DataChanger.getInstance().getDownloadingTasks().keySet()); + final List urlList = new ArrayList<>(DataChanger.INSTANCE.getDownloadingTasks().keySet()); for (DownloadEntity downloadEntity : getAll()) { if (!urlList.contains(downloadEntity.getUrl()) && downloadEntity.getStatus().equals(DownloadStatus.downloading)) { downloadEntity.setStatus(DownloadStatus.pause); - DownloadDao.getInstance(mContext).newOrUpdate(downloadEntity); - DataChanger.getInstance().notifyDataChanged(downloadEntity); + mDownloadDao.newOrUpdate(downloadEntity); + DataChanger.INSTANCE.notifyDataChanged(downloadEntity); } } @@ -489,18 +535,18 @@ public class DownloadManager implements DownloadStatusListener { } public void addObserver(DataWatcher dataWatcher) { - DataChanger.getInstance().addObserver(dataWatcher); Utils.log(DownloadManager.class.getSimpleName(), "addObserver"); + DataChanger.INSTANCE.addObserver(dataWatcher); } public void removeObserver(DataWatcher dataWatcher) { - DataChanger.getInstance().deleteObserver(dataWatcher); - Utils.log(DownloadManager.class.getSimpleName(), "removeObserver"); - } - - public void removeObservers() { - DataChanger.getInstance().deleteObservers(); Utils.log(DownloadManager.class.getSimpleName(), "removeObserver"); + DataChanger.INSTANCE.deleteObserver(dataWatcher); } +// +// public void removeObservers() { +// Utils.log(DownloadManager.class.getSimpleName(), "removeObserver"); +// DataChanger.INSTANCE.deleteObservers(); +// } } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/PlatformAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/PlatformAdapter.java index 85f5320051..30c12ca667 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/PlatformAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/PlatformAdapter.java @@ -20,7 +20,6 @@ import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast; -import com.gh.download.DownloadManager; import com.gh.common.util.DataUtils; import com.gh.common.util.DialogUtils; import com.gh.common.util.DisplayUtils; @@ -28,6 +27,7 @@ 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.download.DownloadManager; import com.gh.gamecenter.DownloadManagerActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.VoteActivity; @@ -407,7 +407,7 @@ public class PlatformAdapter extends BaseRecyclerAdapter { DataUtils.onEvent(mContext, "插件化", mGameEntity.getName(), kv6); DownloadManager.createDownload(mContext, apkEntity, mGameEntity, method, mEntrance, mLocation); - DownloadManager.getInstance(mContext).putStatus(apkEntity.getUrl(), "downloading"); +// DownloadManager.getInstance(mContext).putStatus(apkEntity.getUrl(), "downloading"); mDownloadItemTvStatus.setText("0.0%"); } else { @@ -483,8 +483,7 @@ public class PlatformAdapter extends BaseRecyclerAdapter { GradientDrawable drawable = new GradientDrawable(); drawable.setColor(0xFFC7C7C7); layers[0] = drawable; - ClipDrawable clipDrawable = new ClipDrawable(new ColorDrawable( - color), Gravity.LEFT, ClipDrawable.HORIZONTAL); + ClipDrawable clipDrawable = new ClipDrawable(new ColorDrawable(color), Gravity.LEFT, ClipDrawable.HORIZONTAL); layers[1] = clipDrawable; LayerDrawable layerDrawable = new LayerDrawable(layers); layerDrawable.setId(0, android.R.id.background); diff --git a/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragment.java b/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragment.java index fb4bf588ce..a5cb595baf 100644 --- a/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragment.java +++ b/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragment.java @@ -3,7 +3,6 @@ package com.gh.gamecenter.download; import android.app.NotificationManager; import android.content.Context; import android.content.Intent; -import android.os.Message; import android.support.v4.content.ContextCompat; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; @@ -20,11 +19,7 @@ import com.gh.common.util.DialogUtils; import com.gh.common.util.NetworkUtils; import com.gh.common.util.PackageUtils; import com.gh.common.view.RecyclerViewExtended; -import com.lightgame.download.DataWatcher; -import com.lightgame.download.DownloadConfig; -import com.lightgame.download.DownloadEntity; import com.gh.download.DownloadManager; -import com.lightgame.download.DownloadStatus; import com.gh.gamecenter.DownloadManagerActivity; import com.gh.gamecenter.MainActivity; import com.gh.gamecenter.R; @@ -33,12 +28,16 @@ import com.gh.gamecenter.eventbus.EBMiPush; import com.gh.gamecenter.eventbus.EBPackage; import com.gh.gamecenter.eventbus.EBSkip; import com.gh.gamecenter.eventbus.EBUISwitch; +import com.lightgame.download.DataWatcher; +import com.lightgame.download.DownloadEntity; +import com.lightgame.download.DownloadStatus; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import butterknife.BindView; +import butterknife.OnClick; /** @@ -47,7 +46,7 @@ import butterknife.BindView; * @author 黄壮华 */ public class GameDownloadFragment extends BaseFragment implements View.OnClickListener { - + @BindView(R.id.downloadmanager_rv_show) RecyclerViewExtended mDownloadmanagerRv; @@ -69,7 +68,6 @@ public class GameDownloadFragment extends BaseFragment implements View.OnClickLi @BindView(R.id.downloadmanager_tv_allstart) TextView mDownloadmanagerAllstartTv; - LinearLayoutManager layoutManager; GameDownloadFragmentAdapter adapter; RelativeLayout.LayoutParams rparams; @@ -191,7 +189,6 @@ public class GameDownloadFragment extends BaseFragment implements View.OnClickLi } isScroll = false; - mDownloadmanagerAllstartTv.setOnClickListener(this); rparams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); @@ -214,11 +211,11 @@ public class GameDownloadFragment extends BaseFragment implements View.OnClickLi }, 300); } }); - + mDownloadmanagerRv.setHasFixedSize(true); adapter = new GameDownloadFragmentAdapter(getActivity(), mNoDataSkip, url); mDownloadmanagerRv.setAdapter(adapter); - layoutManager = new LinearLayoutManager(getActivity()); + final LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); mDownloadmanagerRv.setLayoutManager(layoutManager); ((DefaultItemAnimator) mDownloadmanagerRv.getItemAnimator()).setSupportsChangeAnimations(false); mDownloadmanagerRv.addOnScrollListener(new RecyclerView.OnScrollListener() { @@ -376,49 +373,53 @@ public class GameDownloadFragment extends BaseFragment implements View.OnClickLi } } + @OnClick(R.id.downloadmanager_tv_allstart) @Override public void onClick(View v) { if (v.getId() == R.id.downloadmanager_tv_allstart) { String str = ((TextView) v).getText().toString(); if ("全部开始".equals(str)) { if (NetworkUtils.isWifiConnected(getActivity())) { - allStart(); + startAll(); } else { DialogUtils.showDownloadDialog(getActivity(), new DialogUtils.ConfirmListener() { @Override public void onConfirm() { - allStart(); + startAll(); } }); } } else { - for (DownloadEntity downloadEntity : adapter.getDownloadingList()) { - DownloadManager.getInstance(getActivity()).put(downloadEntity.getUrl(), - System.currentTimeMillis()); - Message msg = Message.obtain(); - msg.what = DownloadConfig.PAUSE_DOWNLOAD_TASK; - msg.obj = downloadEntity.getUrl(); - DownloadManager.getInstance(getActivity()).sendMessageDelayed(msg, 1000); - } - mDownloadmanagerAllstartTv.setText("全部开始"); - mDownloadmanagerAllstartTv.setTextColor(ContextCompat.getColor(getContext(), R.color.theme)); + pauseAll(); } adapter.notifyItemChanged(adapter.getBase()); } } - private void allStart() { + public void pauseAll() { +// for (DownloadEntity downloadEntity : adapter.getDownloadingList()) { +//// DownloadManager.getInstance(getActivity()).put(downloadEntity.getUrl(), +//// System.currentTimeMillis()); +//// Message msg = Message.obtain(); +//// msg.what = DownloadConfig.PAUSE_DOWNLOAD_TASK; +//// msg.obj = downloadEntity.getUrl(); +//// DownloadManager.getInstance(getActivity()).sendMessageDelayed(msg, 1000); +// DownloadManager.getInstance(getContext()).pause(downloadEntity); +// } + DownloadManager.getInstance(getContext()).pauseAll(); + mDownloadmanagerAllstartTv.setText("全部开始"); + mDownloadmanagerAllstartTv.setTextColor(ContextCompat.getColor(getContext(), R.color.theme)); + } + + private void startAll() { for (DownloadEntity downloadEntity : adapter.getDownloadingList()) { - DownloadManager.getInstance(getActivity()).put(downloadEntity.getUrl(), - System.currentTimeMillis()); - Message msg = Message.obtain(); - msg.what = DownloadConfig.CONTINUE_DOWNLOAD_TASK; - msg.obj = downloadEntity.getUrl(); - DownloadManager.getInstance(getActivity()).sendMessageDelayed(msg, 1000); + DownloadManager.getInstance(getContext()).add(downloadEntity); adapter.getStatusMap().put(downloadEntity.getUrl(), "downloading"); } +// DownloadManager.getInstance(getContext()).startAll(); mDownloadmanagerAllstartTv.setText("全部暂停"); mDownloadmanagerAllstartTv.setTextColor(ContextCompat.getColor(getContext(), R.color.btn_gray)); + } } diff --git a/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java index e61259e331..1080dce897 100644 --- a/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragmentAdapter.java @@ -5,38 +5,37 @@ 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.content.ContextCompat; import android.support.v4.util.ArrayMap; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView.ViewHolder; 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 android.widget.ToggleButton; +import com.gh.common.util.AppDebugConfig; import com.gh.common.util.BitmapUtils; import com.gh.common.util.DataUtils; import com.gh.common.util.DialogUtils; -import com.lightgame.download.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.lightgame.download.DownloadConfig; -import com.lightgame.download.DownloadEntity; import com.gh.download.DownloadManager; -import com.lightgame.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 com.lightgame.adapter.BaseRecyclerAdapter; +import com.lightgame.download.DownloadEntity; +import com.lightgame.download.DownloadStatus; +import com.lightgame.download.FileUtils; import org.greenrobot.eventbus.EventBus; import org.json.JSONException; @@ -60,6 +59,10 @@ class GameDownloadFragmentAdapter extends BaseRecyclerAdapter { private List downloadingList; private List doneList; + // 1、此处的所有MAP只是对DownloadManager内部Map的引用, + // 2、任何对下载器任务的操作,通过DownloadManager处理,由DownloadManager处理之后抛出对应的状态变化事件 + // 3、监听下载任务状态变化,刷新界面 + // 4、对状态只读不写。 private ArrayMap locationMap; private ArrayMap statusMap; private ArrayMap urlMap; @@ -74,24 +77,26 @@ class GameDownloadFragmentAdapter extends BaseRecyclerAdapter { downloadmanager_tv_none = textView; - locationMap = new ArrayMap<>(); +// statusMap = DownloadManager.getInstance(mContext).getStatusMap(); +// downloadingList = new ArrayList<>(DownloadManager.getInstance(mContext).getDownloadingMap().values()); + statusMap = new ArrayMap<>(); + downloadingList = new ArrayList<>(); + + locationMap = new ArrayMap<>(); urlMap = new ArrayMap<>(); deleteList = new ArrayList<>(); - downloadingList = new ArrayList<>(); doneList = new ArrayList<>(); } @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); + View view = mLayoutInflater.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); + View view = mLayoutInflater.inflate(R.layout.fm_downloadmanager_item, parent, false); return new GameDownloadViewHolder(view); } } @@ -244,10 +249,11 @@ class GameDownloadFragmentAdapter extends BaseRecyclerAdapter { statusMap.put(url, "downloading"); notifyItemChanged(doneList.isEmpty() ? 0 : 1 + doneList.size()); - Message msg = Message.obtain(); - msg.what = DownloadConfig.CONTINUE_DOWNLOAD_TASK; - msg.obj = url; - DownloadManager.getInstance(mContext).sendMessageDelayed(msg, 1000); +// Message msg = Message.obtain(); +// msg.what = DownloadConfig.CONTINUE_DOWNLOAD_TASK; +// msg.obj = url; +// DownloadManager.getInstance(mContext).sendMessageDelayed(msg, 1000); + DownloadManager.getInstance(mContext).add(downloadEntity); } else { DialogUtils.showDownloadDialog(mContext, new DialogUtils.ConfirmListener() { @Override @@ -269,10 +275,12 @@ class GameDownloadFragmentAdapter extends BaseRecyclerAdapter { statusMap.put(url, "downloading"); notifyItemChanged(doneList.isEmpty() ? 0 : 1 + doneList.size()); - Message msg = Message.obtain(); - msg.what = DownloadConfig.CONTINUE_DOWNLOAD_TASK; - msg.obj = url; - DownloadManager.getInstance(mContext).sendMessageDelayed(msg, 1000); +// Message msg = Message.obtain(); +// msg.what = DownloadConfig.CONTINUE_DOWNLOAD_TASK; +// msg.obj = url; +// DownloadManager.getInstance(mContext).sendMessageDelayed(msg, 1000); + + DownloadManager.getInstance(mContext).add(downloadEntity); } }); } @@ -306,10 +314,12 @@ class GameDownloadFragmentAdapter extends BaseRecyclerAdapter { viewHolder.dmDelete.setVisibility(View.VISIBLE); statusMap.put(url, "pause"); notifyItemChanged(doneList.isEmpty() ? 0 : 1 + doneList.size()); - Message msg = Message.obtain(); - msg.what = DownloadConfig.PAUSE_DOWNLOAD_TASK; - msg.obj = url; - DownloadManager.getInstance(mContext).sendMessageDelayed(msg, 1000); +// Message msg = Message.obtain(); +// msg.what = DownloadConfig.PAUSE_DOWNLOAD_TASK; +// msg.obj = url; +// DownloadManager.getInstance(mContext).sendMessageDelayed(msg, 1000); + + DownloadManager.getInstance(mContext).pause(downloadEntity); break; case "等待": Toast.makeText(mContext, "最多只能同时启动3个下载任务", Toast.LENGTH_SHORT).show(); @@ -362,18 +372,9 @@ class GameDownloadFragmentAdapter extends BaseRecyclerAdapter { } 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(mContext, 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(mContext, 8)); -// } -// cardRelativeLayout.setmBottom(DisplayUtils.dip2px(mContext, 8)); viewHolder.dm_item_head_tv_task.setText("下载中"); viewHolder.dm_item_head_tv_allstart.setVisibility(View.VISIBLE); @@ -397,47 +398,32 @@ class GameDownloadFragmentAdapter extends BaseRecyclerAdapter { viewHolder.dm_item_head_tv_allstart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + if (AppDebugConfig.IS_DEBUG) { + AppDebugConfig.logMethodWithParams(this, v, ((TextView) v).getText(), ((ToggleButton) v).isChecked()); + } String str = ((TextView) v).getText().toString(); if ("全部开始".equals(str)) { if (NetworkUtils.isWifiConnected(mContext)) { - for (DownloadEntity downloadEntity : downloadingList) { - DownloadManager.getInstance(mContext).put(downloadEntity.getUrl(), - System.currentTimeMillis()); - Message msg = Message.obtain(); - msg.what = DownloadConfig.CONTINUE_DOWNLOAD_TASK; - msg.obj = downloadEntity.getUrl(); - DownloadManager.getInstance(mContext).sendMessageDelayed(msg, 1000); - statusMap.put(downloadEntity.getUrl(), "downloading"); - } - viewHolder.dm_item_head_tv_allstart.setText("全部暂停"); - viewHolder.dm_item_head_tv_allstart.setTextColor(ContextCompat.getColor(mContext, R.color.btn_gray)); + startAll(viewHolder); } else { DialogUtils.showDownloadDialog(mContext, new DialogUtils.ConfirmListener() { @Override public void onConfirm() { - for (DownloadEntity downloadEntity : downloadingList) { - DownloadManager.getInstance(mContext).put(downloadEntity.getUrl(), - System.currentTimeMillis()); - Message msg = Message.obtain(); - msg.what = DownloadConfig.CONTINUE_DOWNLOAD_TASK; - msg.obj = downloadEntity.getUrl(); - DownloadManager.getInstance(mContext).sendMessageDelayed(msg, 1000); - statusMap.put(downloadEntity.getUrl(), "downloading"); - } - viewHolder.dm_item_head_tv_allstart.setText("全部暂停"); - viewHolder.dm_item_head_tv_allstart.setTextColor(ContextCompat.getColor(mContext, R.color.btn_gray)); + startAll(viewHolder); } }); } } else { - for (DownloadEntity downloadEntity : downloadingList) { - DownloadManager.getInstance(mContext).put(downloadEntity.getUrl(), - System.currentTimeMillis()); - Message msg = Message.obtain(); - msg.what = DownloadConfig.PAUSE_DOWNLOAD_TASK; - msg.obj = downloadEntity.getUrl(); - DownloadManager.getInstance(mContext).sendMessageDelayed(msg, 1000); - } +// for (DownloadEntity downloadEntity : downloadingList) { +//// DownloadManager.getInstance(mContext).put(downloadEntity.getUrl(), +//// System.currentTimeMillis()); +//// Message msg = Message.obtain(); +//// msg.what = DownloadConfig.PAUSE_DOWNLOAD_TASK; +//// msg.obj = downloadEntity.getUrl(); +//// DownloadManager.getInstance(mContext).sendMessageDelayed(msg, 1000); +// DownloadManager.getInstance(mContext).pause(downloadEntity); +// } + DownloadManager.getInstance(mContext).pauseAll(); viewHolder.dm_item_head_tv_allstart.setText("全部开始"); viewHolder.dm_item_head_tv_allstart.setTextColor(ContextCompat.getColor(mContext, R.color.theme)); } @@ -447,6 +433,24 @@ class GameDownloadFragmentAdapter extends BaseRecyclerAdapter { } } + public void startAll(DownloadHeadViewHolder viewHolder) { + for (DownloadEntity downloadEntity : downloadingList) { +// DownloadManager.getInstance(mContext).put(downloadEntity.getUrl(), +// System.currentTimeMillis()); +// Message msg = Message.obtain(); +// msg.what = DownloadConfig.CONTINUE_DOWNLOAD_TASK; +// msg.obj = downloadEntity.getUrl(); +// DownloadManager.getInstance(mContext).sendMessageDelayed(msg, 1000); + DownloadManager.getInstance(mContext).add(downloadEntity); + statusMap.put(downloadEntity.getUrl(), "downloading"); + } + +// DownloadManager.getInstance(mContext).startAll(); + + viewHolder.dm_item_head_tv_allstart.setText("全部暂停"); + viewHolder.dm_item_head_tv_allstart.setTextColor(ContextCompat.getColor(mContext, R.color.btn_gray)); + } + @Override public int getItemViewType(int position) { if (position == 0 || (doneList.size() > 0 && position == 1 + doneList.size())) { diff --git a/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java b/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java index dd56a0d150..0309a530c4 100644 --- a/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java +++ b/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java @@ -210,7 +210,8 @@ public class MessageFragment extends BaseFragment_ViewPager_Checkable { super.onPageScrolled(position, positionOffset, positionOffsetPixels); if (positionOffset != 0) { mLayoutParams.leftMargin = (int) (mWidth * (position + positionOffset + 0.2f)); - mMessageSlideLine.setLayoutParams(mLayoutParams); +// mMessageSlideLine.setLayoutParams(mLayoutParams); + mMessageSlideLine.requestLayout(); } } diff --git a/app/src/main/res/layout/downloadmanager.xml b/app/src/main/res/layout/downloadmanager.xml index b1b9fb9743..16ca40ea9b 100644 --- a/app/src/main/res/layout/downloadmanager.xml +++ b/app/src/main/res/layout/downloadmanager.xml @@ -6,7 +6,7 @@ + android:layout_height = "match_parent" /> 请指出你要推荐的游戏 下载中 全部开始 + 全部暂停 下载 搜索中... 热门搜索 @@ -45,7 +46,7 @@ 请输入搜索关键字 搜索 44.5% - 九游版 1.2MB/s(剩3分30秒) + 官方版 1.2MB/s(剩3分30秒) 右划发给好友\n免流量安装 放手发给好友\n免流量安装 加载失败,点击重试 diff --git a/libraries/LGLibrary b/libraries/LGLibrary index 4231857094..c75763b604 160000 --- a/libraries/LGLibrary +++ b/libraries/LGLibrary @@ -1 +1 @@ -Subproject commit 4231857094094aa20df69bfb2ef6f1e22946e60b +Subproject commit c75763b604f201301780b536345357fa34835de5