Ver código fonte

下载框架由aria修改为okDownload

zengjiebin 7 anos atrás
pai
commit
c733018ca0
31 arquivos alterados com 1145 adições e 879 exclusões
  1. 8 7
      app/build.gradle
  2. 2 1
      app/src/main/java/com/sheep/gamegroup/event/EventTypes.java
  3. 50 6
      app/src/main/java/com/sheep/gamegroup/greendao/DDProviderHelper.java
  4. 2 2
      app/src/main/java/com/sheep/gamegroup/greendao/download/DaoMaster.java
  5. 16 2
      app/src/main/java/com/sheep/gamegroup/greendao/download/DownLoadInfo.java
  6. 16 2
      app/src/main/java/com/sheep/gamegroup/greendao/download/DownLoadInfoDao.java
  7. 58 39
      app/src/main/java/com/sheep/gamegroup/helper/DownloadHelper.java
  8. 2 2
      app/src/main/java/com/sheep/gamegroup/util/CertificationUtil.java
  9. 15 19
      app/src/main/java/com/sheep/gamegroup/util/CommonUtil.java
  10. 71 25
      app/src/main/java/com/sheep/gamegroup/util/DownloadUtil.java
  11. 14 0
      app/src/main/java/com/sheep/gamegroup/util/FileUtil.java
  12. 12 0
      app/src/main/java/com/sheep/gamegroup/util/Jump2View.java
  13. 146 0
      app/src/main/java/com/sheep/gamegroup/util/Md5Util.java
  14. 2 3
      app/src/main/java/com/sheep/gamegroup/util/SysAppUtil.java
  15. 2 2
      app/src/main/java/com/sheep/gamegroup/util/TestUtil.java
  16. 20 89
      app/src/main/java/com/sheep/gamegroup/util/WebviewJs.java
  17. 89 116
      app/src/main/java/com/sheep/gamegroup/view/activity/ActDownloadMgr.java
  18. 50 44
      app/src/main/java/com/sheep/gamegroup/view/activity/ActFindGame.java
  19. 48 44
      app/src/main/java/com/sheep/gamegroup/view/activity/ActFindInformation.java
  20. 2 2
      app/src/main/java/com/sheep/gamegroup/view/activity/ActInstallApkList.java
  21. 43 48
      app/src/main/java/com/sheep/gamegroup/view/activity/ActMain.java
  22. 73 68
      app/src/main/java/com/sheep/gamegroup/view/activity/ActPlayGameDetail.java
  23. 77 48
      app/src/main/java/com/sheep/gamegroup/view/activity/ActReservation.java
  24. 0 1
      app/src/main/java/com/sheep/gamegroup/view/activity/ActSheepApkList.java
  25. 74 116
      app/src/main/java/com/sheep/gamegroup/view/activity/TaskDetailAct.java
  26. 91 55
      app/src/main/java/com/sheep/gamegroup/view/fragment/FgtFindChild.java
  27. 0 2
      app/src/main/java/com/sheep/gamegroup/view/fragment/FgtGameAgencyRecharge.java
  28. 57 34
      app/src/main/java/com/sheep/gamegroup/view/fragment/FgtMyGame.java
  29. 14 6
      app/src/main/java/com/sheep/jiuyan/samllsheep/SheepApp.java
  30. 90 96
      app/src/main/java/com/sheep/jiuyan/samllsheep/service/DownloadService.java
  31. 1 0
      app/src/main/res/values/str_appstore_strings.xml

+ 8 - 7
app/build.gradle

@@ -23,7 +23,7 @@ android {
         flavorDimensions "versionCode"
     }
     greendao {
-        schemaVersion 11
+        schemaVersion 12
         targetGenDir 'src/main/java'
     }
 //    compileOptions{
@@ -252,12 +252,6 @@ dependencies {
 
     //    implementation 'com.google.zxing:core:3.3.0'
     implementation project(':ucrop')
-    implementation('com.arialyy.aria:aria-core:3.3.16') {
-        exclude group: 'com.android.support'
-    }
-//    implementation project(':Aria')
-
-    annotationProcessor 'com.arialyy.aria:aria-compiler:3.3.16'
     implementation 'com.sunfusheng:marqueeview:1.3.3'
     implementation files('libs/alipaySdk-20170922.jar')
     //极光
@@ -281,6 +275,13 @@ dependencies {
     implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-14'
 
     implementation 'org.greenrobot:greendao:3.2.2'
+
+    // core
+    implementation "com.liulishuo.okdownload:okdownload:1.0.4"
+    // provide sqlite to store breakpoints
+    implementation "com.liulishuo.okdownload:sqlite:1.0.4"
+    // provide okhttp to connect to backend
+    implementation "com.liulishuo.okdownload:okhttp:1.0.4"
 }
 
 static def releaseTime() {

+ 2 - 1
app/src/main/java/com/sheep/gamegroup/event/EventTypes.java

@@ -31,7 +31,8 @@ public enum EventTypes {
     GUIDE_NEXT,//引导页面下一步操作
     DELETE_GAME_ACCOUNT_REFRESH,//游戏删除账号,刷新界面
     GENERATION_ACCOUNT_REFRESH,//游戏代充,刷新界面
-    GENERATION_ACCOUNT_REFRESH_ADAPTER,//游戏代充,刷新界面(下载)
+    DOWNLOAD_START,//下载开始
+    DOWNLOAD_RUNNING,//游戏代充,刷新界面(下载)
     DOWNLOAD_STOP,//下载暂停
     DOWNLOAD_COMPLETE,//下载完成
     DOWNLOAD_FAIL,//下载失败

+ 50 - 6
app/src/main/java/com/sheep/gamegroup/greendao/DDProviderHelper.java

@@ -13,6 +13,7 @@ import com.sheep.gamegroup.greendao.download.ProcessRecordDao;
 import com.sheep.gamegroup.greendao.download.ScreenShotRecord;
 import com.sheep.gamegroup.greendao.download.ScreenShotRecordDao;
 import com.sheep.gamegroup.util.DataUtil;
+import com.sheep.gamegroup.util.DownloadUtil;
 import com.sheep.jiuyan.samllsheep.service.AutoCheckService;
 
 import java.util.List;
@@ -183,19 +184,41 @@ public class DDProviderHelper {
      * @param downloadUrl
      * @param apkPath
      */
-    public void setDownloadTaskFinish(Context ctx, String downloadUrl, String apkPath) {
+    public DownLoadInfo setDownloadTaskFinish(Context ctx, String downloadUrl, String apkPath) {
         DownLoadInfo downloadTask = getDownloadTask(ctx, downloadUrl);
         if (downloadTask != null) {
             downloadTask.setMApkPath(apkPath);
-            downloadTask.setMStatus(3);//DownloadTaskService.STATUS_FINISH
+            downloadTask.setMStatus(DownloadUtil.STATUS_FINISH);//DownloadTaskService.STATUS_FINISH
             getDaossion(ctx).getDownLoadInfoDao().update(downloadTask);
         }
+        return downloadTask;
     }
 
     /**
      * 更新任务状态
      *
      * @param ctx
+     * @param downloadedSize
+     * @param downloadTaskId
+     * @param downloadUrl
+     */
+    public DownLoadInfo updateDownloadPercent(Context ctx, double downloadedSize, String averageSpeed, int downloadTaskId, String downloadUrl, int state) {
+        DownLoadInfo downloadTask = getDownloadTask(ctx, downloadUrl);
+        if (downloadTask != null) {
+            int percent = (int) (downloadedSize * 100 / downloadTask.getMTotalSize() );
+            downloadTask.setMPercent(percent);
+            downloadTask.setAverageSpeed(averageSpeed);
+            downloadTask.setMDownloadedSize(downloadedSize);
+            downloadTask.setMDownloadTaskId(downloadTaskId);
+            downloadTask.setMStatus(state);//2下载中
+            updateDownload(ctx, downloadTask);
+        }
+        return downloadTask;
+    }
+    /**
+     * 更新任务状态
+     *
+     * @param ctx
      * @param percent
      * @param downloadedSize
      * @param totalSize
@@ -216,24 +239,45 @@ public class DDProviderHelper {
 
 
     /**
+     * 添加文件总长度
+     *
+     * @param ctx
+     * @param downloadUrl
+     * @param totalLength
+     */
+    public DownLoadInfo setDownloadTaskTotal(Context ctx, String downloadUrl, double totalLength) {
+        try {
+            DownLoadInfo downloadTask = getDownloadTask(ctx, downloadUrl);
+            if (downloadTask != null) {
+                downloadTask.setMTotalSize(totalLength);
+                updateDownload(ctx, downloadTask);
+                return downloadTask;
+            }
+            return null;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+    /**
      * 改变任务状态
      *
      * @param ctx
      * @param downloadUrl
      * @param status
      */
-    public boolean setDownloadTaskStatus(Context ctx, String downloadUrl, int status) {
+    public DownLoadInfo setDownloadTaskStatus(Context ctx, String downloadUrl, int status) {
         try {
             DownLoadInfo downloadTask = getDownloadTask(ctx, downloadUrl);
             if (downloadTask != null) {
                 downloadTask.setMStatus(status);
                 updateDownload(ctx, downloadTask);
-                return true;
+                return downloadTask;
             }
-            return false;
+            return null;
         } catch (Exception e) {
             e.printStackTrace();
-            return false;
+            return null;
         }
     }
 

+ 2 - 2
app/src/main/java/com/sheep/gamegroup/greendao/download/DaoMaster.java

@@ -14,10 +14,10 @@ import org.greenrobot.greendao.identityscope.IdentityScopeType;
 
 // THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
 /**
- * Master of DAO (schema version 11): knows all DAOs.
+ * Master of DAO (schema version 12): knows all DAOs.
  */
 public class DaoMaster extends AbstractDaoMaster {
-    public static final int SCHEMA_VERSION = 11;
+    public static final int SCHEMA_VERSION = 12;
 
     /** Creates underlying database table using DAOs. */
     public static void createAllTables(Database db, boolean ifNotExists) {

+ 16 - 2
app/src/main/java/com/sheep/gamegroup/greendao/download/DownLoadInfo.java

@@ -120,6 +120,11 @@ public class DownLoadInfo implements Serializable{
      */
     @Property(nameInDb = "where_from")
     private int whereFrom;
+    /**
+     * 下载速度
+     */
+    @Property(nameInDb = "average_speed")
+    private String averageSpeed;
 
     public int getWhereFrom() {
         return whereFrom;
@@ -249,12 +254,20 @@ public class DownLoadInfo implements Serializable{
         this.mChannelDownloadUrl = mChannelDownloadUrl;
     }
 
-    @Generated(hash = 1556387369)
+    public String getAverageSpeed() {
+        return this.averageSpeed;
+    }
+
+    public void setAverageSpeed(String averageSpeed) {
+        this.averageSpeed = averageSpeed;
+    }
+
+    @Generated(hash = 601502121)
     public DownLoadInfo(Long mId, Long mCreateTime, Integer mDownloadTaskId,
             String mGameName, String mIconUrl, Integer mPercent, @NotNull Integer mGameID,
             Double mDownloadedSize, Double mTotalSize, Integer mStatus, String mDownloadUrl,
             String mChannelDownloadUrl, String mPackageName, Integer mVersionCode,
-            String mApkPath, int whereFrom) {
+            String mApkPath, int whereFrom, String averageSpeed) {
         this.mId = mId;
         this.mCreateTime = mCreateTime;
         this.mDownloadTaskId = mDownloadTaskId;
@@ -271,6 +284,7 @@ public class DownLoadInfo implements Serializable{
         this.mVersionCode = mVersionCode;
         this.mApkPath = mApkPath;
         this.whereFrom = whereFrom;
+        this.averageSpeed = averageSpeed;
     }
 
     @Generated(hash = 1743687477)

+ 16 - 2
app/src/main/java/com/sheep/gamegroup/greendao/download/DownLoadInfoDao.java

@@ -38,6 +38,7 @@ public class DownLoadInfoDao extends AbstractDao<DownLoadInfo, Long> {
         public final static Property MVersionCode = new Property(13, Integer.class, "mVersionCode", false, "version_code");
         public final static Property MApkPath = new Property(14, String.class, "mApkPath", false, "apk_path");
         public final static Property WhereFrom = new Property(15, int.class, "whereFrom", false, "where_from");
+        public final static Property AverageSpeed = new Property(16, String.class, "averageSpeed", false, "average_speed");
     }
 
 
@@ -68,7 +69,8 @@ public class DownLoadInfoDao extends AbstractDao<DownLoadInfo, Long> {
                 "\"package_name\" TEXT," + // 12: mPackageName
                 "\"version_code\" INTEGER," + // 13: mVersionCode
                 "\"apk_path\" TEXT," + // 14: mApkPath
-                "\"where_from\" INTEGER NOT NULL );"); // 15: whereFrom
+                "\"where_from\" INTEGER NOT NULL ," + // 15: whereFrom
+                "\"average_speed\" TEXT);"); // 16: averageSpeed
     }
 
     /** Drops the underlying database table. */
@@ -152,6 +154,11 @@ public class DownLoadInfoDao extends AbstractDao<DownLoadInfo, Long> {
             stmt.bindString(15, mApkPath);
         }
         stmt.bindLong(16, entity.getWhereFrom());
+ 
+        String averageSpeed = entity.getAverageSpeed();
+        if (averageSpeed != null) {
+            stmt.bindString(17, averageSpeed);
+        }
     }
 
     @Override
@@ -229,6 +236,11 @@ public class DownLoadInfoDao extends AbstractDao<DownLoadInfo, Long> {
             stmt.bindString(15, mApkPath);
         }
         stmt.bindLong(16, entity.getWhereFrom());
+ 
+        String averageSpeed = entity.getAverageSpeed();
+        if (averageSpeed != null) {
+            stmt.bindString(17, averageSpeed);
+        }
     }
 
     @Override
@@ -254,7 +266,8 @@ public class DownLoadInfoDao extends AbstractDao<DownLoadInfo, Long> {
             cursor.isNull(offset + 12) ? null : cursor.getString(offset + 12), // mPackageName
             cursor.isNull(offset + 13) ? null : cursor.getInt(offset + 13), // mVersionCode
             cursor.isNull(offset + 14) ? null : cursor.getString(offset + 14), // mApkPath
-            cursor.getInt(offset + 15) // whereFrom
+            cursor.getInt(offset + 15), // whereFrom
+            cursor.isNull(offset + 16) ? null : cursor.getString(offset + 16) // averageSpeed
         );
         return entity;
     }
@@ -277,6 +290,7 @@ public class DownLoadInfoDao extends AbstractDao<DownLoadInfo, Long> {
         entity.setMVersionCode(cursor.isNull(offset + 13) ? null : cursor.getInt(offset + 13));
         entity.setMApkPath(cursor.isNull(offset + 14) ? null : cursor.getString(offset + 14));
         entity.setWhereFrom(cursor.getInt(offset + 15));
+        entity.setAverageSpeed(cursor.isNull(offset + 16) ? null : cursor.getString(offset + 16));
      }
     
     @Override

+ 58 - 39
app/src/main/java/com/sheep/gamegroup/helper/DownloadHelper.java

@@ -5,17 +5,20 @@ import android.text.TextUtils;
 import android.view.View;
 import android.widget.TextView;
 
-import com.arialyy.aria.core.Aria;
-import com.arialyy.aria.core.download.DownloadTarget;
-import com.arialyy.aria.core.inf.IEntity;
+import com.liulishuo.okdownload.DownloadTask;
+import com.liulishuo.okdownload.OkDownload;
+import com.liulishuo.okdownload.StatusUtil;
 import com.sheep.gamegroup.event.BigEvent;
 import com.sheep.gamegroup.event.EventTypes;
 import com.sheep.gamegroup.greendao.download.DownLoadInfo;
 import com.sheep.gamegroup.util.DownloadUtil;
 import com.kfzs.duanduan.utils.ApkUtils;
 import com.sheep.gamegroup.model.api.IDownload;
+import com.sheep.gamegroup.util.Jump2View;
+import com.sheep.gamegroup.util.UMConfigUtils;
 import com.sheep.gamegroup.view.activity.TaskDetailAct;
 import com.sheep.jiuyan.samllsheep.R;
+import com.sheep.jiuyan.samllsheep.SheepApp;
 import com.sheep.jiuyan.samllsheep.utils.G;
 import com.sheep.jiuyan.samllsheep.utils.PackageUtil;
 
@@ -43,10 +46,10 @@ public class DownloadHelper {
         updateDownloadTaskView(activity, iTask, down_tv, callBack,0);
     }
     public void updateDownloadTaskView(final Activity activity, final IDownload iTask, final TextView down_tv, final Action1<Object> callBack,int type) {
-        if(mDownloadTaskService == null){
-            mDownloadTaskService = new DownloadUtil(activity);
+        if(downloadUtil == null){
+            downloadUtil = new DownloadUtil(activity);
         }
-        TaskDetailAct.setBtnStr(iTask, mDownloadTaskService, new Action1<Object>() {
+        TaskDetailAct.setBtnStr(iTask, downloadUtil, new Action1<Object>() {
             @Override
             public void call(Object o) {
                 if(o instanceof Integer){
@@ -72,64 +75,80 @@ public class DownloadHelper {
         }
     }
 
-    private DownloadUtil mDownloadTaskService;
-    private DownloadTarget downloadTarget;
+    private DownloadUtil downloadUtil;
 
     /**
      * @param activity
-     * @param task
+     * @param download
      *   //下载应用
      */
-    private void downloadApp(Activity activity, IDownload task) {
+    private void downloadApp(Activity activity, IDownload download) {
         switch (downLoadType){
             case DownloadUtil.STATUS_INIT://可以下载
-                if(TextUtils.isEmpty(task.getDownload_link()) || !task.getDownload_link().contains("http")){
+                final DownloadTask task;
+                if (TextUtils.isEmpty(download.getDownload_link()) || !download.getDownload_link().contains("http")) {
                     G.showToast(R.string.error_download_link);
                     return;
                 }
-                this.downloadTarget = Aria.download(activity).load(task.getDownload_link());
-                final DownLoadInfo downLoadInfo = mDownloadTaskService.getDownloadTaskByUrl(task);
-                if(this.downloadTarget != null) {
-                    if (this.downloadTarget.getTaskState() == IEntity.STATE_RUNNING) {
-                        this.downloadTarget.stop();
-                    } else if (this.downloadTarget.getTaskState() == IEntity.STATE_FAIL) {
-                        this.downloadTarget.cancel(true);
-                        this.downloadTarget.removeRecord();
-                    } else {
-                        mDownloadTaskService.start(downLoadInfo);
-                    }
-                    new Thread(new Runnable() {
-                        @Override
-                        public void run() {
-                            if(mDownloadTaskService.addDownloadTask(downLoadInfo)){//添加数据到数据库,可以在下载管理中看到
-                                //发送红点信息
-                                EventBus.getDefault().post(BigEvent.get().setEventTypes(EventTypes.TIPS_DOWN_ICON));
+                task = DownloadUtil.getTask(download);
+                final StatusUtil.Status statusOnStore = StatusUtil.getStatus(task);
+                final DownLoadInfo downLoadInfo = downloadUtil.getDownloadTaskByUrl(download);
+                switch (statusOnStore) {
+                    case RUNNING:
+                    case PENDING://等待的
+                        OkDownload.with().downloadDispatcher().cancel(task);
+                        break;
+                    case IDLE://空闲的
+                    case UNKNOWN:
+                        downloadUtil.start(downLoadInfo);
+                        Jump2View.getInstance().startDownloadService(activity, downLoadInfo);
+                        break;
+                    case COMPLETED://有可能之前已经下载完成,但是数据库里已经没有数据了,这时只需要修改状态
+                        if(task.getFile() != null) {
+                            if(downloadUtil.checkFinish(downLoadInfo)){//检查文件是否真的完成
+                                DownLoadInfo newDownloadInfo = downloadUtil.setDownloadTaskFinish(task.getUrl(), task.getFile().getAbsolutePath());
+                                downLoadType = DownloadUtil.STATUS_FINISH;
+                                EventBus.getDefault().post(new BigEvent().setEventTypes(EventTypes.DOWNLOAD_COMPLETE).setData(newDownloadInfo));
+                            } else {//重新开始下载
+                                downloadUtil.delete(downLoadInfo);
+                                downloadUtil.start(downloadUtil.getDownloadTaskByUrl(download));
+                                downloadUtil.setDownloadTaskStatus(download.getDownload_link(), DownloadUtil.STATUS_INIT);
+                                downLoadType = DownloadUtil.STATUS_INIT;
                             }
                         }
-                    }).start();
+                        break;
                 }
+                new Thread(new Runnable() {
+                    @Override
+                    public void run() {
+                        if (downloadUtil.addDownloadTask(downLoadInfo)) {
+                            //发送红点信息
+                            EventBus.getDefault().post(BigEvent.get().setEventTypes(EventTypes.TIPS_DOWN_ICON));
+                        }
+                    }
+                }).start();
+                UMConfigUtils.onEvent(UMConfigUtils.Event.TASK_DOWNLOAD);
                 break;
             case DownloadUtil.STATUS_FINISH://已经下载完成,可以安装
-                String path = PackageUtil.isExistsFile(task.getPackage_names(), task.getDownload_link());
+                String path = PackageUtil.isExistsFile(download.getPackage_names(), download.getDownload_link());
                 if(TextUtils.isEmpty(path)){//数据库保存有下载完成的状态,但是应用已经被删除,需要修复其下载状态
-                    if(TextUtils.isEmpty(task.getDownload_link()) || !task.getDownload_link().contains("http")){
+                    if(TextUtils.isEmpty(download.getDownload_link()) || !download.getDownload_link().contains("http")){
                         G.showToast(R.string.error_download_link);
                         return;
                     }
-                    this.downloadTarget = Aria.download(activity).load(task.getDownload_link());
-                    if(this.downloadTarget != null) {
-                        this.downloadTarget.cancel(true);
-                        this.downloadTarget.removeRecord();
-                        mDownloadTaskService.start(mDownloadTaskService.getDownloadTaskByUrl(task));
-                        mDownloadTaskService.setDownloadTaskStatus(task.getDownload_link(), DownloadUtil.STATUS_INIT);
+                    final DownLoadInfo oldDownloadInfo = downloadUtil.getDownloadTaskByUrl(download);
+                    if(oldDownloadInfo != null) {
+                        downloadUtil.delete(oldDownloadInfo);
+                        downloadUtil.start(downloadUtil.getDownloadTaskByUrl(download));
+                        downloadUtil.setDownloadTaskStatus(download.getDownload_link(), DownloadUtil.STATUS_INIT);
                         downLoadType = DownloadUtil.STATUS_INIT;
                     }
                 } else {
-                    ApkUtils.installApk(activity, PackageUtil.isExistsFile(task.getPackage_names(), task.getDownload_link()));
+                    ApkUtils.installApk(SheepApp.getInstance(), path);
                 }
                 break;
             case DownloadUtil.STATUS_INSTALLED://已经安装,可以试玩
-                PackageUtil.startApp(activity, task.getPackage_names());
+                PackageUtil.startApp(activity, download.getPackage_names());
                 break;
         }
     }

+ 2 - 2
app/src/main/java/com/sheep/gamegroup/util/CertificationUtil.java

@@ -66,8 +66,8 @@ public class CertificationUtil {
             if (TextUtils.isEmpty(ext)) {
                 intent.putExtra(context.getString(R.string.kfzs_duanduan_datashare_package_extras), "");
                 intent.putExtra(context.getString(R.string.kfzs_duanduan_datashare_certification_token), SpUtils.getToken(context));
-            } else if("cancel".equals(ext)){
-                intent.putExtra(context.getString(R.string.kfzs_duanduan_datashare_certification_cancel), "cancel");
+            } else if("delete".equals(ext)){
+                intent.putExtra(context.getString(R.string.kfzs_duanduan_datashare_certification_cancel), "delete");
             }else  {
                 intent.putExtra(context.getString(R.string.kfzs_duanduan_datashare_package_extras), ext);
                 intent.putExtra(context.getString(R.string.kfzs_duanduan_datashare_certification_token), SpUtils.getToken(context));

+ 15 - 19
app/src/main/java/com/sheep/gamegroup/util/CommonUtil.java

@@ -25,10 +25,6 @@ import android.widget.TextView;
 
 import com.alibaba.fastjson.JSONObject;
 import com.alipay.sdk.app.PayTask;
-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.kfzs.duanduan.utils.ApkUtils;
 import com.mdad.sdk.mdsdk.AdManager;
 import com.mdad.sdk.mdsdk.common.AdData;
@@ -264,14 +260,14 @@ public class CommonUtil {
         if (TextUtils.isEmpty(downloadUrl)) {
             return;
         }
-        try {
-            DownloadTarget task = Aria.download(context).load(downloadUrl);
-            if (task != null && task.getTaskState() == IEntity.STATE_RUNNING) {
-                task.stop();
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
+//        try {
+//            DownloadTarget task = Aria.download(context).load(downloadUrl);
+//            if (task != null && task.getTaskState() == IEntity.STATE_RUNNING) {
+//                task.stop();
+//            }
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
     }
 
     /**
@@ -1109,7 +1105,7 @@ public class CommonUtil {
 
         @Override
         public void onCancel(SHARE_MEDIA share_media) {
-            LogUtil.println("UMShareListener", "cancel", share_media.getName());
+            LogUtil.println("UMShareListener", "delete", share_media.getName());
         }
     }
 
@@ -2069,15 +2065,15 @@ public class CommonUtil {
      * 下载回调 状态修改
      */
     public void setEventResultViewStatus(BigEvent event, View view, boolean isShowSpeed) {
-        if (event.getData() instanceof DownloadTask) {
-            DownloadTask task = (DownloadTask) event.getData();
-            String url = task.getKey();
+        if (event.getData() instanceof DownLoadInfo) {
+            DownLoadInfo task = (DownLoadInfo) event.getData();
+            String url = task.getMDownloadUrl();
             TextView tvProgress = view.findViewWithTag(PUBLIC_TAG_PREFIX_TEXTVIEW_LIST + url);
             switch (event.getEventTypes()) {
-                case GENERATION_ACCOUNT_REFRESH_ADAPTER:
+                case DOWNLOAD_RUNNING:
                     try {
-                        int p = task.getPercent();    //任务进度百分比
-                        String speed = task.getConvertSpeed();    //转换单位后的下载速度,单位转换需要在配置文件中打开
+                        int p = task.getMPercent();    //任务进度百分比
+                        String speed = task.getAverageSpeed();    //转换单位后的下载速度,单位转换需要在配置文件中打开
                         if (tvProgress == null) {
                             return;
                         }

+ 71 - 25
app/src/main/java/com/sheep/gamegroup/util/DownloadUtil.java

@@ -4,14 +4,14 @@ import android.content.Context;
 import android.os.Build;
 import android.text.TextUtils;
 
-import com.arialyy.aria.core.Aria;
-import com.arialyy.aria.core.download.DownloadTarget;
-
+import com.liulishuo.okdownload.DownloadTask;
+import com.liulishuo.okdownload.OkDownload;
 import com.sheep.gamegroup.greendao.DDProviderHelper;
 import com.sheep.gamegroup.greendao.download.DownLoadInfo;
 import com.sheep.gamegroup.model.api.IDownload;
 import com.sheep.gamegroup.model.entity.DialogEntity;
 import com.sheep.gamegroup.model.entity.OrienteeringDetail;
+import com.sheep.gamegroup.model.entity.TaskEty;
 import com.sheep.jiuyan.samllsheep.SheepApp;
 import com.sheep.jiuyan.samllsheep.utils.ClassFileHelper;
 import com.sheep.jiuyan.samllsheep.utils.SpUtils;
@@ -19,7 +19,6 @@ import com.sheep.jiuyan.samllsheep.utils.SpUtils;
 import java.io.File;
 import java.util.List;
 
-import static com.sheep.jiuyan.samllsheep.utils.ClassFileHelper.DIR;
 
 /**
  * The local database persistence if download task
@@ -73,7 +72,6 @@ public class DownloadUtil {
         this.ctx = context;
     }
 
-
     /**
      * Query all download task details information
      *
@@ -271,8 +269,8 @@ public class DownloadUtil {
      * @param downloadUrl
      * @param apkPath
      */
-    public void setDownloadTaskFinish(String downloadUrl, String apkPath) {
-        DDProviderHelper.getInstance()
+    public DownLoadInfo setDownloadTaskFinish(String downloadUrl, String apkPath) {
+        return DDProviderHelper.getInstance()
                 .setDownloadTaskFinish(ctx, downloadUrl, apkPath);
        /* ContentResolver resolver = ctx.getContentResolver();
         DownloadtaskSelection where = new DownloadtaskSelection();
@@ -291,6 +289,10 @@ public class DownloadUtil {
 
     }
 
+    public DownLoadInfo setDownloadTaskPercent(double downloadedSize, String averageSpeed, int downloadTaskId, String downloadUrl) {
+        return DDProviderHelper.getInstance().updateDownloadPercent(ctx, downloadedSize, averageSpeed, downloadTaskId, downloadUrl, DownloadUtil.STATUS_ING);
+    }
+
     public void setDownloadTaskPercent(int percent, double downloadedSize, double totalSize, int downloadTaskId, String downloadUrl) {
         DDProviderHelper.getInstance().updateDownloadPercent(ctx, percent, downloadedSize, totalSize, downloadTaskId, downloadUrl, DownloadUtil.STATUS_ING);
 
@@ -322,12 +324,21 @@ public class DownloadUtil {
     }
 
     /**
+     * 根据下载地址,更新下载文件总大小
+     *
+     * @param downloadUrl
+     * @param totalLength
+     */
+    public DownLoadInfo setDownloadTaskTotal(String downloadUrl, double totalLength) {
+        return DDProviderHelper.getInstance().setDownloadTaskTotal(ctx, downloadUrl, totalLength);
+    }
+    /**
      * Set the task status
      *
      * @param downloadUrl
      * @param status
      */
-    public boolean setDownloadTaskStatus(String downloadUrl, int status) {
+    public DownLoadInfo setDownloadTaskStatus(String downloadUrl, int status) {
 
         return DDProviderHelper.getInstance().setDownloadTaskStatus(ctx, downloadUrl, status);
         /*ContentResolver resolver = ctx.getContentResolver();
@@ -361,6 +372,32 @@ public class DownloadUtil {
     }
 
 
+    public static DownloadTask getTask(IDownload download){
+        return DownloadUtil.getTask(download.getDownload_link(),  ClassFileHelper.DIR + File.separator + download.getPackage_names() + download.getDownload_link().hashCode() + ClassFileHelper.FILE_SUFFIX);
+    }
+
+
+    public static DownloadTask getTask(DownLoadInfo downLoadInfo){
+        return DownloadUtil.getTask(downLoadInfo.getMDownloadUrl(), downLoadInfo.getMApkPath());
+    }
+
+
+    public static DownloadTask getTask(String downloadUrl, String filePath){
+        DownloadTask.Builder builder = new DownloadTask.Builder(downloadUrl, new File(filePath));
+        // Set the minimum internal milliseconds of progress callbacks to 100ms.(default is 3000)
+        builder.setMinIntervalMillisCallbackProcess(100);
+        // set the priority of the task to 10, higher means less time to wait to download.(default is 0)
+        builder.setPriority(10);
+        // set the read buffer to 8192 bytes for the response input-stream.(default is 4096)
+        builder.setReadBufferSize(8192);
+        // set the flush buffer to 32768 bytes for the buffered output-stream.(default is 16384)
+        builder.setFlushBufferSize(32768);
+        // set this task allow using 5 connections to download data.
+        builder.setConnectionCount(5);
+        // build the task.
+//        DownloadTask task = builder.build();
+        return builder.build();
+    }
     public void start(DownLoadInfo downLoadInfo) {
         if (SpUtils.getDownNotice(SheepApp.getInstance()) == 0
                 && NetUtil.isConnected(SheepApp.getInstance())
@@ -380,26 +417,35 @@ public class DownloadUtil {
         if (SpUtils.getDownNotice(SheepApp.getInstance()) == 1) {//第一次不提示
             SpUtils.saveDownNotice(SheepApp.getInstance(), 0);
         }
-        DownloadTarget task = Aria.download(SheepApp.getInstance()).load(downLoadInfo.getMDownloadUrl()).addHeader("User-Agent", SysAppUtil.getUserAgent());
-        String filePath;
-        if (TextUtils.isEmpty(downLoadInfo.getMPackageName())) {
-            filePath = DIR + File.separator + downLoadInfo.getMGameName() + downLoadInfo.getMDownloadUrl().hashCode() + ClassFileHelper.FILE_SUFFIX;
-        } else {
-            filePath = DIR + File.separator + downLoadInfo.getMPackageName() + downLoadInfo.getMDownloadUrl().hashCode() + ClassFileHelper.FILE_SUFFIX;
-        }
-        task.setFilePath(filePath).start();
+        Jump2View.getInstance().startDownloadService(SheepApp.getInstance(), downLoadInfo);
     }
 
-    public void pause(DownLoadInfo downLoadInfo) {
-        DownloadTarget task = Aria.download(SheepApp.getInstance()).load(downLoadInfo.getMDownloadUrl());
-        task.stop();
+    /**
+     * 删除文件并删除记录
+     * @param downLoadInfo
+     */
+    public void delete(DownLoadInfo downLoadInfo) {
+        if(downLoadInfo != null) {
+            if(downLoadInfo.getMDownloadTaskId() != null) {
+                OkDownload.with().downloadDispatcher().cancel(downLoadInfo.getMDownloadTaskId());
+                OkDownload.with().breakpointStore().remove(downLoadInfo.getMDownloadTaskId());
+            }
+            if (!TextUtils.isEmpty(downLoadInfo.getMApkPath()) && new File(downLoadInfo.getMApkPath()).delete()) {
+                LogUtil.println("DownloadUtil", "delete", "删除成功");
+            }
+        }
     }
 
-    public void cancel(DownLoadInfo downLoadInfo) {
-        DownloadTarget task = Aria.download(SheepApp.getInstance()).load(downLoadInfo.getMDownloadUrl());
-        task.stop();
-        task.cancel(true);
-        task.removeRecord();
+    /**
+     * 检查文件是否真的下载完成
+     * @param downLoadInfo
+     * @return
+     */
+    public boolean checkFinish(DownLoadInfo downLoadInfo) {
+        if(downLoadInfo.getMApkPath() == null){
+            return false;
+        }
+        File file = new File(downLoadInfo.getMApkPath());
+        return file.exists() && downLoadInfo.getMDownloadedSize() == (double) file.getTotalSpace();
     }
-
 }

+ 14 - 0
app/src/main/java/com/sheep/gamegroup/util/FileUtil.java

@@ -178,6 +178,20 @@ public class FileUtil {
         }
         return filename;
     }
+    /*
+     * Java文件操作 获取带扩展名的文件名
+     * */
+    public static String getFileName(String filename) {
+        if ((filename != null) && (filename.length() > 0)) {
+            int dot = filename.lastIndexOf('/');
+            if ((dot > -1) && (dot < (filename.length()))) {
+                return filename.substring(0, dot);
+            } else {
+                return filename.hashCode() + ".apk";//默认apk
+            }
+        }
+        return filename;
+    }
 
 
 

+ 12 - 0
app/src/main/java/com/sheep/gamegroup/util/Jump2View.java

@@ -12,7 +12,9 @@ import android.text.TextUtils;
 import android.view.Gravity;
 import android.view.View;
 
+import com.liulishuo.okdownload.DownloadTask;
 import com.sheep.gamegroup.absBase.BaseActivity;
+import com.sheep.gamegroup.greendao.download.DownLoadInfo;
 import com.sheep.gamegroup.model.entity.Advertising;
 import com.sheep.gamegroup.model.entity.Agreement;
 import com.sheep.gamegroup.model.entity.BaseMessage;
@@ -114,6 +116,7 @@ import com.sheep.jiuyan.samllsheep.BuildConfig;
 import com.sheep.jiuyan.samllsheep.R;
 import com.sheep.jiuyan.samllsheep.SheepApp;
 import com.sheep.jiuyan.samllsheep.service.AutoCheckService;
+import com.sheep.jiuyan.samllsheep.service.DownloadService;
 import com.sheep.jiuyan.samllsheep.service.FloatShotScreenService;
 import com.sheep.jiuyan.samllsheep.service.ListenerShotNewService;
 import com.sheep.jiuyan.samllsheep.service.ListenerShotService;
@@ -2008,4 +2011,13 @@ public class Jump2View {
                 .putExtra("token", token),
                 ActPay.RESULT_CODE);
     }
+
+    /**
+     * 启动下载后台服务进行下载
+     * @param context
+     * @param downLoadInfo
+     */
+    public void startDownloadService(Context context, DownLoadInfo downLoadInfo) {
+        context.startService(new Intent(context, DownloadService.class).putExtra("download_url", downLoadInfo.getMDownloadUrl()).putExtra("file_path", downLoadInfo.getMApkPath()));
+    }
 }

+ 146 - 0
app/src/main/java/com/sheep/gamegroup/util/Md5Util.java

@@ -0,0 +1,146 @@
+package com.sheep.gamegroup.util;
+
+import android.text.TextUtils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigInteger;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * Created by realicing on 2018/10/22.
+ * realicing@sina.com
+ */
+public class Md5Util {
+
+    private static final String TAG = "Md5Util";
+
+    /**
+     * 创建文件名,如果url链接有后缀名,则使用url中的后缀名
+     *
+     * @return url 的 hashKey
+     */
+    public static String createFileName(String url) {
+        int end = url.indexOf("?");
+        String tempUrl, fileName = "";
+        if (end > 0) {
+            tempUrl = url.substring(0, end);
+            int tempEnd = tempUrl.lastIndexOf("/");
+            if (tempEnd > 0) {
+                fileName = tempUrl.substring(tempEnd + 1, tempUrl.length());
+            }
+        } else {
+            int tempEnd = url.lastIndexOf("/");
+            if (tempEnd > 0) {
+                fileName = url.substring(tempEnd + 1, url.length());
+            }
+        }
+        return fileName;
+    }
+
+
+    /**
+     * 获取字符串的md5
+     *
+     * @return 字符串为空或获取md5失败,则返回""
+     */
+    public static String getStrMd5(String str) {
+        if (TextUtils.isEmpty(str)) return "";
+        try {
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            md.update(str.getBytes());
+            return new BigInteger(1, md.digest()).toString(16);
+        } catch (NoSuchAlgorithmException e) {
+        }
+        return "";
+    }
+
+    /**
+     * 校验文件MD5码
+     */
+    public static boolean checkMD5(String md5, File updateFile) {
+        if (TextUtils.isEmpty(md5) || updateFile == null) {
+//            ALog.e(TAG, "MD5 string empty or updateFile null");
+            return false;
+        }
+
+        String calculatedDigest = getFileMD5(updateFile);
+        if (calculatedDigest == null) {
+//            ALog.e(TAG, "calculatedDigest null");
+            return false;
+        }
+        return calculatedDigest.equalsIgnoreCase(md5);
+    }
+
+    /**
+     * 校验文件MD5码
+     */
+    public static boolean checkMD5(String md5, InputStream is) {
+        if (TextUtils.isEmpty(md5) || is == null) {
+//            ALog.e(TAG, "MD5 string empty or updateFile null");
+            return false;
+        }
+
+        String calculatedDigest = getFileMD5(is);
+        if (calculatedDigest == null) {
+//            ALog.e(TAG, "calculatedDigest null");
+            return false;
+        }
+        return calculatedDigest.equalsIgnoreCase(md5);
+    }
+
+    /**
+     * 获取文件MD5码
+     */
+    public static String getFileMD5(File updateFile) {
+        InputStream is;
+        try {
+            is = new FileInputStream(updateFile);
+        } catch (FileNotFoundException e) {
+//            ALog.e(TAG, e);
+            return null;
+        }
+
+        return getFileMD5(is);
+    }
+
+    /**
+     * 获取文件MD5码
+     */
+    public static String getFileMD5(InputStream is) {
+        MessageDigest digest;
+        try {
+            digest = MessageDigest.getInstance("MD5");
+        } catch (NoSuchAlgorithmException e) {
+//            ALog.e(TAG, e);
+            return null;
+        }
+
+        byte[] buffer = new byte[8192];
+        int read;
+        try {
+            while ((read = is.read(buffer)) > 0) {
+                digest.update(buffer, 0, read);
+            }
+            byte[] md5sum = digest.digest();
+            BigInteger bigInt = new BigInteger(1, md5sum);
+            String output = bigInt.toString(16);
+            // Fill to 32 chars
+            output = String.format("%32s", output).replace(' ', '0');
+            return output;
+        } catch (IOException e) {
+            throw new RuntimeException("Unable to process file for MD5", e);
+        } finally {
+            try {
+                is.close();
+            } catch (IOException e) {
+//                ALog.e(TAG, e);
+            }
+        }
+    }
+
+}

+ 2 - 3
app/src/main/java/com/sheep/gamegroup/util/SysAppUtil.java

@@ -18,7 +18,6 @@ import android.view.Gravity;
 import android.view.View;
 import android.widget.TextView;
 
-import com.arialyy.aria.util.CommonUtil;
 import com.bumptech.glide.Glide;
 import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory;
 import com.kfzs.duanduan.utils.ApkUtils;
@@ -557,7 +556,7 @@ public class SysAppUtil {
                 public void onClick(final View view) {
                     if(view instanceof TextView)
                         UPGRADE_DIALOG_BT.onEvent("action", ((TextView) view).getText());
-                    if(file.exists() && CommonUtil.checkMD5(version.getMd5_address(), file)){//文件存在并且md5值相同则直接安装
+                    if(file.exists() && Md5Util.checkMD5(version.getMd5_address(), file)){//文件存在并且md5值相同则直接安装
                         installApk(file);
                     } else if(TextUtils.isEmpty(version.getAddress())){//地址错误
                         G.showToast(R.string.error_download_link);
@@ -627,7 +626,7 @@ public class SysAppUtil {
         if(packageInfo == null || TextUtils.isEmpty(packageInfo.applicationInfo.sourceDir)){
             return "";
         }
-        String fileMD5 = com.arialyy.aria.util.CommonUtil.getFileMD5(new File(packageInfo.applicationInfo.sourceDir));
+        String fileMD5 = Md5Util.getFileMD5(new File(packageInfo.applicationInfo.sourceDir));
         LogUtil.println("FileMD5", fileMD5);
         return fileMD5;
     }

+ 2 - 2
app/src/main/java/com/sheep/gamegroup/util/TestUtil.java

@@ -224,7 +224,7 @@ public class TestUtil {
                     public void onClick(DialogInterface dialog, int which) {
                         switch (items[which]) {
                             case "测试支付":
-                                Jump2View.getInstance().goActPay(activity, "6458603943269240832", SpUtils.getToken(activity));
+                                Jump2View.getInstance().goActPay(activity, "6458650174678896640", SpUtils.getToken(activity));
                                 break;
                             case "测试内部h5":
                                 Jump2View.getInstance().goWeb(activity, "www.17xmy.com/", "小绵羊官网");
@@ -496,7 +496,7 @@ public class TestUtil {
 
                     @Override
                     public void onCancel(SHARE_MEDIA share_media) {
-                        Log.e("cancel---"+share_media.getName(), share_media.getName());
+                        Log.e("delete---"+share_media.getName(), share_media.getName());
                     }
                 })
                 .open();

+ 20 - 89
app/src/main/java/com/sheep/gamegroup/util/WebviewJs.java

@@ -5,21 +5,25 @@ import android.os.Build;
 import android.text.TextUtils;
 import android.webkit.JavascriptInterface;
 
-import com.arialyy.annotations.Download;
-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.kfzs.duanduan.utils.ApkUtils;
 import com.sheep.gamegroup.event.BigEvent;
 import com.sheep.gamegroup.event.EventTypes;
 import com.sheep.gamegroup.greendao.download.DownLoadInfo;
 import com.sheep.jiuyan.samllsheep.SheepApp;
+import com.sheep.jiuyan.samllsheep.utils.ClassFileHelper;
 import com.sheep.jiuyan.samllsheep.utils.G;
 import com.sheep.jiuyan.samllsheep.utils.PackageUtil;
 import com.sheep.jiuyan.samllsheep.utils.SpUtils;
+import com.zhy.http.okhttp.OkHttpUtils;
+import com.zhy.http.okhttp.callback.FileCallBack;
 
 import org.greenrobot.eventbus.EventBus;
 
+import java.io.File;
+import java.util.Locale;
+
+import okhttp3.Call;
+
 /**
  * Created by ljy on 2018/6/25.
  */
@@ -27,18 +31,14 @@ import org.greenrobot.eventbus.EventBus;
 public class WebviewJs {
     private Activity activity;
     private int taskId;
-    private String packgeName;
-    private DownloadUtil mDownloadTaskService;
 
     public WebviewJs(Activity activity) {
         this.activity = activity;
-        mDownloadTaskService = new DownloadUtil(activity);
     }
 
     public WebviewJs(Activity activity, int taskId) {
         this.activity = activity;
         this.taskId = taskId;
-        mDownloadTaskService = new DownloadUtil(activity);
     }
 
     @JavascriptInterface
@@ -153,89 +153,20 @@ public class WebviewJs {
     /**
      * 下载地址
      */
-    private void downLoad(String packName){
-        if (mDownloadTaskService == null){
-            mDownloadTaskService = new DownloadUtil(activity);
-        }
-//        Aria.download(this).register();
-        DownloadTarget task = Aria.download(activity).load(packName);
-        DownLoadInfo downLoadInfo = mDownloadTaskService.getDownloadTaskByUrl(packName);
-        if(downLoadInfo == null){
-            downLoadInfo = CommonUtil.getInstance()
-                    .addNewDownloadTask(packName, packName, packName,
-                            Build.VERSION.SDK_INT, 0+"", 10+"", 0, 0);
-        }
-
-        if (task.getTaskState() == IEntity.STATE_RUNNING) {
-            task.stop();
-        } else if (task.getTaskState() == IEntity.STATE_FAIL) {
-            task.cancel(true);
-            task.removeRecord();
-        } else {
-            switch (downLoadInfo.getMStatus()){
-                case 2:
-                case 4:
-                    G.showToast("正在下载中...");
-                    break;
-                case 3:
-//                    G.showToast("下载完成");
-                    break;
-                default:
-                    G.showToast("开始下载中!");
-                    downLoadInfo.setMStatus(2);
-                    break;
+    private void downLoad(String url){
+        OkHttpUtils.get().url(url).build().execute(new FileCallBack(ClassFileHelper.DIR, FileUtil.getFileName(url)) {
+            @Override
+            public void onError(Call call, Exception e, int id) {
+                G.showToast(String.format(Locale.CHINA, "下载失败(%s)", e.getMessage()));
             }
 
-            mDownloadTaskService.start(downLoadInfo);
-            mDownloadTaskService.addDownloadTask(downLoadInfo);
-            final DownLoadInfo finalDownLoadInfo = downLoadInfo;
-            new Thread(new Runnable() {
-                @Override
-                public void run() {
-                    if(mDownloadTaskService.addDownloadTask(finalDownLoadInfo)){
-                        //发送红点信息
-                        EventBus.getDefault().post(BigEvent.get().setEventTypes(EventTypes.TIPS_DOWN_ICON));
-                    }
+            @Override
+            public void onResponse(File response, int id) {
+                if(response.getAbsolutePath().endsWith(".apk")){
+                    ApkUtils.installApk(activity, response.getAbsolutePath());
                 }
-            }).start();
-        }
-    }
-
-    @Download.onTaskFail
-    void taskFail(DownloadTask downloadTask){
-        if(mDownloadTaskService == null)
-            mDownloadTaskService = new DownloadUtil(activity);
-        DownLoadInfo downLoadInfo = mDownloadTaskService.getDownloadTaskByUrl(downloadTask.getKey());
-        if(downLoadInfo != null){
-            downLoadInfo.setMStatus(1);
-            mDownloadTaskService.addDownloadTask(downLoadInfo);
-            G.showToast("下载失败");
-        }
-    }
-
-    @Download.onTaskComplete
-    void taskComplete(DownloadTask downloadTask){
-        if(mDownloadTaskService == null)
-            mDownloadTaskService = new DownloadUtil(activity);
-        DownLoadInfo downLoadInfo = mDownloadTaskService.getDownloadTaskByUrl(downloadTask.getKey());
-        if(downLoadInfo != null){
-            G.showToast("下载成功");
-            downLoadInfo.setMStatus(3);
-            mDownloadTaskService.addDownloadTask(downLoadInfo);
-            PackageUtil.installApk(activity, downloadTask.getDownloadPath());
-        }
-
-    }
-    @Download.onTaskRunning
-    protected void running(DownloadTask downloadTask) {
-        if(mDownloadTaskService == null)
-            mDownloadTaskService = new DownloadUtil(activity);
-        DownLoadInfo downLoadInfo = mDownloadTaskService.getDownloadTaskByUrl(downloadTask.getKey());
-        if(downLoadInfo != null){
-            downLoadInfo.setMStatus(2);
-            mDownloadTaskService.addDownloadTask(downLoadInfo);
-//            G.showToast("下载中....");
-        }
+            }
+        });
     }
 
 }

+ 89 - 116
app/src/main/java/com/sheep/gamegroup/view/activity/ActDownloadMgr.java

@@ -1,7 +1,6 @@
 package com.sheep.gamegroup.view.activity;
 
 import android.content.Context;
-import android.os.Handler;
 import android.text.TextUtils;
 import android.view.View;
 import android.view.ViewGroup;
@@ -10,24 +9,21 @@ import android.widget.ProgressBar;
 import android.widget.TextView;
 import android.widget.Toast;
 
-import com.arialyy.annotations.Download;
-import com.arialyy.aria.core.Aria;
-import com.arialyy.aria.core.download.DownloadTask;
 import com.kfzs.appstore.utils.adapter.OnMDLItemChildClickListener;
-import com.sheep.gamegroup.greendao.download.DownLoadInfo;
-import com.sheep.gamegroup.model.entity.DownloadStatus;
-import com.sheep.gamegroup.event.BigEvent;
-import com.sheep.gamegroup.event.EventDownloadHandler;
-import com.sheep.gamegroup.event.EventTypes;
-import com.sheep.gamegroup.util.DownloadUtil;
 import com.kfzs.duanduan.utils.ApkUtils;
-import com.kfzs.duanduan.view.DialogStorageLow;
 import com.kfzs.duanduan.view.KFProgressButton;
+import com.liulishuo.okdownload.DownloadTask;
+import com.liulishuo.okdownload.OkDownload;
 import com.sheep.gamegroup.absBase.BaseActivity;
+import com.sheep.gamegroup.event.BigEvent;
+import com.sheep.gamegroup.event.EventDownloadHandler;
+import com.sheep.gamegroup.event.EventTypes;
+import com.sheep.gamegroup.greendao.download.DownLoadInfo;
+import com.sheep.gamegroup.model.entity.DownloadStatus;
 import com.sheep.gamegroup.util.CommonUtil;
+import com.sheep.gamegroup.util.DownloadUtil;
 import com.sheep.gamegroup.view.adapter.DownloadMgrAdapter;
 import com.sheep.jiuyan.samllsheep.R;
-import com.sheep.jiuyan.samllsheep.SheepApp;
 import com.sheep.jiuyan.samllsheep.utils.ClassFileHelper;
 import com.sheep.jiuyan.samllsheep.utils.G;
 import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
@@ -68,7 +64,7 @@ public class ActDownloadMgr extends BaseActivity {
     /**
      * The service about persistence data and sqlite helper
      */
-    DownloadUtil downloadTaskService;
+    DownloadUtil downloadUtil;
 
     /**
      * Data source
@@ -92,12 +88,7 @@ public class ActDownloadMgr extends BaseActivity {
                     @Override
                     public void onClick(View view) {
                         try {
-                            Aria.download(SheepApp.getInstance()).removeAllTask(true);
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                        }
-                        try {
-                            downloadTaskService.deleteAllDownloadTask();
+                            downloadUtil.deleteAllDownloadTask();
                             downloadTasks.clear();
                             downloadMgrAdapter.clear();
                         } catch (Exception e) {
@@ -115,14 +106,13 @@ public class ActDownloadMgr extends BaseActivity {
 
     @Override
     public void initListener() {
-        Aria.download(this).register();
         EventBus.getDefault().register(this);
     }
 
     @Override
     public void initData() {
         downloadTasks = new ArrayList<>();
-        downloadTaskService = new DownloadUtil(this);
+        downloadUtil = new DownloadUtil(this);
         initControlsEvents();
     }
 
@@ -142,7 +132,7 @@ public class ActDownloadMgr extends BaseActivity {
                 if (downloadTasks.size() <= position) {
                     return;
                 }
-                final DownLoadInfo downloadTask = downloadTaskService.getDownloadTaskByUrl(downloadTasks.get(position).getMDownloadUrl());
+                final DownLoadInfo downloadTask = downloadUtil.getDownloadTaskByUrl(downloadTasks.get(position).getMDownloadUrl());
                 if (null == downloadTask) {
                     return;
                 }
@@ -173,32 +163,13 @@ public class ActDownloadMgr extends BaseActivity {
 
     private void setDownloadTaskData() {
         downloadTasks.clear();
-        downloadTasks.addAll(downloadTaskService.getAllDownloadTasks());
+        downloadTasks.addAll(downloadUtil.getAllDownloadTasks());
 
         downloadMgrAdapter.clear();
         downloadMgrAdapter.addMoreDatas(downloadTasks);
         showDownloadTaskList(!downloadTasks.isEmpty());
     }
 
-
-    /*@Subscribe
-    public void onEventMainThread(final DownloadStatus info) {
-        if (mOnDownCallback == null) {
-            mOnDownCallback = DownBtnUtils.installBtnStatus(downloadMgrAdapter.getmInstallButtonMgrMap());
-        }
-        EventDownloadHandler
-                .newInstance(this, mOnDownCallback)
-                .setmTag(TAG)
-                .handlDownloadResult(info);
-    }*/
-
-    @Subscribe
-    public void onEventMainThread(BigEvent bigEvent) {
-        if (bigEvent.getEventTypes() == EventTypes.STORAGE_LOW) {
-            DialogStorageLow.showDialog(this);
-        }
-    }
-
     @Subscribe
     public void onEventMainThread(final DownloadStatus info) {
         EventDownloadHandler.newInstance(this, new EventDownloadHandler.OnDownCallback() {
@@ -272,18 +243,14 @@ public class ActDownloadMgr extends BaseActivity {
     //删除任务;
     private void downloadTaskItemEventDelete(DownLoadInfo downloadTask, int position) {
         if (downloadTask.getMDownloadTaskId() != null) {
-            downloadTaskService.cancel(downloadTask);
-        } else {
-
-        }
-        if (!TextUtils.isEmpty(downloadTask.getMApkPath())) {
-            new File(downloadTask.getMApkPath()).delete();
+            downloadUtil.delete(downloadTask);
+            removeTask(position);
         }
-        removeTask(position);
         doubleKill = false;
     }
 
     public static final int MAX_DOWNLOAD_TASK_SIZE = 5;
+
     private void downloadTaskItemEventAction(DownLoadInfo downloadTask) {
         switch (downloadTask.getMStatus()) {
             case DownloadUtil.STATUS_INIT:
@@ -293,7 +260,7 @@ public class ActDownloadMgr extends BaseActivity {
                         downloadTask.getMPercent() == null ? 0 : downloadTask.getMPercent(), true);
                 break;
             case DownloadUtil.STATUS_PAUSE:
-                int currentDownloadTaskSize = downloadTaskService.getDownloadingTasksCount();
+                int currentDownloadTaskSize = downloadUtil.getDownloadingTasksCount();
                 if (currentDownloadTaskSize >= MAX_DOWNLOAD_TASK_SIZE) {
                     String strPrompt = String.format(getString(R.string.toast_download_task_out_of_rang), MAX_DOWNLOAD_TASK_SIZE + "");
                     Toast.makeText(this, strPrompt, Toast.LENGTH_SHORT).show();
@@ -313,7 +280,7 @@ public class ActDownloadMgr extends BaseActivity {
                 boolean isPkgInstalled = ApkUtils.getInstance().isPkgInstalled(downloadTask.getMPackageName());
                 if (isPkgInstalled) {
                     int apkStatus = ApkUtils.getInstance().comparePkgVersionCode(downloadTask.getMPackageName(), downloadTask.getMVersionCode());
-                    switch (apkStatus){
+                    switch (apkStatus) {
                         case EQUALS:
                         case LT:
                             ApkUtils.openApplication(this, downloadTask.getMPackageName());
@@ -336,24 +303,21 @@ public class ActDownloadMgr extends BaseActivity {
     }
 
     private void restartTaskByDownloadUrl(final DownLoadInfo task) {
-        downloadTaskService.cancel(task);
-        downloadTaskService.deleteDownloadTaskByDownloadUrl(task.getMDownloadUrl());
-        downloadTaskService.start(task);//重新下载
+        downloadUtil.delete(task);
+        downloadUtil.deleteDownloadTaskByDownloadUrl(task.getMDownloadUrl());
+        downloadUtil.start(task);//重新下载
         setDownloadTaskData();
     }
 
     private void changeTaskPersistenceStatus(String downloadUrl, int status, int percent, boolean bPauseTask) {
-        boolean isUpdate = downloadTaskService.setDownloadTaskStatus(downloadUrl, status);
-        DownLoadInfo downLoadInfo = downloadTaskService.getDownloadTaskByUrl(downloadUrl);
-        if (isUpdate) {
-            setDownloadTaskData();
+        DownLoadInfo downLoadInfo = downloadUtil.setDownloadTaskStatus(downloadUrl, status);
+        if (downLoadInfo != null) {
+            DownloadTask task = DownloadUtil.getTask(downLoadInfo);
             if (bPauseTask) {
-                downloadTaskService.pause(downLoadInfo);
+                OkDownload.with().downloadDispatcher().cancel(task);
             } else {
-                downloadTaskService.start(downLoadInfo);
-
+                downloadUtil.start(downLoadInfo);
             }
-            postDownloadTaskEvents(downloadUrl, status, percent);
         }
     }
 
@@ -385,29 +349,10 @@ public class ActDownloadMgr extends BaseActivity {
             return;
         }
 
-        boolean isSuccess = downloadTaskService.deleteDownloadTaskByDownloadUrl(targetUrl);
+        boolean isSuccess = downloadUtil.deleteDownloadTaskByDownloadUrl(targetUrl);
         if (isSuccess) {
             setDownloadTaskData();
-            //延时执行,不然删除消息可能比下载进度信息先到,导致删除后还提示安装中
-            new Handler().postDelayed(new Runnable() {
-                @Override
-                public void run() {
-                    postDownloadTaskEvents(targetUrl, DownloadUtil.STATUS_DELETE, 0);
-                }
-            }, 500);
-        }
-    }
-
-
-    private void postDownloadTaskEvents(String targetUrl, int status, int percent) {
-        if ("".equals(targetUrl)) {
-            return;
         }
-        DownloadStatus downloadStatusInfo = new DownloadStatus();
-        downloadStatusInfo.setStatus(status);
-        downloadStatusInfo.setDownloadUrl(targetUrl);
-        downloadStatusInfo.setDownloadPgrs(percent);
-        EventBus.getDefault().post(downloadStatusInfo);
     }
 
 
@@ -416,62 +361,64 @@ public class ActDownloadMgr extends BaseActivity {
         if (fileDownloadSize == null || fileTotalSize == null) {
             return context.getString(R.string.calculating);
         }
-        return df.format(fileDownloadSize) + "MB / " + fileTotalSize.intValue() + "MB";
+        return df.format(fileDownloadSize / (1024 * 1024)) + "MB / " + (fileTotalSize.intValue() / (1024 * 1024)) + "MB";
     }
+
     public static String strFormat(Context context, Double fileDownloadSize) {
         DecimalFormat df = new DecimalFormat("######0.0");
         if (fileDownloadSize == null) {
             return context.getString(R.string.calculating);
         }
-        return df.format(fileDownloadSize) + "MB" ;
+        return df.format(fileDownloadSize) + "MB";
     }
 
     private void showDownloadTaskList(boolean isShow) {
         CommonUtil.getInstance().updateEmptyView(empty_view, !isShow);
         lvDownloadMgr.setVisibility(!isShow ? View.GONE : View.VISIBLE);
     }
-    @Download.onPre void onPre(DownloadTask task) {
-    }
-    @Download.onTaskStart void taskStart(DownloadTask task) {
-    }
-    @Download.onTaskResume void taskResume(DownloadTask task) {
-    }
+
     //在这里处理任务执行中的状态,如进度进度条的刷新
-    @Download.onTaskRunning protected void running(DownloadTask task) {
-//        downloadTaskService.setDownloadTaskPercent(p, task.getCurrentProgress()/1024d/1024d,task.getFileSize()/1024d/1024d,0,task.getKey());
+    protected void running(DownLoadInfo task) {
         try {
-            int p = task.getPercent();    //任务进度百分比
-            String speed = task.getConvertSpeed();    //转换单位后的下载速度,单位转换需要在配置文件中打开
-            System.out.println("Aria "+task.getKey()+",p " + p + ", speed = " + speed);
-            String url = task.getKey();
+            String url = task.getMDownloadUrl();
             KFProgressButton targetBtn = lvDownloadMgr.findViewWithTag(DownloadMgrAdapter.PUBLIC_TAG_PREFIX_BUTTON + url);
             ProgressBar pbProgress = lvDownloadMgr.findViewWithTag(DownloadMgrAdapter.PUBLIC_TAG_PREFIX_PROGRESS + url);
             TextView tvProgress = lvDownloadMgr.findViewWithTag(DownloadMgrAdapter.PUBLIC_TAG_PREFIX_TEXTVIEW + url);
             if (tvProgress == null) {
                 return;
             }
-            tvProgress.setText(strFormat(this,task.getCurrentProgress()/1024d/1024d,task.getFileSize()/1024d/1024d));
-            pbProgress.setProgress(task.getPercent());
+            tvProgress.setText(strFormat(this, task.getMDownloadedSize(), task.getMTotalSize()));
+            pbProgress.setProgress(task.getMPercent());
             targetBtn.setText(R.string.downloading);
 
-            setTaskStatusByDownloadUrl(url, DownloadUtil.STATUS_ING, task.getDownloadPath());
+            setTaskStatusByDownloadUrl(url, DownloadUtil.STATUS_ING, task.getMApkPath());
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
 
-    @Download.onTaskStop void taskStop(DownloadTask task) {
-//        String url = task.getKey();
-//        downloadTaskService.setDownloadTaskStatus(url, DownloadTaskService.STATUS_PAUSE);
-    }
+    void taskStop(DownLoadInfo task) {
+        try {
+            String url = task.getMDownloadUrl();
+            KFProgressButton targetBtn = lvDownloadMgr.findViewWithTag(DownloadMgrAdapter.PUBLIC_TAG_PREFIX_BUTTON + url);
+            ProgressBar pbProgress = lvDownloadMgr.findViewWithTag(DownloadMgrAdapter.PUBLIC_TAG_PREFIX_PROGRESS + url);
+            TextView tvProgress = lvDownloadMgr.findViewWithTag(DownloadMgrAdapter.PUBLIC_TAG_PREFIX_TEXTVIEW + url);
+            if (tvProgress == null) {
+                return;
+            }
+            tvProgress.setText(strFormat(this, task.getMDownloadedSize(), task.getMTotalSize()));
+            pbProgress.setProgress(task.getMPercent());
+            targetBtn.setText(R.string.has_pause);
 
-    @Download.onNoSupportBreakPoint void onNoSupportBreakPoint(DownloadTask task) {
+            setTaskStatusByDownloadUrl(url, DownloadUtil.STATUS_PAUSE, task.getMApkPath());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
     }
 
-    @Download.onTaskCancel void taskCancel(DownloadTask task) {
-//        downloadTaskService.deleteDownloadTaskByDownloadUrl(task.getKey());
+    void taskCancel(DownLoadInfo task) {
         try {
-            String url = task.getKey();
+            String url = task.getMDownloadUrl();
             int iTempPosition = -1;
             for (int position = 0; position < downloadTasks.size(); position++) {
                 DownLoadInfo downLoadInfo = downloadTasks.get(position);
@@ -489,31 +436,57 @@ public class ActDownloadMgr extends BaseActivity {
         }
     }
 
-    @Download.onTaskFail void taskFail(DownloadTask task) {
-//        downloadTaskService.setDownloadTaskStatus(task.getKey(), DownloadTaskService.STATUS_FAIL);
+    void taskFail(DownLoadInfo task) {
         try {
-            String url = task.getKey();
+            String url = task.getMDownloadUrl();
             KFProgressButton targetBtn = lvDownloadMgr.findViewWithTag(DownloadMgrAdapter.PUBLIC_TAG_PREFIX_BUTTON + url);
             targetBtn.setText(R.string.download_fail);
-            setTaskStatusByDownloadUrl(url, DownloadUtil.STATUS_FAIL, task.getDownloadPath());
+            setTaskStatusByDownloadUrl(url, DownloadUtil.STATUS_FAIL, task.getMApkPath());
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
 
-    @Download.onTaskComplete void taskComplete(DownloadTask task) {
-//        downloadTaskService.setDownloadTaskFinish(task.getKey(), task.getDownloadPath());
+    void taskComplete(DownLoadInfo task) {
         try {
-            TextView tvProgress = lvDownloadMgr.findViewWithTag(DownloadMgrAdapter.PUBLIC_TAG_PREFIX_TEXTVIEW + task.getKey());
+            TextView tvProgress = lvDownloadMgr.findViewWithTag(DownloadMgrAdapter.PUBLIC_TAG_PREFIX_TEXTVIEW + task.getMDownloadUrl());
             tvProgress.setText(R.string.download_completed);
 
-            setTaskStatusByDownloadUrl(task.getKey(), DownloadUtil.STATUS_FINISH, task.getDownloadPath());
+            setTaskStatusByDownloadUrl(task.getMDownloadUrl(), DownloadUtil.STATUS_FINISH, task.getMApkPath());
         } catch (Exception e) {
             e.printStackTrace();
         }
-        ApkUtils.installApk(ActDownloadMgr.this, task.getDownloadPath());
+        ApkUtils.installApk(ActDownloadMgr.this, task.getMApkPath());
     }
 
+    /**
+     * 主要的事件广播接收更新处理
+     *
+     * @param event
+     */
+    @Subscribe
+    public void onEventMainThread(BigEvent event) {
+        if (event.getData() instanceof DownLoadInfo) {
+            DownLoadInfo task = (DownLoadInfo) event.getData();
+            switch (event.getEventTypes()) {
+                case DOWNLOAD_RUNNING:
+                    running(task);
+                    break;
+                case DOWNLOAD_STOP:
+                    taskStop(task);
+                    break;
+                case DOWNLOAD_COMPLETE:
+                    taskComplete(task);
+                    break;
+                case DOWNLOAD_CANCEL:
+//                    taskCancel(task);
+                    break;
+                case DOWNLOAD_FAIL:
+                    taskFail(task);
+                    break;
+            }
+        }
+    }
 }
 
 

+ 50 - 44
app/src/main/java/com/sheep/gamegroup/view/activity/ActFindGame.java

@@ -9,7 +9,6 @@ import android.support.v7.widget.AppCompatRatingBar;
 import android.support.v7.widget.RecyclerView;
 import android.text.TextUtils;
 import android.view.View;
-import com.tencent.smtt.sdk.WebView;
 import android.widget.ImageView;
 import android.widget.ProgressBar;
 import android.widget.RatingBar;
@@ -17,13 +16,10 @@ import android.widget.RelativeLayout;
 import android.widget.TextView;
 
 import com.alibaba.fastjson.JSONObject;
-import com.arialyy.annotations.Download;
-import com.arialyy.aria.core.Aria;
-import com.arialyy.aria.core.download.DownloadTask;
-import com.sheep.gamegroup.event.BigEvent;
-import com.sheep.gamegroup.util.DownloadUtil;
 import com.kfzs.duanduan.utils.StatusBarUtils;
 import com.sheep.gamegroup.absBase.BaseActivity;
+import com.sheep.gamegroup.event.BigEvent;
+import com.sheep.gamegroup.greendao.download.DownLoadInfo;
 import com.sheep.gamegroup.helper.ImageListHelper;
 import com.sheep.gamegroup.model.entity.BaseMessage;
 import com.sheep.gamegroup.model.entity.FindApp;
@@ -33,6 +29,7 @@ import com.sheep.gamegroup.model.entity.UserEntity;
 import com.sheep.gamegroup.model.util.SheepSubscriber;
 import com.sheep.gamegroup.util.CommonUtil;
 import com.sheep.gamegroup.util.DataUtil;
+import com.sheep.gamegroup.util.DownloadUtil;
 import com.sheep.gamegroup.util.GlideImageLoader;
 import com.sheep.gamegroup.util.Jump2View;
 import com.sheep.gamegroup.util.ListUtil;
@@ -43,6 +40,7 @@ import com.sheep.jiuyan.samllsheep.SheepApp;
 import com.sheep.jiuyan.samllsheep.utils.G;
 import com.sheep.jiuyan.samllsheep.utils.PackageUtil;
 import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
+import com.tencent.smtt.sdk.WebView;
 
 import org.afinal.simplecache.ApiKey;
 import org.greenrobot.eventbus.EventBus;
@@ -97,7 +95,6 @@ public class ActFindGame extends BaseActivity {
                 });
 
         EventBus.getDefault().register(this);
-        Aria.download(this).register();
 
         RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, G.BAR_HEIGHT);
         status_height_view.setLayoutParams(params);
@@ -127,7 +124,7 @@ public class ActFindGame extends BaseActivity {
                 int topRow2 = (titleHeight - find_game_name_tv.getHeight()) / 2;
                 int leftRow = topRow2 / 4;//isNeedReservation ? topRow : 5 * topRow;
 
-                int willTop = Math.max(topRow/2, find_game_top + verticalOffset);
+                int willTop = Math.max(topRow / 2, find_game_top + verticalOffset);
                 int row = (find_icon_with * willTop + titleHeight * (find_game_top - willTop)) / find_game_top - topRow;
                 RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) find_game_iv.getLayoutParams();
                 layoutParams.leftMargin = Math.max(titleWidth, (G.WIDTH - find_icon_with) / 2 + verticalOffset);
@@ -156,7 +153,7 @@ public class ActFindGame extends BaseActivity {
                 RelativeLayout.LayoutParams layoutParams5 = (RelativeLayout.LayoutParams) find_game_xin.getLayoutParams();
                 layoutParams5.topMargin = getResources().getDimensionPixelSize(R.dimen.find_game_top5) + verticalOffset;
                 find_game_xin.setLayoutParams(layoutParams5);
-                if (willTop == topRow/2) {
+                if (willTop == topRow / 2) {
                     if (mIsExpanded) {
 //                        txt_baseactivity_title.setVisibility(View.INVISIBLE);
                         find_game_bar.setVisibility(View.VISIBLE);
@@ -181,7 +178,7 @@ public class ActFindGame extends BaseActivity {
         resetAppScoreNum();
         resetMyAppScore();
         resetUserInfo();
-        if(isShowAppScore) {
+        if (isShowAppScore) {
             find_game_score_no.setVisibility(View.VISIBLE);
             find_game_score_my.setVisibility(View.VISIBLE);
         }
@@ -198,16 +195,16 @@ public class ActFindGame extends BaseActivity {
     @Override
     public void initData() {
         FindApp findApp = DataUtil.getInstance().getCacheResult(ApiKey.applications(id), FindApp.class);
-        if(findApp != null){
+        if (findApp != null) {
             loadApp(findApp);
         }
         initFindAppFromNet();
-        if(isShowAppScore) {
+        if (isShowAppScore) {
             initAppScoreNum();
             initMyAppScore();
         }
         UserEntity userEntity = DataUtil.getInstance().getUserEntity();
-        if(userEntity == null) {
+        if (userEntity == null) {
             CommonUtil.getInstance().updateUserInfo(new Action1<UserEntity>() {
                 @Override
                 public void call(UserEntity userEntity) {
@@ -232,7 +229,7 @@ public class ActFindGame extends BaseActivity {
                     @Override
                     public void onNext(BaseMessage baseMessage) {
                         boolean isNewData = DataUtil.getInstance().isNewData(ApiKey.applications(id));
-                        if(isNewData) {
+                        if (isNewData) {
                             FindApp findApp = baseMessage.getData(FindApp.class);
                             loadApp(findApp);
                         }
@@ -258,7 +255,7 @@ public class ActFindGame extends BaseActivity {
 
     private void initAppScoreNum() {
         List<FindAppScore> findAppScoreList = DataUtil.getInstance().getCacheList(ApiKey.score_num(id), FindAppScore.class);
-        if(!findAppScoreList.isEmpty()) {
+        if (!findAppScoreList.isEmpty()) {
             loadAppScoreNum(findAppScoreList);
         }
         SheepApp.getInstance().getNetComponent().getApiService().getAppScoreNum(id)
@@ -280,6 +277,7 @@ public class ActFindGame extends BaseActivity {
                     }
                 });
     }
+
     private void initMyAppScore() {
         MyFindAppCore myFindAppCore = DataUtil.getInstance().getCacheResult(ApiKey.my_score(id), MyFindAppCore.class);
         if (myFindAppCore == null) {
@@ -343,6 +341,7 @@ public class ActFindGame extends BaseActivity {
 
     private FindApp findApp;
     private boolean isNeedReservation = false;
+
     private void loadData(final FindApp findApp) {
         this.findApp = findApp;
         //游戏简介与下载
@@ -517,8 +516,8 @@ public class ActFindGame extends BaseActivity {
     private Map<String, TextView> downLoadTextViewMap = new HashMap<>();
 
     //获取任务对应的TextView来更新进度
-    private TextView getTextViewByTask(DownloadTask task) {
-        return getTextViewByKey(task.getKey());
+    private TextView getTextViewByTask(DownLoadInfo task) {
+        return getTextViewByKey(task.getMDownloadUrl());
     }
 
     private TextView getTextViewByKey(String key) {
@@ -529,12 +528,11 @@ public class ActFindGame extends BaseActivity {
 
     //更新按钮状态与添加点击事件
     private void updateView(Activity activity, FindApp findApp, TextView textView) {
-        if(findApp.getAvailable_receive() == 0 && findApp.getReceive_account() == 0){//未领取账号
+        if (findApp.getAvailable_receive() == 0 && findApp.getReceive_account() == 0) {//未领取账号
 
             CommonUtil.getInstance()
                     .xiaomiRevieceAcctoun(find_game_down_tv, findApp, activity);
-        }else
-        if (findApp.isCanDownload()) {//可下载
+        } else if (findApp.isCanDownload()) {//可下载
             downLoadTextViewMap.put(findApp.getDownload_link(), textView);
             downLoadTextViewMap.put(findApp.getPackage_name(), textView);
             findApp.getFindAppHelper().updateDownloadTaskView(activity, findApp, textView);
@@ -542,26 +540,23 @@ public class ActFindGame extends BaseActivity {
             findApp.getFindAppHelper().updateReservationView(activity, findApp, textView);
         }
     }
-    //下载状态监听
 
-    @Download.onPre
-    void onPre(DownloadTask task) {
+    //下载状态监听
+    void onPre(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
         if (textView != null) {
             textView.setText("准备下载中");
         }
     }
 
-    @Download.onTaskStart
-    void taskStart(DownloadTask task) {
+    void taskStart(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
         if (textView != null) {
             textView.setText("开始下载中");
         }
     }
 
-    @Download.onTaskResume
-    void taskResume(DownloadTask task) {
+    void taskResume(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
         if (textView != null) {
             textView.setText("恢复下载中");
@@ -569,49 +564,40 @@ public class ActFindGame extends BaseActivity {
     }
 
     //在这里处理任务执行中的状态,如进度进度条的刷新
-    @Download.onTaskRunning
-    protected void running(DownloadTask task) {
+    protected void running(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
         if (textView != null) {
-            textView.setText(String.format(Locale.CHINA, "%d%%(%s)", Math.abs(task.getPercent()), task.getConvertSpeed()));//添加下载速度
+            textView.setText(String.format(Locale.CHINA, "%d%%(%s)", Math.abs(task.getMPercent()), task.getAverageSpeed()));//添加下载速度
         }
     }
 
-    @Download.onTaskStop
-    void taskStop(DownloadTask task) {
+    void taskStop(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
         if (textView != null) {
             textView.setText(CommonUtil.CONTINUE_DOWNLOAD);
         }
     }
 
-    @Download.onNoSupportBreakPoint
-    void onNoSupportBreakPoint(DownloadTask task) {
-    }
-
-    @Download.onTaskCancel
-    void taskCancel(DownloadTask task) {
+    void taskCancel(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
         if (textView != null) {
             textView.setText("已经取消");
         }
     }
 
-    @Download.onTaskFail
-    void taskFail(DownloadTask task) {
+    void taskFail(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
         if (textView != null) {
             textView.setText(CommonUtil.FAIL_DOWNLOAD);
         }
     }
 
-    @Download.onTaskComplete
-    void taskComplete(DownloadTask task) {
+    void taskComplete(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
         if (textView != null) {
             textView.setText(CommonUtil.START_INSTALL);
         }
-        if (findApp != null && TextUtils.equals(task.getKey(), findApp.getDownload_link()))
+        if (findApp != null && TextUtils.equals(task.getMDownloadUrl(), findApp.getDownload_link()))
             findApp.updateState(DownloadUtil.STATUS_FINISH);
     }
 
@@ -657,11 +643,31 @@ public class ActFindGame extends BaseActivity {
 
     @Subscribe
     public void onEventMainThread(BigEvent event) {
-        switch (event.getEventTypes()){
+        switch (event.getEventTypes()) {
             case REFRESH_XIAOMI_GAME_LIST:
                 initData();
                 break;
         }
+        if (event.getData() instanceof DownLoadInfo) {
+            DownLoadInfo task = (DownLoadInfo) event.getData();
+            switch (event.getEventTypes()) {
+                case DOWNLOAD_RUNNING:
+                    running(task);
+                    break;
+                case DOWNLOAD_STOP:
+                    taskStop(task);
+                    break;
+                case DOWNLOAD_COMPLETE:
+                    taskComplete(task);
+                    break;
+                case DOWNLOAD_CANCEL:
+                    taskCancel(task);
+                    break;
+                case DOWNLOAD_FAIL:
+                    taskFail(task);
+                    break;
+            }
+        }
     }
 
     @Override

+ 48 - 44
app/src/main/java/com/sheep/gamegroup/view/activity/ActFindInformation.java

@@ -17,7 +17,6 @@ import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.WindowManager;
-
 import android.webkit.WebChromeClient;
 import android.webkit.WebSettings;
 import android.webkit.WebView;
@@ -26,24 +25,22 @@ import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.TextView;
 
-import com.arialyy.annotations.Download;
-import com.arialyy.aria.core.Aria;
-import com.arialyy.aria.core.download.DownloadTask;
-import com.sheep.gamegroup.event.BigEvent;
-import com.sheep.gamegroup.util.DownloadUtil;
 import com.sheep.gamegroup.absBase.BaseActivity;
+import com.sheep.gamegroup.event.BigEvent;
+import com.sheep.gamegroup.greendao.download.DownLoadInfo;
+import com.sheep.gamegroup.helper.TaskHelper;
 import com.sheep.gamegroup.model.entity.BaseMessage;
 import com.sheep.gamegroup.model.entity.FindApp;
 import com.sheep.gamegroup.model.entity.FindItem;
 import com.sheep.gamegroup.model.util.SheepSubscriber;
 import com.sheep.gamegroup.util.CommonUtil;
 import com.sheep.gamegroup.util.DataUtil;
+import com.sheep.gamegroup.util.DownloadUtil;
 import com.sheep.gamegroup.util.GlideImageLoader;
 import com.sheep.gamegroup.util.Jump2View;
 import com.sheep.gamegroup.util.ListUtil;
 import com.sheep.gamegroup.util.LogUtil;
 import com.sheep.gamegroup.util.SysAppUtil;
-import com.sheep.gamegroup.helper.TaskHelper;
 import com.sheep.gamegroup.util.TimeUtil;
 import com.sheep.gamegroup.util.ViewHolder;
 import com.sheep.gamegroup.util.ViewUtil;
@@ -110,7 +107,7 @@ public class ActFindInformation extends BaseActivity implements Action1<Integer>
         id = getIntent().getIntExtra("id", 0);
 
         TitleBarUtils.getInstance()
-                .setTitle(this,"详情")
+                .setTitle(this, "详情")
                 .setTitleFinish(this)
                 .setRightImgBotton(this, R.mipmap.share, new View.OnClickListener() {
                     @Override
@@ -121,7 +118,6 @@ public class ActFindInformation extends BaseActivity implements Action1<Integer>
                 });
 
         EventBus.getDefault().register(this);
-        Aria.download(this).register();
 
         refresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
             @Override
@@ -197,7 +193,7 @@ public class ActFindInformation extends BaseActivity implements Action1<Integer>
             @Override
             public boolean shouldOverrideUrlLoading(WebView view, String url) {
                 //Android8.0以下的需要返回true 并且需要loadUrl;8.0之后效果相反
-                if(Build.VERSION.SDK_INT<26) {
+                if (Build.VERSION.SDK_INT < 26) {
                     webView.loadUrl(url);
                     Jump2View.getInstance().goWeb(ActFindInformation.this, url);
                     return true;
@@ -497,7 +493,7 @@ public class ActFindInformation extends BaseActivity implements Action1<Integer>
     private FindItem findItem;
 
     private void notifyDataSetChanged() {
-        if(empty_view == null){
+        if (empty_view == null) {
             return;
         }
         CommonUtil.getInstance().updateEmptyView(empty_view, list.isEmpty());
@@ -509,8 +505,8 @@ public class ActFindInformation extends BaseActivity implements Action1<Integer>
     private Map<String, TextView> downLoadTextViewMap = new HashMap<>();
 
     //获取任务对应的TextView来更新进度
-    private TextView getTextViewByTask(DownloadTask task) {
-        return getTextViewByKey(task.getKey());
+    private TextView getTextViewByTask(DownLoadInfo task) {
+        return getTextViewByKey(task.getMDownloadUrl());
     }
 
     private TextView getTextViewByKey(String key) {
@@ -532,24 +528,21 @@ public class ActFindInformation extends BaseActivity implements Action1<Integer>
 
     //下载状态监听
 
-    @Download.onPre
-    void onPre(DownloadTask task) {
+    void onPre(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
         if (textView != null) {
             textView.setText("准备下载中");
         }
     }
 
-    @Download.onTaskStart
-    void taskStart(DownloadTask task) {
+    void taskStart(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
         if (textView != null) {
             textView.setText("开始下载中");
         }
     }
 
-    @Download.onTaskResume
-    void taskResume(DownloadTask task) {
+    void taskResume(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
         if (textView != null) {
             textView.setText("恢复下载中");
@@ -557,53 +550,73 @@ public class ActFindInformation extends BaseActivity implements Action1<Integer>
     }
 
     //在这里处理任务执行中的状态,如进度进度条的刷新
-    @Download.onTaskRunning
-    protected void running(DownloadTask task) {
+    protected void running(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
         if (textView != null) {
-            textView.setText(String.format(Locale.CHINA, "%d%%(%s)", Math.abs(task.getPercent()), task.getConvertSpeed()));//添加下载速度
+            textView.setText(String.format(Locale.CHINA, "%d%%(%s)", Math.abs(task.getMPercent()), task.getAverageSpeed()));//添加下载速度
         }
     }
 
-    @Download.onTaskStop
-    void taskStop(DownloadTask task) {
+    void taskStop(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
         if (textView != null) {
             textView.setText(CommonUtil.CONTINUE_DOWNLOAD);
         }
     }
 
-    @Download.onNoSupportBreakPoint
-    void onNoSupportBreakPoint(DownloadTask task) {
-    }
-
-    @Download.onTaskCancel
-    void taskCancel(DownloadTask task) {
+    void taskCancel(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
         if (textView != null) {
             textView.setText("已经取消");
         }
     }
 
-    @Download.onTaskFail
-    void taskFail(DownloadTask task) {
+    void taskFail(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
         if (textView != null) {
             textView.setText(CommonUtil.FAIL_DOWNLOAD);
         }
     }
 
-    @Download.onTaskComplete
-    void taskComplete(DownloadTask task) {
+    void taskComplete(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
         if (textView != null) {
             textView.setText(CommonUtil.START_INSTALL);
         }
-        if (findApp != null && TextUtils.equals(task.getKey(), findApp.getDownload_link()))
+        if (findApp != null && TextUtils.equals(task.getMDownloadUrl(), findApp.getDownload_link()))
             findApp.updateState(DownloadUtil.STATUS_FINISH);
     }
 
     @Subscribe
+    public void onEventMainThread(BigEvent event) {
+        switch (event.getEventTypes()) {
+            case ONFRESH_TRYMAKEMANY_PAGE:
+                taskHelper.refreshTask();
+                break;
+        }
+        if (event.getData() instanceof DownLoadInfo) {
+            DownLoadInfo task = (DownLoadInfo) event.getData();
+            switch (event.getEventTypes()) {
+                case DOWNLOAD_RUNNING:
+                    running(task);
+                    break;
+                case DOWNLOAD_STOP:
+                    taskStop(task);
+                    break;
+                case DOWNLOAD_COMPLETE:
+                    taskComplete(task);
+                    break;
+                case DOWNLOAD_CANCEL:
+                    taskCancel(task);
+                    break;
+                case DOWNLOAD_FAIL:
+                    taskFail(task);
+                    break;
+            }
+        }
+    }
+
+    @Subscribe
     public void onEventMainThread(Intent intent) {
         if (intent != null && intent.getAction() != null && intent.getDataString() != null && intent.getDataString().contains("package:")) {
             String packageName = intent.getDataString().replace("package:", "");
@@ -684,15 +697,6 @@ public class ActFindInformation extends BaseActivity implements Action1<Integer>
         }
     }
 
-    @Subscribe
-    public void onEventMainThread(BigEvent event) {
-        switch (event.getEventTypes()) {
-            case ONFRESH_TRYMAKEMANY_PAGE:
-                taskHelper.refreshTask();
-                break;
-        }
-    }
-
     @Override
     protected void onPause() {
         super.onPause();

+ 2 - 2
app/src/main/java/com/sheep/gamegroup/view/activity/ActInstallApkList.java

@@ -6,10 +6,10 @@ import android.view.View;
 import android.widget.ImageView;
 import android.widget.TextView;
 
-import com.arialyy.aria.util.CommonUtil;
 import com.sheep.gamegroup.absBase.BaseActivity;
 import com.sheep.gamegroup.model.entity.AppInfo;
 import com.sheep.gamegroup.util.LogUtil;
+import com.sheep.gamegroup.util.Md5Util;
 import com.sheep.gamegroup.util.StringUtils;
 import com.sheep.gamegroup.util.SysAppUtil;
 import com.sheep.gamegroup.util.ViewHolder;
@@ -84,7 +84,7 @@ public class ActInstallApkList extends BaseActivity {
 
                 app_info_iv.setImageDrawable(appInfo.getIcon());
                 ViewUtil.setText(app_info_name_tv, appInfo.getAppName());
-                app_info_name_tv.append(CommonUtil.getFileMD5(new File(appInfo.getSourceDir())));
+                app_info_name_tv.append(Md5Util.getFileMD5(new File(appInfo.getSourceDir())));
                 ViewUtil.setText(app_info_package_name_tv, appInfo.getPackageName());
                 ViewUtil.setText(app_info_size_tv, appInfo.getApkSize());
                 ViewUtil.setText(app_info_path_tv, appInfo.getSourceDir()+"\n"+appInfo.getSha1());

+ 43 - 48
app/src/main/java/com/sheep/gamegroup/view/activity/ActMain.java

@@ -15,14 +15,13 @@ import android.widget.LinearLayout;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 
-import com.arialyy.aria.core.download.DownloadTask;
 import com.kfzs.duanduan.utils.StatusBarUtils;
 import com.kfzs.duanduan.view.DialogStorageLow;
 import com.sheep.gamegroup.absBase.BaseActivity;
 import com.sheep.gamegroup.event.BigEvent;
+import com.sheep.gamegroup.greendao.download.DownLoadInfo;
 import com.sheep.gamegroup.helper.DownloadHelper;
 import com.sheep.gamegroup.model.entity.Container;
-import com.sheep.gamegroup.model.entity.FindApp;
 import com.sheep.gamegroup.util.ActionUtil;
 import com.sheep.gamegroup.util.ChannelContent;
 import com.sheep.gamegroup.util.CommonUtil;
@@ -49,10 +48,8 @@ import org.greenrobot.eventbus.EventBus;
 import org.greenrobot.eventbus.Subscribe;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
-import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 import butterknife.BindView;
@@ -93,7 +90,7 @@ public class ActMain extends BaseActivity {
         super.onStart();
     }
 
-    private void init(){
+    private void init() {
         //判断当前版本在4.0以上并且存在虚拟按键,否则不做操作
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && G.checkDeviceHasNavigationBar(this)) {
             //一定要判断是否存在按键,否则在没有按键的手机调用会影响别的功能。如之前没有考虑到,导致图传全屏变成小屏显示。
@@ -112,6 +109,7 @@ public class ActMain extends BaseActivity {
     public boolean onTouchEvent(MotionEvent event) {
         return false;
     }
+
     private View decorView;
 
     public static final String FIRST_SHOW_MAIN = "first_show_main";//是否是第一次显示主页
@@ -326,17 +324,18 @@ public class ActMain extends BaseActivity {
     }
 
     private int onResumeCount = 0;//调用onResume次数
+
     @Override
     protected void onResume() {
         super.onResume();
         if (container != null && container.getT() != null)
             container.getT().call(1);
-        if(checkNextAction(MiddleSchemeAct.SHOW_DIALOG_GAME_OR_GIFT_TASK)) {
-            if(onResumeCount == 0) {
+        if (checkNextAction(MiddleSchemeAct.SHOW_DIALOG_GAME_OR_GIFT_TASK)) {
+            if (onResumeCount == 0) {
                 DataUtil.putAsBoolean("tryShowHalfScreenAd", true);
             }
         } else {
-            if(onResumeCount == 0) {
+            if (onResumeCount == 0) {
                 SysAppUtil.showVersionInfo(this, SpUtils.getIgnoreMd5(), new Action1<Integer>() {
                     @Override
                     public void call(Integer integer) {
@@ -345,7 +344,7 @@ public class ActMain extends BaseActivity {
                 });
             }
         }
-        onResumeCount ++;
+        onResumeCount++;
     }
 
     @Override
@@ -401,60 +400,56 @@ public class ActMain extends BaseActivity {
             case STORAGE_LOW:
                 DialogStorageLow.showDialog(this);
                 break;
-            default:
-                if(progressView != null) {
-                    if (event.getData() instanceof DownloadTask) {
-                        DownloadTask task = (DownloadTask) event.getData();
-                        String url = task.getKey();
-                        TextView tvProgress = progressView.findViewWithTag(PUBLIC_TAG_PREFIX_TEXTVIEW_LIST + url);
-                        if(tvProgress != null) {
-                            switch (event.getEventTypes()) {
-                                case GENERATION_ACCOUNT_REFRESH_ADAPTER:
-                                    try {
-                                        int p = task.getPercent();    //任务进度百分比
-                                        tvProgress.setText(String.format(Locale.CHINA, "%d%%", Math.abs(p)));
-
-                                    } catch (Exception e) {
-                                        e.printStackTrace();
-                                    }
-                                    break;
-                                case DOWNLOAD_STOP:
-                                    tvProgress.setText("继续下载");
-                                    break;
-                                case DOWNLOAD_COMPLETE:
-                                    tvProgress.setText("安装游戏");
-                                    if(downloadHelper != null)
-                                        downloadHelper.updateState(DownloadUtil.STATUS_FINISH);
-                                    break;
-                                case DOWNLOAD_CANCEL:
-                                    tvProgress.setText("下载取消");
-                                    break;
-                                case DOWNLOAD_FAIL:
-                                    tvProgress.setText("下载失败");
-                                    break;
-                            }
+        }
+        if (progressView != null && event.getData() instanceof DownLoadInfo) {
+            DownLoadInfo task = (DownLoadInfo) event.getData();
+            String url = task.getMDownloadUrl();
+            TextView tvProgress = progressView.findViewWithTag(PUBLIC_TAG_PREFIX_TEXTVIEW_LIST + url);
+            if (tvProgress != null) {
+                switch (event.getEventTypes()) {
+                    case DOWNLOAD_RUNNING:
+                        try {
+                            int p = task.getMPercent();    //任务进度百分比
+                            tvProgress.setText(String.format(Locale.CHINA, "%d%%", Math.abs(p)));
+
+                        } catch (Exception e) {
+                            e.printStackTrace();
                         }
-                    }
+                        break;
+                    case DOWNLOAD_STOP:
+                        tvProgress.setText("继续下载");
+                        break;
+                    case DOWNLOAD_COMPLETE:
+                        tvProgress.setText("安装游戏");
+                        if (downloadHelper != null)
+                            downloadHelper.updateState(DownloadUtil.STATUS_FINISH);
+                        break;
+                    case DOWNLOAD_CANCEL:
+                        tvProgress.setText("下载取消");
+                        break;
+                    case DOWNLOAD_FAIL:
+                        tvProgress.setText("下载失败");
+                        break;
                 }
-                break;
+            }
         }
     }
 
     @Subscribe
     public void onEventMainThread(Intent intent) {
-        if(intent != null && intent.getAction() != null && intent.getDataString() != null && intent.getDataString().contains("package:")){
-            String packageName = intent.getDataString().replace("package:","");
+        if (intent != null && intent.getAction() != null && intent.getDataString() != null && intent.getDataString().contains("package:")) {
+            String packageName = intent.getDataString().replace("package:", "");
 
             TextView tvProgress = progressView.findViewWithTag(PUBLIC_TAG_PREFIX_TEXTVIEW_LIST + url);
-            if(tvProgress != null && downloadHelper != null && TextUtils.equals(packageName, this.packageName)) {
-                switch (intent.getAction()){
+            if (tvProgress != null && downloadHelper != null && TextUtils.equals(packageName, this.packageName)) {
+                switch (intent.getAction()) {
                     case ACTION_PACKAGE_ADDED:
                         tvProgress.setText(CommonUtil.GAME_OPEN);
                         downloadHelper.updateState(DownloadUtil.STATUS_INSTALLED);
                         break;
                     case ACTION_PACKAGE_REMOVED:
                         String path = PackageUtil.isExistsFile(packageName, url);
-                        if(TextUtils.isEmpty(path)) {
+                        if (TextUtils.isEmpty(path)) {
                             downloadHelper.updateState(DownloadUtil.STATUS_INIT);
                             tvProgress.setText(CommonUtil.START_DOWNLOAD);
                         } else {

+ 73 - 68
app/src/main/java/com/sheep/gamegroup/view/activity/ActPlayGameDetail.java

@@ -13,22 +13,20 @@ import android.widget.LinearLayout;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 
-import com.arialyy.annotations.Download;
-import com.arialyy.aria.core.Aria;
-import com.arialyy.aria.core.download.DownloadTask;
-import com.sheep.gamegroup.event.BigEvent;
-import com.sheep.gamegroup.view.adapter.TitleFragmentListAdapter;
-import com.sheep.gamegroup.util.DownloadUtil;
 import com.kfzs.duanduan.view.ViewPagerAutoHeigh;
 import com.sheep.gamegroup.absBase.BaseActivity;
+import com.sheep.gamegroup.event.BigEvent;
+import com.sheep.gamegroup.greendao.download.DownLoadInfo;
 import com.sheep.gamegroup.model.entity.BaseMessage;
 import com.sheep.gamegroup.model.entity.GameEntity;
 import com.sheep.gamegroup.model.entity.PlayGameEntity;
 import com.sheep.gamegroup.model.util.SheepSubscriber;
 import com.sheep.gamegroup.util.CommonUtil;
 import com.sheep.gamegroup.util.DataUtil;
+import com.sheep.gamegroup.util.DownloadUtil;
 import com.sheep.gamegroup.util.GlideImageLoader;
 import com.sheep.gamegroup.util.ViewUtil;
+import com.sheep.gamegroup.view.adapter.TitleFragmentListAdapter;
 import com.sheep.gamegroup.view.fragment.FgtPlaGameGift;
 import com.sheep.gamegroup.view.fragment.FgtPlayGameDetail;
 import com.sheep.jiuyan.samllsheep.R;
@@ -117,7 +115,6 @@ public class ActPlayGameDetail extends BaseActivity implements Action1<Integer>
                 .setTitle(this, "详情")
                 .setTitleFinish(this);
         EventBus.getDefault().register(this);
-        Aria.download(this).register();
 
         mAdapter = new TitleFragmentListAdapter(getSupportFragmentManager());
         txt_baseactivity_title.setVisibility(View.INVISIBLE);//不显示标题栏
@@ -148,7 +145,7 @@ public class ActPlayGameDetail extends BaseActivity implements Action1<Integer>
                 int topRow2 = (titleHeight - find_game_name_tv.getHeight()) / 2;
                 int leftRow = topRow2 / 4;//isNeedReservation ? topRow : 5 * topRow;
 
-                int willTop = Math.max(topRow/2, find_game_top + verticalOffset);
+                int willTop = Math.max(topRow / 2, find_game_top + verticalOffset);
                 int row = (find_icon_with * willTop + titleHeight * (find_game_top - willTop)) / find_game_top - topRow;
                 RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) find_game_iv.getLayoutParams();
                 layoutParams.leftMargin = Math.max(titleWidth, (G.WIDTH - find_icon_with) / 2 + verticalOffset);
@@ -180,7 +177,7 @@ public class ActPlayGameDetail extends BaseActivity implements Action1<Integer>
                 //星级位置变化
                 RelativeLayout.LayoutParams layoutParams5 = (RelativeLayout.LayoutParams) find_game_xin.getLayoutParams();
                 layoutParams5.topMargin = getResources().getDimensionPixelSize(R.dimen.find_game_top210) + verticalOffset;
-                if (willTop == topRow/2) {
+                if (willTop == topRow / 2) {
                     if (mIsExpanded) {
 //                        txt_baseactivity_title.setVisibility(View.INVISIBLE);
                         find_game_bar.setVisibility(View.VISIBLE);
@@ -209,7 +206,7 @@ public class ActPlayGameDetail extends BaseActivity implements Action1<Integer>
         ViewUtil.setText(find_game_name_tv);
         ViewUtil.setText(find_game_info_tv);
         ViewUtil.setText(find_game_down_tv);
-        if(find_game_xin != null)
+        if (find_game_xin != null)
             find_game_xin.setRating(0.0f);
         //游戏介绍
     }
@@ -238,11 +235,11 @@ public class ActPlayGameDetail extends BaseActivity implements Action1<Integer>
     private void loadData(GameEntity gameEntity) {
         this.gameEntity = gameEntity;
         playGameEntity = gameEntity.getApp();
-        if(gameEntity == null || playGameEntity == null){
+        if (gameEntity == null || playGameEntity == null) {
             return;
         }
         //游戏简介与下载
-        GlideImageLoader.setGameImage(find_game_iv, gameEntity.getApp().getIcon()+"");
+        GlideImageLoader.setGameImage(find_game_iv, gameEntity.getApp().getIcon() + "");
         ViewUtil.setText(find_game_name_tv, gameEntity.getApp().getName());
         isNeedReservation = !gameEntity.getApp().isCanDownload();//这里认为只有两种状态:可下载与预约下载
 //        if (isNeedReservation)
@@ -262,19 +259,19 @@ public class ActPlayGameDetail extends BaseActivity implements Action1<Integer>
         mAdapter.add(FgtPlayGameDetail.newInstance(gameEntity), "详情");
         //ViewPager
         //welfare_gift_layout
-        if(gameEntity.isGiftAndBonus()){
+        if (gameEntity.isGiftAndBonus()) {
             welfare_gift_layout.setVisibility(View.GONE);
-        }else {
+        } else {
             welfare_gift_layout.setVisibility(View.VISIBLE);
             mAdapter.add(FgtPlaGameGift.newInstance(gameEntity), "礼包");
-            if(gameEntity.isGift()){
+            if (gameEntity.isGift()) {
                 gift_tv.setVisibility(View.VISIBLE);
-            }else {
+            } else {
                 gift_tv.setVisibility(View.GONE);
             }
-            if(TextUtils.isEmpty(gameEntity.getBonusText())){
+            if (TextUtils.isEmpty(gameEntity.getBonusText())) {
                 welfare_tv.setVisibility(View.GONE);
-            }else {
+            } else {
                 welfare_tv.setVisibility(View.VISIBLE);
                 ViewUtil.setText(welfare_tv, String.format(Locale.CHINA, "+%s元", gameEntity.getBonusText()));
             }
@@ -286,14 +283,14 @@ public class ActPlayGameDetail extends BaseActivity implements Action1<Integer>
         CommonUtil.getInstance().reflex(tabLayout, activity);
 
         //tag 标签绘制
-        CommonUtil.getInstance().paintLineaLayout(activity, gameEntity, ll_game_tag, 4,R.color.txt_bule, R.drawable.shape_blue_stroke_rectangle_no_lb);
+        CommonUtil.getInstance().paintLineaLayout(activity, gameEntity, ll_game_tag, 4, R.color.txt_bule, R.drawable.shape_blue_stroke_rectangle_no_lb);
 
     }
 
     //更新按钮状态与添加点击事件
     private void updateView(final Activity activity, PlayGameEntity playGameEntity, TextView textView) {
 
-        CommonUtil.getInstance().palyGameDetailBtnValue(activity,gameEntity,textView, 0);
+        CommonUtil.getInstance().palyGameDetailBtnValue(activity, gameEntity, textView, 0);
     }
 
 
@@ -306,7 +303,7 @@ public class ActPlayGameDetail extends BaseActivity implements Action1<Integer>
                     @Override
                     public void onNext(BaseMessage baseMessage) {
                         boolean isNewData = DataUtil.getInstance().isNewData(ApiKey.playGameDetail(id));
-                        if(isNewData) {
+                        if (isNewData) {
                             GameEntity gameEntity = baseMessage.getData(GameEntity.class);
                             loadApp(gameEntity);
                         }
@@ -321,6 +318,7 @@ public class ActPlayGameDetail extends BaseActivity implements Action1<Integer>
                     }
                 });
     }
+
     @Override
     public void call(Integer integer) {
 
@@ -333,94 +331,81 @@ public class ActPlayGameDetail extends BaseActivity implements Action1<Integer>
     }
 
     //下载状态监听
-
-    @Download.onPre
-    void onPre(DownloadTask task) {
-        if(TextUtils.isEmpty(gameEntity.downLinks())) {//游戏任务
+    void onPre(DownLoadInfo task) {
+        if (TextUtils.isEmpty(gameEntity.downLinks())) {//游戏任务
             return;
         }
 
-        if (find_game_down_tv != null && gameEntity.downLinks().equals(task.getKey())) {
+        if (find_game_down_tv != null && gameEntity.downLinks().equals(task.getMDownloadUrl())) {
             find_game_down_tv.setText("准备下载中");
         }
     }
 
-    @Download.onTaskStart
-    void taskStart(DownloadTask task) {
-        if(TextUtils.isEmpty(gameEntity.downLinks())) {//游戏任务
+    void taskStart(DownLoadInfo task) {
+        if (TextUtils.isEmpty(gameEntity.downLinks())) {//游戏任务
             return;
         }
-        if (find_game_down_tv != null && gameEntity.downLinks().equals(task.getKey())) {
+        if (find_game_down_tv != null && gameEntity.downLinks().equals(task.getMDownloadUrl())) {
             find_game_down_tv.setText("开始下载中");
         }
     }
 
-    @Download.onTaskResume
-    void taskResume(DownloadTask task) {
-        if(TextUtils.isEmpty(gameEntity.downLinks())) {//游戏任务
+    void taskResume(DownLoadInfo task) {
+        if (TextUtils.isEmpty(gameEntity.downLinks())) {//游戏任务
             return;
         }
-        if (find_game_down_tv != null && gameEntity.downLinks().equals(task.getKey())) {
+        if (find_game_down_tv != null && gameEntity.downLinks().equals(task.getMDownloadUrl())) {
             find_game_down_tv.setText("恢复下载中");
         }
     }
 
     //在这里处理任务执行中的状态,如进度进度条的刷新
-    @Download.onTaskRunning
-    protected void running(DownloadTask task) {
-        if(gameEntity == null || TextUtils.isEmpty(gameEntity.downLinks())) {//游戏任务
+    protected void running(DownLoadInfo task) {
+        if (gameEntity == null || TextUtils.isEmpty(gameEntity.downLinks())) {//游戏任务
             return;
         }
-        if (find_game_down_tv != null && gameEntity.downLinks().equals(task.getKey())) {
-            find_game_down_tv.setText(String.format(Locale.CHINA, "%d%%(%s)", Math.abs(task.getPercent()), task.getConvertSpeed()));//添加下载速度
+        if (find_game_down_tv != null && gameEntity.downLinks().equals(task.getMDownloadUrl())) {
+            find_game_down_tv.setText(String.format(Locale.CHINA, "%d%%(%s)", Math.abs(task.getMPercent()), task.getAverageSpeed()));//添加下载速度
         }
     }
 
-    @Download.onTaskStop
-    void taskStop(DownloadTask task) {
-        if(gameEntity == null || TextUtils.isEmpty(gameEntity.downLinks())) {//游戏任务
+    void taskStop(DownLoadInfo task) {
+        if (gameEntity == null || TextUtils.isEmpty(gameEntity.downLinks())) {//游戏任务
             return;
         }
-        if (find_game_down_tv != null && gameEntity.downLinks().equals(task.getKey())) {
+        if (find_game_down_tv != null && gameEntity.downLinks().equals(task.getMDownloadUrl())) {
             find_game_down_tv.setText(CommonUtil.CONTINUE_DOWNLOAD);
         }
     }
 
-    @Download.onNoSupportBreakPoint
-    void onNoSupportBreakPoint(DownloadTask task) {
-    }
-
-    @Download.onTaskCancel
-    void taskCancel(DownloadTask task) {
-        if(gameEntity == null || TextUtils.isEmpty(gameEntity.downLinks())) {//游戏任务
+    void taskCancel(DownLoadInfo task) {
+        if (gameEntity == null || TextUtils.isEmpty(gameEntity.downLinks())) {//游戏任务
             return;
         }
-        if (find_game_down_tv != null && gameEntity.downLinks().equals(task.getKey())) {
+        if (find_game_down_tv != null && gameEntity.downLinks().equals(task.getMDownloadUrl())) {
             find_game_down_tv.setText("已经取消");
         }
     }
 
-    @Download.onTaskFail
-    void taskFail(DownloadTask task) {
-        if(gameEntity == null || TextUtils.isEmpty(gameEntity.downLinks())) {//游戏任务
+    void taskFail(DownLoadInfo task) {
+        if (gameEntity == null || TextUtils.isEmpty(gameEntity.downLinks())) {//游戏任务
             return;
         }
-        if (find_game_down_tv != null && gameEntity.downLinks().equals(task.getKey())) {
+        if (find_game_down_tv != null && gameEntity.downLinks().equals(task.getMDownloadUrl())) {
             find_game_down_tv.setText(CommonUtil.FAIL_DOWNLOAD);
         }
     }
 
-    @Download.onTaskComplete
-    void taskComplete(DownloadTask task) {
-        if(gameEntity == null || TextUtils.isEmpty(gameEntity.downLinks())) {//游戏任务
+    void taskComplete(DownLoadInfo task) {
+        if (gameEntity == null || TextUtils.isEmpty(gameEntity.downLinks())) {//游戏任务
             return;
         }
-        if (find_game_down_tv != null && gameEntity.downLinks().equals(task.getKey())) {
+        if (find_game_down_tv != null && gameEntity.downLinks().equals(task.getMDownloadUrl())) {
             find_game_down_tv.setText(CommonUtil.START_INSTALL);
         }
-        if (gameEntity != null && gameEntity.getApp() != null && TextUtils.equals(task.getKey(), gameEntity.getApp().getDownload_link()))
+        if (gameEntity != null && gameEntity.getApp() != null && TextUtils.equals(task.getMDownloadUrl(), gameEntity.getApp().getDownload_link()))
             gameEntity.getApp().updateState(DownloadUtil.STATUS_FINISH);
-        if (gameEntity != null && gameEntity.getRelease_task() != null && TextUtils.equals(task.getKey(), gameEntity.getApp().getDownload_link()))
+        if (gameEntity != null && gameEntity.getRelease_task() != null && TextUtils.equals(task.getMDownloadUrl(), gameEntity.getApp().getDownload_link()))
             gameEntity.getRelease_task().getDownloadHelper().updateState(DownloadUtil.STATUS_FINISH);
     }
 
@@ -451,22 +436,22 @@ public class ActPlayGameDetail extends BaseActivity implements Action1<Integer>
             if (TextUtils.equals(packageName, playGameEntity.getPackage_names())) {
                 switch (intent.getAction()) {
                     case ACTION_PACKAGE_ADDED:
-                        if(playGameEntity != null)
+                        if (playGameEntity != null)
                             playGameEntity.updateState(DownloadUtil.STATUS_INSTALLED);
-                        if(gameEntity.getRelease_task() != null)
+                        if (gameEntity.getRelease_task() != null)
                             gameEntity.getRelease_task().getDownloadHelper().updateState(DownloadUtil.STATUS_INSTALLED);
                         break;
                     case ACTION_PACKAGE_REMOVED:
                         String path = PackageUtil.isExistsFile(packageName, playGameEntity.getDownload_url());
                         if (TextUtils.isEmpty(path)) {
-                            if(playGameEntity != null)
+                            if (playGameEntity != null)
                                 playGameEntity.updateState(DownloadUtil.STATUS_INIT);
-                            if(gameEntity.getRelease_task() != null)
+                            if (gameEntity.getRelease_task() != null)
                                 gameEntity.getRelease_task().getDownloadHelper().updateState(DownloadUtil.STATUS_INIT);
                         } else {
-                            if(playGameEntity != null)
+                            if (playGameEntity != null)
                                 playGameEntity.updateState(DownloadUtil.STATUS_FINISH);
-                            if(gameEntity.getRelease_task() != null)
+                            if (gameEntity.getRelease_task() != null)
                                 gameEntity.getRelease_task().getDownloadHelper().updateState(DownloadUtil.STATUS_FINISH);
                         }
                         break;
@@ -477,10 +462,30 @@ public class ActPlayGameDetail extends BaseActivity implements Action1<Integer>
 
     @Subscribe
     public void onEventMainThread(BigEvent event) {
-        switch (event.getEventTypes()){
+        switch (event.getEventTypes()) {
             case REFRESH_XIAOMI_GAME_LIST:
                 initData();
                 break;
         }
+        if (event.getData() instanceof DownLoadInfo) {
+            DownLoadInfo task = (DownLoadInfo) event.getData();
+            switch (event.getEventTypes()) {
+                case DOWNLOAD_RUNNING:
+                    running(task);
+                    break;
+                case DOWNLOAD_STOP:
+                    taskStop(task);
+                    break;
+                case DOWNLOAD_COMPLETE:
+                    taskComplete(task);
+                    break;
+                case DOWNLOAD_CANCEL:
+                    taskCancel(task);
+                    break;
+                case DOWNLOAD_FAIL:
+                    taskFail(task);
+                    break;
+            }
+        }
     }
 }

+ 77 - 48
app/src/main/java/com/sheep/gamegroup/view/activity/ActReservation.java

@@ -9,16 +9,15 @@ import android.view.View;
 import android.widget.ImageView;
 import android.widget.TextView;
 
-import com.arialyy.annotations.Download;
-import com.arialyy.aria.core.Aria;
-import com.arialyy.aria.core.download.DownloadTask;
-import com.sheep.gamegroup.util.DownloadUtil;
 import com.sheep.gamegroup.absBase.BaseActivity;
+import com.sheep.gamegroup.event.BigEvent;
+import com.sheep.gamegroup.greendao.download.DownLoadInfo;
 import com.sheep.gamegroup.model.entity.BaseMessage;
 import com.sheep.gamegroup.model.entity.FindApp;
 import com.sheep.gamegroup.model.entity.FindAppReservation;
 import com.sheep.gamegroup.model.util.SheepSubscriber;
 import com.sheep.gamegroup.util.CommonUtil;
+import com.sheep.gamegroup.util.DownloadUtil;
 import com.sheep.gamegroup.util.Jump2View;
 import com.sheep.gamegroup.util.ListUtil;
 import com.sheep.gamegroup.util.SysAppUtil;
@@ -74,7 +73,6 @@ public class ActReservation extends BaseActivity {
                 .setTitleFinish(this);
 
         EventBus.getDefault().register(this);
-        Aria.download(this).register();
 
         refresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
             @Override
@@ -106,16 +104,17 @@ public class ActReservation extends BaseActivity {
             public void convert(ViewHolder holder, FindAppReservation item) {
                 View find_reservation_item_center = holder.itemView.findViewById(R.id.find_reservation_item_center);
                 View find_reservation_item_bottom = holder.itemView.findViewById(R.id.find_reservation_item_bottom);
-                if(find_reservation_item_bottom != null) {
+                if (find_reservation_item_bottom != null) {
                     find_reservation_item_center.setVisibility(item == null ? View.GONE : View.VISIBLE);
                     find_reservation_item_bottom.setVisibility(item == null ? View.VISIBLE : View.GONE);
                 }
-                if(item != null)
+                if (item != null)
                     loadItem(holder.itemView, item);
 
             }
         });
     }
+
     private void loadItem(View itemView, final FindAppReservation item) {
         ImageView find_information_game_icon = (ImageView) itemView.findViewById(R.id.find_information_game_icon);
         TextView find_information_game_name = (TextView) itemView.findViewById(R.id.find_information_game_name);
@@ -123,16 +122,16 @@ public class ActReservation extends BaseActivity {
         TextView find_information_game_bt1 = (TextView) itemView.findViewById(R.id.find_information_game_bt1);
         final TextView find_information_game_bt2 = (TextView) itemView.findViewById(R.id.find_information_game_bt2);
 
-        if(item != null && item.getApplication() != null){
+        if (item != null && item.getApplication() != null) {
             final FindApp findApp = item.getApplication();
 
             ViewUtil.setImage(find_information_game_icon, findApp.getIcon());
             ViewUtil.setText(find_information_game_name, findApp.getName());
             ViewUtil.setText(find_information_game_time, String.format(Locale.CHINA, "开放时间:\n%s", TimeUtil.TimeStamp2Date(findApp.getDownload_at(), "yyyy-MM-dd\u0020HH:mm")));
-            if(findApp.isCanDownload()){//可以下载
+            if (findApp.isCanDownload()) {//可以下载
                 downLoadTextViewMap.put(findApp.getDownload_link(), find_information_game_bt1);
                 downLoadTextViewMap.put(findApp.getPackage_name(), find_information_game_bt1);
-                findAppMap.put(findApp.getDownload_link(),findApp);
+                findAppMap.put(findApp.getDownload_link(), findApp);
                 findAppMap.put(findApp.getPackage_name(), findApp);
                 findApp.getFindAppHelper().updateDownloadTaskView(this, findApp, find_information_game_bt1);
                 find_information_game_bt2.setEnabled(false);
@@ -146,7 +145,7 @@ public class ActReservation extends BaseActivity {
                     @Override
                     public void onClick(View view) {
                         find_information_game_bt2.setEnabled(false);
-                        if(item.isCancel()){//已经取消预约则进行预约
+                        if (item.isCancel()) {//已经取消预约则进行预约
                             recordAppDownloads(find_information_game_bt2, findApp.getId(), item);
                         } else {//取消预约
                             deleteDownloads(find_information_game_bt2, item);
@@ -190,6 +189,7 @@ public class ActReservation extends BaseActivity {
                     }
                 });
     }
+
     //取消预约
     private void deleteDownloads(final TextView find_information_game_bt2, final FindAppReservation item) {
         SheepApp.getInstance().getNetComponent().getApiService().deleteDownloads(item.getId())
@@ -211,6 +211,7 @@ public class ActReservation extends BaseActivity {
                     }
                 });
     }
+
     @Override
     public void initListener() {
 
@@ -242,7 +243,7 @@ public class ActReservation extends BaseActivity {
                         List<FindAppReservation> newList = baseMessage.getDataList(FindAppReservation.class);
                         list.clear();
                         ListUtil.addAll(list, newList);
-                        if(!list.isEmpty())
+                        if (!list.isEmpty())
                             list.add(null);//底部圆角
                         notifyDataSetChanged();
                     }
@@ -257,7 +258,7 @@ public class ActReservation extends BaseActivity {
 
 
     private void notifyDataSetChanged() {
-        if(empty_view == null){
+        if (empty_view == null) {
             return;
         }
         CommonUtil.getInstance().updateEmptyView(empty_view, list.isEmpty());
@@ -266,111 +267,138 @@ public class ActReservation extends BaseActivity {
     }
 
     private Map<String, FindApp> findAppMap = new HashMap<>();
+
     //获取任务对应的findApp
     private FindApp getFindAppByKey(String key) {
-        if(findAppMap.containsKey(key))
+        if (findAppMap.containsKey(key))
             return findAppMap.get(key);
         return null;
     }
+
     private Map<String, TextView> downLoadTextViewMap = new HashMap<>();
+
     //获取任务对应的TextView来更新进度
-    private TextView getTextViewByTask(DownloadTask task) {
-        return getTextViewByKey(task.getKey());
+    private TextView getTextViewByTask(DownLoadInfo task) {
+        return getTextViewByKey(task.getMDownloadUrl());
     }
+
     private TextView getTextViewByKey(String key) {
-        if(downLoadTextViewMap.containsKey(key))
+        if (downLoadTextViewMap.containsKey(key))
             return downLoadTextViewMap.get(key);
         return null;
     }
-    //下载状态监听
 
-    @Download.onPre void onPre(DownloadTask task) {
+    //下载状态监听
+    void onPre(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
-        if(textView != null) {
+        if (textView != null) {
             textView.setText("准备下载中");
         }
     }
 
-    @Download.onTaskStart void taskStart(DownloadTask task) {
+    void taskStart(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
-        if(textView != null) {
+        if (textView != null) {
             textView.setText("开始下载中");
         }
     }
-    @Download.onTaskResume void taskResume(DownloadTask task) {
+
+    void taskResume(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
-        if(textView != null) {
+        if (textView != null) {
             textView.setText("恢复下载中");
         }
     }
+
     //在这里处理任务执行中的状态,如进度进度条的刷新
-    @Download.onTaskRunning protected void running(DownloadTask task) {
+    protected void running(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
-        if(textView != null) {
-            textView.setText(String.format(Locale.CHINA, "%d%%(%s)", Math.abs(task.getPercent()), task.getConvertSpeed()));//添加下载速度
+        if (textView != null) {
+            textView.setText(String.format(Locale.CHINA, "%d%%(%s)", Math.abs(task.getMPercent()), task.getAverageSpeed()));//添加下载速度
         }
     }
 
-    @Download.onTaskStop void taskStop(DownloadTask task) {
+    void taskStop(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
-        if(textView != null) {
+        if (textView != null) {
             textView.setText(CommonUtil.CONTINUE_DOWNLOAD);
         }
     }
 
-    @Download.onNoSupportBreakPoint void onNoSupportBreakPoint(DownloadTask task) {
-    }
-
-    @Download.onTaskCancel void taskCancel(DownloadTask task) {
+    void taskCancel(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
-        if(textView != null) {
+        if (textView != null) {
             textView.setText("已经取消");
         }
     }
 
-    @Download.onTaskFail void taskFail(DownloadTask task) {
+    void taskFail(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
-        if(textView != null) {
+        if (textView != null) {
             textView.setText(CommonUtil.FAIL_DOWNLOAD);
         }
     }
 
-    @Download.onTaskComplete void taskComplete(DownloadTask task) {
+    void taskComplete(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
-        if(textView != null) {
+        if (textView != null) {
             textView.setText(CommonUtil.START_INSTALL);
         }
-        FindApp findApp = getFindAppByKey(task.getKey());
-        if(findApp != null) {
+        FindApp findApp = getFindAppByKey(task.getMDownloadUrl());
+        if (findApp != null) {
             findApp.updateState(DownloadUtil.STATUS_FINISH);
         }
     }
 
     @Subscribe
+    public void onEventMainThread(BigEvent event) {
+        if (event.getData() instanceof DownLoadInfo) {
+            DownLoadInfo task = (DownLoadInfo) event.getData();
+            switch (event.getEventTypes()) {
+                case DOWNLOAD_RUNNING:
+                    running(task);
+                    break;
+                case DOWNLOAD_STOP:
+                    taskStop(task);
+                    break;
+                case DOWNLOAD_COMPLETE:
+                    taskComplete(task);
+                    break;
+                case DOWNLOAD_CANCEL:
+                    taskCancel(task);
+                    break;
+                case DOWNLOAD_FAIL:
+                    taskFail(task);
+                    break;
+            }
+        }
+    }
+
+    @Subscribe
     public void onEventMainThread(Intent intent) {
-        if(intent != null && intent.getAction() != null && intent.getDataString() != null && intent.getDataString().contains("package:")){
-            String packageName = intent.getDataString().replace("package:","");
+        if (intent != null && intent.getAction() != null && intent.getDataString() != null && intent.getDataString().contains("package:")) {
+            String packageName = intent.getDataString().replace("package:", "");
 
             FindApp findApp = getFindAppByKey(packageName);
             TextView textView = getTextViewByKey(packageName);
-            if(findApp != null) {
-                switch (intent.getAction()){
+            if (findApp != null) {
+                switch (intent.getAction()) {
                     case ACTION_PACKAGE_ADDED:
-                        if(textView != null) {
+                        if (textView != null) {
                             textView.setText(CommonUtil.GAME_OPEN);
                         }
                         findApp.updateState(DownloadUtil.STATUS_INSTALLED);
                         break;
                     case ACTION_PACKAGE_REMOVED:
                         String path = PackageUtil.isExistsFile(packageName, findApp.getDownload_url());
-                        if(TextUtils.isEmpty(path)) {
+                        if (TextUtils.isEmpty(path)) {
                             findApp.updateState(DownloadUtil.STATUS_INIT);
-                            if(textView != null) {
+                            if (textView != null) {
                                 textView.setText(CommonUtil.START_DOWNLOAD);
                             }
                         } else {
                             findApp.updateState(DownloadUtil.STATUS_FINISH);
-                            if(textView != null) {
+                            if (textView != null) {
                                 textView.setText(CommonUtil.START_INSTALL);
                             }
                         }
@@ -379,6 +407,7 @@ public class ActReservation extends BaseActivity {
             }
         }
     }
+
     @Override
     protected void onDestroy() {
         super.onDestroy();

+ 0 - 1
app/src/main/java/com/sheep/gamegroup/view/activity/ActSheepApkList.java

@@ -12,7 +12,6 @@ import android.view.View;
 import android.widget.ImageView;
 import android.widget.TextView;
 
-import com.arialyy.aria.util.CommonUtil;
 import com.sheep.gamegroup.absBase.BaseActivity;
 import com.sheep.gamegroup.model.entity.ApkInfo;
 import com.sheep.gamegroup.model.entity.AppInfo;

+ 74 - 116
app/src/main/java/com/sheep/gamegroup/view/activity/TaskDetailAct.java

@@ -13,12 +13,10 @@ import android.widget.TextView;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.arialyy.annotations.Download;
-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.kfzs.duanduan.utils.ApkUtils;
+import com.liulishuo.okdownload.DownloadTask;
+import com.liulishuo.okdownload.OkDownload;
+import com.liulishuo.okdownload.StatusUtil;
 import com.sheep.gamegroup.absBase.AbsChooseImageActivity;
 import com.sheep.gamegroup.di.components.DaggerTaskDetailComponent;
 import com.sheep.gamegroup.di.modules.TaskDetailModule;
@@ -80,6 +78,7 @@ import com.tencent.smtt.sdk.WebViewClient;
 
 import org.afinal.simplecache.ApiKey;
 import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
 
 import java.io.File;
 import java.util.ArrayList;
@@ -242,8 +241,7 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
         TitleBarUtils.getInstance()
                 .setTitle(activity, "任务详情")
                 .setTitleFinish(activity);
-        Aria.download(this).register();
-        mDownloadTaskService = new DownloadUtil(this);
+        downloadUtil = new DownloadUtil(this);
         adpTaskDetailChildListview = new AdpTaskDetailChildListview(taskChildList, activity);
         detail_task_listview.setAdapter(adpTaskDetailChildListview);
         adpTaskDetailChildListview.notifyDataSetChanged();
@@ -259,7 +257,7 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
 
     @Override
     public void initListener() {
-
+        EventBus.getDefault().register(this);
     }
 
     @Override
@@ -714,7 +712,7 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
      * 设置第一按钮的状态和文字显示
      */
     private void setFirstBtnState() {
-        setBtnStr(taskEty, mDownloadTaskService, new Action1<Object>() {
+        setBtnStr(taskEty, downloadUtil, new Action1<Object>() {
             @Override
             public void call(Object o) {
                 if (o instanceof Integer) {
@@ -824,7 +822,7 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
     /**
      * 下载模块修改
      */
-    private DownloadUtil mDownloadTaskService;
+    private DownloadUtil downloadUtil;
 
     @OnClick({R.id.detail_task_tv, R.id.web_text, R.id.ll_infos, R.id.btn_task_item, R.id.btn_up_imag, R.id.detail_share_friend_tv, R.id.task_detail_cancel})
     public void onViewClicked(View view) {
@@ -940,27 +938,40 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
                 }
                 break;
             case DownloadUtil.STATUS_INIT://开始下载
-                DownloadTarget task;
-                if (TextUtils.isEmpty(taskReleaseEty.getTask().getDownload_link()) || !taskReleaseEty.getTask().getDownload_link().contains("http")) {
+                final DownloadTask task;
+                if (TextUtils.isEmpty(taskEty.getDownload_link()) || !taskEty.getDownload_link().contains("http")) {
                     G.showToast(R.string.error_download_link);
                     return;
                 }
-                task = Aria.download(this).load(taskReleaseEty.getTask().getDownload_link());
-                final DownLoadInfo downLoadInfo = mDownloadTaskService.getDownloadTaskByUrl(taskEty);
-                if (task.getTaskState() == IEntity.STATE_RUNNING) {
-                    task.stop();
-                } else if (task.getTaskState() == IEntity.STATE_FAIL) {
-                    task.cancel(true);
-                    task.removeRecord();
-                } else {
-                    //                            task.setFilePath(filePath);
-                    //                            task.start();
-                    mDownloadTaskService.start(downLoadInfo);
+                task = DownloadUtil.getTask(taskEty);
+                final StatusUtil.Status statusOnStore = StatusUtil.getStatus(task);
+                final DownLoadInfo downLoadInfo = downloadUtil.getDownloadTaskByUrl(taskEty);
+                switch (statusOnStore) {
+                    case RUNNING:
+                    case PENDING://等待的
+                        OkDownload.with().downloadDispatcher().cancel(task);
+                        break;
+                    case IDLE://空闲的
+                    case UNKNOWN:
+                        downloadUtil.start(downLoadInfo);
+                        break;
+                    case COMPLETED://有可能之前已经下载完成,但是数据库里已经没有数据了,这时只需要修改状态
+                        if (task.getFile() != null) {
+                            if(downloadUtil.checkFinish(downLoadInfo)) {//检查文件是否真的完成
+                                downloadUtil.setDownloadTaskFinish(task.getUrl(), task.getFile().getAbsolutePath());
+                            } else {//重新开始下载
+                                downloadUtil.delete(downLoadInfo);
+                                downloadUtil.start(downloadUtil.getDownloadTaskByUrl(taskEty));
+                                downloadUtil.setDownloadTaskStatus(taskEty.getDownload_link(), DownloadUtil.STATUS_INIT);
+                            }
+                        }
+                        updateBottom();
+                        break;
                 }
                 new Thread(new Runnable() {
                     @Override
                     public void run() {
-                        if (mDownloadTaskService.addDownloadTask(downLoadInfo)) {
+                        if (downloadUtil.addDownloadTask(downLoadInfo)) {
                             //发送红点信息
                             EventBus.getDefault().post(BigEvent.get().setEventTypes(EventTypes.TIPS_DOWN_ICON));
                         }
@@ -1410,98 +1421,6 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
                 });
     }
 
-    @Download.onPre
-    void onPre(DownloadTask task) {
-        if (taskEty == null) {
-            return;
-        }
-        if (task.getKey().equals(taskEty.getDownload_link())) {
-            if (taskEty == null) {
-                return;
-            }
-            btnTaskItem.setText("准备下载中");
-        }
-    }
-
-    @Download.onTaskStart
-    void taskStart(DownloadTask task) {
-        if (taskEty == null) {
-            return;
-        }
-        if (task.getKey().equals(taskEty.getDownload_link())) {
-            btnTaskItem.setText("开始下载中");
-        }
-    }
-
-    @Download.onTaskResume
-    void taskResume(DownloadTask task) {
-        if (taskEty == null) {
-            return;
-        }
-        if (task.getKey().equals(taskEty.getDownload_link())) {
-            btnTaskItem.setText("恢复下载中");
-        }
-    }
-
-    //在这里处理任务执行中的状态,如进度进度条的刷新
-    @Download.onTaskRunning
-    protected void running(DownloadTask task) {
-        if (taskEty == null) {
-            return;
-        }
-        try {
-            if (task.getKey().equals(taskEty.getDownload_link())) {
-                int p = task.getPercent();    //任务进度百分比
-                String speed = task.getConvertSpeed();    //转换单位后的下载速度,单位转换需要在配置文件中打开
-                btnTaskItem.setText(String.format(Locale.CHINA, "%d%%(%s)", Math.abs(p), speed));//添加下载速度
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    @Download.onTaskStop
-    void taskStop(DownloadTask task) {
-        if (taskEty == null) {
-            return;
-        }
-        if (task.getKey().equals(taskEty.getDownload_link())) {
-            btnTaskItem.setText(CommonUtil.CONTINUE_DOWNLOAD);
-        }
-    }
-
-    @Download.onTaskCancel
-    void taskCancel(DownloadTask task) {
-        if (taskEty == null) {
-            return;
-        }
-        if (task.getKey().equals(taskEty.getDownload_link())) {
-            btnTaskItem.setText("已经取消");
-        }
-    }
-
-    @Download.onTaskFail
-    void taskFail(DownloadTask task) {
-        if (taskEty == null) {
-            return;
-        }
-        if (task.getKey().equals(taskEty.getDownload_link())) {
-            btnTaskItem.setText(CommonUtil.FAIL_DOWNLOAD);
-        }
-    }
-
-    @Download.onTaskComplete
-    void taskComplete(DownloadTask task) {
-        if (taskEty == null) {
-            return;
-        }
-        if (task.getKey().equals(taskEty.getDownload_link())) {
-            //在这里处理任务完成的状态
-            btnTaskItem.setText(CommonUtil.START_INSTALL);
-            updateBottom();
-        }
-    }
-
 
     public void freshData() {
         if (releaseTaskId != -1 && isFresh) {
@@ -1706,6 +1625,45 @@ public class TaskDetailAct extends AbsChooseImageActivity implements TaskDetailC
     @Override
     protected void onDestroy() {
         super.onDestroy();
+        EventBus.getDefault().unregister(this);
         CommonUtil.getInstance().cancelAllTimers(CommonUtil.getInstance().timerHashMap);
     }
+
+
+    /**
+     * 主要的事件广播接收更新处理
+     *
+     * @param event
+     */
+    @Subscribe
+    public void onEventMainThread(BigEvent event) {
+        if (btnTaskItem != null && event.getData() instanceof DownLoadInfo) {
+            DownLoadInfo task = (DownLoadInfo) event.getData();
+            if (taskEty != null && TextUtils.equals(task.getMDownloadUrl(), taskEty.getDownload_link())) {
+                switch (event.getEventTypes()) {
+                    case DOWNLOAD_RUNNING:
+                        try {
+                            btnTaskItem.setText(String.format(Locale.CHINA, "%d%%(%s)", Math.abs(task.getMPercent()), task.getAverageSpeed()));//添加下载速度
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                        break;
+                    case DOWNLOAD_STOP:
+                        btnTaskItem.setText(CommonUtil.CONTINUE_DOWNLOAD);
+                        break;
+                    case DOWNLOAD_COMPLETE:
+                        //在这里处理任务完成的状态
+                        btnTaskItem.setText(CommonUtil.START_INSTALL);
+                        updateBottom();
+                        break;
+                    case DOWNLOAD_CANCEL:
+                        btnTaskItem.setText("已经取消");
+                        break;
+                    case DOWNLOAD_FAIL:
+                        btnTaskItem.setText(CommonUtil.FAIL_DOWNLOAD);
+                        break;
+                }
+            }
+        }
+    }
 }

+ 91 - 55
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtFindChild.java

@@ -11,12 +11,11 @@ import android.view.View;
 import android.widget.ImageView;
 import android.widget.TextView;
 
-import com.arialyy.annotations.Download;
-import com.arialyy.aria.core.Aria;
-import com.arialyy.aria.core.download.DownloadTask;
 import com.kfzs.android.view.tag.FlowLayout;
 import com.kfzs.android.view.tag.TagAdapter;
 import com.kfzs.android.view.tag.TagFlowLayout;
+import com.sheep.gamegroup.event.BigEvent;
+import com.sheep.gamegroup.greendao.download.DownLoadInfo;
 import com.sheep.gamegroup.model.api.ApiService;
 import com.sheep.gamegroup.model.entity.BaseMessage;
 import com.sheep.gamegroup.model.entity.FindApp;
@@ -53,12 +52,13 @@ import static android.content.Intent.ACTION_PACKAGE_REMOVED;
 public class FgtFindChild extends BaseListFragment2<FindItem> {
     @Override
     protected RecyclerView.Adapter getAdapter() {
-        return new AdbCommonRecycler<FindItem>(SheepApp.getInstance(), list){
+        return new AdbCommonRecycler<FindItem>(SheepApp.getInstance(), list) {
 
             @Override
             public int getItemViewType(int position) {
                 return position;
             }
+
             @Override
             public int getViewIdByType(int type) {//type来源于 getItemViewType 返回的值
                 return R.layout.find_item;
@@ -66,24 +66,24 @@ public class FgtFindChild extends BaseListFragment2<FindItem> {
 
             @Override
             public void convert(final ViewHolder holder, final FindItem item) {
-                if(item == null){
+                if (item == null) {
                     return;
                 }
                 View rootConvertView = holder.itemView;
                 View padding = rootConvertView.findViewById(R.id.padding);
-                if(padding == null){
+                if (padding == null) {
                     return;
                 }
                 padding.setVisibility(holder.getAdapterPosition() == 1 ? View.GONE : View.VISIBLE);
-                TextView find_item_name = (TextView)rootConvertView.findViewById(R.id.find_item_name);
-                TextView find_item_time = (TextView)rootConvertView.findViewById(R.id.find_item_time);
-                ImageView find_item_iv = (ImageView)rootConvertView.findViewById(R.id.find_item_iv);
-                TextView find_item_des = (TextView)rootConvertView.findViewById(R.id.find_item_des);
+                TextView find_item_name = (TextView) rootConvertView.findViewById(R.id.find_item_name);
+                TextView find_item_time = (TextView) rootConvertView.findViewById(R.id.find_item_time);
+                ImageView find_item_iv = (ImageView) rootConvertView.findViewById(R.id.find_item_iv);
+                TextView find_item_des = (TextView) rootConvertView.findViewById(R.id.find_item_des);
 //                TextView find_item_pf_label = (TextView)rootConvertView.findViewById(R.id.find_item_pf_label);
-                TextView find_item_download = (TextView)rootConvertView.findViewById(R.id.find_item_download);
-                TagFlowLayout find_item_tags = (TagFlowLayout)rootConvertView.findViewById(R.id.find_item_tags);
+                TextView find_item_download = (TextView) rootConvertView.findViewById(R.id.find_item_download);
+                TagFlowLayout find_item_tags = (TagFlowLayout) rootConvertView.findViewById(R.id.find_item_tags);
 
-                if(item.isGame()){
+                if (item.isGame()) {
                     find_item_download.setVisibility(View.VISIBLE);
                     FindApp findApp = item.getApplication();
 //                    find_item_pf_label.setVisibility(View.VISIBLE);
@@ -98,7 +98,7 @@ public class FgtFindChild extends BaseListFragment2<FindItem> {
                 ViewUtil.setImage(find_item_iv, item.getPictures());
                 ViewUtil.setText(find_item_des, item.getDes());
                 item.removeNullTag();
-                if(ListUtil.isEmpty(item.getTages())){
+                if (ListUtil.isEmpty(item.getTages())) {
                     find_item_tags.setVisibility(View.GONE);
                 } else {
                     find_item_tags.setVisibility(View.VISIBLE);
@@ -147,158 +147,194 @@ public class FgtFindChild extends BaseListFragment2<FindItem> {
     }
 
     private int type;
-    public static FgtFindChild newInstance(int type){
+
+    public static FgtFindChild newInstance(int type) {
         FgtFindChild fgt = new FgtFindChild();
         Bundle bundle = new Bundle();
         bundle.putInt("type", type);
         fgt.setArguments(bundle);
         return fgt;
     }
+
     /**
      * 点击一个发现元素
+     *
      * @param item
      */
     private void onClickItem(FindItem item) {
-        if(item != null){
+        if (item != null) {
             Jump2View.getInstance().goFindItem(activity, item);
         }
     }
 
 
     private Map<String, FindApp> findAppMap = new HashMap<>();
+
     //获取任务对应的findApp
     private FindApp getFindAppByKey(String key) {
-        if(findAppMap.containsKey(key))
+        if (findAppMap.containsKey(key))
             return findAppMap.get(key);
         return null;
     }
+
     private Map<String, TextView> downLoadTextViewMap = new HashMap<>();
+
     //获取任务对应的TextView来更新进度
-    private TextView getTextViewByTask(DownloadTask task) {
-        return getTextViewByKey(task.getKey());
+    private TextView getTextViewByTask(DownLoadInfo task) {
+        return getTextViewByKey(task.getMDownloadUrl());
     }
+
     private TextView getTextViewByKey(String key) {
-        if(downLoadTextViewMap.containsKey(key))
+        if (downLoadTextViewMap.containsKey(key))
             return downLoadTextViewMap.get(key);
         return null;
     }
 
     //更新按钮状态与添加点击事件
     private void updateView(Activity activity, FindApp findApp, TextView textView) {
-        if(findApp.isCanDownload()){//可下载
+        if (findApp.isCanDownload()) {//可下载
             downLoadTextViewMap.put(findApp.getDownload_link(), textView);
             downLoadTextViewMap.put(findApp.getPackage_name(), textView);
-            findAppMap.put(findApp.getDownload_link(),findApp);
+            findAppMap.put(findApp.getDownload_link(), findApp);
             findAppMap.put(findApp.getPackage_name(), findApp);
             findApp.getFindAppHelper().updateDownloadTaskView(activity, findApp, textView);
         } else {//预约下载
             findApp.getFindAppHelper().updateReservationView(activity, findApp, textView);
         }
     }
-    //下载状态监听
 
-    @Download.onPre void onPre(DownloadTask task) {
+    //下载状态监听
+    void onPre(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
-        if(textView != null) {
+        if (textView != null) {
             textView.setText("准备下载中");
         }
     }
 
-    @Download.onTaskStart void taskStart(DownloadTask task) {
+    void taskStart(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
-        if(textView != null) {
+        if (textView != null) {
             textView.setText("开始下载中");
         }
     }
-    @Download.onTaskResume void taskResume(DownloadTask task) {
+
+    void taskResume(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
-        if(textView != null) {
+        if (textView != null) {
             textView.setText("恢复下载中");
         }
     }
+
     //在这里处理任务执行中的状态,如进度进度条的刷新
-    @Download.onTaskRunning protected void running(DownloadTask task) {
+    protected void running(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
-        if(textView != null) {
-            textView.setText(String.format(Locale.CHINA, "%d%%(%s)", Math.abs(task.getPercent()), task.getConvertSpeed()));//添加下载速度
+        if (textView != null) {
+            textView.setText(String.format(Locale.CHINA, "%d%%", Math.abs(task.getMPercent())));
         }
     }
 
-    @Download.onTaskStop void taskStop(DownloadTask task) {
+    void taskStop(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
-        if(textView != null) {
+        if (textView != null) {
             textView.setText(CommonUtil.CONTINUE_DOWNLOAD);
         }
     }
 
-    @Download.onNoSupportBreakPoint void onNoSupportBreakPoint(DownloadTask task) {
-    }
-
-    @Download.onTaskCancel void taskCancel(DownloadTask task) {
+    void taskCancel(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
-        if(textView != null) {
+        if (textView != null) {
             textView.setText("已经取消");
         }
     }
 
-    @Download.onTaskFail void taskFail(DownloadTask task) {
+    void taskFail(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
-        if(textView != null) {
+        if (textView != null) {
             textView.setText(CommonUtil.FAIL_DOWNLOAD);
         }
     }
 
-    @Download.onTaskComplete void taskComplete(DownloadTask task) {
+    void taskComplete(DownLoadInfo task) {
         TextView textView = getTextViewByTask(task);
-        if(textView != null) {
+        if (textView != null) {
             textView.setText(CommonUtil.START_INSTALL);
         }
-        FindApp findApp = getFindAppByKey(task.getKey());
-        if(findApp != null) {
+        FindApp findApp = getFindAppByKey(task.getMDownloadUrl());
+        if (findApp != null) {
             findApp.updateState(DownloadUtil.STATUS_FINISH);
         }
     }
 
+    /**
+     * 主要的事件广播接收更新处理
+     *
+     * @param event
+     */
+    @Subscribe
+    public void onEventMainThread(BigEvent event) {
+        if (event.getData() instanceof DownLoadInfo) {
+            DownLoadInfo task = (DownLoadInfo) event.getData();
+            switch (event.getEventTypes()) {
+                case DOWNLOAD_RUNNING:
+                    running(task);
+                    break;
+                case DOWNLOAD_STOP:
+                    taskStop(task);
+                    break;
+                case DOWNLOAD_COMPLETE:
+                    taskComplete(task);
+                    break;
+                case DOWNLOAD_CANCEL:
+                    taskCancel(task);
+                    break;
+                case DOWNLOAD_FAIL:
+                    taskFail(task);
+                    break;
+            }
+        }
+    }
+
     @Override
     public void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         Bundle bundle = getArguments();
-        if(bundle != null){
+        if (bundle != null) {
             type = bundle.getInt("type", 0);
         }
-        Aria.download(this).register();
         EventBus.getDefault().register(this);
     }
+
     @Override
     public void onDestroy() {
         super.onDestroy();
         EventBus.getDefault().unregister(this);
     }
+
     @Subscribe
     public void onEventMainThread(Intent intent) {
-        if(intent != null && intent.getAction() != null && intent.getDataString() != null && intent.getDataString().contains("package:")){
-            String packageName = intent.getDataString().replace("package:","");
+        if (intent != null && intent.getAction() != null && intent.getDataString() != null && intent.getDataString().contains("package:")) {
+            String packageName = intent.getDataString().replace("package:", "");
 
             FindApp findApp = getFindAppByKey(packageName);
             TextView textView = getTextViewByKey(packageName);
-            if(findApp != null) {
-                switch (intent.getAction()){
+            if (findApp != null) {
+                switch (intent.getAction()) {
                     case ACTION_PACKAGE_ADDED:
-                        if(textView != null) {
+                        if (textView != null) {
                             textView.setText(CommonUtil.GAME_OPEN);
                         }
                         findApp.updateState(DownloadUtil.STATUS_INSTALLED);
                         break;
                     case ACTION_PACKAGE_REMOVED:
                         String path = PackageUtil.isExistsFile(packageName, findApp.getDownload_url());
-                        if(TextUtils.isEmpty(path)) {
+                        if (TextUtils.isEmpty(path)) {
                             findApp.updateState(DownloadUtil.STATUS_INIT);
-                            if(textView != null) {
+                            if (textView != null) {
                                 textView.setText(CommonUtil.START_DOWNLOAD);
                             }
                         } else {
                             findApp.updateState(DownloadUtil.STATUS_FINISH);
-                            if(textView != null) {
+                            if (textView != null) {
                                 textView.setText(CommonUtil.START_INSTALL);
                             }
                         }

+ 0 - 2
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtGameAgencyRecharge.java

@@ -12,7 +12,6 @@ import android.view.View;
 import android.view.ViewGroup;
 
 import com.alibaba.fastjson.JSONArray;
-import com.arialyy.aria.core.Aria;
 import com.sheep.gamegroup.event.BigEvent;
 import com.sheep.gamegroup.model.entity.BaseMessage;
 import com.sheep.gamegroup.model.entity.GameAgencyRechargePlatformEntity;
@@ -60,7 +59,6 @@ public class FgtGameAgencyRecharge extends BaseFragment {
             task_type = bundle.getString("type", "1002" + ",1003" + ",1004");
         }
         EventBus.getDefault().register(this);
-        Aria.download(this).register();
     }
 
     @Override

+ 57 - 34
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtMyGame.java

@@ -9,10 +9,9 @@ import android.view.ViewGroup;
 import android.widget.ImageView;
 import android.widget.TextView;
 
-import com.arialyy.annotations.Download;
-import com.arialyy.aria.core.download.DownloadTask;
 import com.jcodecraeer.xrecyclerview.XRecyclerView;
-import com.kfzs.duanduan.utils.ApkUtils;
+import com.sheep.gamegroup.event.BigEvent;
+import com.sheep.gamegroup.greendao.download.DownLoadInfo;
 import com.sheep.gamegroup.model.entity.BaseMessage;
 import com.sheep.gamegroup.model.entity.OrienteeringDetail;
 import com.sheep.gamegroup.model.entity.RecyleObj;
@@ -59,13 +58,14 @@ public class FgtMyGame extends BaseFragment {
     private List<OrienteeringDetail> list = ListUtil.emptyList();
     private int type = 0;
 
-    public static FgtMyGame newInstance(int type){
+    public static FgtMyGame newInstance(int type) {
         FgtMyGame fgtTryMakeMoney = new FgtMyGame();
         Bundle bundle = new Bundle();
         bundle.putInt("type", type);
         fgtTryMakeMoney.setArguments(bundle);
         return fgtTryMakeMoney;
     }
+
     @Override
     public int getLayoutId() {
         return R.layout.fgt_try_makemoney_layout;
@@ -76,6 +76,7 @@ public class FgtMyGame extends BaseFragment {
         activity = getActivity();
         initView();
     }
+
     @Subscribe
     public void initView() {
 
@@ -89,6 +90,7 @@ public class FgtMyGame extends BaseFragment {
         bottomLine = ViewUtil.setBottomLine(recyclerview);
 
     }
+
     private View bottomLine;
 
     public void initListener() {
@@ -101,10 +103,10 @@ public class FgtMyGame extends BaseFragment {
 
             @Override
             public void onLoadMore() {
-                if(ListUtil.size(list) >= per_page*page){
+                if (ListUtil.size(list) >= per_page * page) {
                     page += 1;
                     refreshData();
-                }else {
+                } else {
                     recyclerview.setNoMore(true);
                 }
             }
@@ -113,12 +115,13 @@ public class FgtMyGame extends BaseFragment {
 
     private void initData() {
         List<OrienteeringDetail> newList = DataUtil.getInstance().getCacheList(ApiKey.my_games, OrienteeringDetail.class);
-        if(!ListUtil.isEmpty(newList)) {
+        if (!ListUtil.isEmpty(newList)) {
             ListUtil.addAll(list, newList);
             notifyDataSetChanged();
         }
         refreshData();
     }
+
     private void refreshData() {
         SheepApp.getInstance().getNetComponent().getApiService().getMyGames(page, per_page)
                 .subscribeOn(Schedulers.io())
@@ -138,11 +141,12 @@ public class FgtMyGame extends BaseFragment {
                     }
                 });
     }
+
     private void notifyBottomLine(boolean noMore) {
-        if(bottomLine != null) {
+        if (bottomLine != null) {
             int count = list.size();
             bottomLine.setVisibility(count == 0 ? View.INVISIBLE : View.VISIBLE);
-            if(noMore) {
+            if (noMore) {
                 final boolean isCanScrollToPosition = count > 10;//页数大于一页才显示点击回到顶部
                 TextView bottom_line_text = bottomLine.findViewById(R.id.bottom_line_text);
                 bottom_line_text.setText(isCanScrollToPosition ? "我是有底线的,点击我回到顶部" : "我是有底线的");
@@ -156,16 +160,18 @@ public class FgtMyGame extends BaseFragment {
             }
         }
     }
+
     private void checkAndInitView() {
-        if(empty_view == null)
+        if (empty_view == null)
             empty_view = findViewById(R.id.empty_view);
     }
-    private void notifyDataSetChanged(){
+
+    private void notifyDataSetChanged() {
         checkAndInitView();
         boolean isEmpty = tryMakeMoneyAdp.isEmpty() && list.isEmpty();
         CommonUtil.getInstance().updateEmptyView(empty_view, isEmpty);
-        if(!isEmpty){
-            tryMakeMoneyAdp.add(RecyleObj.make(RecyleType.GAME_TASK, list),0);
+        if (!isEmpty) {
+            tryMakeMoneyAdp.add(RecyleObj.make(RecyleType.GAME_TASK, list), 0);
         }
         tryMakeMoneyAdp.refreshAdapter();
         recyclerview.refreshComplete();
@@ -179,17 +185,18 @@ public class FgtMyGame extends BaseFragment {
         // TODO: inflate a fragment view
         View rootView = super.onCreateView(inflater, container, savedInstanceState);
         Bundle bundle = getArguments();
-        if(bundle != null){
+        if (bundle != null) {
             type = bundle.getInt("type", 0);
         }
         return rootView;
     }
 
     private int onResumeCount = 0;
+
     @Override
     public void onResume() {
         super.onResume();
-        switch (onResumeCount){
+        switch (onResumeCount) {
             case 0:
                 initData();//第一次先加载缓存
                 break;
@@ -201,12 +208,11 @@ public class FgtMyGame extends BaseFragment {
     }
 
     //在这里处理任务执行中的状态,如进度进度条的刷新
-    @Download.onTaskRunning protected void running(DownloadTask task) {
-//        downloadTaskService.setDownloadTaskPercent(p, task.getCurrentProgress()/1024d/1024d,task.getFileSize()/1024d/1024d,0,task.getKey());
+    protected void running(DownLoadInfo task) {
         try {
-            int p = task.getPercent();    //任务进度百分比
-            String speed = task.getConvertSpeed();    //转换单位后的下载速度,单位转换需要在配置文件中打开
-            String url = task.getKey();
+            int p = task.getMPercent();    //任务进度百分比
+            String speed = task.getAverageSpeed();    //转换单位后的下载速度,单位转换需要在配置文件中打开
+            String url = task.getMDownloadUrl();
             TextView tvProgress = recyclerview.findViewWithTag(TryMakeMoneyAdp.PUBLIC_TAG_PREFIX_TEXTVIEW_LIST + url);
             if (tvProgress == null) {
                 return;
@@ -218,16 +224,9 @@ public class FgtMyGame extends BaseFragment {
         }
     }
 
-    @Download.onTaskStop void taskStop(DownloadTask task) {
-    }
-
-    @Download.onNoSupportBreakPoint void onNoSupportBreakPoint(DownloadTask task) {
-    }
-
-    @Download.onTaskCancel void taskCancel(DownloadTask task) {
-//        downloadTaskService.deleteDownloadTaskByDownloadUrl(task.getKey());
+    void taskCancel(DownLoadInfo task) {
         try {
-            String url = task.getKey();
+            String url = task.getMDownloadUrl();
 
             TextView tvProgress = recyclerview.findViewWithTag(TryMakeMoneyAdp.PUBLIC_TAG_PREFIX_TEXTVIEW_LIST + url);
             if (tvProgress == null) {
@@ -239,9 +238,9 @@ public class FgtMyGame extends BaseFragment {
         }
     }
 
-    @Download.onTaskFail void taskFail(DownloadTask task) {
+    void taskFail(DownLoadInfo task) {
         try {
-            String url = task.getKey();
+            String url = task.getMDownloadUrl();
 
             TextView tvProgress = recyclerview.findViewWithTag(TryMakeMoneyAdp.PUBLIC_TAG_PREFIX_TEXTVIEW_LIST + url);
             if (tvProgress == null) {
@@ -253,9 +252,9 @@ public class FgtMyGame extends BaseFragment {
         }
     }
 
-    @Download.onTaskComplete void taskComplete(DownloadTask task) {
+    void taskComplete(DownLoadInfo task) {
         try {
-            String url = task.getKey();
+            String url = task.getMDownloadUrl();
             TextView tvProgress = recyclerview.findViewWithTag(TryMakeMoneyAdp.PUBLIC_TAG_PREFIX_TEXTVIEW_LIST + url);
             if (tvProgress == null) {
                 return;
@@ -264,6 +263,30 @@ public class FgtMyGame extends BaseFragment {
         } catch (Exception e) {
             e.printStackTrace();
         }
-        ApkUtils.installApk(activity, task.getDownloadPath());
     }
+
+    @Subscribe
+    public void onEventMainThread(BigEvent event) {
+        if (event.getData() instanceof DownLoadInfo) {
+            DownLoadInfo task = (DownLoadInfo) event.getData();
+            switch (event.getEventTypes()) {
+                case DOWNLOAD_RUNNING:
+                    running(task);
+                    break;
+                case DOWNLOAD_STOP:
+//                    taskStop(task);
+                    break;
+                case DOWNLOAD_COMPLETE:
+                    taskComplete(task);
+                    break;
+                case DOWNLOAD_CANCEL:
+                    taskCancel(task);
+                    break;
+                case DOWNLOAD_FAIL:
+                    taskFail(task);
+                    break;
+            }
+        }
+    }
+
 }

+ 14 - 6
app/src/main/java/com/sheep/jiuyan/samllsheep/SheepApp.java

@@ -9,12 +9,16 @@ import android.support.multidex.MultiDexApplication;
 import android.text.TextUtils;
 import android.util.DisplayMetrics;
 
-import com.arialyy.aria.core.Aria;
 import com.baidu.location.BDAbstractLocationListener;
 import com.baidu.location.BDLocation;
 import com.baidu.location.LocationClient;
 import com.baidu.location.LocationClientOption;
 import com.bumptech.glide.Glide;
+import com.liulishuo.okdownload.DownloadMonitor;
+import com.liulishuo.okdownload.OkDownload;
+import com.liulishuo.okdownload.core.breakpoint.RemitStoreOnSQLite;
+import com.liulishuo.okdownload.core.dispatcher.DownloadDispatcher;
+import com.mdad.sdk.mdsdk.monitor.MonitorService;
 import com.sheep.gamegroup.di.components.DaggerNetComponent;
 import com.sheep.gamegroup.di.components.NetComponent;
 import com.sheep.gamegroup.di.modules.NetModule;
@@ -31,7 +35,7 @@ import com.sheep.gamegroup.util.LogUtil;
 import com.sheep.gamegroup.util.RefreshUtil;
 import com.sheep.gamegroup.util.SysAppUtil;
 import com.sheep.gamegroup.util.UMConfigUtils;
-import com.sheep.gamegroup.view.activity.ActMain;
+import com.sheep.gamegroup.view.activity.ActDownloadMgr;
 import com.sheep.gamegroup.view.activity.GameCertificationActivity;
 import com.sheep.gamegroup.view.activity.LoginAct;
 import com.sheep.jiuyan.samllsheep.service.AutoCheckService;
@@ -49,7 +53,6 @@ import com.umeng.socialize.UMShareAPI;
 import org.xutils.x;
 
 import cn.jpush.android.api.JPushInterface;
-import rx.functions.Action1;
 
 /**
  * Created by kemllor on 2017/12/21.
@@ -214,6 +217,12 @@ public class SheepApp extends MultiDexApplication {
         JPushInterface.init(this);
 
         initBdLocationOpstion();
+
+        //设置下载工具
+        DownloadDispatcher.setMaxParallelRunningCount(1000);//在这里,下载框架好像有个bug,如果设置为5,第一个下载会占4个,第二个下载就只有一个在下载,就会失败
+
+//        RemitStoreOnSQLite.setRemitToDBDelayMillis(3000);
+
     }
 
     private void initBdLocationOpstion() {
@@ -359,7 +368,6 @@ public class SheepApp extends MultiDexApplication {
                     LogUtil.println("SheepApp onActivityStarted", activity.getClass().getSimpleName(), mActivityCount);
                     if(!UMConfigUtils.isNotNeedAct(activity))
                         UMConfigUtils.Event.SHEEP_STARTED.onEvent();
-                    startService(new Intent(activity, DownloadService.class));
                     Jump2View.getInstance().startListenerShotService(activity);
                     Jump2View.getInstance().startShotScreenFloat(activity, false);
                 }
@@ -397,7 +405,7 @@ public class SheepApp extends MultiDexApplication {
         @Override
         public void onActivityDestroyed(Activity activity) {
             if (!TextUtils.isEmpty(gamePackgeName) && isGameFlag() && (activity instanceof GameCertificationActivity || activity instanceof LoginAct)) {
-                CertificationUtil.newInstance().doCertification(activity, gamePackgeName, "cancel");
+                CertificationUtil.newInstance().doCertification(activity, gamePackgeName, "delete");
             }
             if (mActivityCount == 0) {
                 LogUtil.println("SheepApp onActivityDestroyed", activity.getClass().getSimpleName(), mActivityCount);
@@ -422,7 +430,7 @@ public class SheepApp extends MultiDexApplication {
      */
     public void quit() {
         try {
-            Aria.download(this).stopAllTask();
+            OkDownload.with().downloadDispatcher().cancelAll();
             ActivityManager.getInstance().finishAllActivity();
         } catch (Exception ignore) {
         }

+ 90 - 96
app/src/main/java/com/sheep/jiuyan/samllsheep/service/DownloadService.java

@@ -8,41 +8,40 @@ import android.content.DialogInterface;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.IBinder;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.v7.app.AlertDialog;
 import android.text.TextUtils;
 import android.view.View;
 
-import com.arialyy.annotations.Download;
-import com.arialyy.aria.core.Aria;
-import com.arialyy.aria.core.download.DownloadTask;
 import com.kfzs.duanduan.utils.ApkUtils;
 import com.kfzs.duanduan.view.DialogStorageLow;
+import com.liulishuo.okdownload.DownloadListener;
+import com.liulishuo.okdownload.DownloadTask;
+import com.liulishuo.okdownload.SpeedCalculator;
+import com.liulishuo.okdownload.core.breakpoint.BlockInfo;
+import com.liulishuo.okdownload.core.breakpoint.BreakpointInfo;
+import com.liulishuo.okdownload.core.cause.EndCause;
+import com.liulishuo.okdownload.core.listener.DownloadListener4WithSpeed;
+import com.liulishuo.okdownload.core.listener.assist.Listener4SpeedAssistExtend;
 import com.sheep.gamegroup.event.BigEvent;
 import com.sheep.gamegroup.event.EventTypes;
 import com.sheep.gamegroup.greendao.download.DownLoadInfo;
-import com.sheep.gamegroup.model.entity.DialogConfig;
 import com.sheep.gamegroup.model.entity.FindApp;
 import com.sheep.gamegroup.model.entity.PlayGameEntity;
 import com.sheep.gamegroup.model.entity.TaskEty;
 import com.sheep.gamegroup.util.ActivityManager;
-import com.sheep.gamegroup.util.DataUtil;
 import com.sheep.gamegroup.util.DownloadUtil;
 import com.sheep.gamegroup.util.LogUtil;
 import com.sheep.gamegroup.util.StringUtils;
-import com.sheep.gamegroup.util.ViewUtil;
 import com.sheep.jiuyan.samllsheep.utils.G;
 
 import org.greenrobot.eventbus.EventBus;
 
 import java.io.File;
+import java.util.List;
 import java.util.Locale;
-import java.util.concurrent.TimeUnit;
-
-import rx.Observable;
-import rx.android.schedulers.AndroidSchedulers;
-import rx.functions.Action1;
-import rx.schedulers.Schedulers;
+import java.util.Map;
 
 import static com.sheep.jiuyan.samllsheep.utils.ClassFileHelper.DIR;
 
@@ -58,102 +57,97 @@ public class DownloadService extends Service {
     @Override
     public void onCreate() {
         super.onCreate();
-        Aria.download(this).register();
         downloadUtil = new DownloadUtil(this);
     }
-    public static final String ON_PRE = "onPre";
-    public static final String RUNNING = "running";
-    public static final String HAS_SHOW = "hasShow";
-
-    @Download.onPre
-    void onPre(final DownloadTask task) {
-        LogUtil.println("DownloadService", "onPre", task.getKey(), task.getTaskName());
-
-        Observable.just(1).delay(10_000L, TimeUnit.MILLISECONDS)
-                .subscribeOn(Schedulers.io())
-                .observeOn(AndroidSchedulers.mainThread())
-                .subscribe(new Action1<Integer>() {
-                    @Override
-                    public void call(Integer integer) {
-                        String taskStatus = DataUtil.getAsString(String.format(Locale.CHINA, "hasShow[%s]", task.getKey()), ON_PRE);
-                        switch (taskStatus) {
-                            case ON_PRE:
-                                DownLoadInfo downloadInfo = downloadUtil.getDownloadTaskByUrl(task.getKey());
-                                String taskName = downloadInfo != null ? downloadInfo.getMGameName() : task.getTaskName();
-                                DataUtil.putAsString(String.format(Locale.CHINA, "hasShow[%s]", task.getKey()), HAS_SHOW);
-                                ViewUtil.showMsgDialog(ActivityManager.getInstance().currentActivity(), new DialogConfig().setTitle("提示")
-                                        .setMsg("任务【"+taskName+"】下载无响应,是否使用其它下载方式(在任务列表中长按也可选择其它下载方式)").setBtnLeftText("取消").setBtnRightText("确定")
-                                        .setBtnRightOnClickListener(new View.OnClickListener() {
-                                            @Override
-                                            public void onClick(View view) {
-                                                showDownloadType(task.getKey(), task.getTaskName());
-                                            }
-                                        }));
-                                break;
-                        }
-                    }
-                });
+    @Override
+    public int onStartCommand(Intent intent, int flags, int startId) {
+        if(intent != null){
+            String download_url = intent.getStringExtra("download_url");
+            String file_path = intent.getStringExtra("file_path");
+            if(download_url != null && file_path != null) {
+                DownloadTask task = DownloadUtil.getTask(download_url, file_path);
+                task.enqueue(downloadListener);
+            }
+        }
+        return super.onStartCommand(intent, flags, startId);
     }
+    private DownloadListener downloadListener = new DownloadListener4WithSpeed() {
+        @Override
+        public void taskStart(@NonNull DownloadTask task) {
+            LogUtil.println("DownloadListener", "taskStart");
+        }
 
-    @Download.onTaskStart
-    void taskStart(DownloadTask task) {
-        LogUtil.println("DownloadService", "taskStart", task.getKey(), task.getTaskName());
-    }
+        @Override
+        public void connectStart(@NonNull DownloadTask task, int blockIndex, @NonNull Map<String, List<String>> requestHeaderFields) {
+            LogUtil.println("DownloadListener", "connectStart", "blockIndex", blockIndex);
+        }
 
-    @Download.onTaskResume
-    void taskResume(DownloadTask task) {
-        LogUtil.println("DownloadService", "taskResume", task.getKey(), task.getTaskName());
-    }
+        @Override
+        public void connectEnd(@NonNull DownloadTask task, int blockIndex, int responseCode, @NonNull Map<String, List<String>> responseHeaderFields) {
+            LogUtil.println("DownloadListener", "connectEnd", "blockIndex", blockIndex, "responseCode", responseCode);
+        }
 
-    //在这里处理任务执行中的状态,如进度进度条的刷新
-    @Download.onTaskRunning
-    protected void running(DownloadTask task) {
-        LogUtil.println("DownloadService", "running", task.getKey(), task.getTaskName(), task.getPercent());
-        DataUtil.putAsString(String.format(Locale.CHINA, "hasShow[%s]", task.getKey()), RUNNING);
-        downloadUtil.setDownloadTaskPercent(task.getPercent(), task.getCurrentProgress() / 1024d / 1024d, task.getFileSize() / 1024d / 1024d, 0, task.getKey());
-        EventBus.getDefault().post(new BigEvent().setEventTypes(EventTypes.GENERATION_ACCOUNT_REFRESH_ADAPTER).setData(task));
-    }
+        @Override
+        public void infoReady(@NonNull DownloadTask task, @NonNull BreakpointInfo info, boolean fromBreakpoint, @NonNull Listener4SpeedAssistExtend.Listener4SpeedModel model) {
+            long totalLength = info.getTotalLength();
+            LogUtil.println("DownloadListener", "infoReady", "fromBreakpoint", fromBreakpoint, "totalLength", totalLength);
+            DownLoadInfo downloadInfo = downloadUtil.setDownloadTaskTotal(task.getUrl(), totalLength);
+            EventBus.getDefault().post(new BigEvent().setEventTypes(EventTypes.DOWNLOAD_START).setData(downloadInfo));
+        }
 
-    @Download.onTaskStop
-    void taskStop(DownloadTask task) {
-        LogUtil.println("DownloadService", "taskStop", task.getKey(), task.getTaskName());
-        downloadUtil.setDownloadTaskStatus(task.getKey(), DownloadUtil.STATUS_PAUSE);
-        EventBus.getDefault().post(new BigEvent().setEventTypes(EventTypes.DOWNLOAD_STOP).setData(task));
-    }
+        @Override
+        public void progressBlock(@NonNull DownloadTask task, int blockIndex, long currentBlockOffset, @NonNull SpeedCalculator blockSpeed) {
+            LogUtil.println("DownloadListener", "progressBlock", "blockIndex", blockIndex, "currentBlockOffset", currentBlockOffset, "blockSpeed", blockSpeed.averageSpeed());
+        }
 
-    @Download.onNoSupportBreakPoint
-    void onNoSupportBreakPoint(DownloadTask task) {
-    }
+        @Override
+        public void progress(@NonNull DownloadTask task, long currentOffset, @NonNull SpeedCalculator taskSpeed) {
+            LogUtil.println("DownloadListener", "progress", "currentOffset", currentOffset, "taskSpeed", taskSpeed.averageSpeed());
+            DownLoadInfo downloadInfo = downloadUtil.setDownloadTaskPercent(currentOffset, taskSpeed.averageSpeed(), task.getId(), task.getUrl());
+            EventBus.getDefault().post(new BigEvent().setEventTypes(EventTypes.DOWNLOAD_RUNNING).setData(downloadInfo));
+        }
 
-    @Download.onTaskCancel
-    void taskCancel(DownloadTask task) {
-        LogUtil.println("DownloadService", "taskCancel", task.getKey(), task.getTaskName());
-        downloadUtil.deleteDownloadTaskByDownloadUrl(task.getKey());
-        EventBus.getDefault().post(new BigEvent().setEventTypes(EventTypes.DOWNLOAD_CANCEL).setData(task));
-    }
+        @Override
+        public void blockEnd(@NonNull DownloadTask task, int blockIndex, BlockInfo info, @NonNull SpeedCalculator blockSpeed) {
+            LogUtil.println("DownloadListener", "blockEnd", "blockIndex", blockIndex, "blockSpeed", blockSpeed.averageSpeed());
+        }
 
-    @Download.onTaskFail
-    void taskFail(DownloadTask task) {
-        LogUtil.println("DownloadService", "taskFail", task.getKey(), task.getTaskName());
-        downloadUtil.setDownloadTaskStatus(task.getKey(), DownloadUtil.STATUS_FAIL);
-        EventBus.getDefault().post(new BigEvent().setEventTypes(EventTypes.DOWNLOAD_FAIL).setData(task));
-        //空间不足,弹框提示
-        try {
-            if (0 <= task.getFileSize() && task.getFileSize() > G.getFreeSpaceB()) {
-                DialogStorageLow.showDialog(DownloadService.this);
+        @Override
+        public void taskEnd(@NonNull DownloadTask task, @NonNull EndCause cause, @Nullable Exception realCause, @NonNull SpeedCalculator taskSpeed) {
+            LogUtil.println("DownloadListener", "taskEnd",  "cause", cause.name(),  "realCause", realCause != null ? realCause.getMessage() : "null", "taskSpeed", taskSpeed.averageSpeed());
+            DownLoadInfo downLoadInfo;
+            switch (cause){
+                case COMPLETED://下载完成
+                    if(task.getFile() != null) {
+                        downLoadInfo = downloadUtil.setDownloadTaskFinish(task.getUrl(), task.getFile().getAbsolutePath());
+                        ApkUtils.installApk(getApplicationContext(), task.getFile().getAbsolutePath());
+                        EventBus.getDefault().post(new BigEvent().setEventTypes(EventTypes.DOWNLOAD_COMPLETE).setData(downLoadInfo));
+                    }
+                    break;
+                case FILE_BUSY:
+                case PRE_ALLOCATE_FAILED://预先分配失败
+                case ERROR://下载错误
+                    downLoadInfo = downloadUtil.setDownloadTaskStatus(task.getUrl(), DownloadUtil.STATUS_FAIL);
+                    EventBus.getDefault().post(new BigEvent().setEventTypes(EventTypes.DOWNLOAD_FAIL).setData(downLoadInfo));
+                    //空间不足,弹框提示
+                    try {
+                        if (0 <= task.getReadBufferSize() && task.getReadBufferSize() > G.getFreeSpaceB()) {
+                            DialogStorageLow.showDialog(DownloadService.this);
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                    break;
+                case CANCELED://取消下载
+                    downLoadInfo = downloadUtil.setDownloadTaskStatus(task.getUrl(), DownloadUtil.STATUS_PAUSE);
+                    EventBus.getDefault().post(new BigEvent().setEventTypes(EventTypes.DOWNLOAD_STOP).setData(downLoadInfo));
+                    break;
+                case SAME_TASK_BUSY:
+                    break;
             }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
 
-    @Download.onTaskComplete
-    void taskComplete(DownloadTask task) {
-        LogUtil.println("DownloadService", "taskComplete", task.getKey(), task.getTaskName());
-        downloadUtil.setDownloadTaskFinish(task.getKey(), task.getDownloadPath());
-        ApkUtils.installApk(getApplicationContext(), task.getDownloadPath());
-        EventBus.getDefault().post(new BigEvent().setEventTypes(EventTypes.DOWNLOAD_COMPLETE).setData(task));
-    }
+        }
+    };
 
     @Nullable
     @Override

+ 1 - 0
app/src/main/res/values/str_appstore_strings.xml

@@ -20,6 +20,7 @@
 
     <string name="toast_download_task_out_of_rang">请稍候,最多可同时下载%s款游戏哦</string>
 
+    <string name="has_pause">已暂停</string>
     <string name="downloading">下载中</string>
     <string name="download_fail">下载失败</string>
     <string name="download_fail_please_retry">下载失败,请点击重试</string>