소스 검색

添加老师端创建直播增加封面

Pq 2 년 전
부모
커밋
6f0e2fd5e5

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

@@ -124,6 +124,7 @@
     <color name="color_ff4046">#ff4046</color>
     <color name="color_ff8901">#FF8901</color>
     <color name="color_f9f9f9">#f9f9f9</color>
+    <color name="color_e3e3e3">#e3e3e3</color>
 
     <color name="color_25292e">#25292E</color>
     <color name="color_F8F8F8">#F8F8F8</color>

+ 6 - 1
teacher/src/main/java/com/cooleshow/teacher/contract/CreateLiveContract.java

@@ -12,8 +12,13 @@ public interface CreateLiveContract {
     interface CreateLiveView extends BaseView {
         void onCreateLiveSuccess(String roomId);
 
+        void upLoadImageSuccess(String fileUrl);
+
+        void upLoadImageFailure();
+
     }
+
     interface Presenter {
-        void createTempLive(String liveRemark,String roomTitle,String liveDuration);
+        void createTempLive(String liveRemark, String roomTitle,String coverPic, String liveDuration);
     }
 }

+ 28 - 1
teacher/src/main/java/com/cooleshow/teacher/presenter/live/CreateLivePresenter.java

@@ -1,16 +1,22 @@
 package com.cooleshow.teacher.presenter.live;
 
+import android.app.Activity;
+
+import com.cooleshow.base.constanst.UploadConstants;
 import com.cooleshow.base.data.net.ApiException;
 import com.cooleshow.base.presenter.BasePresenter;
 import com.cooleshow.base.rx.BaseObserver;
 import com.cooleshow.base.utils.ErrorParse;
 import com.cooleshow.base.utils.RequestBodyUtil;
+import com.cooleshow.base.utils.helper.upload.UploadHelper;
 import com.cooleshow.teacher.api.APIService;
 import com.cooleshow.teacher.contract.CreateLiveContract;
 
 import org.json.JSONException;
 import org.json.JSONObject;
 
+import java.io.File;
+
 /**
  * 创建日期:2022/5/20 15:01
  *
@@ -27,13 +33,14 @@ public class CreateLivePresenter extends BasePresenter<CreateLiveContract.Create
      * @param roomTitle
      */
     @Override
-    public void createTempLive(String liveRemark, String roomTitle,String liveDuration) {
+    public void createTempLive(String liveRemark, String roomTitle,String coverUrl,String liveDuration) {
         getView().showLoading();
         JSONObject jsonObject = new JSONObject();
         try {
             jsonObject.putOpt("liveRemark", liveRemark);
             jsonObject.putOpt("roomTitle", roomTitle);
             jsonObject.putOpt("liveTime", liveDuration);
+            jsonObject.putOpt("coverPic", coverUrl);
         } catch (JSONException e) {
             e.printStackTrace();
         }
@@ -56,4 +63,24 @@ public class CreateLivePresenter extends BasePresenter<CreateLiveContract.Create
             }
         });
     }
+
+    public void upLoadImage(Activity activity, String filePath) {
+        UploadHelper uploadHelper = new UploadHelper(activity, UploadConstants.UPLOAD_TYPE_OTHER);
+        uploadHelper.uploadFile(new File(filePath));
+        uploadHelper.setUpLoadCallBack(new UploadHelper.UpLoadCallBack() {
+            @Override
+            public void onSuccess(String url) {
+                if (getView() != null) {
+                    getView().upLoadImageSuccess(url);
+                }
+            }
+
+            @Override
+            public void onFailure() {
+                if (getView() != null) {
+                    getView().upLoadImageFailure();
+                }
+            }
+        });
+    }
 }

+ 93 - 1
teacher/src/main/java/com/cooleshow/teacher/ui/live/CreateLiveActivity.java

@@ -1,5 +1,7 @@
 package com.cooleshow.teacher.ui.live;
 
+import android.Manifest;
+import android.content.Intent;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.view.View;
@@ -10,6 +12,8 @@ import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
 import com.bigkoo.pickerview.view.OptionsPickerView;
 import com.cooleshow.base.router.RouterPath;
 import com.cooleshow.base.ui.activity.BaseMVPActivity;
+import com.cooleshow.base.utils.GlideUtils;
+import com.cooleshow.base.utils.MyFileUtils;
 import com.cooleshow.base.utils.ToastUtil;
 import com.cooleshow.base.utils.ToastUtils;
 import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
@@ -17,6 +21,12 @@ import com.cooleshow.teacher.R;
 import com.cooleshow.teacher.contract.CreateLiveContract;
 import com.cooleshow.teacher.databinding.ActivityCreateLiveBinding;
 import com.cooleshow.teacher.presenter.live.CreateLivePresenter;
+import com.daya.live_teaching.utils.GlideEngine;
+import com.luck.picture.lib.PictureSelector;
+import com.luck.picture.lib.config.PictureConfig;
+import com.luck.picture.lib.config.PictureMimeType;
+import com.luck.picture.lib.entity.LocalMedia;
+import com.tbruyelle.rxpermissions3.RxPermissions;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -36,6 +46,8 @@ public class CreateLiveActivity extends BaseMVPActivity<ActivityCreateLiveBindin
     private OptionsPickerView pvOptions;
     private List<String> mTimes;
     private String currentLimitTime = LIVE_TIMES_LIMIT[0];
+    public final int REQUEST_CODE_LOCAL = 0x19;
+    private String coverUrl;
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -48,6 +60,7 @@ public class CreateLiveActivity extends BaseMVPActivity<ActivityCreateLiveBindin
         initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "创建直播");
         viewBinding.tvConfirm.setOnClickListener(this);
         viewBinding.csLiveDuration.setOnClickListener(this);
+        viewBinding.flUploadCover.setOnClickListener(this);
     }
 
     @Override
@@ -81,16 +94,53 @@ public class CreateLiveActivity extends BaseMVPActivity<ActivityCreateLiveBindin
                 ToastUtil.getInstance().showShort("请输入直播间内容");
                 return;
             }
-            presenter.createTempLive(liveContent, liveTitle,currentLimitTime);
+            if (TextUtils.isEmpty(coverUrl)) {
+                ToastUtil.getInstance().showShort("请上传直播封面");
+                return;
+            }
+            presenter.createTempLive(liveContent, liveTitle, coverUrl, currentLimitTime);
             return;
         }
 
+        if (view.getId() == R.id.fl_upload_cover) {
+            //上传封面
+            toAlbum();
+        }
+
         if (view.getId() == R.id.cs_live_duration) {
             showTimeSelect();
             return;
         }
     }
 
+    private void toAlbum() {
+        new RxPermissions(this)
+                .request(Manifest.permission.CAMERA,
+                        Manifest.permission.READ_EXTERNAL_STORAGE,
+                        Manifest.permission.WRITE_EXTERNAL_STORAGE)
+                .subscribe(granted -> {
+                    if (granted) {
+                        goAlbum();
+                    } else {
+                        ToastUtil.getInstance().show(this, "请选择存储和相机权限!");
+                    }
+                });
+    }
+
+    private void goAlbum() {
+        PictureSelector.create(this)
+                .openGallery(PictureMimeType.ofImage())//全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()、音频.ofAudio()
+                .loadImageEngine(GlideEngine.createGlideEngine())
+                .theme(com.cooleshow.base.R.style.picture_daya_style)// 主题样式设置 具体参考 values/styles   用法:R .style.picture.white.style
+                .selectionMode(PictureConfig.SINGLE)// 多选 or 单选 PictureConfig.MULTIPLE or PictureConfig.SINGLE
+                .enableCrop(true)// 是否裁剪 true or false
+                .cutOutQuality(100)
+                .showCropGrid(false)// 是否显示裁剪矩形网格 圆形裁剪时建议设为false    true or false
+                .compress(true)// 是否压缩 true or false
+                .circleDimmedLayer(false)// 是否圆形裁剪 true or false
+                .forResult(REQUEST_CODE_LOCAL);
+    }
+
 
     private void showTimeSelect() {
         if (pvOptions == null) {
@@ -126,4 +176,46 @@ public class CreateLiveActivity extends BaseMVPActivity<ActivityCreateLiveBindin
         TeacherLiveRoomActivity.start(this, roomId);
         finish();
     }
+
+    @Override
+    public void upLoadImageSuccess(String fileUrl) {
+        if (isDestroyed() || isFinishing()) {
+            return;
+        }
+        this.coverUrl = fileUrl;
+        GlideUtils.INSTANCE.loadImage(this, fileUrl, viewBinding.ivCover, com.cooleshow.base.R.drawable.bg_video_placeholder);
+
+    }
+
+    @Override
+    public void upLoadImageFailure() {
+        ToastUtil.getInstance().showShort("封面上传失败,请重新选择");
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        if (resultCode == RESULT_OK) {
+            if (requestCode == REQUEST_CODE_LOCAL) {
+                //上传封面
+                if (data != null) {
+                    // 图片、视频、音频选择结果回调
+                    List<LocalMedia> selectList = PictureSelector.obtainMultipleResult(data);
+                    String v_path = null;
+                    if (selectList != null && selectList.size() > 0) {
+                        v_path = selectList.get(0).getCompressPath();
+                    }
+                    if (!TextUtils.isEmpty(v_path)) {
+//                        String v_path = FileUtils.getFilePathForN(avatar, PersonalSettingActivity.this);
+                        boolean isImg = MyFileUtils.isImg(v_path);
+                        if (isImg) {
+                            presenter.upLoadImage(CreateLiveActivity.this, v_path);
+                        } else {
+                            ToastUtil.getInstance().showShort("请选择图片类型文件");
+                        }
+                    }
+                }
+            }
+        }
+    }
 }

+ 0 - 44
teacher/src/main/java/com/cooleshow/teacher/ui/mine/CreateLiveActivity.java

@@ -1,44 +0,0 @@
-package com.cooleshow.teacher.ui.mine;
-
-import android.view.View;
-
-import com.alibaba.android.arouter.facade.annotation.Route;
-import com.cooleshow.base.router.RouterPath;
-import com.cooleshow.base.ui.activity.BaseMVPActivity;
-import com.cooleshow.teacher.contract.CreateLiveContract;
-import com.cooleshow.teacher.databinding.ActivityCreateLiveBinding;
-import com.cooleshow.teacher.presenter.live.CreateLivePresenter;
-
-/**
- * 创建日期:2022/5/20 14:45
- *
- * @author Ryan
- * 类说明:
- */
-@Route(path = RouterPath.LiveCenter.TEACHER_MINE_CREATE_COURSE)
-public class CreateLiveActivity extends BaseMVPActivity<ActivityCreateLiveBinding, CreateLivePresenter> implements CreateLiveContract.CreateLiveView, View.OnClickListener {
-    @Override
-    public void onClick(View view) {
-
-    }
-
-    @Override
-    protected void initView() {
-        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "创建直播");
-    }
-
-    @Override
-    protected ActivityCreateLiveBinding getLayoutView() {
-        return ActivityCreateLiveBinding.inflate(getLayoutInflater());
-    }
-
-    @Override
-    protected CreateLivePresenter createPresenter() {
-        return new CreateLivePresenter();
-    }
-
-    @Override
-    public void onCreateLiveSuccess(String roomId) {
-
-    }
-}

BIN
teacher/src/main/res/drawable-xhdpi/icon_upload_cover_tip.png


BIN
teacher/src/main/res/drawable-xxhdpi/icon_upload_cover_tip.png


+ 15 - 0
teacher/src/main/res/drawable/bg_dash_border_e3e3e3_radius.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="@color/color_f7f8f9" />
+
+    <corners
+        android:radius="10dp" />
+
+    <stroke
+        android:width="1dp"
+        android:color="@color/color_e3e3e3"
+        android:dashWidth="5dp"
+        android:dashGap="2dp" />
+
+</shape>

+ 78 - 0
teacher/src/main/res/layout/activity_create_live.xml

@@ -179,6 +179,84 @@
     </androidx.constraintlayout.widget.ConstraintLayout>
 
 
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cs_live_cover"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/cs_live_duration"
+        android:layout_marginStart="14dp"
+        android:layout_marginTop="15dp"
+        android:layout_marginEnd="14dp"
+        android:background="@drawable/bg_white_10dp"
+        android:paddingBottom="16dp">
+
+
+        <TextView
+            android:id="@+id/tv_star_title4"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="21dp"
+            android:layout_marginTop="20dp"
+            android:text="*"
+            android:textColor="@color/color_ff4e19"
+            android:textSize="@dimen/sp_17"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="直播封面"
+            android:textColor="@color/black"
+            android:textSize="@dimen/sp_17"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="@+id/tv_star_title4"
+            app:layout_constraintLeft_toRightOf="@+id/tv_star_title4"
+            app:layout_constraintTop_toTopOf="@+id/tv_star_title4" />
+
+        <androidx.constraintlayout.widget.Guideline
+            android:id="@+id/guide_center"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            app:layout_constraintGuide_percent="0.5" />
+
+        <FrameLayout
+            android:id="@+id/fl_upload_cover"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_marginStart="14dp"
+            android:layout_marginTop="10dp"
+            app:layout_constraintDimensionRatio="16:9"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toLeftOf="@+id/guide_center"
+            app:layout_constraintTop_toBottomOf="@+id/tv_star_title4">
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:background="@drawable/bg_dash_border_e3e3e3_radius" />
+
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center"
+                android:drawableTop="@drawable/icon_upload_cover_tip"
+                android:drawablePadding="14dp"
+                android:includeFontPadding="false"
+                android:text="请上传直播封面"
+                android:textColor="@color/color_999999"
+                android:textSize="@dimen/sp_14" />
+
+            <com.cooleshow.base.widgets.QMUIRadiusImageView
+                android:id="@+id/iv_cover"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                app:qmui_corner_radius="10dp" />
+        </FrameLayout>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
     <TextView
         android:id="@+id/tv_confirm"
         android:layout_width="match_parent"