drew %!s(int64=5) %!d(string=hai) anos
pai
achega
c16e361938
Modificáronse 2 ficheiros con 182 adicións e 41 borrados
  1. 3 0
      app/build.gradle
  2. 179 41
      app/src/main/java/com/ht/gate/SettingsActivity.java

+ 3 - 0
app/build.gradle

@@ -64,4 +64,7 @@ dependencies {
     implementation 'com.blankj:utilcodex:1.28.4'
     implementation 'com.liulishuo.filedownloader:library:1.7.7'
     implementation group: 'org.apache.commons', name: 'commons-io', version: '1.3.2'
+    implementation 'com.liulishuo.okdownload:okdownload:1.0.7'
+
+
 }

+ 179 - 41
app/src/main/java/com/ht/gate/SettingsActivity.java

@@ -21,30 +21,36 @@ import android.util.Log;
 import android.view.View;
 import android.widget.TextView;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
-import androidx.core.content.FileProvider;
 
 import com.blankj.utilcode.constant.PermissionConstants;
 import com.blankj.utilcode.util.AppUtils;
 import com.blankj.utilcode.util.PathUtils;
 import com.blankj.utilcode.util.PermissionUtils;
 import com.blankj.utilcode.util.ToastUtils;
-import com.blankj.utilcode.util.UtilsTransActivity;
 import com.ht.gate.domain.QueryUpdate;
 import com.ht.gate.domain.Room;
 import com.ht.gate.domain.UpdateInfo;
-import com.liulishuo.filedownloader.BaseDownloadTask;
-import com.liulishuo.filedownloader.DownloadTask;
-import com.liulishuo.filedownloader.FileDownloadListener;
-import com.liulishuo.filedownloader.FileDownloadSampleListener;
-import com.liulishuo.filedownloader.FileDownloader;
-
-import org.apache.commons.io.FilenameUtils;
+import com.liulishuo.okdownload.DownloadListener;
+import com.liulishuo.okdownload.DownloadTask;
+import com.liulishuo.okdownload.SpeedCalculator;
+import com.liulishuo.okdownload.StatusUtil;
+import com.liulishuo.okdownload.core.Util;
+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.cause.ResumeFailedCause;
+import com.liulishuo.okdownload.core.listener.DownloadListener4WithSpeed;
+import com.liulishuo.okdownload.core.listener.assist.Listener4SpeedAssistExtend;
 
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
 
 import butterknife.BindView;
 import butterknife.ButterKnife;
@@ -76,6 +82,7 @@ public class SettingsActivity extends AppCompatActivity {
     private DoorService.DoorBinder mDoorBinder;
 
     private ProgressDialog progressDialog;
+    private ProgressDialog loadingDialog;
 
     private ServiceConnection connection = new ServiceConnection() {
         @Override
@@ -105,6 +112,12 @@ public class SettingsActivity extends AppCompatActivity {
         progressDialog.setCancelable(false);
         progressDialog.setMessage("下载中");
         progressDialog.setProgress(0);
+
+        loadingDialog = new ProgressDialog(this, AlertDialog.THEME_DEVICE_DEFAULT_DARK);
+        loadingDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
+        loadingDialog.setCanceledOnTouchOutside(false);
+        loadingDialog.setCancelable(false);
+        loadingDialog.setMessage("加载中");
     }
 
     @Override
@@ -184,15 +197,12 @@ public class SettingsActivity extends AppCompatActivity {
     void checkUpdate() {
         try {
             Room room = Room.fromBase64(sharedPreferences.getString(Constants.PREF_ROOM_INFO, null));
-            ProgressDialog p = new ProgressDialog(this);
-            p.setMessage("检查更新中");
-            p.show();
             RetrofitManager.getInstance().getRetrofit().create(ApiService.class)
                     .checkUpdate(new QueryUpdate(room.getSiteCode(), "02", AppUtils.getAppVersionCode() + ""))
                     .enqueue(new Callback<UpdateInfo>() {
                         @Override
                         public void onResponse(Call<UpdateInfo> call, Response<UpdateInfo> response) {
-                            p.dismiss();
+                            loadingDialog.dismiss();
                             if (response.code() == 200) {
                                 if (response.body() == null) {
                                     Toasty.info(SettingsActivity.this, "暂无更新").show();
@@ -237,8 +247,8 @@ public class SettingsActivity extends AppCompatActivity {
                                                                 } else {
                                                                     url = RetrofitManager.BASE_URL.replaceAll("/$", "") + response.body().getResultData().getSoftwareUrl();
                                                                 }
-                                                                ToastUtils.showShort(url);
-                                                                startDownload(url);
+                                                                Log.d(TAG, "download Url: " + url);
+                                                                startDownload2(url);
                                                             }
 
                                                             @Override
@@ -255,7 +265,7 @@ public class SettingsActivity extends AppCompatActivity {
 
                         @Override
                         public void onFailure(Call<UpdateInfo> call, Throwable t) {
-                            p.dismiss();
+                            loadingDialog.dismiss();
                             Toasty.info(SettingsActivity.this, "暂无更新").show();
                         }
                     });
@@ -299,52 +309,180 @@ public class SettingsActivity extends AppCompatActivity {
 //                }).request();
     }
 
-    private void startDownload(String url) {
-        FileDownloader.setup(SettingsActivity.this);
-        String ext = FilenameUtils.getExtension(url);
+//    private void startDownload(String url) {
+//        FileDownloader.setup(SettingsActivity.this);
+//        String ext = FilenameUtils.getExtension(url);
+//        String fileName = System.currentTimeMillis() + ".apk";
+//        String path = PathUtils.getExternalAppDownloadPath() + "/" + fileName;
+//        BaseDownloadTask downloadTask = FileDownloader.getImpl().create(url).setPath(path).setListener(new FileDownloadListener() {
+//            @Override
+//            protected void pending(BaseDownloadTask task, int soFarBytes, int totalBytes) {
+//
+//            }
+//
+//            @Override
+//            protected void progress(BaseDownloadTask task, int soFarBytes, int totalBytes) {
+//                Log.d(TAG, "download progress: " + soFarBytes + " / " + totalBytes);
+//                progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+//                progressDialog.setProgress((int) (soFarBytes * 100L / totalBytes));
+//            }
+//
+//            @Override
+//            protected void completed(BaseDownloadTask task) {
+//                progressDialog.dismiss();
+//                ToastUtils.showShort("下载完成");
+//                installApk(new File(task.getPath()));
+//            }
+//
+//            @Override
+//            protected void paused(BaseDownloadTask task, int soFarBytes, int totalBytes) {
+//            }
+//
+//            @Override
+//            protected void error(BaseDownloadTask task, Throwable e) {
+//                progressDialog.dismiss();
+//                ToastUtils.showShort(e.getMessage());
+//            }
+//
+//            @Override
+//            protected void warn(BaseDownloadTask task) {
+//
+//            }
+//        });
+//        progressDialog.setButton(ProgressDialog.BUTTON_NEGATIVE, "取消下载", (dialog, which) -> {
+//            downloadTask.pause();
+//            progressDialog.dismiss();
+//        });
+//        progressDialog.setProgress(0);
+//        progressDialog.show();
+//        downloadTask.start();
+//    }
+
+    private void startDownload2(String url) {
         String fileName = System.currentTimeMillis() + ".apk";
-        String path = PathUtils.getExternalAppDownloadPath() + "/" + fileName;
-        BaseDownloadTask downloadTask = FileDownloader.getImpl().create(url).setPath(path).setListener(new FileDownloadListener() {
+        DownloadTask task = new DownloadTask.Builder(url, PathUtils.getExternalAppDownloadPath(), fileName)
+                .setMinIntervalMillisCallbackProcess(16)
+                // ignore the same task has already completed in the past.
+                .setPassIfAlreadyCompleted(false)
+                .build();
+        Util.enableConsoleLog();
+
+//        task.enqueue(new DownloadListener() {
+//            @Override
+//            public void taskStart(@NonNull DownloadTask task) {
+//                Log.d(TAG, "taskStart");
+//            }
+//
+//            @Override
+//            public void connectTrialStart(@NonNull DownloadTask task, @NonNull Map<String, List<String>> requestHeaderFields) {
+//                Log.d(TAG, "connectTrialStart");
+//            }
+//
+//            @Override
+//            public void connectTrialEnd(@NonNull DownloadTask task, int responseCode, @NonNull Map<String, List<String>> responseHeaderFields) {
+//                Log.d(TAG, "connectTrialEnd");
+//            }
+//
+//            @Override
+//            public void downloadFromBeginning(@NonNull DownloadTask task, @NonNull BreakpointInfo info, @NonNull ResumeFailedCause cause) {
+//                Log.d(TAG, "downloadFromBeginning");
+//            }
+//
+//            @Override
+//            public void downloadFromBreakpoint(@NonNull DownloadTask task, @NonNull BreakpointInfo info) {
+//                Log.d(TAG, "downloadFromBreakpoint");
+//            }
+//
+//            @Override
+//            public void connectStart(@NonNull DownloadTask task, int blockIndex, @NonNull Map<String, List<String>> requestHeaderFields) {
+//                Log.d(TAG, "connectStart");
+//            }
+//
+//            @Override
+//            public void connectEnd(@NonNull DownloadTask task, int blockIndex, int responseCode, @NonNull Map<String, List<String>> responseHeaderFields) {
+//                Log.d(TAG, "connectEnd");
+//            }
+//
+//            @Override
+//            public void fetchStart(@NonNull DownloadTask task, int blockIndex, long contentLength) {
+//
+//                Log.d(TAG, String.format("fetchStart blockIndex %s contentLength %s", blockIndex, contentLength));
+//            }
+//
+//            @Override
+//            public void fetchProgress(@NonNull DownloadTask task, int blockIndex, long increaseBytes) {
+//                Log.d(TAG, String.format("fetchProgress blockIndex %s increaseBytes %s", blockIndex, increaseBytes));
+//            }
+//
+//            @Override
+//            public void fetchEnd(@NonNull DownloadTask task, int blockIndex, long contentLength) {
+//                Log.d(TAG, "fetchEnd");
+//            }
+//
+//            @Override
+//            public void taskEnd(@NonNull DownloadTask task, @NonNull EndCause cause, @Nullable Exception realCause) {
+//                Log.d(TAG, "taskEnd");
+//            }
+//        });
+
+        progressDialog.setButton(ProgressDialog.BUTTON_NEGATIVE, "取消下载", (dialog, which) -> {
+            task.cancel();
+            progressDialog.dismiss();
+        });
+        progressDialog.setProgress(0);
+        progressDialog.show();
+
+
+        final long[] totalLength = {0};
+        task.enqueue(new DownloadListener4WithSpeed() {
             @Override
-            protected void pending(BaseDownloadTask task, int soFarBytes, int totalBytes) {
+            public void taskStart(@NonNull DownloadTask task) {
+                Log.d(TAG, "taskStart");
+            }
 
+            @Override
+            public void connectStart(@NonNull DownloadTask task, int blockIndex, @NonNull Map<String, List<String>> requestHeaderFields) {
+                Log.d(TAG, "connectStart");
             }
 
             @Override
-            protected void progress(BaseDownloadTask task, int soFarBytes, int totalBytes) {
-                progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
-                progressDialog.setProgress((int) (soFarBytes * 100L / totalBytes));
+            public void connectEnd(@NonNull DownloadTask task, int blockIndex, int responseCode, @NonNull Map<String, List<String>> responseHeaderFields) {
+                Log.d(TAG, "connectEnd");
             }
 
             @Override
-            protected void completed(BaseDownloadTask task) {
-                progressDialog.dismiss();
-                ToastUtils.showShort("下载完成");
-                installApk(new File(task.getPath()));
+            public void infoReady(@NonNull DownloadTask task, @NonNull BreakpointInfo info, boolean fromBreakpoint, @NonNull Listener4SpeedAssistExtend.Listener4SpeedModel model) {
+                totalLength[0] = info.getTotalLength();
+                Log.d(TAG, "infoReady");
             }
 
             @Override
-            protected void paused(BaseDownloadTask task, int soFarBytes, int totalBytes) {
+            public void progressBlock(@NonNull DownloadTask task, int blockIndex, long currentBlockOffset, @NonNull SpeedCalculator blockSpeed) {
+                Log.d(TAG, "progressBlock");
             }
 
             @Override
-            protected void error(BaseDownloadTask task, Throwable e) {
-                progressDialog.dismiss();
-                ToastUtils.showShort(e.getMessage());
+            public void progress(@NonNull DownloadTask task, long currentOffset, @NonNull SpeedCalculator taskSpeed) {
+                Log.d(TAG, String.format("progress currentOffset %s ", currentOffset));
+                progressDialog.setProgress((int) (currentOffset * 100 / totalLength[0]));
             }
 
             @Override
-            protected void warn(BaseDownloadTask task) {
+            public void blockEnd(@NonNull DownloadTask task, int blockIndex, BlockInfo info, @NonNull SpeedCalculator blockSpeed) {
+                Log.d(TAG, "blockEnd");
+            }
 
+            @Override
+            public void taskEnd(@NonNull DownloadTask task, @NonNull EndCause cause, @Nullable Exception realCause, @NonNull SpeedCalculator taskSpeed) {
+                Log.d(TAG, "taskEnd");
+                progressDialog.dismiss();
+                if (cause == EndCause.COMPLETED) {
+                    installApk(task.getFile());
+                } else {
+                    Toasty.info(SettingsActivity.this, cause.name()).show();
+                }
             }
         });
-        progressDialog.setButton(ProgressDialog.BUTTON_NEGATIVE, "取消下载", (dialog, which) -> {
-            downloadTask.pause();
-            progressDialog.dismiss();
-        });
-        progressDialog.setProgress(0);
-        progressDialog.show();
-        downloadTask.start();
     }
 
     private void installApk(File apkFile) {