Browse Source

修复bug,新增直播分享消息

Pq 2 years ago
parent
commit
3d0c4c2c8f

+ 15 - 0
BaseLibrary/src/main/java/com/cooleshow/base/utils/helper/WebStartHelper.java

@@ -25,4 +25,19 @@ public class WebStartHelper {
                 .withString(WebConstants.WEB_URL, WebConstants.TEACHER_UPLOAD_SHEET_MUSIC)
                 .navigation();
     }
+
+
+    /**
+     * 打开曲谱详情页
+     * * @param id
+     */
+    public static void startAccompany(String id){
+        ARouter.getInstance().build(RouterPath.WebCenter.ACTIVITY_ACCOMPANY_HTML)
+                .withString("url", String.format(WebConstants.SCORE_DETAIL_PAGE, id))
+                .withBoolean("isHideTitle", true)
+                .withBoolean("statusBarTextColor", true)
+                .withBoolean("isOpenLight", true)
+                .withInt("orientation", 0)
+                .navigation();
+    }
 }

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

@@ -98,6 +98,8 @@
     <color name="color_808080">#808080</color>
     <color name="color_416fff">#416FFF</color>
     <color name="color_02c1ac">#02C1AC</color>
+    <color name="color_ff4347">#FF4347</color>
+    <color name="color_4a4a4a">#4A4A4A</color>
 
     <color name="color_25292e">#25292E</color>
     <color name="color_F8F8F8">#F8F8F8</color>

+ 4 - 0
live_teaching/src/main/java/com/daya/live_teaching/im/IMManager.java

@@ -29,8 +29,10 @@ import com.daya.live_teaching.im.provider.ClassTextMessageItemProvider;
 import com.daya.live_teaching.im.provider.RoleChangedMessageItemProvider;
 import com.daya.live_teaching.model.RoleChangedUser;
 
+import io.rong.imkit.conversation.messgelist.provider.RCChatShareLiveProvider;
 import io.rong.imkit.conversation.messgelist.provider.RCChatShareMusicProvider;
 import io.rong.imkit.utils.helper.ConversationFilterHelper;
+import io.rong.imkit.widget.RCChatShareLiveMessage;
 import io.rong.imkit.widget.RCChatShareMusicMessage;
 
 import java.util.ArrayList;
@@ -111,6 +113,7 @@ public class IMManager {
         RongIMClient.registerMessageType(MusicScoreDownloadMessage.class);//学生伴奏下载
         RongIMClient.registerMessageType(CustomMessage.class);//学生伴奏下载
         RongIMClient.registerMessageType(RCChatShareMusicMessage.class);//乐谱分享
+        RongIMClient.registerMessageType(RCChatShareLiveMessage.class);//直播分享
 
         // 设置自定义文本显示
         RongIM.registerMessageTemplate(new ClassTextMessageItemProvider());
@@ -118,6 +121,7 @@ public class IMManager {
         RongIM.registerMessageTemplate(new RoleChangedMessageItemProvider());
         RongIM.registerMessageTemplate(new AnnouncementProvider());
         RongIM.registerMessageTemplate(new RCChatShareMusicProvider());
+        RongIM.registerMessageTemplate(new RCChatShareLiveProvider());
 
         RongExtensionManager.getInstance().registerExtensionModule(new SightExtensionModule());
 

+ 98 - 0
rong_im/kit/src/main/java/io/rong/imkit/conversation/messgelist/provider/RCChatShareLiveProvider.java

@@ -0,0 +1,98 @@
+package io.rong.imkit.conversation.messgelist.provider;
+
+import android.content.Context;
+import android.text.Spannable;
+import android.text.SpannableString;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.alibaba.android.arouter.launcher.ARouter;
+import com.cooleshow.base.common.BaseApplication;
+import com.cooleshow.base.router.RouterPath;
+import com.cooleshow.base.utils.GlideUtils;
+import com.cooleshow.base.utils.helper.WebStartHelper;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import io.rong.imkit.R;
+import io.rong.imkit.adapter.ItemMarkAdapter;
+import io.rong.imkit.model.UiMessage;
+import io.rong.imkit.widget.RCChatShareLiveMessage;
+import io.rong.imkit.widget.adapter.IViewProviderListener;
+import io.rong.imkit.widget.adapter.ViewHolder;
+import io.rong.imlib.model.MessageContent;
+
+/**
+ * 创建日期:2022/6/14 11:13
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class RCChatShareLiveProvider extends BaseMessageItemProvider<RCChatShareLiveMessage> {
+
+    public RCChatShareLiveProvider() {
+        mConfig.showContentBubble = false;
+        mConfig.showProgress = false;
+    }
+
+    @Override
+    protected ViewHolder onCreateMessageContentViewHolder(ViewGroup parent, int viewType) {
+        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.rc_chat_share_live, parent, false);
+        return new ViewHolder(view.getContext(), view);
+    }
+
+    @Override
+    protected void bindMessageContentViewHolder(final ViewHolder holder, ViewHolder parentHolder, RCChatShareLiveMessage liveMessage, final UiMessage uiMessage, int position, List<UiMessage> list, IViewProviderListener<UiMessage> listener) {
+        //头像
+        ImageView iv_avatar = holder.getView(R.id.iv_avatar);
+        GlideUtils.INSTANCE.loadImage(holder.getContext(), liveMessage.getTeacherAvatar(), iv_avatar, R.drawable.icon_teacher_default_head);
+        //名称提示
+        String name = "老师";
+        if (!TextUtils.isEmpty(liveMessage.getTeacherName())) {
+            name = liveMessage.getTeacherName();
+        }
+        //直播间介绍
+        holder.setText(R.id.tv_name_tip, holder.getContext().getString(R.string.live_name_tip, name));
+        if (!TextUtils.isEmpty(liveMessage.getLiveDescMessage())) {
+            holder.setText(R.id.tv_content, liveMessage.getLiveDescMessage());
+        } else {
+            holder.setText(R.id.tv_content, "暂无直播间介绍");
+        }
+    }
+
+
+    @Override
+    protected boolean isMessageViewType(MessageContent messageContent) {
+        return messageContent instanceof RCChatShareLiveMessage;
+    }
+
+
+    @Override
+    public Spannable getSummarySpannable(Context context, RCChatShareLiveMessage liveMessage) {
+        return new SpannableString("[直播分享]");
+    }
+
+    @Override
+    protected boolean onItemClick(ViewHolder holder, RCChatShareLiveMessage liveMessage, UiMessage uiMessage, int position, List<UiMessage> list, IViewProviderListener<UiMessage> listener) {
+        if (TextUtils.isEmpty(liveMessage.getRoomUID())) {
+            return false;
+        }
+        if (BaseApplication.Companion.isTeacherClient()) {
+            ARouter.getInstance().build(RouterPath.LiveCenter.ACTIVITY_LIVE_ROOM_TEACHER)
+                    .withString("roomid_key", liveMessage.getRoomUID())
+                    .navigation();
+        } else {
+            ARouter.getInstance().build(RouterPath.LiveCenter.ACTIVITY_LIVE_ROOM)
+                    .withString("roomid_key", liveMessage.getRoomUID())
+                    .navigation();
+        }
+        return true;
+    }
+}

+ 5 - 7
rong_im/kit/src/main/java/io/rong/imkit/conversation/messgelist/provider/RCChatShareMusicProvider.java

@@ -17,6 +17,7 @@ import com.alibaba.android.arouter.launcher.ARouter;
 import com.cooleshow.base.common.WebConstants;
 import com.cooleshow.base.router.RouterPath;
 import com.cooleshow.base.utils.GlideUtils;
+import com.cooleshow.base.utils.helper.WebStartHelper;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -102,17 +103,14 @@ public class RCChatShareMusicProvider extends BaseMessageItemProvider<RCChatShar
 
     @Override
     public Spannable getSummarySpannable(Context context, RCChatShareMusicMessage shareMusicMessage) {
-        return new SpannableString("");
+        return new SpannableString("[曲谱分享]");
     }
 
     @Override
     protected boolean onItemClick(ViewHolder holder, RCChatShareMusicMessage shareMusicMessage, UiMessage uiMessage, int position, List<UiMessage> list, IViewProviderListener<UiMessage> listener) {
-        String linkUrl=WebConstants.SCORE_DETAIL_LINK+"?id="+shareMusicMessage.getSongId();
-        ARouter.getInstance()
-                .build(RouterPath.WebCenter.ACTIVITY_HORIZONTAL_SCREEN_HTML)
-                .withBoolean("statusBarTextColor", false)
-                .withString(WebConstants.WEB_URL, linkUrl)
-                .navigation();
+        if (shareMusicMessage != null && !TextUtils.isEmpty(shareMusicMessage.getSongId())) {
+            WebStartHelper.startAccompany(shareMusicMessage.getSongId());
+        }
         return true;
     }
 }

+ 154 - 0
rong_im/kit/src/main/java/io/rong/imkit/widget/RCChatShareLiveMessage.java

@@ -0,0 +1,154 @@
+package io.rong.imkit.widget;
+
+import android.os.Parcel;
+import android.text.TextUtils;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.UnsupportedEncodingException;
+
+import io.rong.common.ParcelUtils;
+import io.rong.imlib.MessageTag;
+import io.rong.imlib.model.MessageContent;
+import io.rong.imlib.model.UserInfo;
+
+/**
+ * 创建日期:2022/6/14 10:56
+ *
+ * @author Ryan
+ * 类说明:
+ */
+@MessageTag(value = "RC:CHATSHARE:LIVE", flag = MessageTag.ISCOUNTED)
+public class RCChatShareLiveMessage extends MessageContent {
+    private String roomUID;
+    private String teacherAvatar;
+    private String teacherName;
+    private String liveDescMessage;
+
+    public String getRoomUID() {
+        return roomUID;
+    }
+
+    public void setRoomUID(String roomUID) {
+        this.roomUID = roomUID;
+    }
+
+    public String getTeacherAvatar() {
+        return teacherAvatar;
+    }
+
+    public void setTeacherAvatar(String teacherAvatar) {
+        this.teacherAvatar = teacherAvatar;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public String getLiveDescMessage() {
+        return liveDescMessage;
+    }
+
+    public void setLiveDescMessage(String liveDescMessage) {
+        this.liveDescMessage = liveDescMessage;
+    }
+
+    public RCChatShareLiveMessage() {
+    }
+
+    public RCChatShareLiveMessage(byte[] data) {
+        String jsonStr = null;
+        try {
+            jsonStr = new String(data, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        try {
+            JSONObject jsonObject = new JSONObject(jsonStr);
+            if (jsonObject.has("roomUID")) {
+                roomUID = jsonObject.optString("roomUID");
+            }
+            if (jsonObject.has("teacherAvatar")) {
+                teacherAvatar = jsonObject.optString("teacherAvatar");
+            }
+            if (jsonObject.has("teacherName")) {
+                teacherName = jsonObject.optString("teacherName");
+            }
+            if (jsonObject.has("liveDescMessage")) {
+                liveDescMessage = jsonObject.optString("liveDescMessage");
+            }
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public byte[] encode() {
+        JSONObject jsonObj = new JSONObject();
+        try {
+            // 消息携带用户信息时, 自定义消息需添加下面代码
+            if (!TextUtils.isEmpty(roomUID)) {
+                jsonObj.putOpt("roomUID", roomUID);
+            }
+            if (!TextUtils.isEmpty(teacherAvatar)) {
+                jsonObj.putOpt("teacherAvatar", teacherAvatar);
+            }
+            if (!TextUtils.isEmpty(teacherName)) {
+                jsonObj.putOpt("teacherName", teacherName);
+            }
+            if (!TextUtils.isEmpty(liveDescMessage)) {
+                jsonObj.putOpt("liveDescMessage", liveDescMessage);
+            }
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+
+        try {
+            return jsonObj.toString().getBytes("UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(this.roomUID);
+        dest.writeString(this.teacherAvatar);
+        dest.writeString(this.teacherName);
+        dest.writeString(this.liveDescMessage);
+        ParcelUtils.writeToParcel(dest, getExtra());
+        ParcelUtils.writeToParcel(dest, getUserInfo());
+    }
+
+    protected RCChatShareLiveMessage(Parcel in) {
+        this.roomUID = in.readString();
+        this.teacherAvatar = in.readString();
+        this.teacherName = in.readString();
+        this.liveDescMessage = in.readString();
+        this.setExtra(ParcelUtils.readFromParcel(in));
+        this.setUserInfo((UserInfo)ParcelUtils.readFromParcel(in, UserInfo.class));
+    }
+
+    public static final Creator<RCChatShareLiveMessage> CREATOR = new Creator<RCChatShareLiveMessage>() {
+        @Override
+        public RCChatShareLiveMessage createFromParcel(Parcel source) {
+            return new RCChatShareLiveMessage(source);
+        }
+
+        @Override
+        public RCChatShareLiveMessage[] newArray(int size) {
+            return new RCChatShareLiveMessage[size];
+        }
+    };
+}

+ 8 - 0
rong_im/kit/src/main/res/drawable/shape_live_msg_tag.xml

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

+ 117 - 0
rong_im/kit/src/main/res/layout/rc_chat_share_live.xml

@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="14dp"
+        android:layout_marginTop="12dp"
+        android:layout_marginRight="14dp"
+        android:background="@drawable/bg_white_5dp">
+
+        <de.hdodenhof.circleimageview.CircleImageView
+            android:id="@+id/iv_avatar"
+            android:layout_width="42dp"
+            android:layout_height="42dp"
+            android:layout_marginStart="14dp"
+            android:layout_marginTop="11dp"
+            app:civ_border_color="@color/color_ff4347"
+            app:civ_border_width="1dp"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <View
+            android:id="@+id/view_helper"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/iv_avatar"
+            android:layout_width="1px"
+            android:layout_height="1px"/>
+
+        <TextView
+            app:layout_constraintBottom_toBottomOf="@+id/view_helper"
+            app:layout_constraintTop_toTopOf="@+id/view_helper"
+            app:layout_constraintRight_toRightOf="@+id/iv_avatar"
+            app:layout_constraintLeft_toLeftOf="@+id/iv_avatar"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:background="@drawable/shape_live_msg_tag"
+            android:paddingStart="5dp"
+            android:paddingEnd="5dp"
+            android:text="直播中"
+            android:textColor="@color/white"
+            android:textSize="@dimen/sp_13" />
+
+        <TextView
+            android:id="@+id/tv_title_tip"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="7dp"
+            android:includeFontPadding="false"
+            android:text="「正在直播」"
+            android:textColor="@color/color_999999"
+            android:textSize="@dimen/sp_14"
+            app:layout_constraintBottom_toTopOf="@+id/tv_name_tip"
+            app:layout_constraintLeft_toRightOf="@+id/iv_avatar"
+            app:layout_constraintTop_toTopOf="@+id/iv_avatar"
+            app:layout_constraintVertical_chainStyle="packed" />
+
+        <TextView
+            android:id="@+id/tv_name_tip"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="3dp"
+            android:layout_marginEnd="14dp"
+            android:ellipsize="end"
+            android:includeFontPadding="false"
+            android:maxLines="1"
+            android:textColor="@color/color_4a4a4a"
+            android:textSize="@dimen/sp_14"
+            app:layout_constraintBottom_toBottomOf="@+id/iv_avatar"
+            app:layout_constraintLeft_toLeftOf="@+id/tv_title_tip"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/tv_title_tip"
+            tools:text="李老师在直播间等你哦~" />
+
+
+        <TextView
+            android:id="@+id/tv_content"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="11dp"
+            android:layout_marginEnd="14dp"
+            android:includeFontPadding="false"
+            android:textColor="@color/color_666666"
+            android:textSize="@dimen/sp_14"
+            app:layout_constraintLeft_toLeftOf="@+id/iv_avatar"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/iv_avatar"
+            tools:text="李老师带您0基础学习竖笛,通过4节课的学习掌握竖笛演奏方法。" />
+
+        <View
+            android:id="@+id/view_line"
+            android:layout_width="match_parent"
+            android:layout_height="1dp"
+            android:layout_marginTop="15dp"
+            android:background="@color/color_f2f2f2"
+            app:layout_constraintTop_toBottomOf="@+id/tv_content" />
+
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:paddingTop="10dp"
+            android:paddingBottom="10dp"
+            android:text="进入直播间"
+            android:textColor="@color/color_ff4347"
+            android:textSize="@dimen/sp_15"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/view_line" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</FrameLayout>

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

@@ -500,4 +500,5 @@
 
     <string name="rc_mention_messages">有人@我 %s</string>
     <string name="rc_media_upload_error">不能上传 0kb 的文件</string>
+    <string name="live_name_tip">%s在直播间等你哦~</string>
 </resources>

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

@@ -55,23 +55,23 @@ public class MineIncomeAdapter extends BaseQuickAdapter<UserAccountBean.RowsBean
         switch (item.bizType) {
             case "PRACTICE":
                 im_state.setBackgroundResource(R.drawable.icon_item_practice);
+                tv_date.setText(UiUtils.getCourseTimeString(item.startTime, item.endTime));
                 break;
             case "LIVE":
                 im_state.setBackgroundResource(R.drawable.icon_item_live);
+                tv_date.setText(UiUtils.getCourseTimeString(item.startTime, item.endTime));
                 break;
             case "VIDEO":
                 im_state.setBackgroundResource(R.drawable.icon_item_video);
+                tv_date.setText(item.createTime);
                 break;
             case "MUSIC":
                 im_state.setBackgroundResource(R.drawable.icon_item_music);
+                tv_date.setText(item.createTime);
                 break;
         }
         tv_name.setText(item.bizName);
-        tv_price.setText(item.transAmount + "");
-        tv_date.setText(item.endTime);
-
-        tv_date.setText(UiUtils.getCourseTimeString(item.startTime,item.endTime));
-
+        tv_price.setText(item.transAmount);
     }
 
     @NonNull

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

@@ -46,7 +46,7 @@ public class UserAccountBean {
         public String orderNo;
         public String startTime;
         public String timeDay;
-        public double transAmount;
+        public String transAmount;
 
 
     }

+ 1 - 1
teacher/src/main/java/com/cooleshow/teacher/ui/income/MineIncomeActivity.java

@@ -54,7 +54,7 @@ import io.rong.imkit.utils.StatusBarUtil;
  */
 @Route(path = RouterPath.IncomeCenter.TEACHER_MINE_INCOME)
 public class MineIncomeActivity extends BaseMVPActivity<ActivityMineIncomeBinding, MineIncomePresenter> implements MineIncomeContract.MineIncomeView, View.OnClickListener {
-    private String currentIncomeFilterStatus = "WITHDRAWAL";
+    private String currentIncomeFilterStatus = "";
 
     @Override
     public void onClick(View view) {