Explorar o código

网络教室添加课件播放逻辑

Pq %!s(int64=2) %!d(string=hai) anos
pai
achega
ea16382b3e
Modificáronse 19 ficheiros con 316 adicións e 13 borrados
  1. 4 0
      BaseLibrary/src/main/java/com/cooleshow/base/utils/GlideUtils.kt
  2. 28 5
      live_teaching/src/main/java/com/daya/live_teaching/ui/LiveActivity.java
  3. 11 0
      live_teaching/src/main/java/com/daya/live_teaching/ui/fragmnet/WhiteBoardFragment.java
  4. 3 3
      live_teaching/src/main/java/com/daya/live_teaching/widget/CourseWarePlayView.java
  5. 3 0
      live_teaching/src/main/java/com/daya/live_teaching/widget/dialog/CourseWareSelectDialog.java
  6. 109 0
      live_teaching/src/main/java/com/daya/live_teaching/widget/dialog/CoursewarePreviewDialog.java
  7. BIN=BIN
      live_teaching/src/main/res/drawable-xhdpi/icon_courseware_score.png
  8. BIN=BIN
      live_teaching/src/main/res/drawable-xhdpi/icon_pause_course_ware.png
  9. BIN=BIN
      live_teaching/src/main/res/drawable-xxhdpi/icon_courseware_score.png
  10. BIN=BIN
      live_teaching/src/main/res/drawable-xxhdpi/icon_pause_course_ware.png
  11. 7 0
      live_teaching/src/main/res/drawable/shape_white_18dp_bottom.xml
  12. 73 0
      live_teaching/src/main/res/layout/dialog_courseware_preview_layout.xml
  13. 3 4
      live_teaching/src/main/res/layout/fragment_white_board.xml
  14. 10 0
      live_teaching/src/main/res/layout/item_courseware_preview_layout.xml
  15. 1 1
      live_teaching/src/main/res/layout/view_course_ware_play_layout.xml
  16. 17 0
      teacher/src/main/java/com/cooleshow/teacher/contract/CoursewareContract.java
  17. 15 0
      teacher/src/main/java/com/cooleshow/teacher/presenter/mine/CoursewareListPresenter.java
  18. 26 0
      teacher/src/main/java/com/cooleshow/teacher/ui/mine/CoursewareListActivity.java
  19. 6 0
      teacher/src/main/res/layout/activity_courseware_list_layout.xml

+ 4 - 0
BaseLibrary/src/main/java/com/cooleshow/base/utils/GlideUtils.kt

@@ -16,6 +16,10 @@ import jp.wasabeef.glide.transformations.BlurTransformation
  */
 object GlideUtils {
     fun loadImage(context: Context, url: String?, imageView: ImageView) {
+        Glide.with(context).load(url).into(imageView)
+    }
+
+    fun loadImageCenterCrop(context: Context, url: String?, imageView: ImageView) {
         Glide.with(context).load(url).centerCrop().into(imageView)
     }
 

+ 28 - 5
live_teaching/src/main/java/com/daya/live_teaching/ui/LiveActivity.java

@@ -75,6 +75,7 @@ import com.daya.live_teaching.utils.RTCAudioManager;
 import com.daya.live_teaching.utils.ToastUtils;
 import com.daya.live_teaching.viewmodel.ClassViewModel;
 import com.daya.live_teaching.widget.dialog.CourseWareSelectDialog;
+import com.daya.live_teaching.widget.dialog.CoursewarePreviewDialog;
 import com.daya.live_teaching.widget.dialog.LiveCommonDialog;
 
 import java.util.ArrayList;
@@ -441,7 +442,7 @@ public class LiveActivity extends BaseActivity<ActivityLiveBinding> {
 
                     @Override
                     public void onShowCoursewareSelectDialog() {
-                        showCourseWareDialog();
+                        showCourseWareDialog(true);
                     }
                 });
                 if (userInfo.getRole() == Role.LECTURER) {
@@ -694,7 +695,7 @@ public class LiveActivity extends BaseActivity<ActivityLiveBinding> {
 
                 @Override
                 public void showCourseWareDialog() {
-                    LiveActivity.this.showCourseWareDialog();
+                    LiveActivity.this.showCourseWareDialog(false);
                 }
             });
             transaction.add(R.id.teaching_tools_fragment, teachingToolsFragment, "teachingToolsFragment");
@@ -710,7 +711,7 @@ public class LiveActivity extends BaseActivity<ActivityLiveBinding> {
     }
 
 
-    private void showCourseWareDialog() {
+    private void showCourseWareDialog(boolean isPreview) {
         if (mCourseWareSelectDialog == null) {
             mCourseWareSelectDialog = new CourseWareSelectDialog(this);
             mCourseWareSelectDialog.setOnEventListener(new CourseWareSelectDialog.OnEventListener() {
@@ -722,18 +723,40 @@ public class LiveActivity extends BaseActivity<ActivityLiveBinding> {
                 @Override
                 public void onPlayCourseware(String coursewareName, String coursewareUrl) {
                     if (!TextUtils.isEmpty(coursewareUrl)) {
-                        startMix(coursewareName,coursewareUrl);
+                        startMix(coursewareName, coursewareUrl);
                     }
                 }
+
+                @Override
+                public void showCoursewarePreviewDialog(CoursewareListBean.RowsBean rowsBean) {
+                    showCoursePreviewDialog(rowsBean);
+                }
             });
         }
         if (!mCourseWareSelectDialog.isShowing()) {
             mCourseWareSelectDialog.show();
             mCourseWareSelectDialog.refresh();
+            mCourseWareSelectDialog.setShowImagePreview(isPreview);
         }
     }
 
-    private void startMix(String coursewareName,String fileUrl) {
+    private void showCoursePreviewDialog(CoursewareListBean.RowsBean coursewareData) {
+        CoursewarePreviewDialog coursewarePreviewDialog = new CoursewarePreviewDialog(this);
+        coursewarePreviewDialog.setOnEventListener(new CoursewarePreviewDialog.OnEventListener() {
+            @Override
+            public void onSelectCourse(String courseUrl, String courseImageUrl) {
+                WhiteBoardFragment whiteBoardFragment = (WhiteBoardFragment) getSupportFragmentManager().findFragmentByTag("whiteBoardFragment");
+                if (null != whiteBoardFragment) {
+                    whiteBoardFragment.insertImag(courseImageUrl);
+                    coursewarePreviewDialog.dismiss();
+                }
+            }
+        });
+        coursewarePreviewDialog.show();
+        coursewarePreviewDialog.setCoursewareData(coursewareData);
+    }
+
+    private void startMix(String coursewareName, String fileUrl) {
         viewBinding.viewCourseware.setVisibility(View.VISIBLE);
         viewBinding.viewCourseware.setName(coursewareName);
         viewBinding.viewCourseware.start(fileUrl);

+ 11 - 0
live_teaching/src/main/java/com/daya/live_teaching/ui/fragmnet/WhiteBoardFragment.java

@@ -362,6 +362,14 @@ public class WhiteBoardFragment extends BaseFragment<FragmentWhiteBoardBinding>
         });
     }
 
+    public void insertImag(String imgUrl) {
+        if (room != null) {
+            LogUtils.i("WhiteBoardFragment","imgUrl:"+imgUrl);
+            ImageInformationWithUrl imageUrl = new ImageInformationWithUrl(0d, 0d, 200d, 200d, imgUrl);
+            room.insertImage(imageUrl);
+        }
+    }
+
     private void updateWhiteBoardList() {
         room.getScenes(new Promise<Scene[]>() {
             @Override
@@ -441,6 +449,9 @@ public class WhiteBoardFragment extends BaseFragment<FragmentWhiteBoardBinding>
 //            startActivityForResult(intent, QU_LIBRAY_REQUEST_CODE);
         } else if (id == R.id.btn_courseware) {
             //课件
+            if (listener != null) {
+                listener.onShowCoursewareSelectDialog();
+            }
         }
 
     }

+ 3 - 3
live_teaching/src/main/java/com/daya/live_teaching/widget/CourseWarePlayView.java

@@ -121,8 +121,6 @@ public class CourseWarePlayView extends FrameLayout implements View.OnClickListe
      */
     public void setPlayProgress(float progress) {
         Log.i("pq", "progress:" + progress);
-        int currentProgress = (int) (MAX_SEEKBAR_PROGRESS * progress);
-        Log.i("pq", "currentProgress:" + currentProgress);
         if (coursewareTotalTime != 0) {
             int currentMills = (int) (coursewareTotalTime * progress);
             String s = DateUtil.dateFormatmm_ss(currentMills);
@@ -131,6 +129,8 @@ public class CourseWarePlayView extends FrameLayout implements View.OnClickListe
             mTvProgress.setText(R.string.default_time_str);
         }
         if (mSeekbar != null) {
+            int currentProgress = (int) (MAX_SEEKBAR_PROGRESS * progress);
+            Log.i("pq", "seekbar currentProgress:" + currentProgress);
             mSeekbar.setProgress(currentProgress);
         }
     }
@@ -161,7 +161,7 @@ public class CourseWarePlayView extends FrameLayout implements View.OnClickListe
             mIvStatusIcon.setVisibility(View.VISIBLE);
             mIvStatusIcon.setImageResource(R.drawable.icon_stop_play_course_ware);
             mTvStatusText.setText("正在播放");
-            mIvPlay.setImageResource(R.drawable.icon_play_course_ware);
+            mIvPlay.setImageResource(R.drawable.icon_pause_course_ware);
             return;
         }
 

+ 3 - 0
live_teaching/src/main/java/com/daya/live_teaching/widget/dialog/CourseWareSelectDialog.java

@@ -161,6 +161,7 @@ public class CourseWareSelectDialog extends Dialog implements View.OnClickListen
                 if (selectCourseware != null) {
                     if (isShowImagePreview) {
                         //显示图片预览
+                        onEventListener.showCoursewarePreviewDialog(selectCourseware);
                     } else {
                         onEventListener.onPlayCourseware(selectCourseware.musicSheetName, getMp3Url(selectCourseware.mp3url));
                         dismiss();
@@ -184,6 +185,8 @@ public class CourseWareSelectDialog extends Dialog implements View.OnClickListen
         void onGetCoursewareData(String searchStr, int page);
 
         void onPlayCourseware(String coursewareName, String coursewareUrl);
+
+        void showCoursewarePreviewDialog(CoursewareListBean.RowsBean rowsBean);
     }
 
     /**

+ 109 - 0
live_teaching/src/main/java/com/daya/live_teaching/widget/dialog/CoursewarePreviewDialog.java

@@ -0,0 +1,109 @@
+package com.daya.live_teaching.widget.dialog;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.viewholder.BaseViewHolder;
+import com.cooleshow.base.utils.GlideUtils;
+import com.cooleshow.base.utils.SizeUtils;
+import com.daya.live_teaching.R;
+import com.daya.live_teaching.model.CoursewareListBean;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.viewpager2.widget.ViewPager2;
+
+/**
+ * Author by pq, Date on 2022/11/17.
+ */
+public class CoursewarePreviewDialog extends Dialog implements View.OnClickListener {
+
+    private BaseQuickAdapter<String, BaseViewHolder> mAdapter;
+    private TextView mTvConfirm;
+    private ViewPager2 mViewpager;
+    private CoursewareListBean.RowsBean selectData;
+
+    public CoursewarePreviewDialog(@NonNull Context context) {
+        super(context, com.cooleshow.base.R.style.DialogStyle);
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.dialog_courseware_preview_layout);
+        mViewpager = findViewById(R.id.viewpager);
+        mTvConfirm = findViewById(R.id.tv_confirm);
+        mTvConfirm.setOnClickListener(this);
+        mAdapter = new BaseQuickAdapter<String, BaseViewHolder>(R.layout.item_courseware_preview_layout) {
+            @Override
+            protected void convert(@NonNull BaseViewHolder holder, String imgPath) {
+                FrameLayout fl_container = holder.getView(R.id.fl_container);
+                ImageView image = createImage(imgPath);
+                fl_container.addView(image, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
+                GlideUtils.INSTANCE.loadImage(getContext(), imgPath, image);
+            }
+        };
+        mViewpager.setAdapter(mAdapter);
+    }
+
+    public void setCoursewareData(CoursewareListBean.RowsBean coursewareData) {
+        if (coursewareData != null) {
+            this.selectData = coursewareData;
+            if (!TextUtils.isEmpty(coursewareData.musicImg)) {
+                Log.i("CoursewarePreviewDialog", "musicImg:" + coursewareData.musicImg);
+                String[] split = coursewareData.musicImg.split(",");
+                List<String> strings = Arrays.asList(split);
+                mAdapter.setNewInstance(strings);
+            }
+        }
+    }
+
+    private ImageView createImage(String imgPath) {
+        ImageView imageView = new ImageView(getContext());
+        imageView.setAdjustViewBounds(true);
+        return imageView;
+    }
+
+    @Override
+    public void onClick(View v) {
+        int id = v.getId();
+        if (id == R.id.tv_confirm) {
+            if (mViewpager != null && selectData != null) {
+                int currentItem = mViewpager.getCurrentItem();
+                if (currentItem < mAdapter.getData().size()) {
+                    String s = mAdapter.getData().get(currentItem);
+                    if (mEventListener != null) {
+                        mEventListener.onSelectCourse(selectData.mp3url, s);
+                    }
+                }
+            }
+            return;
+        }
+    }
+
+    private OnEventListener mEventListener;
+
+    public void setOnEventListener(OnEventListener mEventListener) {
+        this.mEventListener = mEventListener;
+    }
+
+    public interface OnEventListener {
+        void onSelectCourse(String courseUrl, String courseImageUrl);
+    }
+}

BIN=BIN
live_teaching/src/main/res/drawable-xhdpi/icon_courseware_score.png


BIN=BIN
live_teaching/src/main/res/drawable-xhdpi/icon_pause_course_ware.png


BIN=BIN
live_teaching/src/main/res/drawable-xxhdpi/icon_courseware_score.png


BIN=BIN
live_teaching/src/main/res/drawable-xxhdpi/icon_pause_course_ware.png


+ 7 - 0
live_teaching/src/main/res/drawable/shape_white_18dp_bottom.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <corners android:bottomRightRadius="18dp"
+        android:bottomLeftRadius="18dp"
+       />
+    <solid android:color="@color/white"/>
+</shape>

+ 73 - 0
live_teaching/src/main/res/layout/dialog_courseware_preview_layout.xml

@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="375dp"
+    android:layout_height="wrap_content"
+    android:minHeight="278dp">
+
+    <View
+        android:id="@+id/view_top_bg"
+        android:layout_width="match_parent"
+        android:layout_height="47dp"
+        android:background="@drawable/shape_514f5f_top_10dp"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <TextView
+        android:id="@+id/tv_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:includeFontPadding="false"
+        android:paddingStart="12dp"
+        android:text="课件预览"
+        android:textColor="@color/white"
+        android:textSize="@dimen/sp_16"
+        app:layout_constraintBottom_toBottomOf="@+id/view_top_bg"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="@+id/view_top_bg" />
+
+    <ImageView
+        android:id="@+id/iv_close"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:paddingEnd="18dp"
+        android:src="@drawable/icon_dialog_close_white"
+        app:layout_constraintBottom_toBottomOf="@+id/tv_title"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="@+id/tv_title" />
+
+
+    <View
+        android:id="@+id/view_bottom_bg"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:background="@drawable/shape_white_18dp_bottom"
+        android:minHeight="200dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/view_top_bg" />
+
+    <androidx.viewpager2.widget.ViewPager2
+        android:id="@+id/viewpager"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        app:layout_constraintBottom_toBottomOf="@+id/view_bottom_bg"
+        app:layout_constraintTop_toTopOf="@+id/view_bottom_bg" />
+
+
+    <TextView
+        android:layout_marginBottom="10dp"
+        android:id="@+id/tv_confirm"
+        android:layout_width="200dp"
+        android:layout_height="34dp"
+        android:layout_marginStart="6dp"
+        android:layout_marginEnd="12dp"
+        android:background="@drawable/shape_656376_4dp"
+        android:gravity="center"
+        android:text="@string/common_confirm"
+        android:textColor="@color/white"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 3 - 4
live_teaching/src/main/res/layout/fragment_white_board.xml

@@ -101,13 +101,12 @@
                     android:paddingEnd="0dp"
                     android:visibility="gone" />
 
-                <Button
+                <ImageView
+                    android:gravity="center"
                     android:id="@+id/btn_courseware"
                     style="@style/ToolButton"
                     android:layout_height="match_parent"
-                    android:drawableStart="@drawable/ic_insert_practice"
-                    android:paddingStart="13dp"
-                    android:paddingEnd="0dp"
+                    android:src="@drawable/icon_courseware_score"
                     android:visibility="visible" />
             </LinearLayout>
 

+ 10 - 0
live_teaching/src/main/res/layout/item_courseware_preview_layout.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <FrameLayout
+        android:id="@+id/fl_container"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content" />
+</ScrollView>

+ 1 - 1
live_teaching/src/main/res/layout/view_course_ware_play_layout.xml

@@ -128,5 +128,5 @@
         android:layout_height="wrap_content"
         android:visibility="gone"
         tools:visibility="visible"
-        app:constraint_referenced_ids="tv_progress,tv_volume_text,iv_volume,seekbar,iv_play" />
+        app:constraint_referenced_ids="tv_progress,tv_total_progress,tv_volume_text,iv_volume,seekbar,iv_play" />
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 17 - 0
teacher/src/main/java/com/cooleshow/teacher/contract/CoursewareContract.java

@@ -0,0 +1,17 @@
+package com.cooleshow.teacher.contract;
+
+import com.cooleshow.base.presenter.view.BaseView;
+
+/**
+ * 创建日期:2022/5/18 14:11
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public interface CoursewareContract {
+    interface CoursewareView extends BaseView {
+
+    }
+    interface Presenter {
+    }
+}

+ 15 - 0
teacher/src/main/java/com/cooleshow/teacher/presenter/mine/CoursewareListPresenter.java

@@ -0,0 +1,15 @@
+package com.cooleshow.teacher.presenter.mine;
+
+import com.cooleshow.base.presenter.BasePresenter;
+import com.cooleshow.teacher.contract.AboutContract;
+import com.cooleshow.teacher.contract.CoursewareContract;
+
+/**
+ * 创建日期:2022/5/18 14:08
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class CoursewareListPresenter extends BasePresenter<CoursewareContract.CoursewareView> implements CoursewareContract.Presenter {
+
+}

+ 26 - 0
teacher/src/main/java/com/cooleshow/teacher/ui/mine/CoursewareListActivity.java

@@ -0,0 +1,26 @@
+package com.cooleshow.teacher.ui.mine;
+
+import com.cooleshow.base.ui.activity.BaseMVPActivity;
+import com.cooleshow.teacher.databinding.ActivityCoursewareListLayoutBinding;
+import com.cooleshow.teacher.presenter.mine.CoursewareListPresenter;
+
+/**
+ * Author by pq, Date on 2022/11/18.
+ */
+public class CoursewareListActivity extends BaseMVPActivity<ActivityCoursewareListLayoutBinding, CoursewareListPresenter> {
+
+    @Override
+    protected void initView() {
+
+    }
+
+    @Override
+    protected ActivityCoursewareListLayoutBinding getLayoutView() {
+        return ActivityCoursewareListLayoutBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected CoursewareListPresenter createPresenter() {
+        return new CoursewareListPresenter();
+    }
+}

+ 6 - 0
teacher/src/main/res/layout/activity_courseware_list_layout.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+</androidx.constraintlayout.widget.ConstraintLayout>