Переглянути джерело

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

Pq 2 роки тому
батько
коміт
b8e193a546

+ 4 - 8
live_teaching/src/main/java/com/daya/live_teaching/rtc/RtcAudioMixerControl.java

@@ -10,7 +10,7 @@ import cn.rongcloud.rtc.api.callback.RCRTCAudioMixingStateChangeListener;
  */
 public class RtcAudioMixerControl extends RCRTCAudioMixingStateChangeListener {
     private OnEventListener mEventListener;
-    private String currentUrl ="";
+    private String currentUrl = "";
 
     public RtcAudioMixerControl(OnEventListener onEventListener) {
         mEventListener = onEventListener;
@@ -24,7 +24,7 @@ public class RtcAudioMixerControl extends RCRTCAudioMixingStateChangeListener {
      */
     public void startMix(String fileUrl) {
         Log.i("pq", "fileUrl:" + fileUrl);
-        this.currentUrl=fileUrl;
+        this.currentUrl = fileUrl;
         RCRTCAudioMixer.getInstance().startMix(fileUrl, RCRTCAudioMixer.Mode.MIX, true, -1);
     }
 
@@ -123,8 +123,8 @@ public class RtcAudioMixerControl extends RCRTCAudioMixingStateChangeListener {
 
     @Override
     public void onStateChanged(RCRTCAudioMixer.MixingState state, RCRTCAudioMixer.MixingStateReason reason) {
-        Log.i("pq", "state:" + state);
-        Log.i("pq", "reason:" + reason);
+//        Log.i("pq", "state:" + state);
+//        Log.i("pq", "reason:" + reason);
         if (state == RCRTCAudioMixer.MixingState.STOPPED) {
             // 混音完成,可能的原因有:
             if (reason == RCRTCAudioMixer.MixingStateReason.ALL_LOOPS_COMPLETED) {
@@ -142,7 +142,6 @@ public class RtcAudioMixerControl extends RCRTCAudioMixingStateChangeListener {
             if (reason == RCRTCAudioMixer.MixingStateReason.STARTED_BY_USER) {
                 // 调用了 startMix 方法开始混音
                 if (mEventListener != null) {
-//                    int durationMillis = getDurationMillis();
                     mEventListener.onStartPlay();
                 }
             } else if (reason == RCRTCAudioMixer.MixingStateReason.START_NEW_LOOP) {
@@ -175,9 +174,6 @@ public class RtcAudioMixerControl extends RCRTCAudioMixingStateChangeListener {
         if (mEventListener != null) {
             mEventListener.onProgress(progress);
         }
-//        Log.i("pq", "onReportPlayingProgress:" + progress);
-//        int durationMillis = getDurationMillis();
-//        Log.i("pq", "durationMillis:" + durationMillis);
     }
 
     public interface OnEventListener {

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

@@ -438,6 +438,11 @@ public class LiveActivity extends BaseActivity<ActivityLiveBinding> {
                             adapter.setWhiteBoardList(reverseList);
                         }
                     }
+
+                    @Override
+                    public void onShowCoursewareSelectDialog() {
+                        showCourseWareDialog();
+                    }
                 });
                 if (userInfo.getRole() == Role.LECTURER) {
                     ivWhiteBoardSwitch.setVisibility(View.VISIBLE);

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

@@ -139,6 +139,7 @@ public class WhiteBoardFragment extends BaseFragment<FragmentWhiteBoardBinding>
         llToolButton = mViewBinding.llToolButton;
         mWebView = mViewBinding.classWhiteboardDisplay;
         classShareRootView = mViewBinding.classShareRootView;
+        mViewBinding.btnCourseware.setOnClickListener(this);
 
         llToolButton.setVisibility(View.GONE);
 
@@ -438,6 +439,8 @@ public class WhiteBoardFragment extends BaseFragment<FragmentWhiteBoardBinding>
 //            Intent intent = new Intent(getActivity(), postcard.getDestination());
 //            intent.putExtras(postcard.getExtras());
 //            startActivityForResult(intent, QU_LIBRAY_REQUEST_CODE);
+        } else if (id == R.id.btn_courseware) {
+            //课件
         }
 
     }
@@ -740,5 +743,9 @@ public class WhiteBoardFragment extends BaseFragment<FragmentWhiteBoardBinding>
          */
         void onWhiteBoardList(List<WhiteBoard> reverseList);
 
+        /**
+         * 显示课件选择列表
+         */
+        void onShowCoursewareSelectDialog();
     }
 }

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

@@ -14,6 +14,7 @@ import android.widget.ImageView;
 import android.widget.TextView;
 
 import com.cooleshow.base.utils.DateUtil;
+import com.cooleshow.base.utils.ToastUtil;
 import com.daya.live_teaching.R;
 import com.daya.live_teaching.rtc.RtcAudioMixerControl;
 
@@ -64,6 +65,7 @@ public class CourseWarePlayView extends FrameLayout implements View.OnClickListe
             }
         }
     };
+    private TextView mTvTotalProgress;
 
 
     public CourseWarePlayView(@NonNull Context context) {
@@ -88,6 +90,7 @@ public class CourseWarePlayView extends FrameLayout implements View.OnClickListe
         mTvProgress = findViewById(R.id.tv_progress);
         mTvStatusText = findViewById(R.id.tv_status_text);
         mIvStatusIcon = findViewById(R.id.iv_status_icon);
+        mTvTotalProgress = findViewById(R.id.tv_total_progress);
         mIvPlay.setOnClickListener(this);
         mIvStatusIcon.setOnClickListener(this);
     }
@@ -99,10 +102,15 @@ public class CourseWarePlayView extends FrameLayout implements View.OnClickListe
     }
 
     public void setTotalProgress(int totalTime) {
-        this.coursewareTotalTime = totalTime;
-        Log.i("pq", "total Time:" + coursewareTotalTime);
-        String s = DateUtil.dateFormatmm_ss(totalTime);
-        mTvProgress.setText("00:00/" + s);
+        try {
+            this.coursewareTotalTime = totalTime;
+            Log.i("pq", "total Time:" + coursewareTotalTime);
+            String s = DateUtil.dateFormatmm_ss(totalTime);
+            mTvTotalProgress.setText(String.format("/%s", s));
+        } catch (Exception e) {
+            e.printStackTrace();
+            mTvTotalProgress.setText(String.format("/%s", getContext().getString(R.string.default_time_str)));
+        }
     }
 
     /**
@@ -115,6 +123,13 @@ public class CourseWarePlayView extends FrameLayout implements View.OnClickListe
         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);
+            mTvProgress.setText(s);
+        } else {
+            mTvProgress.setText(R.string.default_time_str);
+        }
         if (mSeekbar != null) {
             mSeekbar.setProgress(currentProgress);
         }
@@ -140,6 +155,8 @@ public class CourseWarePlayView extends FrameLayout implements View.OnClickListe
 
         if (playStatus == PLAY_STATUS_PLAYING) {
             //播放中
+            int durationMillis = getAudioMixerManager().getDurationMillis();
+            setTotalProgress(durationMillis);
             mGroupPlayInfo.setVisibility(View.VISIBLE);
             mIvStatusIcon.setVisibility(View.VISIBLE);
             mIvStatusIcon.setImageResource(R.drawable.icon_stop_play_course_ware);

+ 12 - 2
live_teaching/src/main/java/com/daya/live_teaching/widget/dialog/CourseWareSelectDialog.java

@@ -35,6 +35,8 @@ public class CourseWareSelectDialog extends Dialog implements View.OnClickListen
     private TextView mTvSearch;
     private EditText mEdSearchContent;
 
+    private boolean isShowImagePreview = false;//是否需要预览图片
+
     public CourseWareSelectDialog(@NonNull Context context) {
         super(context, com.cooleshow.base.R.style.DialogStyle);
     }
@@ -157,8 +159,12 @@ public class CourseWareSelectDialog extends Dialog implements View.OnClickListen
             if (onEventListener != null) {
                 CoursewareListBean.RowsBean selectCourseware = mCoursewareAdapter.getSelectCourseware();
                 if (selectCourseware != null) {
-                    onEventListener.onPlayCourseware(selectCourseware.musicSheetName, getMp3Url(selectCourseware.mp3url));
-                    dismiss();
+                    if (isShowImagePreview) {
+                        //显示图片预览
+                    } else {
+                        onEventListener.onPlayCourseware(selectCourseware.musicSheetName, getMp3Url(selectCourseware.mp3url));
+                        dismiss();
+                    }
                 }
             }
             return;
@@ -170,6 +176,10 @@ public class CourseWareSelectDialog extends Dialog implements View.OnClickListen
         return result[0];
     }
 
+    public void setShowImagePreview(boolean showImagePreview) {
+        isShowImagePreview = showImagePreview;
+    }
+
     public interface OnEventListener {
         void onGetCoursewareData(String searchStr, int page);
 

+ 103 - 97
live_teaching/src/main/res/layout/fragment_white_board.xml

@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/class_share_root_view"
     android:layout_width="wrap_content"
@@ -13,101 +12,108 @@
         android:layout_height="match_parent"
         android:layout_marginStart="@dimen/dp_15">
 
-    <RelativeLayout
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-
-        <com.daya.live_teaching.widget.MyWhiteBoardView
-            android:id="@+id/class_whiteboard_display"
+        <RelativeLayout
             android:layout_width="match_parent"
-            android:background="@color/white"
-            android:layout_height="match_parent" />
-
-        <LinearLayout
-            android:id="@+id/ll_tool_button"
-            android:layout_width="wrap_content"
-            android:layout_height="40dp"
-            android:layout_alignParentBottom="true"
-            android:layout_centerHorizontal="true"
-            android:layout_marginBottom="@dimen/dp_20"
-            android:background="@drawable/toolbox_background"
-            android:paddingStart="5dp"
-            android:paddingEnd="5dp"
-            android:visibility="visible">
-
-            <Button
-                android:id="@+id/btnPencil"
-                style="@style/ToolButton"
-                android:layout_height="match_parent"
-                android:drawableStart="@drawable/ic_appliance_pencil"
-                android:paddingStart="11dp"
-                android:paddingEnd="0dp" />
-
-            <Button
-                android:id="@+id/btnEraser"
-                style="@style/ToolButton"
-                android:layout_height="match_parent"
-                android:drawableStart="@drawable/ic_appliance_eraser"
-                android:paddingStart="11dp"
-                android:paddingEnd="0dp" />
-
-            <Button
-                android:id="@+id/btnEllipse"
-                style="@style/ToolButton"
-                android:layout_height="match_parent"
-                android:drawableStart="@drawable/ic_appliance_ellipse"
-                android:paddingStart="11dp"
-                android:paddingEnd="0dp" />
-
-            <Button
-                android:id="@+id/btn_clean_scene"
-                style="@style/ToolButton"
-                android:layout_height="match_parent"
-                android:drawableStart="@drawable/ic_clean_scene"
-                android:paddingStart="11dp"
-                android:paddingEnd="0dp" />
-
-
-            <Button
-                android:id="@+id/btn_remove_scenes"
-                style="@style/ToolButton"
-                android:layout_height="match_parent"
-                android:drawableStart="@drawable/ic_remove_scenes"
-                android:paddingStart="11dp"
-                android:paddingEnd="0dp" />
-
-
-            <Button
-                android:id="@+id/btn_create_scenes"
-                style="@style/ToolButton"
-                android:layout_height="match_parent"
-                android:drawableStart="@drawable/ic_create_scenes"
-                android:paddingStart="13dp"
-                android:paddingEnd="0dp" />
+            android:layout_height="match_parent">
 
-            <Button
-                android:id="@+id/btn_insert_image"
-                style="@style/ToolButton"
-                android:layout_height="match_parent"
-                android:drawableStart="@drawable/ic_insert_image"
-                android:paddingStart="13dp"
-                android:paddingEnd="0dp" />
-
-            <Button
-                android:visibility="gone"
-                android:id="@+id/btn_insert_practice"
-                style="@style/ToolButton"
+            <com.daya.live_teaching.widget.MyWhiteBoardView
+                android:id="@+id/class_whiteboard_display"
+                android:layout_width="match_parent"
                 android:layout_height="match_parent"
-                android:drawableStart="@drawable/ic_insert_practice"
-                android:paddingStart="13dp"
-                android:paddingEnd="0dp" />
-
-        </LinearLayout>
-
-
-
-    </RelativeLayout>
-
-
-</com.daya.live_teaching.ui.view.RadioRelativeLayout>
-    </RelativeLayout>
+                android:background="@color/white" />
+
+            <LinearLayout
+                android:id="@+id/ll_tool_button"
+                android:layout_width="wrap_content"
+                android:layout_height="40dp"
+                android:layout_alignParentBottom="true"
+                android:layout_centerHorizontal="true"
+                android:layout_marginBottom="@dimen/dp_20"
+                android:background="@drawable/toolbox_background"
+                android:paddingStart="5dp"
+                android:paddingEnd="5dp"
+                android:visibility="visible">
+
+                <Button
+                    android:id="@+id/btnPencil"
+                    style="@style/ToolButton"
+                    android:layout_height="match_parent"
+                    android:drawableStart="@drawable/ic_appliance_pencil"
+                    android:paddingStart="11dp"
+                    android:paddingEnd="0dp" />
+
+                <Button
+                    android:id="@+id/btnEraser"
+                    style="@style/ToolButton"
+                    android:layout_height="match_parent"
+                    android:drawableStart="@drawable/ic_appliance_eraser"
+                    android:paddingStart="11dp"
+                    android:paddingEnd="0dp" />
+
+                <Button
+                    android:id="@+id/btnEllipse"
+                    style="@style/ToolButton"
+                    android:layout_height="match_parent"
+                    android:drawableStart="@drawable/ic_appliance_ellipse"
+                    android:paddingStart="11dp"
+                    android:paddingEnd="0dp" />
+
+                <Button
+                    android:id="@+id/btn_clean_scene"
+                    style="@style/ToolButton"
+                    android:layout_height="match_parent"
+                    android:drawableStart="@drawable/ic_clean_scene"
+                    android:paddingStart="11dp"
+                    android:paddingEnd="0dp" />
+
+
+                <Button
+                    android:id="@+id/btn_remove_scenes"
+                    style="@style/ToolButton"
+                    android:layout_height="match_parent"
+                    android:drawableStart="@drawable/ic_remove_scenes"
+                    android:paddingStart="11dp"
+                    android:paddingEnd="0dp" />
+
+
+                <Button
+                    android:id="@+id/btn_create_scenes"
+                    style="@style/ToolButton"
+                    android:layout_height="match_parent"
+                    android:drawableStart="@drawable/ic_create_scenes"
+                    android:paddingStart="13dp"
+                    android:paddingEnd="0dp" />
+
+                <Button
+                    android:id="@+id/btn_insert_image"
+                    style="@style/ToolButton"
+                    android:layout_height="match_parent"
+                    android:drawableStart="@drawable/ic_insert_image"
+                    android:paddingStart="13dp"
+                    android:paddingEnd="0dp" />
+
+                <Button
+                    android:id="@+id/btn_insert_practice"
+                    style="@style/ToolButton"
+                    android:layout_height="match_parent"
+                    android:drawableStart="@drawable/ic_insert_practice"
+                    android:paddingStart="13dp"
+                    android:paddingEnd="0dp"
+                    android:visibility="gone" />
+
+                <Button
+                    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:visibility="visible" />
+            </LinearLayout>
+
+
+        </RelativeLayout>
+
+
+    </com.daya.live_teaching.ui.view.RadioRelativeLayout>
+</RelativeLayout>

+ 15 - 2
live_teaching/src/main/res/layout/view_course_ware_play_layout.xml

@@ -99,15 +99,28 @@
         android:id="@+id/tv_progress"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginEnd="27dp"
         android:includeFontPadding="false"
         android:text="00:00/00:00"
         android:textColor="@color/color_ff8000"
         android:textSize="@dimen/sp_11"
         app:layout_constraintBottom_toBottomOf="@+id/iv_play"
+        app:layout_constraintRight_toLeftOf="@+id/tv_total_progress"
+        app:layout_constraintTop_toTopOf="@+id/iv_play"
+        tools:text="02:38" />
+
+    <TextView
         app:layout_constraintRight_toLeftOf="@+id/tv_volume_text"
+        android:id="@+id/tv_total_progress"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="27dp"
+        android:includeFontPadding="false"
+        android:text="/00:00"
+        android:textColor="@color/color_ff8000"
+        android:textSize="@dimen/sp_11"
+        app:layout_constraintBottom_toBottomOf="@+id/iv_play"
         app:layout_constraintTop_toTopOf="@+id/iv_play"
-        tools:text="02:38/04:20" />
+        tools:text="/04:20" />
 
     <androidx.constraintlayout.widget.Group
         android:id="@+id/group_play_info"

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

@@ -102,6 +102,7 @@
 
     <string name="hello_blank_fragment">Hello blank fragment</string>
     <string name="profile_group_notice_prefix">>@所有人</string>
+    <string name="default_time_str">00:00</string>
     <string-array name="class_member_list_operate_dialog_content">
         <!--        <item>确定把助教身份转给成员吗?</item>-->
         <!--        <item>确定设置成员为讲师吗?</item>-->