From 23f063edf206641d982e0d300695921f8ddf5f0b Mon Sep 17 00:00:00 2001 From: AriaLyy <511455842@qq.com> Date: Thu, 17 Aug 2017 16:33:41 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=BB=84=E6=B5=8B?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aria/core/common/AbsThreadTask.java | 36 ++++++++++++------ .../aria/core/download/BaseGroupTarget.java | 17 +++++++-- .../simple/download/DownloadModule.java | 38 ++++++++++++++++--- .../simple/download/SingleTaskActivity.java | 4 ++ .../multi_download/FileListAdapter.java | 27 +++++++++---- .../multi_download/FileListEntity.java | 5 ++- .../multi_download/MultiTaskActivity.java | 32 ++++++++++++++-- app/src/main/res/values/strings.xml | 30 ++++++++++++++- 8 files changed, 155 insertions(+), 34 deletions(-) diff --git a/Aria/src/main/java/com/arialyy/aria/core/common/AbsThreadTask.java b/Aria/src/main/java/com/arialyy/aria/core/common/AbsThreadTask.java index e6d4ba6c..82796d94 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/common/AbsThreadTask.java +++ b/Aria/src/main/java/com/arialyy/aria/core/common/AbsThreadTask.java @@ -140,8 +140,7 @@ public abstract class AbsThreadTask subTaskFileName) { + @Deprecated public TARGET setSubTaskFileName(List subTaskFileName) { + + return setSubFileName(subTaskFileName); + } + + /** + * 设置子任务文件名,该方法必须在{@link #setDownloadDirPath(String)}之后调用,否则不生效 + */ + public TARGET setSubFileName(List subTaskFileName) { if (subTaskFileName == null || subTaskFileName.isEmpty()) return (TARGET) this; mSubTaskFileName.addAll(subTaskFileName); if (mUrls.size() != subTaskFileName.size()) { @@ -187,8 +197,8 @@ abstract class BaseGroupTarget createMultiTestList() { - String[] names = getContext().getResources().getStringArray(R.array.file_nams); - String[] downloadUrl = getContext().getResources().getStringArray(R.array.download_url); + String[] names = getStringArray(R.array.file_nams); + String[] downloadUrl = getStringArray(R.array.download_url); List list = new ArrayList<>(); int i = 0; for (String name : names) { FileListEntity entity = new FileListEntity(); entity.name = name; - entity.downloadUrl = downloadUrl[i]; + entity.key = downloadUrl[i]; entity.downloadPath = Environment.getExternalStorageDirectory() + "/Download/" + name; list.add(entity); i++; @@ -69,6 +71,33 @@ public class DownloadModule extends BaseModule { return list; } + private String[] getStringArray(int array) { + return getContext().getResources().getStringArray(array); + } + + /** + * 创建任务组 + */ + public List createGroupTestList() { + List list = new ArrayList<>(); + list.add(createGroupEntity(R.array.group_urls, R.array.group_names, "任务组_0")); + list.add(createGroupEntity(R.array.group_urls_1, R.array.group_names_1, "任务组_1")); + list.add(createGroupEntity(R.array.group_urls_2, R.array.group_names_2, "任务组_2")); + list.add(createGroupEntity(R.array.group_urls_3, R.array.group_names_3, "任务组_3")); + return list; + } + + private FileListEntity createGroupEntity(int urls, int names, String alias) { + FileListEntity entity = new FileListEntity(); + entity.urls = getStringArray(urls); + entity.names = getStringArray(names); + entity.isGroup = true; + entity.name = alias; + entity.key = CommonUtil.getMd5Code(Arrays.asList(entity.urls)); + entity.downloadPath = Environment.getExternalStorageDirectory() + "/Download/" + alias; + return entity; + } + /** * 创建下载实体,Aria也可以通过下载实体启动下载 */ @@ -80,5 +109,4 @@ public class DownloadModule extends BaseModule { entity.setDownloadPath(path); return entity; } - } \ No newline at end of file diff --git a/app/src/main/java/com/arialyy/simple/download/SingleTaskActivity.java b/app/src/main/java/com/arialyy/simple/download/SingleTaskActivity.java index c96d01cc..ac29dfa7 100644 --- a/app/src/main/java/com/arialyy/simple/download/SingleTaskActivity.java +++ b/app/src/main/java/com/arialyy/simple/download/SingleTaskActivity.java @@ -30,10 +30,13 @@ import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.download.DownloadTarget; import com.arialyy.aria.core.download.DownloadTask; import com.arialyy.aria.core.inf.IEntity; +import com.arialyy.aria.util.CommonUtil; +import com.arialyy.frame.util.show.L; import com.arialyy.frame.util.show.T; import com.arialyy.simple.R; import com.arialyy.simple.base.BaseActivity; import com.arialyy.simple.databinding.ActivitySingleBinding; +import java.io.File; public class SingleTaskActivity extends BaseActivity { @@ -157,6 +160,7 @@ public class SingleTaskActivity extends BaseActivity { mCancel.setEnabled(false); setBtState(true); getBinding().setSpeed(""); + L.d(TAG, "md5Code ==> " + CommonUtil.getFileMD5(new File(task.getDownloadPath()))); } @Download.onNoSupportBreakPoint(DOWNLOAD_URL) diff --git a/app/src/main/java/com/arialyy/simple/download/multi_download/FileListAdapter.java b/app/src/main/java/com/arialyy/simple/download/multi_download/FileListAdapter.java index e423f79a..d0b4df38 100644 --- a/app/src/main/java/com/arialyy/simple/download/multi_download/FileListAdapter.java +++ b/app/src/main/java/com/arialyy/simple/download/multi_download/FileListAdapter.java @@ -26,6 +26,7 @@ import com.arialyy.aria.core.Aria; import com.arialyy.simple.R; import com.arialyy.simple.base.adapter.AbsHolder; import com.arialyy.simple.base.adapter.AbsRVAdapter; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; @@ -43,8 +44,8 @@ final class FileListAdapter extends AbsRVAdapter data) { super(context, data); for (int i = 0, len = data.size(); i < len; i++) { - mBtStates.put(data.get(i).downloadUrl, true); - mPositions.put(data.get(i).downloadUrl, i); + mBtStates.put(data.get(i).key, true); + mPositions.put(data.get(i).key, i); } } @@ -59,17 +60,27 @@ final class FileListAdapter extends AbsRVAdapter { super.init(savedInstanceState); Aria.download(this).register(); setTitle("多任务下载"); + mData.addAll(getModule(DownloadModule.class).createGroupTestList()); mData.addAll(getModule(DownloadModule.class).createMultiTestList()); mAdapter = new FileListAdapter(this, mData); mList.setLayoutManager(new LinearLayoutManager(this)); @@ -93,7 +94,32 @@ public class MultiTaskActivity extends BaseActivity { mAdapter.updateBtState(task.getKey(), true); } - @Download.onTaskComplete void taskComplete(DownloadTask task) { + //############################### 任务组 ############################## + @DownloadGroup.onTaskComplete void groupTaskComplete(DownloadGroupTask task) { + mAdapter.updateBtState(task.getKey(), true); + } + + @DownloadGroup.onTaskStart void groupTaskStart(DownloadGroupTask task) { + mAdapter.updateBtState(task.getKey(), false); + } + + @DownloadGroup.onTaskResume void groupTaskResume(DownloadGroupTask task) { + mAdapter.updateBtState(task.getKey(), false); + } + + @DownloadGroup.onTaskStop void groupTaskStop(DownloadGroupTask task) { + mAdapter.updateBtState(task.getKey(), true); + } + + @DownloadGroup.onTaskCancel void groupTaskCancel(DownloadGroupTask task) { + mAdapter.updateBtState(task.getKey(), true); + } + + @DownloadGroup.onTaskFail void groupTaskFail(DownloadGroupTask task) { + mAdapter.updateBtState(task.getKey(), true); + } + + @DownloadGroup.onTaskComplete void taskComplete(DownloadGroupTask task) { mAdapter.updateBtState(task.getKey(), true); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5d127bee..02bc4a8c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -50,10 +50,23 @@ - http://static.gaoshouyou.com/d/12/0d/7f120f50c80d2e7b8c4ba24ece4f9cdd.apk http://static.ilongyuan.cn/rayark/RayarkFZ_2.0.7.apk + + + http://droidweb.smartgame-down.com/201708171123/C183E9C2010C7CABACFB398250A3DB75/new/game1/1/107001/qq_1502875308555.apk?f=web_1 + http://droidweb.smartgame-down.com/201708171124/6E5AF91791661236D0A2F60125D3B45F/new/game1/93/113093/00D42A6AA63A039485F510C2E4D69BAA_1498831237.apk?f=web_1 + + + + http://droidweb.smartgame-down.com/201708171125/005BCF0FFBB75510958D14074286B25F/new/game1/2/106202/qqkj_1502868291416.apk?f=web_1 + http://droidweb.smartgame-down.com/201708171126/05FAAA4FD294BC63AA8F792636961D19/new/game1/72/110472/com.taobao.taobao-6.9.0-157-0629_1498744826.apk?f=web_1 + + + + http://droidweb.smartgame-down.com/201708171127/F55445FD8B7BBA8D72CA4B7D7BD91F90/new/game1/84/33184/txtim_1502854269836.apk?f=web_1 + http://droidweb.smartgame-down.com/201708171128/5C4D0289F0B83690BF252420F473FB9F/new/game1/46/108046/com.shuqi.controller-10.5.2.50-137-0703_1499083244.apk?f=web_1 @@ -62,4 +75,19 @@ + + QQ.apk + 百度贴吧.apk + + + + QQ空间.apk + 淘宝.apk + + + + TIM.apk + 书旗小说.apk + + From 219275bf2382e4fff4740cc37015f820cff63a24 Mon Sep 17 00:00:00 2001 From: AriaLyy <511455842@qq.com> Date: Fri, 18 Aug 2017 18:21:44 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=BB=84=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=96=87=E4=BB=B6=E5=A4=A7=E5=B0=8F=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/download/DownloadGroupTarget.java | 21 +++++++++++++++++++ .../download/downloader/AbsGroupUtil.java | 20 ++++++++++++++++-- .../downloader/DownloadGroupUtil.java | 12 ++++++++--- .../downloader/FtpDirDownloadUtil.java | 1 - .../download/group/DownloadGroupActivity.java | 3 ++- build.gradle | 2 +- 6 files changed, 51 insertions(+), 8 deletions(-) diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupTarget.java b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupTarget.java index 1dbbf2ff..6d938325 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupTarget.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupTarget.java @@ -16,6 +16,7 @@ package com.arialyy.aria.core.download; import android.text.TextUtils; +import android.util.Log; import com.arialyy.aria.orm.DbEntity; import com.arialyy.aria.util.CheckUtil; import com.arialyy.aria.util.CommonUtil; @@ -59,6 +60,26 @@ public class DownloadGroupTarget mEntity = mTaskEntity.entity; } + /** + * 任务组总任务大小,任务组是一个抽象的概念,没有真实的数据实体,任务组的大小是Aria动态获取子任务大小相加而得到的, + * 如果你知道当前任务组总大小,你也可以调用该方法给任务组设置大小 + * + * 为了更好的用户体验,建议直接设置任务组文件大小 + * + * @param fileSize 任务组总大小 + */ + public DownloadGroupTarget setFileSize(long fileSize) { + if (fileSize <= 0) { + Log.w(TAG, "文件大小不能小于 0"); + return this; + } + if (mEntity.getFileSize() <= 1 || mEntity.getFileSize() != fileSize) { + mEntity.setFileSize(fileSize); + mEntity.update(); + } + return this; + } + /** * 如果你是使用{@link DownloadReceiver#load(DownloadGroupEntity)}进行下载操作,那么你需要设置任务组的下载地址 */ diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/AbsGroupUtil.java b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/AbsGroupUtil.java index f91f4fc9..543f452e 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/AbsGroupUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/AbsGroupUtil.java @@ -44,7 +44,7 @@ abstract class AbsGroupUtil implements IUtil { * 任务组所有任务总大小 */ long mTotalSize = 0; - protected long mCurrentLocation = 0; + long mCurrentLocation = 0; private ExecutorService mExePool; protected IDownloadGroupListener mListener; protected DownloadGroupTaskEntity mTaskEntity; @@ -83,6 +83,10 @@ abstract class AbsGroupUtil implements IUtil { private int mFailNum = 0; //实际的下载任务数 int mActualTaskNum = 0; + /** + * 是否需要读取文件长度,{@code true}需要 + */ + boolean isNeedLoadFileSize = true; AbsGroupUtil(IDownloadGroupListener listener, DownloadGroupTaskEntity taskEntity) { mListener = listener; @@ -95,6 +99,8 @@ abstract class AbsGroupUtil implements IUtil { mTasksMap.put(te.getEntity().getUrl(), te); } } + mTotalSize = taskEntity.getEntity().getFileSize(); + isNeedLoadFileSize = mTotalSize <= 1; for (DownloadEntity entity : mTaskEntity.entity.getSubTask()) { File file = new File(entity.getDownloadPath()); if (entity.getState() == IEntity.STATE_COMPLETE && file.exists()) { @@ -106,7 +112,17 @@ abstract class AbsGroupUtil implements IUtil { mCurrentLocation += file.exists() ? entity.getCurrentProgress() : 0; mActualTaskNum++; } - mTotalSize += entity.getFileSize(); + if (isNeedLoadFileSize) { + mTotalSize += entity.getFileSize(); + } + } + updateFileSize(); + } + + void updateFileSize() { + if (isNeedLoadFileSize) { + mTaskEntity.getEntity().setFileSize(mTotalSize); + mTaskEntity.getEntity().update(); } } diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/DownloadGroupUtil.java b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/DownloadGroupUtil.java index 490b45cc..b49a3189 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/DownloadGroupUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/DownloadGroupUtil.java @@ -91,12 +91,16 @@ public class DownloadGroupUtil extends AbsGroupUtil implements IUtil { @Override public void onComplete(String url, int code) { DownloadTaskEntity te = mExeMap.get(url); if (te != null) { - mTotalSize += te.getEntity().getFileSize(); + if (isNeedLoadFileSize) { + mTotalSize += te.getEntity().getFileSize(); + } startChildDownload(te); } mInitNum++; - if (mInitNum + mInitFailNum >= mTaskEntity.getEntity().getSubTask().size()) { + if (mInitNum + mInitFailNum >= mTaskEntity.getEntity().getSubTask().size() + || !isNeedLoadFileSize) { startRunningFlow(); + updateFileSize(); } } @@ -116,8 +120,10 @@ public class DownloadGroupUtil extends AbsGroupUtil implements IUtil { if (mActualTaskNum < 0) mActualTaskNum = 0; } failNum++; - if (mInitNum + mInitFailNum >= mTaskEntity.getEntity().getSubTask().size()) { + if (mInitNum + mInitFailNum >= mTaskEntity.getEntity().getSubTask().size() + || !isNeedLoadFileSize) { startRunningFlow(); + updateFileSize(); } } }; diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/FtpDirDownloadUtil.java b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/FtpDirDownloadUtil.java index f8c97c13..82e77f55 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/FtpDirDownloadUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/FtpDirDownloadUtil.java @@ -37,7 +37,6 @@ public class FtpDirDownloadUtil extends AbsGroupUtil { new FtpDirInfoThread(mTaskEntity, new OnFileInfoCallback() { @Override public void onComplete(String url, int code) { if (code >= 200 && code < 300) { - mTotalSize = mTaskEntity.getEntity().getFileSize(); for (DownloadEntity entity : mTaskEntity.entity.getSubTask()) { mExeMap.put(entity.getUrl(), createChildDownloadTask(entity)); } diff --git a/app/src/main/java/com/arialyy/simple/download/group/DownloadGroupActivity.java b/app/src/main/java/com/arialyy/simple/download/group/DownloadGroupActivity.java index cc10cb35..ff883db4 100644 --- a/app/src/main/java/com/arialyy/simple/download/group/DownloadGroupActivity.java +++ b/app/src/main/java/com/arialyy/simple/download/group/DownloadGroupActivity.java @@ -74,7 +74,8 @@ public class DownloadGroupActivity extends BaseActivity Date: Mon, 21 Aug 2017 23:46:59 +0800 Subject: [PATCH 3/3] 3.2.22 --- build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 49de7f49..43fc4c7f 100644 --- a/build.gradle +++ b/build.gradle @@ -5,8 +5,8 @@ buildscript { mavenCentral() } dependencies { -// classpath 'com.android.tools.build:gradle:2.3.0' - classpath 'com.android.tools.build:gradle:2.2.2' + classpath 'com.android.tools.build:gradle:2.3.3' +// classpath 'com.android.tools.build:gradle:2.2.2' classpath 'com.novoda:bintray-release:0.5.0' // classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7' // classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' @@ -37,7 +37,7 @@ task clean(type: Delete) { ext { userOrg = 'arialyy' groupId = 'com.arialyy.aria' - publishVersion = '3.2.21_dev_2' + publishVersion = '3.2.22' repoName='maven' desc = 'android 下载框架' website = 'https://github.com/AriaLyy/Aria'