瀏覽代碼

增加取消上传逻辑

Pq 7 月之前
父節點
當前提交
613e13591c

+ 34 - 4
BaseLibrary/src/main/java/com/cooleshow/base/utils/helper/upload/UploadHelper.java

@@ -2,7 +2,9 @@ package com.cooleshow.base.utils.helper.upload;
 
 import android.app.Activity;
 import android.text.TextUtils;
+import android.view.View;
 
+import com.cooleshow.base.R;
 import com.cooleshow.base.bean.UploadTokenInfoBean;
 import com.cooleshow.base.common.BaseConstant;
 import com.cooleshow.base.constanst.UploadConstants;
@@ -17,6 +19,7 @@ import com.cooleshow.base.utils.RequestBodyUtil;
 import com.cooleshow.base.utils.SPUtils;
 import com.cooleshow.base.utils.ThreadUtils;
 import com.cooleshow.base.utils.TimeUtils;
+import com.cooleshow.base.utils.UiUtils;
 import com.cooleshow.base.utils.Utils;
 import com.cooleshow.base.widgets.UploadProgressLoading;
 import com.tencent.cos.xml.CosXmlServiceConfig;
@@ -55,7 +58,7 @@ import okhttp3.RequestBody;
 /**
  * Author by pq, Date on 2022/5/11.
  */
-public class UploadHelper {
+public class UploadHelper implements View.OnClickListener {
     private static final String TAG = "UploadHelper";
     public String SRC_BUCKETNAME = UploadConstants.BUCKET_NAME_DEFAULT;
     public static final String END_POINT = "ks3-cn-beijing.ksyuncs.com";
@@ -72,6 +75,8 @@ public class UploadHelper {
     private String loadingTip = "";
     private String path = "";
     private CosXmlSimpleService mCosXmlService;
+    private COSXMLUploadTask cosxmlUploadTask;
+    private boolean isCancel = false;
 
     public UploadHelper(Activity activity, int type) {
         this(activity, UploadConstants.getBucketNameByType(type), UploadConstants.getPathByType(type));
@@ -101,6 +106,7 @@ public class UploadHelper {
                 return;
             }
             mProgressLoading = UploadProgressLoading.Companion.create(mActivity);
+            mProgressLoading.setCancelClickListener(this);
             setLoadingTip("上传中");
         }
     }
@@ -116,7 +122,7 @@ public class UploadHelper {
         };
         // 存储桶所在地域简称,例如广州地区是 ap-guangzhou
         String region = UploadConstants.DEFAULT_TT_REGION;
-        String cdnCustomDomain =UploadConstants.DEFAULT_TT_HOST;
+        String cdnCustomDomain = UploadConstants.DEFAULT_TT_HOST;
 
 
         // 创建 CosXmlServiceConfig 对象,根据需要修改默认的配置参数
@@ -135,6 +141,9 @@ public class UploadHelper {
     }
 
     private void doUpload2(String key, File file) {
+        if (isCancel) {
+            return;
+        }
         // 初始化 TransferConfig,这里使用默认配置,如果需要定制,请参考 SDK 接口文档
         TransferConfig transferConfig = new TransferConfig.Builder()
                 .setForceSimpleUpload(true).build();
@@ -149,7 +158,7 @@ public class UploadHelper {
         // 若存在初始化分块上传的 UploadId,则赋值对应的 uploadId 值用于续传;否则,赋值 null
         String uploadId = null;
         // 上传文件
-        COSXMLUploadTask cosxmlUploadTask = transferManager.upload(bucket, cosPath,
+        cosxmlUploadTask = transferManager.upload(bucket, cosPath,
                 srcPath, uploadId);
         showUploadLoading();
 
@@ -269,9 +278,10 @@ public class UploadHelper {
         } else {
             name = "" + timeStr;
         }
-        String lastName = getUserId()+"_"+name;
+        String lastName = getUserId() + "_" + name;
         String month = TimeUtils.date2String(TimeUtils.getNowDate(), TimeUtils.getSafeDateFormat("yyyy-MM"));
         String key = formatPath(path) + "android/" + month + "/" + lastName;
+        isCancel = false;
         getUploadToken(name, key, file);
     }
 
@@ -371,6 +381,26 @@ public class UploadHelper {
         }
     }
 
+    @Override
+    public void onClick(View v) {
+        int id = v.getId();
+        if (UiUtils.isFastClick()) {
+            return;
+        }
+        if (id == R.id.tv_cancel) {
+            cancelUpload();
+            return;
+        }
+    }
+
+    private void cancelUpload() {
+        this.isCancel =true;
+        if (cosxmlUploadTask != null) {
+            cosxmlUploadTask.cancel();
+        }
+        hideUploadLoading();
+    }
+
     public abstract static class UpLoadCallBack {
         protected abstract void onSuccess(String url);
 

+ 7 - 2
BaseLibrary/src/main/java/com/cooleshow/base/widgets/UploadProgressLoading.kt

@@ -2,6 +2,7 @@ package com.cooleshow.base.widgets
 
 import android.content.Context
 import android.view.Gravity
+import android.view.View.OnClickListener
 import android.widget.ImageView
 import android.widget.TextView
 import com.airbnb.lottie.LottieAnimationView
@@ -22,6 +23,7 @@ class UploadProgressLoading private constructor(context: Context, theme: Int) :
     companion object {
         private lateinit var mDialog: UploadProgressLoading
         private var tvProgress: TextView? = null;
+        private var tv_cancel: TextView? = null;
         private var mViewLoadingAnim: LottieAnimationView? = null
 
         /*
@@ -43,9 +45,8 @@ class UploadProgressLoading private constructor(context: Context, theme: Int) :
             mDialog.window?.attributes = lp
 
             //获取动画视图
-            //获取动画视图
-            val loadingView = mDialog.findViewById<ImageView>(R.id.iv_loading)
 
+            tv_cancel = mDialog.findViewById<TextView>(R.id.tv_cancel)
             tvProgress = mDialog.findViewById<TextView>(R.id.tv_progress)
             mViewLoadingAnim = mDialog.findViewById<LottieAnimationView>(R.id.view_loading_anim)
             mViewLoadingAnim?.imageAssetsFolder = "lottie/refresh/images/"
@@ -56,6 +57,10 @@ class UploadProgressLoading private constructor(context: Context, theme: Int) :
         }
     }
 
+    fun setCancelClickListener(clickListener: OnClickListener) {
+        tv_cancel?.setOnClickListener(clickListener);
+    }
+
     fun setProgress(progress: Double) {
         GlobalScope.launch(Dispatchers.Main) {
             tvProgress?.let {

+ 5 - 0
BaseLibrary/src/main/res/drawable/shape_16dp_border_1dp.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <corners android:radius="16dp" />
+    <stroke android:color="@color/white" android:width="1dp"/>
+</shape>

+ 48 - 26
BaseLibrary/src/main/res/layout/upload_progress_dialog.xml

@@ -1,36 +1,58 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
     xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
     style="@style/WrapWrap.Vertical"
     android:layout_width="100dp"
-    android:layout_height="wrap_content"
-    android:minHeight="100dp"
-    android:paddingBottom="12dp"
-    android:paddingTop="12dp"
-    android:background="@drawable/bg_white_10dp"
-    android:gravity="center">
+    android:layout_height="wrap_content">
+
+    <LinearLayout
+        android:orientation="vertical"
+        android:layout_width="100dp"
+        android:layout_height="wrap_content"
+        android:background="@drawable/bg_white_10dp"
+        android:gravity="center"
+        android:minHeight="100dp"
+        android:paddingTop="12dp"
+        android:paddingBottom="12dp">
+
+
+        <com.airbnb.lottie.LottieAnimationView
+            android:id="@+id/view_loading_anim"
+            android:layout_width="wrap_content"
+            android:layout_height="47dp"
+            android:layout_gravity="center"
+            app:lottie_autoPlay="false"
+            app:lottie_imageAssetsFolder="lottie/refresh/images/"
+            app:lottie_loop="true" />
+
+        <TextView
+            android:id="@+id/tv_progress"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="10dp"
+            android:gravity="center"
+            android:minWidth="100dp"
+            android:paddingStart="10dp"
+            android:paddingEnd="10dp"
+            android:text="0%"
+            android:textColor="@color/color_333333"
+            android:textSize="@dimen/sp_12"
+            tools:text="上传中上传中99.00%" />
+    </LinearLayout>
 
-    <com.airbnb.lottie.LottieAnimationView
-        android:id="@+id/view_loading_anim"
-        android:layout_width="wrap_content"
-        android:layout_height="47dp"
-        android:layout_gravity="center"
-        app:lottie_autoPlay="false"
-        app:lottie_imageAssetsFolder="lottie/refresh/images/"
-        app:lottie_loop="true" />
 
     <TextView
-        android:id="@+id/tv_progress"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="10dp"
+        android:id="@+id/tv_cancel"
+        android:layout_width="wrap_content"
+        android:layout_height="30dp"
+        android:layout_gravity="center_horizontal"
+        android:layout_marginTop="16dp"
+        android:background="@drawable/shape_16dp_border_1dp"
         android:gravity="center"
-        android:minWidth="100dp"
-        android:text="0%"
-        android:paddingStart="10dp"
-        android:paddingEnd="10dp"
-        tools:text="上传中上传中99.00%"
-        android:textColor="@color/color_333333"
-        android:textSize="@dimen/sp_12" />
+        android:paddingStart="14dp"
+        android:paddingEnd="14dp"
+        android:text="@string/cancel_upload_str"
+        android:textColor="@color/white"
+        android:textSize="@dimen/sp_13" />
 </LinearLayout>

+ 1 - 0
BaseLibrary/src/main/res/values/strings.xml

@@ -28,4 +28,5 @@
 
     <string name="app_version_tip">"版本号 %s"</string>
     <string name="error_tip">无网络连接,请检查网络后重试</string>
+    <string name="cancel_upload_str">取消上传</string>
 </resources>