瀏覽代碼

添加上传文件进度显示

Pq 3 年之前
父節點
當前提交
f0f3854c44

+ 12 - 0
BaseLibrary/src/main/java/com/cooleshow/base/utils/UiUtils.java

@@ -17,6 +17,7 @@ import android.view.ViewGroup;
 
 import com.cooleshow.base.widgets.span.QMUIAlignMiddleImageSpan;
 
+import java.math.BigDecimal;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
@@ -170,4 +171,15 @@ public class UiUtils {
         return split;
     }
 
+
+    /**
+     * 保留2位小数
+     * @param targetValue
+     * @return
+     */
+    public static String convertDouble(double targetValue) {
+        BigDecimal bd = new BigDecimal(targetValue);
+        double result = bd.setScale(2, BigDecimal.ROUND_DOWN).doubleValue(); // 保留两位小数,不四舍五入(可选舍入模式)
+        return String.valueOf(result);
+    }
 }

+ 28 - 0
BaseLibrary/src/main/java/com/cooleshow/base/utils/helper/upload/UploadHelper.java

@@ -11,6 +11,8 @@ import com.cooleshow.base.utils.LogUtils;
 import com.cooleshow.base.utils.RequestBodyUtil;
 import com.cooleshow.base.utils.TimeUtils;
 import com.cooleshow.base.utils.Utils;
+import com.cooleshow.base.widgets.ProgressLoading;
+import com.cooleshow.base.widgets.UploadProgressLoading;
 import com.ksyun.ks3.auth.AuthUtils;
 import com.ksyun.ks3.exception.Ks3Error;
 import com.ksyun.ks3.model.PostObjectFormFields;
@@ -63,11 +65,19 @@ public class UploadHelper {
     private Ks3Client mClient;
 
     private String uploadToken = "";
+    private Activity mActivity;
+    private UploadProgressLoading mProgressLoading;
 
     public UploadHelper(Activity activity) {
+        this.mActivity = activity;
+        initUploadProgressDialog();
         initClient();
     }
 
+    private void initUploadProgressDialog() {
+        mProgressLoading = UploadProgressLoading.Companion.create(mActivity);
+    }
+
     private void initClient() {
         Ks3ClientConfiguration configuration = Ks3ClientConfiguration.getDefaultConfiguration();
         configuration.setSSLSocketFactory(SSLSocketFactory.getSocketFactory());
@@ -120,6 +130,9 @@ public class UploadHelper {
                 if (throwable != null) {
                     throwable.printStackTrace();
                 }
+                if (mProgressLoading != null) {
+                    mProgressLoading.hideLoading();
+                }
                 if (upLoadCallBack != null) {
                     upLoadCallBack.onFailure();
                 }
@@ -128,6 +141,9 @@ public class UploadHelper {
 
             @Override
             public void onTaskSuccess(int i, Header[] headers) {
+                if (mProgressLoading != null) {
+                    mProgressLoading.hideLoading();
+                }
                 if (null != upLoadCallBack) {
                     upLoadCallBack.onSuccess(buildUploadUrl(key));
                 }
@@ -136,6 +152,9 @@ public class UploadHelper {
 
             @Override
             public void onTaskStart() {
+                if (mProgressLoading != null) {
+                    mProgressLoading.showLoading();
+                }
                 if (upLoadCallBack != null) {
                     upLoadCallBack.onUploadStart();
                 }
@@ -143,6 +162,9 @@ public class UploadHelper {
 
             @Override
             public void onTaskFinish() {
+                if (mProgressLoading != null) {
+                    mProgressLoading.hideLoading();
+                }
                 if (upLoadCallBack != null) {
                     upLoadCallBack.onUploadFinish();
                 }
@@ -150,6 +172,9 @@ public class UploadHelper {
 
             @Override
             public void onTaskCancel() {
+                if (mProgressLoading != null) {
+                    mProgressLoading.hideLoading();
+                }
                 if (upLoadCallBack != null) {
                     upLoadCallBack.onUploadCancel();
                 }
@@ -157,6 +182,9 @@ public class UploadHelper {
 
             @Override
             public void onTaskProgress(double v) {
+                if (mProgressLoading != null) {
+                    mProgressLoading.setProgress(v);
+                }
                 if (upLoadCallBack != null) {
                     upLoadCallBack.onUploadProgress(v);
                 }

+ 89 - 0
BaseLibrary/src/main/java/com/cooleshow/base/widgets/UploadProgressLoading.kt

@@ -0,0 +1,89 @@
+package com.cooleshow.base.widgets
+
+import android.app.Dialog
+import android.content.Context
+import android.graphics.drawable.AnimationDrawable
+import android.view.Gravity
+import android.widget.ImageView
+import android.widget.TextView
+import com.cooleshow.base.R
+import com.cooleshow.base.utils.LogUtils
+import com.cooleshow.base.utils.UiUtils
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+
+/**
+ * 上传进度条
+ */
+class UploadProgressLoading private constructor(context: Context, theme: Int) :
+    Dialog(context, theme) {
+
+    companion object {
+        private lateinit var mDialog: UploadProgressLoading
+        private var animDrawable: AnimationDrawable? = null
+        private var tvProgress: TextView? = null;
+
+        /*
+            创建加载对话框
+         */
+        fun create(context: Context): UploadProgressLoading {
+            LogUtils.i("pq","thread:"+Thread.currentThread().name);
+            //样式引入
+            mDialog = UploadProgressLoading(context, R.style.LightProgressDialog)
+            //设置布局
+            mDialog.setContentView(R.layout.upload_progress_dialog)
+            mDialog.setCancelable(false)
+            mDialog.setCanceledOnTouchOutside(false)
+            mDialog.window?.attributes?.gravity = Gravity.CENTER
+
+            val lp = mDialog.window?.attributes
+            lp?.dimAmount = 0.2f
+            //设置属性
+            mDialog.window?.attributes = lp
+
+            //获取动画视图
+            val loadingView = mDialog.findViewById<ImageView>(R.id.iv_loading)
+
+            tvProgress = mDialog.findViewById<TextView>(R.id.tv_progress)
+
+            animDrawable = loadingView.background as AnimationDrawable
+
+            return mDialog
+        }
+    }
+
+    fun setProgress(progress: Double) {
+        GlobalScope.launch(Dispatchers.Main) {
+            tvProgress?.let {
+                var result: String = UiUtils.convertDouble(progress);
+                tvProgress?.text = "$result%"
+            }
+        }
+    }
+
+    /*
+        显示加载对话框,动画开始
+     */
+    fun showLoading() {
+        GlobalScope.launch(Dispatchers.Main) {
+            super.show()
+            animDrawable?.start()
+        }
+    }
+
+    /*
+        隐藏加载对话框,动画停止
+     */
+    fun hideLoading() {
+        GlobalScope.launch(Dispatchers.Main) {
+            super.dismiss()
+            animDrawable?.stop()
+        }
+    }
+
+    fun stopAnim() {
+        animDrawable?.stop()
+    }
+}

+ 27 - 0
BaseLibrary/src/main/res/layout/upload_progress_dialog.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    style="@style/WrapWrap.Vertical"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:background="@drawable/progress_dialog_bg"
+    android:gravity="center_horizontal"
+    android:paddingTop="20dp"
+    android:paddingBottom="20dp">
+
+    <ImageView
+        android:id="@+id/iv_loading"
+        style="@style/WrapWrap"
+        android:layout_gravity="center"
+        android:background="@drawable/progress_dialog_anim" />
+
+    <TextView
+        android:id="@+id/tv_progress"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="10dp"
+        android:gravity="center"
+        android:minWidth="100dp"
+        android:text="0%"
+        android:textColor="@color/white"
+        android:textSize="@dimen/sp_16" />
+</LinearLayout>

+ 0 - 2
student/src/main/java/com/cooleshow/student/ui/web/HtmlActivity.java

@@ -1079,7 +1079,6 @@ public class HtmlActivity extends BaseActivity<ActivityHtml1Binding> implements
             if (result != null) {
                 File file = UriUtils.uri2File(result);
                 if (file != null && file.exists()) {
-                    showLoading();
                     UploadHelper uploadHelper = new UploadHelper(HtmlActivity.this);
                     uploadHelper.uploadFile(file);
                     uploadHelper.setUpLoadCallBack(new UploadHelper.UpLoadCallBack() {
@@ -1102,7 +1101,6 @@ public class HtmlActivity extends BaseActivity<ActivityHtml1Binding> implements
 
                         @Override
                         public void onFailure() {
-                            hideLoading();
                             ToastUtils.showShort("上传失败,请重新选择");
                             upLoadFileFaile();
                         }

+ 0 - 2
teacher/src/main/java/com/cooleshow/teacher/ui/web/HtmlActivity.java

@@ -1073,7 +1073,6 @@ public class HtmlActivity extends BaseActivity<ActivityHtml1Binding> implements
             if (result != null) {
                 File file = UriUtils.uri2File(result);
                 if (file != null && file.exists()) {
-                    showLoading();
                     UploadHelper uploadHelper = new UploadHelper(HtmlActivity.this);
                     uploadHelper.uploadFile(file);
                     uploadHelper.setUpLoadCallBack(new UploadHelper.UpLoadCallBack() {
@@ -1096,7 +1095,6 @@ public class HtmlActivity extends BaseActivity<ActivityHtml1Binding> implements
 
                         @Override
                         public void onFailure() {
-                            hideLoading();
                             ToastUtils.showShort("上传失败,请重新选择");
                             upLoadFileFaile();
                         }

+ 0 - 2
teacher/src/main/java/com/cooleshow/teacher/ui/web/WebActivity.java

@@ -525,7 +525,6 @@ public class WebActivity extends BaseActivity<ActivityHtmlBinding> implements Js
             if (result != null) {
                 File file = UriUtils.uri2File(result);
                 if (file != null && file.exists()) {
-                    showLoading();
                     UploadHelper uploadHelper = new UploadHelper(WebActivity.this);
                     uploadHelper.uploadFile(file);
                     uploadHelper.setUpLoadCallBack(new UploadHelper.UpLoadCallBack() {
@@ -549,7 +548,6 @@ public class WebActivity extends BaseActivity<ActivityHtmlBinding> implements Js
 
                         @Override
                         public void onFailure() {
-                            hideLoading();
                             ToastUtils.showShort("上传失败,请重新选择");
                             selectFileFail();
                         }