Quellcode durchsuchen

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

Pq vor 2 Jahren
Ursprung
Commit
b8f7821d1c
17 geänderte Dateien mit 243 neuen und 28 gelöschten Zeilen
  1. 1 0
      BaseLibrary/src/main/java/com/cooleshow/base/router/RouterPath.kt
  2. 4 0
      rong_im/common_im_ui/src/main/AndroidManifest.xml
  3. 1 1
      rong_im/common_im_ui/src/main/java/com/common/im/bean/ContactListBean.java
  4. 22 0
      rong_im/common_im_ui/src/main/java/com/common/im/helper/ConversationHelper.java
  5. 31 0
      rong_im/common_im_ui/src/main/java/com/common/im/ui/activity/SelectContactActivity.java
  6. 6 1
      rong_im/common_im_ui/src/main/java/com/common/im/ui/activity/SelectScoreChatActivity.java
  7. 25 14
      rong_im/common_im_ui/src/main/java/com/common/im/ui/contact/ContactListTabFragment.java
  8. 20 0
      rong_im/common_im_ui/src/main/java/com/common/im/ui/contact/ContactPersonListFragment.java
  9. 19 0
      rong_im/common_im_ui/src/main/java/com/common/im/ui/contact/ContactRoomListFragment.java
  10. 21 0
      rong_im/common_im_ui/src/main/res/layout/activity_select_contact_layout.xml
  11. 3 2
      rong_im/kit/src/main/java/io/rong/imkit/conversation/extension/component/plugin/ScorePlugin.java
  12. 48 0
      rong_im/kit/src/main/java/io/rong/imkit/utils/helper/OpenChatHelper.java
  13. 9 8
      rong_im/kit/src/main/res/layout/rc_chat_share_live.xml
  14. 1 1
      rong_im/live/src/main/java/com/rong/io/live/config/LiveConfig.java
  15. 2 0
      student/src/main/java/com/cooleshow/student/ui/main/MainActivity.java
  16. 27 0
      teacher/src/main/java/com/cooleshow/teacher/ui/live/TeacherLiveRoomActivity.java
  17. 3 1
      teacher/src/main/java/com/cooleshow/teacher/ui/main/MainActivity.java

+ 1 - 0
BaseLibrary/src/main/java/com/cooleshow/base/router/RouterPath.kt

@@ -167,6 +167,7 @@ object RouterPath {
             const val CHAT_PHOTO_PREVIEW = "/rong/imkit/activity/PhotoPreviewActivity"
             const val CHAT_GROUP_MEMBER = "/rong/imkit/activity/GroupMemberActivity"
             const val CHAT_GROUP_JOIN_APPLY = "/rong/imkit/activity/JoinGroupApplyActivity"
+            const val CHAT_SELECT_CONTACT = "/rong/imkit/activity/SelectContactActivity"
         }
     }
 

+ 4 - 0
rong_im/common_im_ui/src/main/AndroidManifest.xml

@@ -48,5 +48,9 @@
             android:name="com.common.im.ui.activity.JoinGroupApplyActivity"
             android:configChanges="orientation|screenSize|keyboardHidden"
             android:screenOrientation="portrait" />
+        <activity
+            android:name="com.common.im.ui.activity.SelectContactActivity"
+            android:configChanges="orientation|screenSize|keyboardHidden"
+            android:screenOrientation="portrait" />
     </application>
 </manifest>

+ 1 - 1
rong_im/common_im_ui/src/main/java/com/common/im/bean/ContactListBean.java

@@ -26,7 +26,7 @@ public class ContactListBean extends BaseIndexPinyinBean {
 
     public String createTime;
     public String friendAvatar;
-    public int friendId;
+    public String friendId;
     public String friendNickname;
     public int id;
     public String memo;

+ 22 - 0
rong_im/common_im_ui/src/main/java/com/common/im/helper/ConversationHelper.java

@@ -0,0 +1,22 @@
+package com.common.im.helper;
+
+import com.daya.live_teaching.model.WhiteBoardAction;
+
+import io.rong.imlib.model.Conversation;
+
+/**
+ * Author by pq, Date on 2022/7/13.
+ */
+public class ConversationHelper {
+    public static final String TARGET_ID_KEY="targetId";
+    public static final String CONVERSATION_TYPE_KEY="conversation";
+    public static Conversation.ConversationType getConversationType(int value) {
+        Conversation.ConversationType[] values = Conversation.ConversationType.values();
+        for (int i = 0; i < values.length; i++) {
+            if (values[i].getValue() == value) {
+                return values[i];
+            }
+        }
+        return Conversation.ConversationType.PRIVATE;
+    }
+}

+ 31 - 0
rong_im/common_im_ui/src/main/java/com/common/im/ui/activity/SelectContactActivity.java

@@ -0,0 +1,31 @@
+package com.common.im.ui.activity;
+
+import android.os.Bundle;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.common.im.ui.contact.ContactListTabFragment;
+import com.common.im_ui.databinding.ActivitySelectContactLayoutBinding;
+import com.cooleshow.base.router.RouterPath;
+import com.cooleshow.base.ui.activity.BaseActivity;
+
+/**
+ * Author by pq, Date on 2022/7/13.
+ */
+@Route(path = RouterPath.ChatCenter.CHAT_SELECT_CONTACT)
+public class SelectContactActivity extends BaseActivity<ActivitySelectContactLayoutBinding> {
+
+    @Override
+    protected void initView() {
+        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "选择联系人");
+        ContactListTabFragment contactListTabFragment = new ContactListTabFragment();
+        Bundle bundle = new Bundle();
+        bundle.putBoolean(ContactListTabFragment.IS_SELECT_CONTACT, true);
+        contactListTabFragment.setArguments(bundle);
+        getSupportFragmentManager().beginTransaction().replace(com.cooleshow.base.R.id.fl_my_container, contactListTabFragment).commitAllowingStateLoss();
+    }
+
+    @Override
+    protected ActivitySelectContactLayoutBinding getLayoutView() {
+        return ActivitySelectContactLayoutBinding.inflate(getLayoutInflater());
+    }
+}

+ 6 - 1
rong_im/common_im_ui/src/main/java/com/common/im/ui/activity/SelectScoreChatActivity.java

@@ -13,6 +13,7 @@ import com.alibaba.android.arouter.facade.annotation.Route;
 import com.chad.library.adapter.base.BaseQuickAdapter;
 import com.chad.library.adapter.base.listener.OnItemClickListener;
 import com.chad.library.adapter.base.listener.OnLoadMoreListener;
+import com.common.im.helper.ConversationHelper;
 import com.common.im_ui.R;
 import com.common.im_ui.databinding.ActivitySelectScoreChatBinding;
 import com.common.im.bean.MusicSheetListBean;
@@ -52,6 +53,8 @@ import io.rong.message.TextMessage;
 @Route(path = RouterPath.ChatCenter.CHAT_SELECT_SCORE)
 public class SelectScoreChatActivity extends BaseMVPActivity<ActivitySelectScoreChatBinding, SelectScoreChatPresenter> implements SelectScoreChatContract.SelectScoreChatView, View.OnClickListener {
 
+    private Conversation.ConversationType targetConversationType;//发送对象(单人,群组等等...)
+
     @Override
     public void onClick(View view) {
         if (view.getId() == R.id.tv_search) {
@@ -85,6 +88,8 @@ public class SelectScoreChatActivity extends BaseMVPActivity<ActivitySelectScore
     @Override
     protected void initView() {
         targetId = getIntent().getStringExtra("targetId");
+        int conversationValue = getIntent().getIntExtra("conversationType", Conversation.ConversationType.PRIVATE.getValue());
+        targetConversationType = ConversationHelper.getConversationType(conversationValue);
         initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "曲谱");
         viewBinding.tvSearch.setOnClickListener(this);
         viewBinding.toolbarInclude.tvRightText.setText("确定");
@@ -164,7 +169,7 @@ public class SelectScoreChatActivity extends BaseMVPActivity<ActivitySelectScore
         rcChatShareMusicMessage.setSongId(item.id + "");
         rcChatShareMusicMessage.setChargeType(item.chargeType);
 
-        Message locationMsg = Message.obtain(targetId, Conversation.ConversationType.GROUP, rcChatShareMusicMessage);
+        Message locationMsg = Message.obtain(targetId, targetConversationType, rcChatShareMusicMessage);
         MessageTag annotation = rcChatShareMusicMessage.getClass().getAnnotation(MessageTag.class);
         if (annotation != null) {
             locationMsg.setObjectName(annotation.value());

+ 25 - 14
rong_im/common_im_ui/src/main/java/com/common/im/ui/contact/ContactListTabFragment.java

@@ -1,5 +1,6 @@
 package com.common.im.ui.contact;
 
+import android.os.Bundle;
 import android.view.View;
 
 import androidx.fragment.app.Fragment;
@@ -22,7 +23,10 @@ import java.util.List;
  * @author Ryan
  * 类说明:
  */
-public class ContactListTabFragment  extends BaseMVPFragment<FragmentContactListTabBinding, ContactListTabPresenter> implements View.OnClickListener {
+public class ContactListTabFragment extends BaseMVPFragment<FragmentContactListTabBinding, ContactListTabPresenter> implements View.OnClickListener {
+    private boolean isSelectContact = false;
+    public static final String IS_SELECT_CONTACT = "IS_SELECT_CONTACT";
+
     @Override
     protected FragmentContactListTabBinding getLayoutView() {
         return FragmentContactListTabBinding.inflate(getLayoutInflater());
@@ -32,10 +36,14 @@ public class ContactListTabFragment  extends BaseMVPFragment<FragmentContactList
     protected ContactListTabPresenter createPresenter() {
         return new ContactListTabPresenter();
     }
+
     private ViewPager viewPager;
 
     @Override
     protected void initView(View rootView) {
+        if (getArguments() != null) {
+            isSelectContact = getArguments().getBoolean(IS_SELECT_CONTACT, false);
+        }
         viewPager = mViewBinding.viewpager;
         mViewBinding.llRoom.setOnClickListener(this);
         mViewBinding.llSingle.setOnClickListener(this);
@@ -48,9 +56,9 @@ public class ContactListTabFragment  extends BaseMVPFragment<FragmentContactList
 
             @Override
             public void onPageSelected(int position) {
-                if (position==0){
+                if (position == 0) {
                     selectSingle();
-                }else{
+                } else {
                     selectRoom();
                 }
             }
@@ -62,14 +70,14 @@ public class ContactListTabFragment  extends BaseMVPFragment<FragmentContactList
         });
     }
 
-    private void selectSingle(){
+    private void selectSingle() {
         mViewBinding.imContactRoom.setBackgroundResource(R.drawable.icon_contact_room_normal);
         mViewBinding.imContactSingle.setBackgroundResource(R.drawable.icon_contact_single_select);
         mViewBinding.tvContactRoom.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_666666));
         mViewBinding.tvContactSingle.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_2dc7aa));
     }
 
-    private void selectRoom(){
+    private void selectRoom() {
         mViewBinding.imContactRoom.setBackgroundResource(R.drawable.icon_contact_room_select);
         mViewBinding.imContactSingle.setBackgroundResource(R.drawable.icon_contact_single_normal);
         mViewBinding.tvContactRoom.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_2dc7aa));
@@ -86,13 +94,16 @@ public class ContactListTabFragment  extends BaseMVPFragment<FragmentContactList
 
     private void initTabLayoutAndViewPager() {
         fragments.clear();
-      /*  for (int i = 0; i < titles.size(); i++) {
-            tabLayout.addTab(tabLayout.newTab().setText(titles.get(i)));
-            Fragment adFragment = HomeWorkFragment.newInstance(auditStatusList.get(i));
-            fragments.add(adFragment);
-        }*/
-        fragments.add(new ContactPersonListFragment());
-        fragments.add(new ContactRoomListFragment());
+        ContactPersonListFragment contactPersonListFragment = new ContactPersonListFragment();
+        Bundle bundle = new Bundle();
+        bundle.putBoolean(IS_SELECT_CONTACT, isSelectContact);
+        contactPersonListFragment.setArguments(bundle);
+        fragments.add(contactPersonListFragment);
+        Bundle bundle2 = new Bundle();
+        bundle2.putBoolean(IS_SELECT_CONTACT, isSelectContact);
+        ContactRoomListFragment contactRoomListFragment = new ContactRoomListFragment();
+        contactRoomListFragment.setArguments(bundle2);
+        fragments.add(contactRoomListFragment);
 
         viewPager.setAdapter(new ContactListTabPagerAdapter(getParentFragmentManager(), fragments, titles));
     }
@@ -107,8 +118,8 @@ public class ContactListTabFragment  extends BaseMVPFragment<FragmentContactList
         }
     }
 
-    public void refreshContactList(){
-        if(fragments.size()>0) {
+    public void refreshContactList() {
+        if (fragments.size() > 0) {
             ContactPersonListFragment fragment = (ContactPersonListFragment) fragments.get(0);
             if (fragment != null) {
                 fragment.initData();

+ 20 - 0
rong_im/common_im_ui/src/main/java/com/common/im/ui/contact/ContactPersonListFragment.java

@@ -1,6 +1,8 @@
 package com.common.im.ui.contact;
 
 
+import android.app.Activity;
+import android.content.Intent;
 import android.graphics.Color;
 import android.os.Bundle;
 import android.text.TextUtils;
@@ -11,7 +13,9 @@ import com.chad.library.adapter.base.BaseQuickAdapter;
 import com.chad.library.adapter.base.listener.OnItemClickListener;
 import com.common.im.adapter.ContactListAdapter;
 import com.common.im.bean.ContactListBean;
+import com.common.im.bean.ContactRoomListBean;
 import com.common.im.contract.ContactListFragmentContract;
+import com.common.im.helper.ConversationHelper;
 import com.common.im.presenter.ContactListPresenter;
 import com.common.im_ui.R;
 import com.common.im_ui.databinding.FragmentContactListLayoutBinding;
@@ -47,6 +51,7 @@ public class ContactPersonListFragment extends BaseMVPFragment<FragmentContactLi
     private ContactListAdapter mListAdapter;
     private String searchCondition;
     private EmptyViewLayout mEmptyViewLayout;
+    private boolean isSelectContact = false;//是否是选择联系人
 
     @Override
     protected FragmentContactListLayoutBinding getLayoutView() {
@@ -60,6 +65,9 @@ public class ContactPersonListFragment extends BaseMVPFragment<FragmentContactLi
 
     @Override
     protected void initView(View rootView) {
+        if (getArguments() != null) {
+            isSelectContact = getArguments().getBoolean(ContactListTabFragment.IS_SELECT_CONTACT, false);
+        }
         mViewBinding.tvSearch.setOnClickListener(this);
         mListAdapter = new ContactListAdapter(R.layout.item_contact_list_layout);
         LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
@@ -75,6 +83,18 @@ public class ContactPersonListFragment extends BaseMVPFragment<FragmentContactLi
         mListAdapter.setOnItemClickListener(new OnItemClickListener() {
             @Override
             public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
+                if (isSelectContact) {
+                    ContactListBean item = (ContactListBean) mListAdapter.getItem(position);
+                    //选择联系人模式
+                    if (getActivity() != null) {
+                        Intent intent = new Intent();
+                        intent.putExtra(ConversationHelper.TARGET_ID_KEY, item.friendId);
+                        intent.putExtra(ConversationHelper.CONVERSATION_TYPE_KEY, Conversation.ConversationType.PRIVATE.getValue());
+                        getActivity().setResult(Activity.RESULT_OK, intent);
+                        getActivity().finish();
+                    }
+                    return;
+                }
                 ContactListBean item = (ContactListBean) adapter.getItem(position);
                 goChat(view, item.friendId + "", item.friendNickname);
             }

+ 19 - 0
rong_im/common_im_ui/src/main/java/com/common/im/ui/contact/ContactRoomListFragment.java

@@ -1,5 +1,7 @@
 package com.common.im.ui.contact;
 
+import android.app.Activity;
+import android.content.Intent;
 import android.graphics.Color;
 import android.os.Bundle;
 import android.text.TextUtils;
@@ -17,6 +19,7 @@ import com.common.im.bean.ContactListBean;
 import com.common.im.bean.ContactRoomListBean;
 import com.common.im.contract.ContactListFragmentContract;
 import com.common.im.contract.ContactRoomListFragmentContract;
+import com.common.im.helper.ConversationHelper;
 import com.common.im.presenter.ContactListPresenter;
 import com.common.im.presenter.ContactRoomListPresenter;
 import com.common.im_ui.R;
@@ -54,6 +57,7 @@ public class ContactRoomListFragment extends BaseMVPFragment<FragmentContactRoom
     private ContactRoomListAdapter mListAdapter;
     private String searchCondition;
     private EmptyViewLayout mEmptyViewLayout;
+    private boolean isSelectContact = false;//是否是选择联系人
 
     @Override
     protected FragmentContactRoomListBinding getLayoutView() {
@@ -67,6 +71,9 @@ public class ContactRoomListFragment extends BaseMVPFragment<FragmentContactRoom
 
     @Override
     protected void initView(View rootView) {
+        if (getArguments() != null) {
+            isSelectContact = getArguments().getBoolean(ContactListTabFragment.IS_SELECT_CONTACT, false);
+        }
         mViewBinding.tvSearch.setOnClickListener(this);
         mListAdapter = new ContactRoomListAdapter(R.layout.item_contact_list_layout);
         LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
@@ -75,6 +82,18 @@ public class ContactRoomListFragment extends BaseMVPFragment<FragmentContactRoom
         mListAdapter.setOnItemClickListener(new OnItemClickListener() {
             @Override
             public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
+                if (isSelectContact) {
+                    ContactRoomListBean item = (ContactRoomListBean) adapter.getItem(position);
+                    //选择联系人模式
+                    if (getActivity() != null) {
+                        Intent intent = new Intent();
+                        intent.putExtra(ConversationHelper.TARGET_ID_KEY, item.getId());
+                        intent.putExtra(ConversationHelper.CONVERSATION_TYPE_KEY, Conversation.ConversationType.GROUP.getValue());
+                        getActivity().setResult(Activity.RESULT_OK, intent);
+                        getActivity().finish();
+                    }
+                    return;
+                }
                 ContactRoomListBean item = (ContactRoomListBean) adapter.getItem(position);
                 goChat(item.getId() + "", item.getName());
             }

+ 21 - 0
rong_im/common_im_ui/src/main/res/layout/activity_select_contact_layout.xml

@@ -0,0 +1,21 @@
+<?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"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <include
+        android:id="@+id/toolbar_include"
+        layout="@layout/common_toolbar_layout" />
+
+    <FrameLayout
+        android:id="@+id/fl_my_container"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_marginTop="10dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/toolbar_include" />
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 3 - 2
rong_im/kit/src/main/java/io/rong/imkit/conversation/extension/component/plugin/ScorePlugin.java

@@ -20,7 +20,7 @@ import io.rong.imlib.model.Conversation;
  * @author Ryan
  * 类说明:
  */
-public class ScorePlugin implements IPluginModule{
+public class ScorePlugin implements IPluginModule {
     Conversation.ConversationType conversationType;
     String targetId;
     Context context;
@@ -44,7 +44,8 @@ public class ScorePlugin implements IPluginModule{
         mRequestCode = ((index + 1) << 8) + (PictureConfig.CHOOSE_REQUEST & 0xff);
 
         ARouter.getInstance().build(RouterPath.ChatCenter.CHAT_SELECT_SCORE)
-                .withString("targetId",targetId)
+                .withString("targetId", targetId)
+                .withInt("conversationType", conversationType.getValue())
                 .navigation();
 
     }

+ 48 - 0
rong_im/kit/src/main/java/io/rong/imkit/utils/helper/OpenChatHelper.java

@@ -7,6 +7,13 @@ import com.cooleshow.base.utils.ToastUtil;
 import com.cooleshow.base.utils.Utils;
 
 import io.rong.imkit.RongIM;
+import io.rong.imkit.widget.RCChatShareLiveMessage;
+import io.rong.imkit.widget.RCChatShareMusicMessage;
+import io.rong.imlib.IRongCallback;
+import io.rong.imlib.MessageTag;
+import io.rong.imlib.RongIMClient;
+import io.rong.imlib.model.Conversation;
+import io.rong.imlib.model.Message;
 
 /**
  * Author by pq, Date on 2022/7/4.
@@ -28,4 +35,45 @@ public class OpenChatHelper {
         }
         RongIM.getInstance().startGroupChat(context, groupId, groupName);
     }
+
+    public static void sendShareLiveMessage(String targetId, int targetConversationType, String liveRoomId, String teacherAvatar, String teacherName, String liveDes) {
+        RCChatShareLiveMessage liveMessage = new RCChatShareLiveMessage();
+
+        liveMessage.setTeacherAvatar(teacherAvatar);
+        liveMessage.setRoomUID(liveRoomId);
+        liveMessage.setTeacherName(teacherName);
+        liveMessage.setLiveDescMessage(liveDes);
+        Conversation.ConversationType conversationType = getConversationType(targetConversationType);
+        Message locationMsg = Message.obtain(targetId, conversationType, liveMessage);
+        MessageTag annotation = liveMessage.getClass().getAnnotation(MessageTag.class);
+        if (annotation != null) {
+            locationMsg.setObjectName(annotation.value());
+        }
+        RongIM.getInstance().sendMessage(locationMsg, "直播分享", "[曲谱分享]", new IRongCallback.ISendMessageCallback() {
+            @Override
+            public void onAttached(Message message) {
+
+            }
+
+            @Override
+            public void onSuccess(Message message) {
+                ToastUtil.getInstance().showShort("分享成功");
+            }
+
+            @Override
+            public void onError(Message message, RongIMClient.ErrorCode errorCode) {
+                ToastUtil.getInstance().showShort("分享失败");
+            }
+        });
+    }
+
+    public static Conversation.ConversationType getConversationType(int value) {
+        Conversation.ConversationType[] values = Conversation.ConversationType.values();
+        for (int i = 0; i < values.length; i++) {
+            if (values[i].getValue() == value) {
+                return values[i];
+            }
+        }
+        return Conversation.ConversationType.PRIVATE;
+    }
 }

+ 9 - 8
rong_im/kit/src/main/res/layout/rc_chat_share_live.xml

@@ -26,16 +26,12 @@
 
         <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"/>
+            android:layout_height="1px"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/iv_avatar" />
 
         <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"
@@ -43,7 +39,11 @@
             android:paddingEnd="5dp"
             android:text="直播中"
             android:textColor="@color/white"
-            android:textSize="@dimen/sp_13" />
+            android:textSize="@dimen/sp_11"
+            app:layout_constraintBottom_toBottomOf="@+id/view_helper"
+            app:layout_constraintLeft_toLeftOf="@+id/iv_avatar"
+            app:layout_constraintRight_toRightOf="@+id/iv_avatar"
+            app:layout_constraintTop_toTopOf="@+id/view_helper" />
 
         <TextView
             android:id="@+id/tv_title_tip"
@@ -84,6 +84,7 @@
             android:layout_marginTop="11dp"
             android:layout_marginEnd="14dp"
             android:includeFontPadding="false"
+            android:paddingTop="10dp"
             android:textColor="@color/color_666666"
             android:textSize="@dimen/sp_14"
             app:layout_constraintLeft_toLeftOf="@+id/iv_avatar"

+ 1 - 1
rong_im/live/src/main/java/com/rong/io/live/config/LiveConfig.java

@@ -4,7 +4,7 @@ package com.rong.io.live.config;
  * Author by pq, Date on 2022/6/1.
  */
 public class LiveConfig {
-    public static boolean isNeedReInitRTC =false;
+    public static boolean isNeedReInitRTC = false;//因退出登录会销毁RTCSDK相关,所以需要重新初始化
     public static final int LIVE_MODE_PREVIEW = 1;//预览模式
     public static final int LIVE_MODE_LIVE_START = 2;//直播模式
     public static final int LIVE_STATUS_NORMAL = 1;//正常直播状态(包括预览或者直播中)

+ 2 - 0
student/src/main/java/com/cooleshow/student/ui/main/MainActivity.java

@@ -42,6 +42,7 @@ import com.google.android.material.bottomnavigation.BottomNavigationItemView;
 import com.google.android.material.bottomnavigation.BottomNavigationMenuView;
 import com.google.android.material.bottomnavigation.BottomNavigationView;
 import com.google.gson.Gson;
+import com.rong.io.live.config.LiveConfig;
 import com.tbruyelle.rxpermissions3.RxPermissions;
 
 import org.greenrobot.eventbus.EventBus;
@@ -261,6 +262,7 @@ public class MainActivity extends BaseMVPActivity<ActivityMainBinding, MainPrese
     public void loadEventBus(LoginStatusEvent event) {
         if (event != null && event.eventCode == LoginStatusConstants.LOGIN_OUT) {
             IMManager.getInstance().logout();
+            LiveConfig.isNeedReInitRTC = true;
             isNeedSetPushId = true;
             LogUtils.i("pq", "LoginStatusEvent:logout");
         }

+ 27 - 0
teacher/src/main/java/com/cooleshow/teacher/ui/live/TeacherLiveRoomActivity.java

@@ -18,6 +18,7 @@ import android.widget.RelativeLayout;
 import android.widget.TextView;
 
 import com.alibaba.android.arouter.facade.annotation.Route;
+import com.alibaba.android.arouter.launcher.ARouter;
 import com.bumptech.glide.Glide;
 import com.cooleshow.base.common.BaseApplication;
 import com.cooleshow.base.data.net.ApiException;
@@ -65,6 +66,7 @@ import java.util.List;
 import java.util.Map;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.constraintlayout.widget.ConstraintLayout;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
@@ -85,6 +87,7 @@ import cn.rongcloud.rtc.base.RCRTCResourceState;
 import io.reactivex.rxjava3.disposables.Disposable;
 import io.rong.imkit.IMCenter;
 import io.rong.imkit.picture.tools.DoubleUtils;
+import io.rong.imkit.utils.helper.OpenChatHelper;
 import io.rong.imlib.IRongCoreCallback;
 import io.rong.imlib.IRongCoreEnum;
 import io.rong.imlib.RongIMClient;
@@ -102,6 +105,7 @@ public class TeacherLiveRoomActivity extends BaseMVPActivity<ActivityTeacherLive
     public static final String ROOMID_KEY = "roomid_key";
     public static final int SYNC_ADD_LIKE_TIME = 10000;//同步点赞数时长(兼心跳功能)
     public static final int SEND_APP_BACKGROUND_MSG = 1001;//退到后台消息
+    public static final int SHARE_LIVE_REQUEST_CODE = 1002;//分享直播
 
 
     ImageView ivReverseCamera;
@@ -228,6 +232,7 @@ public class TeacherLiveRoomActivity extends BaseMVPActivity<ActivityTeacherLive
         mTvSnapUpBarrage = viewBinding.viewMainLayout.tvSnapUpBarrage;
         ivReverseCamera.setOnClickListener(this);
         ivLiveBeauty.setOnClickListener(this);
+        ivLiveShare.setOnClickListener(this);
         tvStartLive.setOnClickListener(this);
         tvClose.setOnClickListener(this);
         viewBinding.viewMainLayout.tvInput.setOnClickListener(this);
@@ -544,6 +549,13 @@ public class TeacherLiveRoomActivity extends BaseMVPActivity<ActivityTeacherLive
             finish();
             return;
         }
+
+        if (id == R.id.iv_live_share) {
+            //分享
+            ARouter.getInstance().build(RouterPath.ChatCenter.CHAT_SELECT_CONTACT)
+                    .navigation(this, SHARE_LIVE_REQUEST_CODE);
+            return;
+        }
         if (id == R.id.iv_reverse_camera) {
             //翻转摄像头
             presenter.reverseCamera();
@@ -1228,6 +1240,21 @@ public class TeacherLiveRoomActivity extends BaseMVPActivity<ActivityTeacherLive
 //        }
     }
 
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        if (resultCode == RESULT_OK) {
+            if (requestCode == SHARE_LIVE_REQUEST_CODE && data != null) {
+                String targetId = data.getStringExtra("targetId");
+                int conversationValue = data.getIntExtra("conversation", -1);
+                if (mRoomInfoBean != null && !TextUtils.isEmpty(targetId) && conversationValue != -1) {
+                    OpenChatHelper.sendShareLiveMessage(targetId,conversationValue,mRoomInfoBean.roomUid
+                            ,mRoomInfoBean.speakerPic,
+                            mRoomInfoBean.speakerName,mRoomInfoBean.liveRemark);
+                }
+            }
+        }
+    }
 
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {

+ 3 - 1
teacher/src/main/java/com/cooleshow/teacher/ui/main/MainActivity.java

@@ -39,6 +39,7 @@ import com.google.android.material.bottomnavigation.BottomNavigationItemView;
 import com.google.android.material.bottomnavigation.BottomNavigationMenuView;
 import com.google.android.material.bottomnavigation.BottomNavigationView;
 import com.google.android.material.snackbar.Snackbar;
+import com.rong.io.live.config.LiveConfig;
 import com.tbruyelle.rxpermissions3.RxPermissions;
 import com.tencent.open.im.IM;
 
@@ -115,7 +116,7 @@ public class MainActivity extends BaseMVPActivity<ActivityMainBinding, MainPrese
             setPositionItem(selectPos);
         }
         String intentResult = PushIntentParseHelper.getIntentMemoFrom(intent);
-        LogUtils.i("pq","intentResult:"+intentResult);
+        LogUtils.i("pq", "intentResult:" + intentResult);
         if (!TextUtils.isEmpty(intentResult)) {
             if (TextUtils.equals(intentResult, PushIntentParseHelper.RONG_PUSH_ACTION_TAG)) {
                 //融云推送相关
@@ -300,6 +301,7 @@ public class MainActivity extends BaseMVPActivity<ActivityMainBinding, MainPrese
     public void loadEventBus(LoginStatusEvent event) {
         if (event != null && event.eventCode == LoginStatusConstants.LOGIN_OUT) {
             IMManager.getInstance().logout();
+            LiveConfig.isNeedReInitRTC = true;
             JPushInterface.deleteAlias(getApplicationContext(), 1);
             isNeedSetPushId = true;
             LogUtils.i("pq", "LoginStatusEvent:logout");