Procházet zdrojové kódy

添加下载状态回调

zengjiebin před 7 roky
rodič
revize
7cb8fc87ae

+ 122 - 0
app/src/main/java/com/sheep/gamegroup/util/js/BaseActWeb.java

@@ -1,14 +1,25 @@
 package com.sheep.gamegroup.util.js;
 
+import android.text.TextUtils;
 import android.view.View;
 import android.webkit.WebView;
 
+import com.liulishuo.okdownload.DownloadTask;
+import com.liulishuo.okdownload.OkDownload;
+import com.liulishuo.okdownload.StatusUtil;
 import com.sheep.gamegroup.absBase.BaseUMActivity;
+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.TaskEty;
 import com.sheep.gamegroup.model.entity.UserEntity;
 import com.sheep.gamegroup.util.CommonUtil;
+import com.sheep.gamegroup.util.DownloadUtil;
 import com.sheep.gamegroup.util.SysAppUtil;
 import com.sheep.gamegroup.util.TestUtil;
+import com.sheep.gamegroup.util.UMConfigUtils;
 import com.sheep.gamegroup.util.share.ShareLinkConfig;
+import com.sheep.gamegroup.view.activity.TaskDetailAct;
 import com.sheep.jiuyan.samllsheep.BuildConfig;
 import com.sheep.jiuyan.samllsheep.R;
 import com.sheep.jiuyan.samllsheep.SheepApp;
@@ -19,6 +30,7 @@ import com.tencent.mm.opensdk.constants.ConstantsAPI;
 import com.tencent.mm.opensdk.modelpay.PayResp;
 import com.umeng.socialize.bean.SHARE_MEDIA;
 
+import org.greenrobot.eventbus.EventBus;
 import org.greenrobot.eventbus.Subscribe;
 
 import java.util.HashMap;
@@ -157,4 +169,114 @@ public abstract class BaseActWeb extends BaseUMActivity {
         }
         loadJs(String.format(Locale.CHINA, "onAlipayResult('%s')", result));
     }
+
+    protected TaskEty taskEty;
+
+    public void setTaskEty(TaskEty taskEty) {
+        this.taskEty = taskEty;
+    }
+
+    /**
+     * 主要的事件广播接收更新处理
+     *
+     * @param event
+     */
+    @Subscribe
+    public void onEventMainThread(BigEvent event) {
+        if (taskEty != null && event.getData() instanceof DownLoadInfo) {
+            DownLoadInfo task = (DownLoadInfo) event.getData();
+            if (TextUtils.equals(task.getMDownloadUrl(), taskEty.getDownload_link())) {
+                switch (event.getEventTypes()) {
+                    case DOWNLOAD_RUNNING:
+                        loadJs(String.format(Locale.CHINA, "onUpdateDownloadStatus(%d)", DownloadUtil.STATUS_ING));
+                        try {
+                            String progressText = String.format(Locale.CHINA, "%d%%(%s)", Math.abs(task.getMPercent()), task.getAverageSpeed());//添加下载速度
+                            loadJs(String.format(Locale.CHINA, "onUpdateDownloadProgress('%s')", progressText));
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                        break;
+                    case DOWNLOAD_STOP:
+                        loadJs(String.format(Locale.CHINA, "onUpdateDownloadStatus(%d)", DownloadUtil.STATUS_PAUSE));
+                        loadJs(String.format(Locale.CHINA, "onUpdateDownloadBtnText('%s')", CommonUtil.CONTINUE_DOWNLOAD));
+                        break;
+                    case DOWNLOAD_COMPLETE:
+                        //在这里处理任务完成的状态
+                        loadJs(String.format(Locale.CHINA, "onUpdateDownloadBtnText('%s')", CommonUtil.START_INSTALL));
+                        loadJs(String.format(Locale.CHINA, "onUpdateDownloadStatus(%d)", DownloadUtil.STATUS_FINISH));
+                        updateDownloadBtn();
+                        break;
+                    case DOWNLOAD_CANCEL:
+                        loadJs(String.format(Locale.CHINA, "onUpdateDownloadStatus(%d)", DownloadUtil.STATUS_DELETE));
+                        loadJs(String.format(Locale.CHINA, "onUpdateDownloadBtnText('%s')", "已经取消"));
+                        break;
+                    case DOWNLOAD_FAIL:
+                        loadJs(String.format(Locale.CHINA, "onUpdateDownloadStatus(%d)", DownloadUtil.STATUS_FAIL));
+                        loadJs(String.format(Locale.CHINA, "onUpdateDownloadBtnText('%s')", CommonUtil.FAIL_DOWNLOAD));
+                        break;
+                }
+            }
+        }
+    }
+
+    private DownloadUtil downloadUtil;
+    public void updateDownloadBtn() {
+        if (taskEty != null) {
+            if (downloadUtil == null)
+                downloadUtil = new DownloadUtil();
+            TaskDetailAct.setBtnStr(taskEty, downloadUtil, object -> runOnUiThread(() -> {
+                if (object instanceof Integer) {
+                    loadJs(String.format(Locale.CHINA, "onUpdateDownloadStatus(%d)", (int) object));
+                } else if (object instanceof String) {
+                    loadJs(String.format(Locale.CHINA, "onUpdateDownloadBtnText('%s')", (String) object));
+                } else if (object instanceof Boolean) {
+                    loadJs(String.format(Locale.CHINA, "onUpdateDownloadBtnEnable(%b)", (boolean) object));
+                }
+            }));
+        }
+    }
+    public void downloadApk(){
+        if (taskEty != null) {
+            if (downloadUtil == null)
+                downloadUtil = new DownloadUtil();
+
+            final DownloadTask task;
+            if (TextUtils.isEmpty(taskEty.getDownload_link()) || !taskEty.getDownload_link().contains("http")) {
+                G.showToast(R.string.error_download_link);
+                return;
+            }
+            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);
+                        }
+                    }
+                    updateDownloadBtn();
+                    break;
+            }
+            new Thread(() -> {
+                if (downloadUtil.addDownloadTask(downLoadInfo)) {
+                    //发送红点信息
+                    EventBus.getDefault().post(BigEvent.get().setEventTypes(EventTypes.TIPS_DOWN_ICON));
+                }
+            }).start();
+            UMConfigUtils.onEvent(UMConfigUtils.Event.TASK_DOWNLOAD);
+        }
+    }
 }

+ 7 - 73
app/src/main/java/com/sheep/gamegroup/util/js/KFZSJs.java

@@ -432,81 +432,15 @@ public class KFZSJs {
         SMSUtil.getCallLog(result -> activity.loadJs(String.format(Locale.CHINA, "onGetAllCallLog('%s')", result)));
     }
     @JavascriptInterface
-    public void updateDownloadBtn(String taskJson) {
-        new Thread(() -> {
-            TaskEty taskEty = JSON.parseObject(taskJson, TaskEty.class);
-            updateDownloadBtn(taskEty);
-        }).start();
-    }
-    public void updateDownloadBtn(TaskEty taskEty) {
-        if(downloadUtil == null)
-            downloadUtil = new DownloadUtil();
-        TaskDetailAct.setBtnStr(taskEty, downloadUtil, object -> activity.runOnUiThread(() -> {
-//                String params = object.toString();
-//                if (object instanceof Integer) {
-//                    activity.loadJs(String.format(Locale.CHINA, "onUpdateDownloadBtnType('%s')", params));
-//                } else if (object instanceof String) {
-//                    activity.loadJs(String.format(Locale.CHINA, "onUpdateDownloadBtnText('%s')", params));
-//                } else if (object instanceof Boolean) {
-//                    activity.loadJs(String.format(Locale.CHINA, "onUpdateDownloadBtnEnable('%s')", params));
-//                }
-        if (object instanceof Integer) {
-            activity.loadJs(String.format(Locale.CHINA, "onUpdateDownloadBtnType(%d)", (int)object));
-        } else if (object instanceof String) {
-            activity.loadJs(String.format(Locale.CHINA, "onUpdateDownloadBtnText('%s')", (String)object));
-        } else if (object instanceof Boolean) {
-            activity.loadJs(String.format(Locale.CHINA, "onUpdateDownloadBtnEnable(%b)", (boolean)object));
-        }
-        }));
+    public void setTaskEty(String taskJson) {
+        activity.setTaskEty(JSON.parseObject(taskJson, TaskEty.class));
     }
-    private DownloadUtil downloadUtil;
     @JavascriptInterface
-    public void downloadApk(String taskJson) {
-        new Thread(() -> {
-            TaskEty taskEty = JSON.parseObject(taskJson, TaskEty.class);
-            downloadApk(taskEty);
-        }).start();
+    public void updateDownloadBtn() {
+        new Thread(() -> activity.updateDownloadBtn()).start();
     }
-    private void downloadApk(TaskEty taskEty){
-        if(downloadUtil == null)
-            downloadUtil = new DownloadUtil();
-
-        final DownloadTask task;
-        if (TextUtils.isEmpty(taskEty.getDownload_link()) || !taskEty.getDownload_link().contains("http")) {
-            G.showToast(R.string.error_download_link);
-            return;
-        }
-        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);
-                    }
-                }
-                updateDownloadBtn(taskEty);
-                break;
-        }
-        new Thread(() -> {
-            if (downloadUtil.addDownloadTask(downLoadInfo)) {
-                //发送红点信息
-                EventBus.getDefault().post(BigEvent.get().setEventTypes(EventTypes.TIPS_DOWN_ICON));
-            }
-        }).start();
-        UMConfigUtils.onEvent(UMConfigUtils.Event.TASK_DOWNLOAD);
+    @JavascriptInterface
+    public void downloadApk() {
+        new Thread(() -> activity.downloadApk()).start();
     }
 }