Browse Source

修改老师端上传个人风采视频增加封面获取逻辑

Pq 3 years ago
parent
commit
9c2f34fbbf

+ 1 - 1
BaseLibrary/src/main/java/com/cooleshow/base/utils/FileUtils.java

@@ -56,7 +56,7 @@ import okhttp3.ResponseBody;
  * </pre>
  * </pre>
  */
  */
 public final class FileUtils {
 public final class FileUtils {
-    private static final String filesDirectory = "coolexiu";
+    public static final String filesDirectory = "coolexiu";
     public static final String examDownloadDirectory = "examDownload";
     public static final String examDownloadDirectory = "examDownload";
     private static final String LINE_SEP = System.getProperty("line.separator");
     private static final String LINE_SEP = System.getProperty("line.separator");
 
 

+ 12 - 2
BaseLibrary/src/main/java/com/cooleshow/base/utils/helper/upload/UploadHelper.java

@@ -69,6 +69,7 @@ public class UploadHelper {
     private String uploadToken = "";
     private String uploadToken = "";
     private Activity mActivity;
     private Activity mActivity;
     private UploadProgressLoading mProgressLoading;
     private UploadProgressLoading mProgressLoading;
+    private String loadingTip = "";
 
 
     public UploadHelper(Activity activity, int type) {
     public UploadHelper(Activity activity, int type) {
         this(activity, UploadConstants.getBucketNameByType(type));
         this(activity, UploadConstants.getBucketNameByType(type));
@@ -190,7 +191,11 @@ public class UploadHelper {
             @Override
             @Override
             public void onTaskProgress(double v) {
             public void onTaskProgress(double v) {
                 if (mProgressLoading != null) {
                 if (mProgressLoading != null) {
-                    mProgressLoading.setProgress(v);
+                    if (!TextUtils.isEmpty(loadingTip)) {
+                        mProgressLoading.setProgress(v, loadingTip);
+                    } else {
+                        mProgressLoading.setProgress(v);
+                    }
                 }
                 }
                 if (upLoadCallBack != null) {
                 if (upLoadCallBack != null) {
                     upLoadCallBack.onUploadProgress(v);
                     upLoadCallBack.onUploadProgress(v);
@@ -264,7 +269,7 @@ public class UploadHelper {
         if (mActivity == null || mActivity.isFinishing() || mActivity.isDestroyed()) {
         if (mActivity == null || mActivity.isFinishing() || mActivity.isDestroyed()) {
             return;
             return;
         }
         }
-        if (mProgressLoading != null) {
+        if (mProgressLoading != null && !mProgressLoading.isShowing()) {
             mProgressLoading.showLoading();
             mProgressLoading.showLoading();
         }
         }
     }
     }
@@ -301,4 +306,9 @@ public class UploadHelper {
 
 
         }
         }
     }
     }
+
+
+    public void setLoadingTip(String loadingTip) {
+        this.loadingTip = loadingTip;
+    }
 }
 }

+ 10 - 1
BaseLibrary/src/main/java/com/cooleshow/base/widgets/UploadProgressLoading.kt

@@ -29,7 +29,7 @@ class UploadProgressLoading private constructor(context: Context, theme: Int) :
             创建加载对话框
             创建加载对话框
          */
          */
         fun create(context: Context): UploadProgressLoading {
         fun create(context: Context): UploadProgressLoading {
-            LogUtils.i("pq","thread:"+Thread.currentThread().name);
+            LogUtils.i("pq", "thread:" + Thread.currentThread().name);
             //样式引入
             //样式引入
             mDialog = UploadProgressLoading(context, R.style.LightProgressDialog)
             mDialog = UploadProgressLoading(context, R.style.LightProgressDialog)
             //设置布局
             //设置布局
@@ -63,6 +63,15 @@ class UploadProgressLoading private constructor(context: Context, theme: Int) :
         }
         }
     }
     }
 
 
+    fun setProgress(progress: Double, tip: String) {
+        GlobalScope.launch(Dispatchers.Main) {
+            tvProgress?.let {
+                var result: String = UiUtils.convertDouble(progress);
+                tvProgress?.text = "$tip$result%"
+            }
+        }
+    }
+
     /*
     /*
         显示加载对话框,动画开始
         显示加载对话框,动画开始
      */
      */

+ 5 - 1
BaseLibrary/src/main/res/layout/upload_progress_dialog.xml

@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     style="@style/WrapWrap.Vertical"
     style="@style/WrapWrap.Vertical"
-    android:layout_width="wrap_content"
+    android:layout_width="100dp"
     android:layout_height="wrap_content"
     android:layout_height="wrap_content"
     android:background="@drawable/progress_dialog_bg"
     android:background="@drawable/progress_dialog_bg"
     android:gravity="center_horizontal"
     android:gravity="center_horizontal"
@@ -22,6 +23,9 @@
         android:gravity="center"
         android:gravity="center"
         android:minWidth="100dp"
         android:minWidth="100dp"
         android:text="0%"
         android:text="0%"
+        android:paddingStart="10dp"
+        android:paddingEnd="10dp"
+        tools:text="封面上传中99.00%"
         android:textColor="@color/white"
         android:textColor="@color/white"
         android:textSize="@dimen/sp_16" />
         android:textSize="@dimen/sp_16" />
 </LinearLayout>
 </LinearLayout>

+ 5 - 1
teacher/src/main/java/com/cooleshow/teacher/adapter/MineStyleVideoAdapter.java

@@ -38,7 +38,11 @@ public class MineStyleVideoAdapter extends BaseMultiItemQuickAdapter<TeacherSelf
             case 0:
             case 0:
                 //加载视频缩略图
                 //加载视频缩略图
                 ImageView iv_video_bg = holder.getView(R.id.iv_video_bg);
                 ImageView iv_video_bg = holder.getView(R.id.iv_video_bg);
-                GlideUtils.INSTANCE.loadVideoThumbnail(getContext(), styleVideoBean.videoUrl, iv_video_bg);
+                if(TextUtils.isEmpty(styleVideoBean.cover)){
+                    GlideUtils.INSTANCE.loadVideoThumbnail(getContext(), styleVideoBean.videoUrl, iv_video_bg);
+                }else{
+                    GlideUtils.INSTANCE.loadImage(getContext(),styleVideoBean.cover,iv_video_bg, com.cooleshow.base.R.drawable.bg_video_placeholder);
+                }
                 ImageView im_delete = holder.getView(R.id.im_delete);
                 ImageView im_delete = holder.getView(R.id.im_delete);
                 im_delete.setOnClickListener(view -> {
                 im_delete.setOnClickListener(view -> {
                     if (null != itemAddClickAction) {
                     if (null != itemAddClickAction) {

+ 5 - 2
teacher/src/main/java/com/cooleshow/teacher/adapter/MineStyleVideoListAdapter.java

@@ -31,8 +31,11 @@ public class MineStyleVideoListAdapter extends BaseQuickAdapter<TeacherSelfStyle
     protected void convert(@NonNull BaseViewHolder holder, TeacherSelfStyleInfoBean.StyleVideoBean styleVideoBean) {
     protected void convert(@NonNull BaseViewHolder holder, TeacherSelfStyleInfoBean.StyleVideoBean styleVideoBean) {
         //加载视频缩略图
         //加载视频缩略图
         ImageView iv_video_bg =holder.getView(R.id.iv_video_bg);
         ImageView iv_video_bg =holder.getView(R.id.iv_video_bg);
-        GlideUtils.INSTANCE.loadVideoThumbnail(getContext(),styleVideoBean.videoUrl,iv_video_bg);
-
+        if(TextUtils.isEmpty(styleVideoBean.cover)){
+            GlideUtils.INSTANCE.loadVideoThumbnail(getContext(), styleVideoBean.videoUrl, iv_video_bg);
+        }else{
+            GlideUtils.INSTANCE.loadImage(getContext(),styleVideoBean.cover,iv_video_bg, com.cooleshow.base.R.drawable.bg_video_placeholder);
+        }
         //视频审核状态
         //视频审核状态
         TextView tv_audit_status = holder.getView(R.id.tv_audit_status);
         TextView tv_audit_status = holder.getView(R.id.tv_audit_status);
         if (TextUtils.equals(VIDEO_AUDIT_STATUS_DOING, styleVideoBean.authStatus)) {
         if (TextUtils.equals(VIDEO_AUDIT_STATUS_DOING, styleVideoBean.authStatus)) {

+ 1 - 0
teacher/src/main/java/com/cooleshow/teacher/bean/TeacherSelfStyleInfoBean.java

@@ -102,6 +102,7 @@ public class TeacherSelfStyleInfoBean implements Serializable {
         public String id;
         public String id;
         public String updateTime;
         public String updateTime;
         public String userId;
         public String userId;
+        public String cover;
         public String videoUrl;
         public String videoUrl;
         //默认为0 为视频展示 为1时添加视频
         //默认为0 为视频展示 为1时添加视频
         public int type;
         public int type;

+ 96 - 3
teacher/src/main/java/com/cooleshow/teacher/presenter/minestyle/MineStylePagePresenter.java

@@ -1,14 +1,26 @@
 package com.cooleshow.teacher.presenter.minestyle;
 package com.cooleshow.teacher.presenter.minestyle;
 
 
 import android.app.Activity;
 import android.app.Activity;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
+import android.text.TextUtils;
 import android.util.Log;
 import android.util.Log;
 
 
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.request.RequestOptions;
+import com.bumptech.glide.request.target.SimpleTarget;
+import com.bumptech.glide.request.transition.Transition;
 import com.cooleshow.base.constanst.UploadConstants;
 import com.cooleshow.base.constanst.UploadConstants;
 import com.cooleshow.base.data.net.BaseResponse;
 import com.cooleshow.base.data.net.BaseResponse;
 import com.cooleshow.base.presenter.BasePresenter;
 import com.cooleshow.base.presenter.BasePresenter;
 import com.cooleshow.base.rx.BaseObserver;
 import com.cooleshow.base.rx.BaseObserver;
+import com.cooleshow.base.utils.FileUtils;
+import com.cooleshow.base.utils.LogUtils;
 import com.cooleshow.base.utils.RequestBodyUtil;
 import com.cooleshow.base.utils.RequestBodyUtil;
+import com.cooleshow.base.utils.Utils;
 import com.cooleshow.base.utils.helper.upload.UploadHelper;
 import com.cooleshow.base.utils.helper.upload.UploadHelper;
+import com.cooleshow.teacher.R;
 import com.cooleshow.teacher.api.APIService;
 import com.cooleshow.teacher.api.APIService;
 import com.cooleshow.teacher.bean.HomePageSheetMusicListBean;
 import com.cooleshow.teacher.bean.HomePageSheetMusicListBean;
 import com.cooleshow.teacher.bean.TeacherSelfStyleInfoBean;
 import com.cooleshow.teacher.bean.TeacherSelfStyleInfoBean;
@@ -17,9 +29,20 @@ import com.cooleshow.teacher.ui.minestyle.MineStylePageActivity;
 import com.daya.live_teaching.LiveTeachingApp;
 import com.daya.live_teaching.LiveTeachingApp;
 import com.daya.live_teaching.model.FileUploadBean;
 import com.daya.live_teaching.model.FileUploadBean;
 import com.daya.live_teaching.repository.ClassRepository;
 import com.daya.live_teaching.repository.ClassRepository;
+import com.luck.picture.lib.tools.BitmapUtils;
 
 
 import java.io.File;
 import java.io.File;
 
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.core.ObservableEmitter;
+import io.reactivex.rxjava3.core.ObservableOnSubscribe;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+import io.reactivex.rxjava3.schedulers.Schedulers;
+import io.rong.imkit.picture.tools.PictureFileUtils;
 import retrofit2.Call;
 import retrofit2.Call;
 import retrofit2.Callback;
 import retrofit2.Callback;
 import retrofit2.Response;
 import retrofit2.Response;
@@ -76,14 +99,22 @@ public class MineStylePagePresenter extends BasePresenter<MineStylePageContract.
         });
         });
     }
     }
 
 
-    public void upLoadVideo(Activity activity, String filePath) {
+    private void uploadCover(Activity activity, String videoFilePath, String coverFilePath) {
+        TeacherSelfStyleInfoBean.StyleVideoBean styleVideoBean = new TeacherSelfStyleInfoBean.StyleVideoBean();
         UploadHelper uploadHelper = new UploadHelper(activity, UploadConstants.UPLOAD_TYPE_OTHER);
         UploadHelper uploadHelper = new UploadHelper(activity, UploadConstants.UPLOAD_TYPE_OTHER);
-        uploadHelper.uploadFile(new File(filePath));
+        uploadHelper.uploadFile(new File(coverFilePath));
+        uploadHelper.setLoadingTip("封面上传中");
         uploadHelper.setUpLoadCallBack(new UploadHelper.UpLoadCallBack() {
         uploadHelper.setUpLoadCallBack(new UploadHelper.UpLoadCallBack() {
             @Override
             @Override
             public void onSuccess(String url) {
             public void onSuccess(String url) {
+                if (TextUtils.isEmpty(styleVideoBean.cover)) {
+                    //上传完封面再上传视频
+                    styleVideoBean.cover = url;
+                    uploadHelper.setLoadingTip("视频上传中");
+                    uploadHelper.uploadFile(new File(videoFilePath));
+                    return;
+                }
                 if (getView() != null) {
                 if (getView() != null) {
-                    TeacherSelfStyleInfoBean.StyleVideoBean styleVideoBean = new TeacherSelfStyleInfoBean.StyleVideoBean();
                     styleVideoBean.videoUrl = url;
                     styleVideoBean.videoUrl = url;
                     styleVideoBean.type = 0;
                     styleVideoBean.type = 0;
                     getView().upLoadVideoSuccess(styleVideoBean);
                     getView().upLoadVideoSuccess(styleVideoBean);
@@ -98,4 +129,66 @@ public class MineStylePagePresenter extends BasePresenter<MineStylePageContract.
             }
             }
         });
         });
     }
     }
+
+
+    public void getUploadVideoCover(Activity activity, String videoFilePath) {
+        Observable.create(new ObservableOnSubscribe<String>() {
+            @Override
+            public void subscribe(@io.reactivex.rxjava3.annotations.NonNull ObservableEmitter<String> emitter) throws Throwable {
+                getVideoCover(Utils.getApp(), videoFilePath, emitter);
+            }
+        }).subscribeOn(Schedulers.newThread())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new Observer<String>() {
+                    @Override
+                    public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+                    }
+
+                    @Override
+                    public void onNext(@io.reactivex.rxjava3.annotations.NonNull String s) {
+                        uploadCover(activity, videoFilePath, s);
+                    }
+
+                    @Override
+                    public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+
+                    }
+
+                    @Override
+                    public void onComplete() {
+
+                    }
+                });
+    }
+
+    private void getVideoCover(Context context, String targetVideoPath, ObservableEmitter<String> emitter) {
+        Glide.with(context)
+                .setDefaultRequestOptions(
+                        new RequestOptions()
+                                .frame(0)
+                                .centerCrop()
+                                .error(com.cooleshow.base.R.drawable.bg_video_placeholder)
+                                .placeholder(com.cooleshow.base.R.drawable.bg_video_placeholder)
+                ).asBitmap()
+                .load(new File(targetVideoPath))
+                .into(new SimpleTarget<Bitmap>() {
+                    @Override
+                    public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
+                        if (resource != null) {
+                            long currentTime = System.currentTimeMillis();
+                            String path = FileUtils.getCacheDir(Utils.getApp(), FileUtils.filesDirectory) + "/videoCover";
+                            File parentFile = new File(path);
+                            if (!parentFile.exists()) {
+                                parentFile.mkdirs();
+                            }
+                            File file = new File(parentFile, String.valueOf(currentTime) + ".png");
+                            PictureFileUtils.saveBitmapFile(resource, file);
+                            if (emitter != null) {
+                                emitter.onNext(file.getAbsolutePath());
+                            }
+                        }
+                    }
+                });
+    }
 }
 }

+ 1 - 1
teacher/src/main/java/com/cooleshow/teacher/ui/minestyle/MineStylePageActivity.java

@@ -276,7 +276,7 @@ public class MineStylePageActivity extends BaseMVPActivity<ActivityMineStylePage
             } else if (requestCode == CHOOSE_VIDEO) {
             } else if (requestCode == CHOOSE_VIDEO) {
                 Uri uri = data.getData();
                 Uri uri = data.getData();
                 String v_path = FileUtils.getFilePathForN(uri, MineStylePageActivity.this);
                 String v_path = FileUtils.getFilePathForN(uri, MineStylePageActivity.this);
-                presenter.upLoadVideo(MineStylePageActivity.this, v_path);
+                presenter.getUploadVideoCover(MineStylePageActivity.this, v_path);
             }
             }
         }
         }
     }
     }