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

+ 18 - 2
live_teaching/src/main/java/com/daya/live_teaching/ui/LiveActivity.java

@@ -74,6 +74,7 @@ import com.daya.live_teaching.utils.AudioMngHelper;
 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.CourseWarePlayView;
 import com.daya.live_teaching.widget.dialog.CourseWareSelectDialog;
 import com.daya.live_teaching.widget.dialog.CoursewarePreviewDialog;
 import com.daya.live_teaching.widget.dialog.LiveCommonDialog;
@@ -413,7 +414,15 @@ public class LiveActivity extends BaseActivity<ActivityLiveBinding> {
                 }
             }
         });
-
+        viewBinding.viewCourseware.setOnEventListener(new CourseWarePlayView.OnEventListener() {
+            @Override
+            public void onPackUp() {
+                viewBinding.viewCourseware.packUp();
+                if (teachingToolsFragment != null) {
+                    teachingToolsFragment.checkButton(TeachingToolsFragment.Operate.COURSEWARE.getValue());
+                }
+            }
+        });
         initClassViewModel();
     }
 
@@ -695,7 +704,14 @@ public class LiveActivity extends BaseActivity<ActivityLiveBinding> {
 
                 @Override
                 public void showCourseWareDialog() {
-                    LiveActivity.this.showCourseWareDialog(false);
+                    if (viewBinding.viewCourseware.isPackUp()) {
+                        viewBinding.viewCourseware.expand();
+                        if (teachingToolsFragment != null) {
+                            teachingToolsFragment.clearCoursewareChecked();
+                        }
+                    } else {
+                        LiveActivity.this.showCourseWareDialog(false);
+                    }
                 }
             });
             transaction.add(R.id.teaching_tools_fragment, teachingToolsFragment, "teachingToolsFragment");

+ 23 - 7
live_teaching/src/main/java/com/daya/live_teaching/ui/fragmnet/TeachingToolsFragment.java

@@ -4,6 +4,7 @@ import android.text.TextUtils;
 import android.util.Log;
 import android.view.Gravity;
 import android.view.View;
+import android.widget.Button;
 import android.widget.CheckBox;
 
 import androidx.fragment.app.Fragment;
@@ -117,7 +118,7 @@ public class TeachingToolsFragment extends BaseFragment<FragmentTeachingToolsBin
             R.drawable.fragment_top_accompaniment_selector,
             R.drawable.ic_metronome_setting,
             R.drawable.fragment_top_operate_metronome_selector,
-            R.drawable.icon_teaching_courseware,
+            R.drawable.fragment_top_operate_courseware_selector,
     };
 
     @Override
@@ -263,6 +264,8 @@ public class TeachingToolsFragment extends BaseFragment<FragmentTeachingToolsBin
 //            item.right = marginLeft;
             if (operate == Operate.SHARE_WHITE_BOARD || operate == Operate.SHARE_VIDEO) {
                 item.type = OperateItem.Type.CHECKBOX;
+            } else if (operate == Operate.COURSEWARE) {
+                item.type = OperateItem.Type.BUTTON;
             } else {
                 item.type = OperateItem.Type.CHECKBOX;
             }
@@ -279,7 +282,11 @@ public class TeachingToolsFragment extends BaseFragment<FragmentTeachingToolsBin
                 }
                 Operate type = Operate.getType(item.id);
                 switch (type) {
-
+                    case COURSEWARE:
+                        if (listener != null) {
+                            listener.showCourseWareDialog();
+                        }
+                        break;
                     default:
                         break;
                 }
@@ -316,11 +323,6 @@ public class TeachingToolsFragment extends BaseFragment<FragmentTeachingToolsBin
                             fragment.setGravity(Gravity.CENTER);
                             fragment.show(getChildFragmentManager(), "");
                             break;
-                        case COURSEWARE:
-                            if (listener != null) {
-                                listener.showCourseWareDialog();
-                            }
-                            break;
                     }
                 }
             }
@@ -424,6 +426,10 @@ public class TeachingToolsFragment extends BaseFragment<FragmentTeachingToolsBin
             CheckBox whiteBoardBox = operateView.getView(Operate.SHARE_WHITE_BOARD.getValue());
             whiteBoardBox.setChecked(true);
         }
+        if (null != operateView && operate == Operate.COURSEWARE) {
+            Button coursewareBt = operateView.getView(Operate.COURSEWARE.getValue());
+            coursewareBt.setBackgroundResource(R.drawable.icon_teaching_courseware_on_play);
+        }
     }
 
     /**
@@ -446,6 +452,16 @@ public class TeachingToolsFragment extends BaseFragment<FragmentTeachingToolsBin
         metronome.setChecked(false);
     }
 
+    /**
+     * 清除课件按钮当前所选择的状态
+     */
+    public void clearCoursewareChecked() {
+        if (operateView != null) {
+            Button coursewareBt = operateView.getView(Operate.COURSEWARE.getValue());
+            coursewareBt.setBackgroundResource(R.drawable.icon_teaching_courseware);
+        }
+    }
+
 
     private void showMetronomeDialog(Operate type) {
         String hint;

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

@@ -40,7 +40,7 @@ public class CourseWarePlayView extends FrameLayout implements View.OnClickListe
 
     private TextView mTvTitle;
     private Group mGroupPlayInfo;
-    private ImageView mIvStatusIcon;
+    //    private ImageView mIvStatusIcon;
     private TextView mTvProgress;
     private TextView mTvStatusText;
     private AppCompatSeekBar mSeekbar;
@@ -66,6 +66,9 @@ public class CourseWarePlayView extends FrameLayout implements View.OnClickListe
         }
     };
     private TextView mTvTotalProgress;
+    private TextView mTvPackUp;
+    private String fileUrl;
+    private OnEventListener mEventListener;
 
 
     public CourseWarePlayView(@NonNull Context context) {
@@ -89,10 +92,11 @@ public class CourseWarePlayView extends FrameLayout implements View.OnClickListe
         mSeekbar = findViewById(R.id.seekbar);
         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);
+        findViewById(R.id.tv_close).setOnClickListener(this);
+        mTvPackUp = findViewById(R.id.tv_pack_up);
+        mTvPackUp.setOnClickListener(this);
     }
 
     public void setName(String name) {
@@ -139,16 +143,15 @@ public class CourseWarePlayView extends FrameLayout implements View.OnClickListe
         this.playStatus = playStatus;
         if (playStatus == PLAY_STATUS_LOADING) {
             mGroupPlayInfo.setVisibility(View.GONE);
-            mIvStatusIcon.setVisibility(View.GONE);
             mTvStatusText.setText("正在加载...");
+            setPackUpUI();
             return;
         }
 
         if (playStatus == PLAY_STATUS_FAIL) {
             //加载失败
             mGroupPlayInfo.setVisibility(View.GONE);
-            mIvStatusIcon.setVisibility(View.VISIBLE);
-            mIvStatusIcon.setImageResource(R.drawable.icon_play_courseware_reload);
+            setPackUpUI();
             mTvStatusText.setText("重新加载");
             return;
         }
@@ -158,24 +161,31 @@ public class CourseWarePlayView extends FrameLayout implements View.OnClickListe
             int durationMillis = getAudioMixerManager().getDurationMillis();
             setTotalProgress(durationMillis);
             mGroupPlayInfo.setVisibility(View.VISIBLE);
-            mIvStatusIcon.setVisibility(View.VISIBLE);
-            mIvStatusIcon.setImageResource(R.drawable.icon_stop_play_course_ware);
             mTvStatusText.setText("正在播放");
             mIvPlay.setImageResource(R.drawable.icon_pause_course_ware);
+            setPackUpUI();
             return;
         }
 
         if (playStatus == PLAY_STATUS_PAUSE || playStatus == PLAY_STATUS_STOP) {
             //播放中
             mGroupPlayInfo.setVisibility(View.VISIBLE);
-            mIvStatusIcon.setVisibility(View.VISIBLE);
-            mIvStatusIcon.setImageResource(R.drawable.icon_stop_play_course_ware);
             mTvStatusText.setText("播放暂停");
             mIvPlay.setImageResource(R.drawable.icon_play_course_ware);
             return;
         }
     }
 
+    private void setPackUpUI() {
+        if (playStatus == PLAY_STATUS_FAIL) {
+            mTvPackUp.setText("刷新");
+            mTvPackUp.setCompoundDrawablesWithIntrinsicBounds(null, null, getContext().getResources().getDrawable(R.drawable.icon_play_courseware_reload), null);
+        } else {
+            mTvPackUp.setText("收起");
+            mTvPackUp.setCompoundDrawablesWithIntrinsicBounds(null, null, getContext().getResources().getDrawable(R.drawable.icon_pack_up_courseware), null);
+        }
+    }
+
     @Override
     public void onClick(View v) {
         int id = v.getId();
@@ -186,18 +196,59 @@ public class CourseWarePlayView extends FrameLayout implements View.OnClickListe
             if (playStatus == PLAY_STATUS_PAUSE) {
                 getAudioMixerManager().resume();
             }
+            if (playStatus == PLAY_STATUS_STOP) {
+                restart();
+            }
         }
 
-        if (id == R.id.iv_status_icon) {
+        if (id == R.id.tv_close) {
+            //关闭
+            stop();
+            setVisibility(View.GONE);
+            return;
+        }
+
+        if (id == R.id.tv_pack_up) {
+            //收起
             if (playStatus == PLAY_STATUS_FAIL) {
                 //刷新
+                restart();
             } else {
-                stop();
-                setVisibility(View.GONE);
+                //收起
+                if (mEventListener != null) {
+                    mEventListener.onPackUp();
+                }
             }
         }
     }
 
+    private void restart() {
+        if (!TextUtils.isEmpty(fileUrl)) {
+            start(fileUrl);
+        }
+    }
+
+    boolean isPackUp = false;
+
+    public void packUp() {
+        isPackUp = true;
+        setVisibility(View.INVISIBLE);
+    }
+
+    public void expand() {
+        isPackUp = false;
+        setVisibility(View.VISIBLE);
+    }
+
+
+    public void setOnEventListener(OnEventListener listener) {
+        this.mEventListener = listener;
+    }
+
+    public interface OnEventListener {
+        void onPackUp();//收起按钮
+    }
+
 
     private RtcAudioMixerControl getAudioMixerManager() {
         if (mRtcAudioMixerControl == null) {
@@ -243,10 +294,12 @@ public class CourseWarePlayView extends FrameLayout implements View.OnClickListe
 
 
     private void stop() {
+        isPackUp = false;
         getAudioMixerManager().stop();
     }
 
     public void release() {
+        isPackUp = false;
         if (mRtcAudioMixerControl != null) {
             mRtcAudioMixerControl.stop();
         }
@@ -255,10 +308,16 @@ public class CourseWarePlayView extends FrameLayout implements View.OnClickListe
         }
     }
 
+
+    public boolean isPackUp() {
+        return isPackUp;
+    }
+
     public void start(String fileUrl) {
         if (TextUtils.isEmpty(fileUrl)) {
             return;
         }
+        this.fileUrl = fileUrl;
         setPlayStatus(PLAY_STATUS_LOADING);
         getAudioMixerManager().startMix(fileUrl);
     }

BIN
live_teaching/src/main/res/drawable-xhdpi/icon_pack_up_courseware.png


BIN
live_teaching/src/main/res/drawable-xhdpi/icon_stop_play_course_ware.png


BIN
live_teaching/src/main/res/drawable-xhdpi/icon_teaching_courseware_on_play.png


BIN
live_teaching/src/main/res/drawable-xxhdpi/icon_pack_up_courseware.png


BIN
live_teaching/src/main/res/drawable-xxhdpi/icon_stop_play_course_ware.png


BIN
live_teaching/src/main/res/drawable-xxhdpi/icon_teaching_courseware_on_play.png


+ 1 - 1
live_teaching/src/main/res/drawable/fragment_top_operate_courseware_selector.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:drawable="@drawable/icon_teaching_courseware" android:state_checked="false"/>
-    <item android:drawable="@drawable/icon_teaching_courseware" android:state_checked="true"/>
+    <item android:drawable="@drawable/icon_teaching_courseware_on_play" android:state_enabled="true"/>
     <item android:drawable="@drawable/icon_teaching_courseware"/>
 </selector>

+ 43 - 16
live_teaching/src/main/res/layout/view_course_ware_play_layout.xml

@@ -8,29 +8,57 @@
 
     <TextView
         android:id="@+id/tv_title"
-        android:layout_width="wrap_content"
+        android:layout_width="0dp"
         android:layout_height="wrap_content"
         android:paddingStart="12dp"
         android:paddingTop="9dp"
         android:paddingBottom="9dp"
+        android:text="课件:诀爱(《苍兰诀》主题曲)"
         android:textColor="@color/color_ff8000"
         android:textSize="@dimen/sp_12"
         android:textStyle="bold"
-        android:text="课件:诀爱(《苍兰诀》主题曲)"
+        android:maxLines="1"
+        android:ellipsize="end"
+        android:layout_marginEnd="5dp"
+        app:layout_constraintRight_toLeftOf="@+id/tv_status_text"
         app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintTop_toTopOf="parent"
         tools:text="课件:诀爱(《苍兰诀》主题曲)" />
 
-    <ImageView
-        android:id="@+id/iv_status_icon"
-        android:layout_width="21dp"
-        android:layout_height="21dp"
+    <TextView
+        android:id="@+id/tv_close"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="10dp"
+        android:drawableRight="@drawable/icon_stop_play_course_ware"
+        android:drawablePadding="4dp"
+        android:gravity="center"
+        android:includeFontPadding="false"
+        android:text="关闭"
+        android:textColor="@color/color_ff8000"
+        android:textSize="@dimen/sp_12"
+        android:visibility="visible"
+        app:layout_constraintBottom_toBottomOf="@+id/tv_title"
+        app:layout_constraintRight_toLeftOf="@+id/tv_pack_up"
+        app:layout_constraintTop_toTopOf="@+id/tv_title" />
+
+
+    <TextView
+        android:id="@+id/tv_pack_up"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
         android:layout_marginEnd="8dp"
-        android:visibility="gone"
+        android:drawableRight="@drawable/icon_pack_up_courseware"
+        android:drawablePadding="4dp"
+        android:gravity="center"
+        android:includeFontPadding="false"
+        android:text="收起"
+        android:textColor="@color/color_ff8000"
+        android:textSize="@dimen/sp_12"
+        android:visibility="visible"
         app:layout_constraintBottom_toBottomOf="@+id/tv_title"
         app:layout_constraintRight_toRightOf="parent"
-        app:layout_constraintTop_toTopOf="@+id/tv_title"
-        tools:src="@drawable/icon_stop_play_course_ware" />
+        app:layout_constraintTop_toTopOf="@+id/tv_title" />
 
 
     <TextView
@@ -40,13 +68,12 @@
         android:layout_marginEnd="11dp"
         android:textColor="@color/color_ff8000"
         android:textSize="@dimen/sp_12"
-        app:layout_constraintBottom_toBottomOf="@+id/iv_status_icon"
-        app:layout_constraintRight_toLeftOf="@+id/iv_status_icon"
-        app:layout_constraintTop_toTopOf="@+id/iv_status_icon"
+        app:layout_constraintBottom_toBottomOf="@+id/tv_close"
+        app:layout_constraintRight_toLeftOf="@+id/tv_close"
+        app:layout_constraintTop_toTopOf="@+id/tv_close"
         app:layout_goneMarginEnd="8dp"
         tools:text="正在加载..." />
 
-
     <ImageView
         android:id="@+id/iv_play"
         android:layout_width="wrap_content"
@@ -109,7 +136,6 @@
         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"
@@ -119,6 +145,7 @@
         android:textColor="@color/color_ff8000"
         android:textSize="@dimen/sp_11"
         app:layout_constraintBottom_toBottomOf="@+id/iv_play"
+        app:layout_constraintRight_toLeftOf="@+id/tv_volume_text"
         app:layout_constraintTop_toTopOf="@+id/iv_play"
         tools:text="/04:20" />
 
@@ -127,6 +154,6 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:visibility="gone"
-        tools:visibility="visible"
-        app:constraint_referenced_ids="tv_progress,tv_total_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"
+        tools:visibility="gone" />
 </androidx.constraintlayout.widget.ConstraintLayout>