diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 29440079..f8e8a865 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -189,7 +189,6 @@ android:name=".wxapi.WXEntryActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:exported="true" - android:taskAffinity="com.qxcm.qxlive" android:launchMode="singleTask"> diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/listener/MessageListenerSingleton.java b/moduleUtil/src/main/java/com/xscm/moduleutil/listener/MessageListenerSingleton.java index e9f922ea..138f6520 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/listener/MessageListenerSingleton.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/listener/MessageListenerSingleton.java @@ -91,10 +91,12 @@ public class MessageListenerSingleton { } public static MessageListenerSingleton getInstance() { - if (instance == null) { - instance = new MessageListenerSingleton(); + synchronized (MessageListenerSingleton.class) { + if (instance == null) { + instance = new MessageListenerSingleton(); + } + return instance; } - return instance; } /** @@ -160,111 +162,6 @@ public class MessageListenerSingleton { } } - - // 修改 joinGroup 方法 -// public void joinGroup(String roomId) { -// if (TextUtils.isEmpty(roomId)) { -// return; -// } -// -// // 使用同步块确保操作的原子性 -// synchronized (groupOperationLock) { -// if (isGroupOperationInProgress) { -// // 如果有操作正在进行,延迟执行 -// mainHandler.removeCallbacksAndMessages(null); -// mainHandler.postDelayed(() -> joinGroup(roomId), 100); -// return; -// } -// -// isGroupOperationInProgress = true; -// } -// -// -// // 在新线程中执行操作 -// new Thread(() -> { -// try { -// // 先退出当前群组 -// if (groupId != null && !groupId.equals(roomId)) { -// try { -// quitGroup(groupId); -// // 执行退出操作 -// // TIMGroupManager.getInstance().quitGroup(groupId); -// LogUtils.d("MessageListener", "退出群组: " + groupId); -// } catch (Exception e) { -// LogUtils.e("MessageListener", "退出群组失败: " + e.getMessage()); -// } -// } -// -// // 等待一小段时间确保退出完成 -// Thread.sleep(500); -// -// // 加入新群组 -// try { -// // 执行加入操作 -// -// ensureListenersAdded(); -// V2TIMManager.getInstance().joinGroup("room" + roomId, "申请加入", new V2TIMCallback() { -// @Override -// public void onSuccess() { -// Log.d("@@@", "加入im群组成功:"); -// -// groupId = roomId; -// } -// -// @Override -// public void onError(int code, String desc) { -// Log.d("@@@", "加入群组失败:" + code + "=" + desc); -// } -// }); -// -// groupId = roomId; -// LogUtils.d("MessageListener", "加入群组: " + roomId); -// } catch (Exception e) { -// LogUtils.e("MessageListener", "加入群组失败: " + e.getMessage()); -// } -// } catch (InterruptedException e) { -// Thread.currentThread().interrupt(); -// } finally { -// synchronized (groupOperationLock) { -// isGroupOperationInProgress = false; -// } -// } -// }).start(); -// -// -//// LogUtils.e("@@@", "加入房间的"+roomId); -//// if (groupId!=null){ -//// quitGroup(groupId); -//// } -//// -//// // 确保监听器已初始化并添加 -//// ensureListenersAdded(); -//// V2TIMManager.getInstance().joinGroup("room" + roomId, "申请加入", new V2TIMCallback() { -//// @Override -//// public void onSuccess() { -//// Log.d("@@@", "加入im群组成功:"); -//// -//// groupId = roomId; -//// } -//// -//// @Override -//// public void onError(int code, String desc) { -//// Log.d("@@@", "加入群组失败:" + code + "=" + desc); -//// } -//// }); -// -// if (tempGroupJoinListener == null) { -// tempGroupJoinListener = new OnMessageReceivedListener() { -// @Override -// public void onMessageReceived(RoomMessageEvent message) { -// // 处理消息 -// -// } -// }; -// addOnMessageReceivedListener(tempGroupJoinListener); -// } -// } - // 修改 joinGroup 方法,确保先退出再加入 public void joinGroup(String roomId) { if (TextUtils.isEmpty(roomId)) { @@ -341,7 +238,7 @@ public class MessageListenerSingleton { joinSuccess[0] = true; groupId = roomId; joinLatch.countDown(); - // 标记房间已加入 + // 标记房间已加入 markRoomJoined(roomId); } @@ -381,13 +278,11 @@ public class MessageListenerSingleton { simpleMsgListener = new V2TIMSimpleMsgListener() { @Override public void onRecvC2CTextMessage(String msgID, V2TIMUserInfo sender, String text) { -// notifyMessageReceived("C2C 文本消息:" + sender.getNickName() + " - " + text); LogUtils.d("C2C 文本消息 " + sender.getNickName()); } @Override public void onRecvC2CCustomMessage(String msgID, V2TIMUserInfo sender, byte[] customData) { -// notifyMessageReceived("C2C 自定义(信令)消息:" + sender.getNickName()); LogUtils.d("C2C 自定义(信令)消息 " + sender.getNickName()); String message = new String(customData, StandardCharsets.UTF_8); RoomMessageEvent event = GsonUtils.fromJson(message, RoomMessageEvent.class); @@ -396,13 +291,11 @@ public class MessageListenerSingleton { @Override public void onRecvGroupTextMessage(String msgID, String groupID, V2TIMGroupMemberInfo sender, String text) { -// notifyMessageReceived("群文本消息:群组 " + groupID + " 中 " + sender.getNickName() + " - " + text); LogUtils.d("群文本消息:群组 " + groupID + " 中 " + sender.getNickName()); } @Override public void onRecvGroupCustomMessage(String msgID, String groupID, V2TIMGroupMemberInfo sender, byte[] customData) { -// notifyMessageReceived("群自定义(信令)消息:群组 " + groupID + " 中 " + sender.getNickName()); LogUtils.d("收到群自定义消息:群组 " + groupID + " 中 " + sender.getNickName()); if (!groupID.equals("")) { String message = new String(customData, StandardCharsets.UTF_8); @@ -441,29 +334,16 @@ public class MessageListenerSingleton { @Override public void onMemberEnter(String groupID, List memberList) { // 有新成员加入群,该群所有的成员都能收到 -// for (V2TIMGroupMemberInfo member : memberList) { -// notifyMessageReceived("系统消息:" + member.getNickName() + " 加入了群组"); -// } + } @Override public void onMemberLeave(String groupID, V2TIMGroupMemberInfo member) { // 有成员离开群,该群所有的成员都能收到 -// notifyMessageReceived("系统消息:" + member.getNickName() + " 离开了群组"); } @Override public void onReceiveRESTCustomData(String groupID, byte[] customData) { - // 服务器发送的自定义系统通知 - // 将 byte[] 转换为 String - -// String message = new String(customData, StandardCharsets.UTF_8); -// RoomMessageEvent event = GsonUtils.fromJson(message, RoomMessageEvent.class); -// if (groupID.contains(SpUtil.getMyRoomId())) { -// notifyMessageReceived(event); -// } -// LogUtils.e("收到群自定义消息(系统):" + message); - String message = ""; try { @@ -506,11 +386,11 @@ public class MessageListenerSingleton { super.onTotalUnreadMessageCountChanged(totalUnreadCount); UnreadCountEvent event = CommonAppContext.getInstance().getUnreadCountEvent(); - if (event== null){ + if (event == null) { event = new UnreadCountEvent(); event.setBLong(0); } - event.setALong( totalUnreadCount); + event.setALong(totalUnreadCount); CommonAppContext.getInstance().setUnreadCountEvent(event); EventBus.getDefault().post(event); } @@ -602,141 +482,10 @@ public class MessageListenerSingleton { // 确保监听器已添加 private void ensureListenersAdded() { -// if (!listenersAdded) { initListeners(); addAllListeners(); -// listenersAdded = true; -// } } -// private void initListeners() { -// // 简单消息监听器 -// simpleMsgListener = new V2TIMSimpleMsgListener() { -// @Override -// public void onRecvC2CTextMessage(String msgID, V2TIMUserInfo sender, String text) { -//// notifyMessageReceived("C2C 文本消息:" + sender.getNickName() + " - " + text); -// LogUtils.d("C2C 文本消息 " + sender.getNickName()); -// } -// -// @Override -// public void onRecvC2CCustomMessage(String msgID, V2TIMUserInfo sender, byte[] customData) { -//// notifyMessageReceived("C2C 自定义(信令)消息:" + sender.getNickName()); -// LogUtils.d("C2C 自定义(信令)消息 " + sender.getNickName()); -// String message = new String(customData, StandardCharsets.UTF_8); -// RoomMessageEvent event = GsonUtils.fromJson(message, RoomMessageEvent.class); -// notifyMessageReceived(event); -// } -// -// @Override -// public void onRecvGroupTextMessage(String msgID, String groupID, V2TIMGroupMemberInfo sender, String text) { -//// notifyMessageReceived("群文本消息:群组 " + groupID + " 中 " + sender.getNickName() + " - " + text); -// LogUtils.d("群文本消息:群组 " + groupID + " 中 " + sender.getNickName()); -// } -// -// @Override -// public void onRecvGroupCustomMessage(String msgID, String groupID, V2TIMGroupMemberInfo sender, byte[] customData) { -//// notifyMessageReceived("群自定义(信令)消息:群组 " + groupID + " 中 " + sender.getNickName()); -// LogUtils.d("收到群自定义消息:群组 " + groupID + " 中 " + sender.getNickName()); -// if (!groupID.equals("")) { -// String message = new String(customData, StandardCharsets.UTF_8); -// RoomMessageEvent event = GsonUtils.fromJson(message, RoomMessageEvent.class); -// notifyMessageReceived(event); -// LogUtils.d("收到群自定义消息(信令):", message); -// }else { -// String message = new String(customData, StandardCharsets.UTF_8); -// LogUtils.d("收到群自定义消息(信令):", message); -// HeadlineBean event = GsonUtils.fromJson(message, HeadlineBean.class); -// EventBus.getDefault().post(event); -// } -// -// } -// }; -// V2TIMManager.getMessageManager().addAdvancedMsgListener(v2TIMAdvancedMsgListener); -// V2TIMManager.getInstance().addSimpleMsgListener(simpleMsgListener); -// -// v2TIMAdvancedMsgListener=new V2TIMAdvancedMsgListener() { -// @Override -// public void onRecvNewMessage(V2TIMMessage msg) { -// super.onRecvNewMessage(msg); -// if (msg.isBroadcastMessage()) { -// // 收到了广播消息 -// String message = new String(msg.getCustomElem().getData(), StandardCharsets.UTF_8); -// LogUtils.e("收到广播消息(系统):",message); -// } -// } -// }; -// -// groupListener = new V2TIMGroupListener() { -// @Override -// public void onMemberEnter(String groupID, List memberList) { -// // 有新成员加入群,该群所有的成员都能收到 -//// for (V2TIMGroupMemberInfo member : memberList) { -//// notifyMessageReceived("系统消息:" + member.getNickName() + " 加入了群组"); -//// } -// } -// -// @Override -// public void onMemberLeave(String groupID, V2TIMGroupMemberInfo member) { -// // 有成员离开群,该群所有的成员都能收到 -//// notifyMessageReceived("系统消息:" + member.getNickName() + " 离开了群组"); -// } -// -// @Override -// public void onReceiveRESTCustomData(String groupID, byte[] customData) { -// // 服务器发送的自定义系统通知 -// // 将 byte[] 转换为 String -// -//// String message = new String(customData, StandardCharsets.UTF_8); -//// RoomMessageEvent event = GsonUtils.fromJson(message, RoomMessageEvent.class); -//// if (groupID.contains(SpUtil.getMyRoomId())) { -//// notifyMessageReceived(event); -//// } -//// LogUtils.e("收到群自定义消息(系统):" + message); -// -// String message = ""; -// try { -// -// message = new String(customData, StandardCharsets.UTF_8); -// LogUtils.e("收到群自定义消息(系统):" + message); -// } catch (Exception e) { -// // 处理转换过程中可能出现的异常,例如记录日志 -// LogUtils.e("转换 customData 为 String 时出错:" + e.getMessage()); -// return; // 退出方法,避免后续代码执行 -// } -// -// RoomMessageEvent event = null; -// try { -// // 特殊处理某些消息类型 -// event = parseSpecialMessageTypes(message); -// if (event == null) { -// // 使用默认解析 -// event = GsonUtils.fromJson(message, RoomMessageEvent.class); -// } -// -//// event = GsonUtils.fromJson(message, RoomMessageEvent.class); -// } catch (Exception e) { -// // 处理 JSON 解析过程中可能出现的异常,例如记录日志 -// LogUtils.e("解析 JSON 数据时出错:" + e.getMessage()); -// return; // 退出方法,避免后续代码执行 -// } -// -// if (groupID.contains(SpUtil.getMyRoomId())) { -// notifyMessageReceived(event); -// } -// } -// }; -// -// V2TIMManager.getInstance().addGroupListener(groupListener); -// -// V2TIMConversationListener conversationListener = new V2TIMConversationListener() { -// @Override -// public void onTotalUnreadMessageCountChanged(long totalUnreadCount) { -// super.onTotalUnreadMessageCountChanged(totalUnreadCount); -// EventBus.getDefault().post(new UnreadCountEvent(totalUnreadCount)); -// } -// }; -// V2TIMManager.getConversationManager().addConversationListener(conversationListener); -// } private RoomMessageEvent parseSpecialMessageTypes(String message) { try { @@ -756,77 +505,6 @@ public class MessageListenerSingleton { } } - // public static MessageListenerSingleton getInstance() { -// if (instance == null) { -// instance = new MessageListenerSingleton(); -// } -// return instance; -// } - private OnMessageReceivedListener tempGroupJoinListener; -// public void joinGroup(String roomId) { -// -//// if (!mRoomId.isEmpty()){ -//// V2TIMManager.getInstance().quitGroup("room"+roomId, new V2TIMCallback() { -//// @Override -//// public void onSuccess() { -//// LogUtils.d("退出群组成功"); -//// } -//// -//// @Override -//// public void onError(int code, String desc) { -//// LogUtils.d("退出群组失败"); -//// } -//// }); -//// } -// mRoomId=roomId; -// -// V2TIMManager.getInstance().joinGroup("room" + mRoomId, "申请加入", new V2TIMCallback() { -// @Override -// public void onSuccess() { -// RoomMessageEvent.T t = new RoomMessageEvent.T(); -// t.setText("羽声严禁未成年人进行直播或打赏,官方将24小时在线巡查。我们提倡绿色直播,直播间严禁出现涉政、涉恐、涉黄、涉赌等违法违规内容,严禁宣传封建迷信、宗教极端思想、出现低俗色情、吸烟酗酒等内容,严禁违反社会主义核心价值观、践踏社会道德底线、诱导打赏、低俗 PK 、买卖金币等行为,请大家共同遵守、监督并及时举报。请勿相信各类刷钻、购买礼包、游戏币及电商贩卖等非官方广告信息,谨防网络诈骗。"); -// // 加入群组成功 -//// onMessageReceived(new RoomMessageEvent(1000, roomId, t)); -//// EventBus.getDefault().post(new RoomMessageEvent(1000, mRoomId, t)); -// notifyMessageReceived(new RoomMessageEvent(1000, mRoomId, t)); -// } -// -// @Override -// public void onError(int code, String desc) { -// // 加入群组失败 -// Log.d("@@@", "加入群组失败:" + code + "=" + desc); -// } -// }); -// -// if (tempGroupJoinListener == null) { -// tempGroupJoinListener = new OnMessageReceivedListener() { -// @Override -// public void onMessageReceived(RoomMessageEvent message) { -// // 处理消息 -// } -// }; -// addOnMessageReceivedListener(tempGroupJoinListener); -// } -// initListeners(); -// } - -// public static void quitGroup(String mRoomId){ -// -// V2TIMManager.getInstance().quitGroup("room"+mRoomId, new V2TIMCallback() { -// @Override -// public void onSuccess() { -// LogUtils.d("退出群组成功"); -// removeGroupListeners(); -// } -// -// @Override -// public void onError(int code, String desc) { -// LogUtils.d("退出群组失败", code,desc); -// removeGroupListeners(); -// } -// }); -// } - public void addOnMessageReceivedListener(OnMessageReceivedListener listener) { listeners.add(listener); } @@ -884,16 +562,6 @@ public class MessageListenerSingleton { } - // public static void reset(String roomId) { -// if (instance != null) { -// instance.listeners.clear(); -// V2TIMManager.getInstance().removeSimpleMsgListener(instance.simpleMsgListener); -// V2TIMManager.getInstance().removeGroupListener(instance.groupListener); -// isInitialized = false; -// instance = null; -// quitGroup(roomId); -// } -// } // RoomFragment.java 中添加 private final V2TIMSendCallback sendCallback = new V2TIMSendCallback() { @Override diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/rtc/AgoraManager.java b/moduleUtil/src/main/java/com/xscm/moduleutil/rtc/AgoraManager.java index 2c69251b..f897176d 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/rtc/AgoraManager.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/rtc/AgoraManager.java @@ -1,34 +1,28 @@ package com.xscm.moduleutil.rtc; -import static com.blankj.utilcode.util.SnackbarUtils.getView; -import static io.agora.rtc2.video.VideoEncoderConfiguration.*; import static io.agora.rtc2.video.VideoEncoderConfiguration.FRAME_RATE.FRAME_RATE_FPS_15; -import static io.agora.rtc2.video.VideoEncoderConfiguration.FRAME_RATE.FRAME_RATE_FPS_30; -import static io.agora.rtc2.video.VideoEncoderConfiguration.ORIENTATION_MODE.*; +import static io.agora.rtc2.video.VideoEncoderConfiguration.ORIENTATION_MODE.ORIENTATION_MODE_FIXED_LANDSCAPE; +import static io.agora.rtc2.video.VideoEncoderConfiguration.STANDARD_BITRATE; +import static io.agora.rtc2.video.VideoEncoderConfiguration.VD_1280x720; import android.annotation.SuppressLint; -import android.app.Activity; import android.content.Context; -import android.content.Intent; -import android.hardware.SensorManager; -import android.media.projection.MediaProjection; -import android.media.projection.MediaProjectionManager; import android.os.Handler; import android.os.Looper; import android.util.DisplayMetrics; import android.util.Log; import android.view.Display; -import android.view.OrientationEventListener; import android.view.SurfaceView; - import android.view.WindowManager; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import com.blankj.utilcode.util.*; +import com.blankj.utilcode.util.GsonUtils; +import com.blankj.utilcode.util.LogUtils; +import com.blankj.utilcode.util.PathUtils; +import com.blankj.utilcode.util.ThreadUtils; import com.liulishuo.okdownload.DownloadTask; import com.liulishuo.okdownload.StatusUtil; import com.liulishuo.okdownload.core.cause.EndCause; @@ -45,15 +39,12 @@ import com.xscm.moduleutil.listener.MessageListenerSingleton; import com.xscm.moduleutil.utils.Md5Utils; import com.xscm.moduleutil.utils.SpUtil; import com.xscm.moduleutil.utils.logger.Logger; -//import com.tencent.bugly.idasc.crashreport.CrashReport; import org.greenrobot.eventbus.EventBus; import java.io.File; import java.io.FileInputStream; -import java.lang.reflect.Field; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; @@ -112,8 +103,6 @@ public class AgoraManager { } private AgoraManager() { -// this.context = context.getApplicationContext(); -// init(CommonAppContext.getInstance().getCurrentEnvironment().getSwSdkAppId()); } @@ -123,8 +112,6 @@ public class AgoraManager { if (instance == null) { instance = new AgoraManager(); context = con.getApplicationContext(); // 使用ApplicationContext避免内存泄漏 -// init(CommonAppContext.getInstance().getCurrentEnvironment().getSwSdkAppId()); -// init(CommonAppContext.getInstance().getCurrentEnvironment().getSwSdkAppId()); } } } @@ -162,7 +149,6 @@ public class AgoraManager { if (rtcEngine != null) { return; } - ; synchronized (AgoraManager.class) { if (rtcEngine != null) { @@ -214,51 +200,17 @@ public class AgoraManager { /*Enable video module*/ rtcEngine.enableVideo(); - // Setup video encoding configs -// rtcEngine.setVideoEncoderConfiguration(new VideoEncoderConfiguration( -// VD_640x360, -// FRAME_RATE_FPS_30, -// STANDARD_BITRATE, -// ORIENTATION_MODE_FIXED_PORTRAIT -// )); - - /*Set up to play remote sound with receiver*/ rtcEngine.setDefaultAudioRoutetoSpeakerphone(true); - -// OrientationEventListener orientationListener = new OrientationEventListener(context, -// SensorManager.SENSOR_DELAY_NORMAL) { -// @Override -// public void onOrientationChanged(int orientation) { -// int angle = calculateScreenAngle(orientation); -// try { -// rtcEngine.setVideoOrientation(angle); // 通知声网引擎调整视频方向 -// } catch (Exception e) { -// Log.e("AgoraManager", "Set video orientation failed", e); -// } -// } -// }; -// orientationListener.enable(); // 启用监听 - } catch (Exception e) { Log.e("AgoraManager", "Failed to configure RtcEngine", e); } } } } - public static int calculateScreenAngle(int orientation) { - if (orientation >= 315 || orientation < 45) { - return 0; // 竖屏(0度) - } else if (orientation >= 45 && orientation < 135) { - return 90; // 横屏右(90度) - } else if (orientation >= 135 && orientation < 225) { - return 180; // 倒竖屏(180度) - } else { - return 270; // 横屏左(270度) - } - } + /** * 加入语音聊天房间 */ @@ -360,53 +312,13 @@ public class AgoraManager { } musicContentCenter = IAgoraMusicContentCenter.create(rtcEngine); contentCenterConfiguration = new MusicContentCenterConfiguration(); -// 已开启音乐内容中心项目的 App ID + // 已开启音乐内容中心项目的 App ID contentCenterConfiguration.appId = CommonAppContext.getInstance().getCurrentEnvironment().getSwSdkAppId(); -// 使用音乐内容中心的用户 ID。该 ID 可以和你加入 RTC 频道时使用的 uid 一致,但不能为 0 + // 使用音乐内容中心的用户 ID。该 ID 可以和你加入 RTC 频道时使用的 uid 一致,但不能为 0 contentCenterConfiguration.mccUid = uid; -// 填入用于鉴权的 Token + // 填入用于鉴权的 Token contentCenterConfiguration.token = SpUtil.getRtmToken(); -// 创建 IAgoraMusicContentCenterEventHandler,用于 SDK 向客户端发送音乐内容中心事件通知 -// contentCenterConfiguration.eventHandler = new IMusicContentCenterEventHandler() { -// @Override -// public void onPreLoadEvent(String requestId, long songCode, int percent, String lyricUrl, int status, int errorCode) { -// LogUtils.e("@@@1", "requestId: " + requestId + ", songCode: " + songCode + ", percent: " + percent + ", lyricUrl: " + lyricUrl + ", status: " + status + ", errorCode: " + errorCode); -// if (!lyricUrl.isEmpty() && percent == 100 && !isBjMusic) { -// getLyricsInstance(lyricUrl); -// } -//// musicPlayer.open(songCode, 0); -// } -// -// @Override -// public void onMusicCollectionResult(String requestId, int page, int pageSize, int total, Music[] list, int errorCode) { -// LogUtils.e("@@@2", "requestId: " + requestId + ", page: " + page + ", pageSize: " + pageSize + ", total: " + total); -// MusicBean musicBean = new MusicBean(); -// musicBean.setMusicList(Arrays.asList(list)); -// musicBean.setPage(page); -// EventBus.getDefault().post(musicBean); -// } -// -// @Override -// public void onMusicChartsResult(String requestId, MusicChartInfo[] list, int errorCode) { -// LogUtils.e("@@@", "requestId: " + requestId); -// } -// -// @Override -// public void onLyricResult(String requestId, long songCode, String lyricUrl, int errorCode) { -// LogUtils.e("@@@22", "requestId: " + requestId + ", songCode: " + songCode + ", lyricUrl: " + lyricUrl + ", errorCode: " + errorCode); -// if (lyricUrl != null && !isBjMusic) { -// getLyricsInstance(lyricUrl); -// } -// } -// -// @Override -// public void onSongSimpleInfoResult(String requestId, long songCode, String simpleInfo, int errorCode) { -// LogUtils.e("@@@", "requestId: " + requestId + ", songCode: " + songCode + ", simpleInfo: " + simpleInfo + ", errorCode: " + errorCode); -// } -// }; -// 初始化 IAgoraMusicContentCenter - musicContentCenter.initialize(contentCenterConfiguration); if (musicPlayer != null) { musicPlayer = null; @@ -421,12 +333,6 @@ public class AgoraManager { // getLyricsInstance(lyricUrl); } LogUtils.e("AgoraManager", "isPreload2: " + songCode, "percent: " + percent); - -// if (!lyricUrl.isEmpty() && percent == 100 && !isBjMusic) { -// musicPlayer.stop(); -// musicPlayer.open(songCode, 0); -//// getLyricsInstance(lyricUrl); -// } } @Override @@ -478,13 +384,6 @@ public class AgoraManager { @Override public void onUserJoined(int uid, int elapsed) {//远端用户加入频道 -// for (IRtcEngineEventHandler handler : eventHandlers) { -// if (handler != null) { -// handler.onUserJoined(uid, elapsed); -// -// } -// } - for (SoundLevelUpdateListener listener : soundLevelUpdateListeners) { if (listener != null) { ThreadUtils.runOnUiThread(() -> { @@ -505,19 +404,13 @@ public class AgoraManager { @Override public void onUserOffline(int uid, int reason) {//远端用户离开频道 -// for (IRtcEngineEventHandler handler : eventHandlers) { -// if (handler != null) { -// handler.onUserOffline(uid, reason); -// } for (SoundLevelUpdateListener listener : soundLevelUpdateListeners) { if (listener != null) { ThreadUtils.runOnUiThread(() -> { // 远程用户音量变化 listener.userOffline(uid, reason); -// } }); } -// } } SurfaceView renderView = null; rtcEngine.setupRemoteVideo(new VideoCanvas(null, Constants.RENDER_MODE_FIT, uid)); @@ -743,16 +636,6 @@ public class AgoraManager { if (rtcEngine != null) { options.clientRoleType = Constants.CLIENT_ROLE_BROADCASTER; -// options.autoSubscribeVideo = true; -// options.autoSubscribeAudio = true; -//// 不发布摄像头采集的视频 -// options.publishCameraTrack = false; -//// 不发布麦克风采集的视频 -// options.publishMicrophoneTrack = false; -//// 在频道中发布屏幕采集的视频 -// options.publishScreenCaptureVideo = true; -//// 在频道中发布屏幕采集的音频 -// options.publishScreenCaptureAudio = true; rtcEngine.setScreenCaptureScenario(Constants.ScreenScenarioType.SCREEN_SCENARIO_VIDEO); rtcEngine.updateChannelMediaOptions(options); } @@ -760,30 +643,7 @@ public class AgoraManager { public void post() { if (rtcEngine != null) { -// rtcEngine.setParameters("{\"che.video.mobile_1080p\":true}"); -// rtcEngine.setClientRole(Constants.CLIENT_ROLE_BROADCASTER); -// -// /*Enable video module*/ -// rtcEngine.enableVideo(); -// // Setup video encoding configs -// rtcEngine.setVideoEncoderConfiguration(new VideoEncoderConfiguration( -// VD_640x360, -// FRAME_RATE_FPS_15, -// STANDARD_BITRATE, -// ORIENTATION_MODE_ADAPTIVE -// )); -// /*Set up to play remote sound with receiver*/ -// rtcEngine.setDefaultAudioRoutetoSpeakerphone(true); - ScreenCaptureParameters screenCaptureParameters = new ScreenCaptureParameters(); -// screenCaptureParameters.captureVideo = true; -// screenCaptureParameters.videoCaptureParameters.width = 1440; -// screenCaptureParameters.videoCaptureParameters.height = 1940; -// screenCaptureParameters.videoCaptureParameters.framerate = 15; -// screenCaptureParameters.captureAudio = true; -// screenCaptureParameters.audioCaptureParameters.captureSignalVolume = 50; -//// screenCaptureParameters.videoCaptureParameters.bitrate = 500; -// rtcEngine.startScreenCapture(screenCaptureParameters); WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = manager.getDefaultDisplay(); @@ -810,26 +670,6 @@ public class AgoraManager { } - public void setExternalMediaProjection(MediaProjection[] mediaProjection){ - rtcEngine.setExternalMediaProjection(mediaProjection[0]); - } - - public void isPost(){ - if (rtcEngine != null){ - ScreenCaptureParameters screenCaptureParameters = new ScreenCaptureParameters(); - -// 设置新的屏幕共享参数 - screenCaptureParameters.captureVideo = true; - screenCaptureParameters.videoCaptureParameters.width = 1280; - screenCaptureParameters.videoCaptureParameters.height = 720; - screenCaptureParameters.videoCaptureParameters.framerate = 30; - -// 更新屏幕共享参数 - rtcEngine.updateScreenCaptureParameters(screenCaptureParameters); - - } - } - public void isMute(int index) { if (rtcEngine != null) { } @@ -841,13 +681,6 @@ public class AgoraManager { } } - public void stopMusicPlayer() { - if (musicPlayer != null) { - musicPlayer.stop(); - } - } - - /** * 完全销毁实例(只在应用退出时调用) */ @@ -900,8 +733,6 @@ public class AgoraManager { init(CommonAppContext.getInstance().getCurrentEnvironment().getSwSdkAppId()); } if (rtcEngine != null) { -// RtcConnection connection = new RtcConnection(); -// connection.channelId = mRoomId; if (connection == null) { connection = new RtcConnection(); connection.channelId = pkRoomId; @@ -927,9 +758,6 @@ public class AgoraManager { * @param uid */ public void muteLocalAudioStreamEx(boolean enabled, int uid) { -// RtcConnection connection = new RtcConnection(); -// connection.channelId = mRoomId; -// connection.localUid = uid; if (rtcEngine == null) { init(CommonAppContext.getInstance().getCurrentEnvironment().getSwSdkAppId()); } @@ -968,23 +796,6 @@ public class AgoraManager { return isLocalAudioEnabled; } - /** - * 添加事件监听器(用于全局回调) - */ -// public void addEventHandler(IRtcEngineEventHandler handler) { -// if (handler != null && !eventHandlers.contains(handler)) { -// eventHandlers.add(handler); -// } -// } - - /** - * 移除事件监听器 - */ -// public void removeEventHandler(IRtcEngineEventHandler handler) { -// if (handler != null) { -// eventHandlers.remove(handler); -// } -// } public void addSoundLevelListener(SoundLevelUpdateListener listener) { if (soundLevelUpdateListeners != null) { soundLevelUpdateListeners.add(listener); @@ -1303,25 +1114,19 @@ public class AgoraManager { public static void stopMuisc() { if (musicPlayer != null) { -// if (musicPlayer.getState() == io.agora.mediaplayer.Constants.MediaPlayerState.PLAYER_STATE_PLAYING) { musicPlayer.stop(); -// } } } public void pauseMusic() { if (musicPlayer != null) { -// if (musicPlayer.getState() == io.agora.mediaplayer.Constants.MediaPlayerState.PLAYER_STATE_PLAYING) { musicPlayer.pause(); -// } } } public void resumeMusic() { if (musicPlayer != null) { -// if (musicPlayer.getState() == io.agora.mediaplayer.Constants.MediaPlayerState.PLAYER_STATE_PLAYING) { musicPlayer.resume(); -// } } } @@ -1463,7 +1268,6 @@ public class AgoraManager { @Override public void retry(@NonNull DownloadTask task, @NonNull ResumeFailedCause cause) { com.xscm.moduleutil.utils.logger.Logger.e("retry", cause); -// CrashReport.postCatchedException(new RuntimeException("下载文件重试:" + cause == null ? "" : cause.name())); } @Override @@ -1483,18 +1287,11 @@ public class AgoraManager { MusicFileBean musicFileBean = new MusicFileBean(); musicFileBean.setFileData(convertFileToByteArray(task.getFile())); EventBus.getDefault().post(musicFileBean); - if (cause != null && cause != EndCause.COMPLETED) { -// CrashReport.postCatchedException(new RuntimeException("下载任务结束:" + cause == null ? "" : cause.name() + "_realCause:" + realCause == null ? "" : realCause.getMessage())); - } } }); } } - public void setmSongCode(long songCode) { - mSongCode = songCode; - } - public void loadLrc(long songCode) { mSongCode = songCode; if (musicContentCenter != null) { diff --git a/modulemain/src/main/AndroidManifest.xml b/modulemain/src/main/AndroidManifest.xml index 78097b32..b7a5e22c 100644 --- a/modulemain/src/main/AndroidManifest.xml +++ b/modulemain/src/main/AndroidManifest.xml @@ -4,6 +4,8 @@ + + @@ -47,7 +48,6 @@ clazz){ Intent intent = new Intent(this, clazz); - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); + intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity( intent); } diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/main/activity/MainActivity.java b/modulemain/src/main/java/com/xscm/modulemain/activity/main/activity/MainActivity.java index 552d50d6..b46419e9 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/main/activity/MainActivity.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/main/activity/MainActivity.java @@ -1,6 +1,7 @@ package com.xscm.modulemain.activity.main.activity; import android.Manifest; +import android.app.ActivityManager; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; @@ -97,6 +98,24 @@ public class MainActivity extends BaseMvpActivity 0) { + if (!isTaskRoot()) { + ActivityManager tasksManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); + tasksManager.moveTaskToFront(getTaskId(), ActivityManager.MOVE_TASK_NO_USER_ACTION); + } + } + + + // 处理新的intent +// setIntent(intent); + // 处理tab切换 +// checkTab(intent.getIntExtra("tab", -1)); + + } + @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -185,28 +204,6 @@ public class MainActivity extends BaseMvpActivity= 0) { selectShow(tab); diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/activity/PopularRoomActivity.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/activity/PopularRoomActivity.java index 3c513bfa..53d1b7dd 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/room/activity/PopularRoomActivity.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/room/activity/PopularRoomActivity.java @@ -42,14 +42,6 @@ public class PopularRoomActivity extends BaseMvpActivity()); MvpPre.getCarousels(1, page, "20", "2", ""); } }); - mAdapter.setOnRoomClickListener(new PopularRoomAdapter.OnRoomClickListener() { + mAdapter.setOnRoomClickListener((room, position) -> { + if ( ClickUtils.isFastDoubleClick()){ + return; + } - @Override - public void onRoomClick(TopRoom room, int position) { - if ( ClickUtils.isFastDoubleClick()){ - return; - } - - // 添加索引有效性检查 - if (position < 0 || position >= mAdapter.getData().size()) { - return; - } - TopRoom item = mAdapter.getItem(position); - if (item != null ) { - mBinding.coolWaitView.setVisibility(View.VISIBLE); - MessageListenerSingleton.getInstance().joinGroup(item.getRoom_id()); - RoomManager.getInstance().fetchRoomDataAndEnter(getApplicationContext(), item.getRoom_id(), "",null); - } + // 添加索引有效性检查 + if (position < 0 || position >= mAdapter.getData().size()) { + return; + } + TopRoom item = mAdapter.getItem(position); + if (item != null ) { + mBinding.coolWaitView.setVisibility(View.VISIBLE); + MessageListenerSingleton.getInstance().joinGroup(item.getRoom_id()); + RoomManager.getInstance().fetchRoomDataAndEnter(getApplicationContext(), item.getRoom_id(), "",null); } }); diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/activity/RedResultActivity.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/activity/RedResultActivity.java index 9ea7a3ae..8129520f 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/room/activity/RedResultActivity.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/room/activity/RedResultActivity.java @@ -6,13 +6,12 @@ import androidx.recyclerview.widget.LinearLayoutManager; import com.alibaba.android.arouter.facade.annotation.Route; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener; +import com.xscm.modulemain.BaseMvpActivity; import com.xscm.modulemain.R; import com.xscm.modulemain.activity.room.contacts.RedEnvelopesContacts; -import com.xscm.modulemain.activity.room.fragment.RedViewModel; import com.xscm.modulemain.activity.room.presenter.RedEnvelopesPresenter; import com.xscm.modulemain.adapter.RedAdapter; import com.xscm.modulemain.databinding.FragmentRedBinding; -import com.xscm.modulemain.BaseMvpActivity; import com.xscm.moduleutil.bean.RedpacketDetail; import com.xscm.moduleutil.utils.ARouteConstants; import com.xscm.moduleutil.utils.ImageUtils; @@ -27,17 +26,9 @@ import org.jetbrains.annotations.NotNull; @Route(path = ARouteConstants.ROOM_RED_RESULT) public class RedResultActivity extends BaseMvpActivity implements RedEnvelopesContacts.View { - private RedViewModel mViewModel; private RedAdapter redAdapter; - private int page = 1; private String redpacketId; -// public static RedResultActivity newInstance() { -// return new RedResultActivity(); -// } - - - @Override protected void initData() { redpacketId = getIntent().getStringExtra("redpacketId"); @@ -73,14 +64,10 @@ public class RedResultActivity extends BaseMvpActivity(), RoomContacts.View, PermissionCallbacks, OnMessageReceivedListener, QXRedPacketManager.QXRedPacketManagerDelegate { private var roomFragment: RoomFragment? = null - var commonPageAdapter: CommonPageAdapter? = null private var mRoomBean: RoomBean? = null - //房主信息 private var mRoomOwnerBean: RoomOwnerBean? = null - //房间用户信息 private var mRoomUserBean: RoomUserBean? = null private var mPitList: List = ArrayList() - var password: String? = null - var roomId: String? = null - var mRoomInfoResp: RoomInfoResp? = null - @JvmField @Autowired var taskId: String? = null @@ -217,13 +208,11 @@ class RoomActivity : BaseMvpActivity(), var ivQuan: ImageView? = null private var imYc = false - @JvmField - @Autowired var isOnline: Boolean = false private var silentCountDownTimer: SilentCountDownTimer? = null private var circularProgress: CircularProgressView? = null - private var publicScreenFragment: PublicScreenEaseChatFragment? = null // 添加成员变量 + private var publicScreenFragment: ChatRoomFragment? = null // 添加成员变量 // 添加成员变量 private var isLayoutAdjusted = false @@ -237,12 +226,81 @@ class RoomActivity : BaseMvpActivity(), private var qxRedPacketManager: QXRedPacketManager? = null + override fun doDone() { + isOnline = intent.getBooleanExtra("isOnline", false) + password = intent.getStringExtra("password") + roomId = intent.getStringExtra("roomId") + mRoomInfoResp = intent.getSerializableExtra("roomInfo") as RoomInfoResp? + LogUtils.dTag("RoomActivit", "doDone" + mRoomInfoResp.toString()) + taskId = intent.getStringExtra("taskId") + } override fun onNewIntent(intent: Intent, caller: ComponentCaller) { super.onNewIntent(intent, caller) + if ((intent.flags or Intent.FLAG_ACTIVITY_REORDER_TO_FRONT) > 0) { + if (!isTaskRoot) { + val tasksManager = getSystemService(ACTIVITY_SERVICE) as ActivityManager + tasksManager.moveTaskToFront(getTaskId(), ActivityManager.MOVE_TASK_NO_USER_ACTION) + } + } LogUtils.e("RoomActivity", "onNewIntent") } + + override fun onCreate(savedInstanceState: Bundle?) { + // 在super.onCreate之前设置主题以避免闪白屏 + setTheme(com.xscm.moduleutil.R.style.BaseAppTheme) // 设置你的主主题 + super.onCreate(savedInstanceState) + // // 进入房间10s后检查是否显示提示上麦对话框 + LogUtils.e("RoomActivity", "onCreate") + isSave = false + sDestroied = false + isMinimized = false + startKeepLiveService() //保活 + window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) + sActivityRef = WeakReference(this) + // 检查是否有保存的最小化状态 + checkAndRestoreMinimizeState() + if (onBackPressedDispatcher != null) { + onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + // 拦截返回键,显示退出对话框而不是直接退出 + showExitRoomDialog() + } + }) + } + // 获取Application实例并设置监听器 + val app = application as CommonAppContext + appStateListener = AppStateManager.getInstance() + app.setAppStateListener(appStateListener) + + // 通知RoomActivity已创建 + if (appStateListener != null) { + appStateListener?.onRoomActivityCreated(this) + } + + MessageListenerSingleton.getInstance().joinGroup(roomId) + // 处理房间数据 + SpUtil.saveMyRoomId(roomId) + // 检查是否从最小化状态恢复 + if (isMinimized) { + // 恢复房间状态 + resumeRoomState() + } + + V2TIMManager.getInstance().addIMSDKListener(imSdkListener); + // 在 RoomActivity 中获取单例实例 + // 在onCreate中初始化红包管理器实例,以便在整个Activity生命周期中使用 + qxRedPacketManager = QXRedPacketManager.getInstance() + // 获取单例实例并设置委托 + qxRedPacketManager!!.delegate = this; + + // 初始化礼物管理器 + GiftDisplayManager.getInstance().setupDisplayView(mBinding!!.giftContainer) + + initPublicScreenFragment() + } + // 添加弹框到管理列表 fun addActiveDialog(dialog: DialogInterface) { activeDialogs.add(dialog) @@ -252,14 +310,7 @@ class RoomActivity : BaseMvpActivity(), activeDialogFragments.add(dialogFragment) } - override fun doDone() { - isOnline = intent.getBooleanExtra("isOnline", false) - password = intent.getStringExtra("password") - roomId = intent.getStringExtra("roomId") - mRoomInfoResp = intent.getSerializableExtra("roomInfo") as RoomInfoResp? - LogUtils.dTag("RoomActivit", "doDone" + mRoomInfoResp.toString()) - taskId = intent.getStringExtra("taskId") - } + private var bgEffectView: View? = null @@ -481,7 +532,7 @@ class RoomActivity : BaseMvpActivity(), supportFragmentManager.findFragmentById(R.id.vp_room_pager) // 替换为你实际的容器 ID if (currentFragment is RoomCabinFragment) { currentFragment.onConfigurationChanged(newConfig) - initPublicScreenFragment() + } } @@ -489,7 +540,6 @@ class RoomActivity : BaseMvpActivity(), publicScreenFragment!!.someMethod() } - /** * 释放当前房间 */ @@ -506,68 +556,6 @@ class RoomActivity : BaseMvpActivity(), LogUtils.e("RoomActivity", "onDestroy") } - override fun onCreate(savedInstanceState: Bundle?) { - // 在super.onCreate之前设置主题以避免闪白屏 - setTheme(com.xscm.moduleutil.R.style.BaseAppTheme) // 设置你的主主题 - super.onCreate(savedInstanceState) - // // 进入房间10s后检查是否显示提示上麦对话框 - LogUtils.e("RoomActivity", "onCreate") - isSave = false - sDestroied = false - isMinimized = false -// overridePendingTransition(0, 0) // 关闭转场动画 - startKeepLiveService() //保活 - - window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) - sActivityRef = WeakReference(this) - - - // 检查是否有保存的最小化状态 - checkAndRestoreMinimizeState() - - if (onBackPressedDispatcher != null) { - onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { - override fun handleOnBackPressed() { - // 拦截返回键,显示退出对话框而不是直接退出 - showExitRoomDialog() - } - }) - } - - - // 获取Application实例并设置监听器 - val app = application as CommonAppContext - appStateListener = AppStateManager.getInstance() - app.setAppStateListener(appStateListener) - - // 通知RoomActivity已创建 - if (appStateListener != null) { - appStateListener?.onRoomActivityCreated(this) - } - - MessageListenerSingleton.getInstance().joinGroup(roomId) - // 处理房间数据 - SpUtil.saveMyRoomId(roomId) - // 检查是否从最小化状态恢复 - if (isMinimized) { - // 恢复房间状态 - resumeRoomState() - } - - V2TIMManager.getInstance().addIMSDKListener(imSdkListener); - // 在 RoomActivity 中获取单例实例 - // 在onCreate中初始化红包管理器实例,以便在整个Activity生命周期中使用 - qxRedPacketManager = QXRedPacketManager.getInstance() - // 获取单例实例并设置委托 - qxRedPacketManager!!.setDelegate(this); - - - // 初始化礼物管理器 - GiftDisplayManager.getInstance().setupDisplayView(mBinding!!.giftContainer) - - } - - private val imSdkListener = object : V2TIMSDKListener() { override fun onConnecting() {} @@ -602,7 +590,7 @@ class RoomActivity : BaseMvpActivity(), override fun onSelfInfoUpdated(info: V2TIMUserFullInfo?) {} } - private fun setview(resp: RoomInfoResp?) { + private fun setView(resp: RoomInfoResp?) { if (resp == null) return AppStateManager.getInstance().roomInfo = resp @@ -640,7 +628,6 @@ class RoomActivity : BaseMvpActivity(), userIds.append(userId) } } - initPublicScreenFragment() // 确保Fragment已完全初始化后再调用getUpRoomInfo if (publicScreenFragment != null && publicScreenFragment!!.isAdded && publicScreenFragment!!.view != null) { publicScreenFragment!!.getUpRoomInfo(resp) @@ -784,9 +771,6 @@ class RoomActivity : BaseMvpActivity(), 53 ) mBinding!!.roomTop.btnFollow.setTextColor(ColorManager.getInstance().buttonColorInt) - initPublicScreenFragment() - - // stub = mBinding.roomTop.stubButtons.getViewStub(); // 为透明 View 设置触摸监听 mBinding!!.roomTop.rlTop.setOnTouchListener { v, event -> @@ -1021,8 +1005,6 @@ class RoomActivity : BaseMvpActivity(), val params = layoutParams params.width = ConstraintLayout.LayoutParams.MATCH_CONSTRAINT params.height = ConstraintLayout.LayoutParams.MATCH_CONSTRAINT -// params.horizontalBias = 0.5f -// params.verticalBias = 0.5f floatingMagnetView!!.layoutParams = params } else { // 如果不是ConstraintLayout.LayoutParams,创建新的 @@ -1232,18 +1214,14 @@ class RoomActivity : BaseMvpActivity(), }) mBinding!!.roomTop.root.isClickable = false - setview(mRoomInfoResp) + setView(mRoomInfoResp) } private fun initPublicScreenFragment() { - // 检查是否已经存在 Fragment 实例(例如在配置更改后) - publicScreenFragment = supportFragmentManager - .findFragmentById(R.id.ease_container) as PublicScreenEaseChatFragment? - // 如果不存在,则创建新的实例 if (publicScreenFragment == null) { - publicScreenFragment = PublicScreenEaseChatFragment.newInstance(roomId) + publicScreenFragment = ChatRoomFragment.newInstance(roomId) supportFragmentManager.beginTransaction() .replace(R.id.ease_container, publicScreenFragment!!) .commitAllowingStateLoss() @@ -2348,27 +2326,6 @@ class RoomActivity : BaseMvpActivity(), return pitBean } - // TODO: 2025/8/29 排麦位上麦 - private fun getPitBean3(messageEvent: RoomMessageEvent): AuctionUserBean { - val roomAuction = AuctionUserBean() - roomAuction.user_id = messageEvent.text.fromUserInfo.user_id.toString() + "" - roomAuction.avatar = messageEvent.text.fromUserInfo.avatar - roomAuction.nickname = messageEvent.text.fromUserInfo.nickname - roomAuction.sex = messageEvent.text.fromUserInfo.sex.toString() + "" - roomAuction.charm = messageEvent.text.fromUserInfo.charm - - return roomAuction - } - - fun mus() { - if (mRoomInfoResp!!.user_info.is_mute == "1") { - ToastUtils.show("您已经被禁言") - } else { - switchMic(1) - } - } - - private fun querenPk(text: String, pk_id: String) { // 创建并显示确认对话框 val dialog = ConfirmDialog( @@ -2408,10 +2365,6 @@ class RoomActivity : BaseMvpActivity(), if (`is`) View.VISIBLE else View.GONE } - fun setDiany(`is`: Boolean) { -// mBinding.flaoat.setVisibility(is? VISIBLE : GONE); - } - fun setOnlineNumber(number: Int) { mBinding!!.roomTop.tvNum.text = number.toString() + "" } @@ -2633,28 +2586,6 @@ class RoomActivity : BaseMvpActivity(), return false } - - private fun quitUpRoom() { - // 清理最小化状态 - clearMinimizeState() - isMinimized = false - - // 执行退出房间逻辑 - CommonAppContext.getInstance().isPlaying = false - CommonAppContext.getInstance().isShow = false - CommonAppContext.getInstance().playId = null - QXGiftPlayerManager.getInstance(this).destroyEffectSvga() - // 停止屏幕捕获和其他资源 -// AgoraManager.getInstance(this).stopScreenCapture(); - AgoraManager.getInstance(this).leaveRoom() - // AgoraManager.getInstance(this).stopMusicPlayer(); - AgoraManager.getInstance(this).cleanup() - - MyRoomSingleton.getInstance().onExitRoom() - MessageListenerSingleton.quitGroup(roomId) - cleanupResources() - } - private fun minimizeToBackground() { isMinimized = true // 保存最小化状态和房间ID @@ -2667,6 +2598,12 @@ class RoomActivity : BaseMvpActivity(), } QXGiftPlayerManager.getInstance(applicationContext).destroyEffectSvga() + val am = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager + val tasks = am.appTasks // 获取当前应用的任务栈 + tasks.forEach { task -> + Log.d("TaskStack", "任务栈ID:${task.taskInfo.id} currId:${this.getTaskId()},包含的Activity:${task.taskInfo.baseActivity?.className}") + } + if (ActivityUtils.getActivityList().size <= 1){ singleTaskToActivity(MainActivity::class.java) }else{ @@ -3092,7 +3029,6 @@ class RoomActivity : BaseMvpActivity(), userIds.append(userId) } } - initPublicScreenFragment() if (!isFinishing && !isDestroyed) { resetFragment() upHeight() @@ -3800,13 +3736,9 @@ class RoomActivity : BaseMvpActivity(), } } + @SuppressLint("UseCompatLoadingForDrawables") override fun postRoomInfo(resp: RoomInfoResp?) { if (resp == null) { -// CommonAppContext.getInstance().isShow = false; -// CommonAppContext.getInstance().isPlaying = false; -// ToastUtils.showShort("您已经掉线,需要重新进入房间!"); -// ARouter.getInstance().build(ARouteConstants.ME) -// .navigation(); // 只有在没有房间信息时才重新获取 if (mRoomInfoResp == null) { cleanupResources() @@ -3819,9 +3751,6 @@ class RoomActivity : BaseMvpActivity(), val roomBean = resp.room_info if (roomBean!!.type_id.equals("6")) { - -// upHeight() - initPublicScreenFragment() if (!isFinishing && !isDestroyed) { resetFragment() upHeight() @@ -3848,7 +3777,6 @@ class RoomActivity : BaseMvpActivity(), mBinding!!.roomTop.btnFollow.text = "" } } - initPublicScreenFragment() if (!isFinishing && !isDestroyed) { resetFragment() upHeight() @@ -3856,7 +3784,7 @@ class RoomActivity : BaseMvpActivity(), Log.e("Fragment", "Fragment transaction skipped due to state loss.") } - if (mRoomUserBean?.getIs_collect() == 1) { + if (mRoomUserBean?.is_collect == 1) { mBinding!!.roomTop.btnFollow.background = resources.getDrawable(com.xscm.moduleutil.R.mipmap.yishouc) mBinding!!.roomTop.btnFollow.text = "" diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/activity/SearchActivity.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/activity/SearchActivity.java index 7ce894e3..81e443a3 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/room/activity/SearchActivity.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/room/activity/SearchActivity.java @@ -33,6 +33,7 @@ import com.xscm.moduleutil.widget.dialog.CommonDialog; import java.util.ArrayList; import java.util.List; +import java.util.Objects; /* * 搜索页面 @@ -111,41 +112,29 @@ public class SearchActivity extends BaseMvpActivity { + MvpPre.saveSearchHistory(Objects.requireNonNull(mSearchRecordAdapter.getItem(position)).t); + MvpPre.search(Objects.requireNonNull(mSearchRecordAdapter.getItem(position)).t); }); //搜索历史点击 - mSearchHistoryAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { - @Override - public void onItemClick(BaseQuickAdapter adapter, View view, int position) { - mBinding.editQuery.setText(mSearchHistoryAdapter.getItem(position)); - try { - mBinding.editQuery.setSelection(mSearchHistoryAdapter.getItem(position).length()); - } catch (Exception e) { - e.printStackTrace(); - } + mSearchHistoryAdapter.setOnItemClickListener((adapter, view, position) -> { + mBinding.editQuery.setText(mSearchHistoryAdapter.getItem(position)); + try { + mBinding.editQuery.setSelection(mSearchHistoryAdapter.getItem(position).length()); + } catch (Exception e) { + e.printStackTrace(); } }); //关注或取消关注 - mSearchUserResultAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() { - @Override - public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) { - UserResultResp item = mSearchUserResultAdapter.getItem(position); - MvpPre.followUser(item.getUser_id(), item.getFollow().equals("0") ? 1 : 2, position); - } + mSearchUserResultAdapter.setOnItemChildClickListener((adapter, view, position) -> { + UserResultResp item = mSearchUserResultAdapter.getItem(position); + MvpPre.followUser(item.getUser_id(), item.getFollow().equals("0") ? 1 : 2, position); }); //用户列表点击事件 mSearchUserResultAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { @Override public void onItemClick(BaseQuickAdapter adapter, View view, int position) { UserResultResp item = mSearchUserResultAdapter.getItem(position); - if (item != null) { -// ARouter.getInstance().build(ARouteConstants.NEW_HOME_PAGE).withString("userId", item.getUser_id()).navigation(); - } } }); @@ -154,40 +143,32 @@ public class SearchActivity extends BaseMvpActivity { + RoomSearchResp item = mSearchRoomResultAdapter.getItem(position); + if (item != null) { + RoomManager.getInstance().fetchRoomDataAndEnter(getApplicationContext(), item.getRoom_id(), "",null); } }); - mBinding.ivDelete.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (commonDialog == null) { - commonDialog = new CommonDialog(SearchActivity.this); - commonDialog.setmOnClickListener(SearchActivity.this); - } - commonDialog.show(); + mBinding.ivDelete.setOnClickListener(v -> { + if (commonDialog == null) { + commonDialog = new CommonDialog(SearchActivity.this); + commonDialog.setmOnClickListener(SearchActivity.this); } + commonDialog.show(); }); mBinding.ivClose.setOnClickListener(v -> { if (!StringUtils.isEmpty(keyWord)) { @@ -243,7 +224,6 @@ public class SearchActivity extends BaseMvpActivity 2) { @@ -262,8 +242,6 @@ public class SearchActivity extends BaseMvpActivity { diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/ChatRoomFragment.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/ChatRoomFragment.java new file mode 100644 index 00000000..36cbbae6 --- /dev/null +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/ChatRoomFragment.java @@ -0,0 +1,728 @@ +package com.xscm.modulemain.activity.room.fragment; + +import android.graphics.Color; +import android.os.Bundle; +import android.os.CountDownTimer; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.blankj.utilcode.util.GsonUtils; +import com.blankj.utilcode.util.LogUtils; +import com.tencent.imsdk.v2.V2TIMManager; +import com.tencent.imsdk.v2.V2TIMMessage; +import com.tencent.imsdk.v2.V2TIMSendCallback; +import com.xscm.modulemain.R; +import com.xscm.modulemain.activity.room.activity.RoomActivity; +import com.xscm.modulemain.activity.room.contacts.ChatRoomContacts; +import com.xscm.modulemain.activity.room.presenter.ChatRoomPresenter; +import com.xscm.modulemain.adapter.EaseChatAdapter; +import com.xscm.modulemain.databinding.RoomFragementTransEaseChatBinding; +import com.xscm.modulemain.dialog.RoomUserInfoFragment; +import com.xscm.moduleutil.base.BaseMvpFragment; +import com.xscm.moduleutil.bean.RoomInputEvent; +import com.xscm.moduleutil.bean.RoomMessageEvent; +import com.xscm.moduleutil.bean.RoomSettingEvent; +import com.xscm.moduleutil.bean.UserInfo; +import com.xscm.moduleutil.bean.room.Children; +import com.xscm.moduleutil.bean.room.EMMessageInfo; +import com.xscm.moduleutil.bean.room.EmotionDeatils; +import com.xscm.moduleutil.bean.room.RoomInfoResp; +import com.xscm.moduleutil.bean.room.RoomUserBean; +import com.xscm.moduleutil.event.RoomJoinMountModel; +import com.xscm.moduleutil.event.RoomTaskEvent; +import com.xscm.moduleutil.listener.MessageListenerSingleton; +import com.xscm.moduleutil.rtc.MusicPlayBean; +import com.xscm.moduleutil.utils.SpUtil; +import com.xscm.moduleutil.utils.logger.Logger; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +/** + * @author qx + * @data 2025/6/17 + * @description: 聊天室 + */ +public class ChatRoomFragment extends BaseMvpFragment + implements ChatRoomContacts.View { + + private final static String TAG = "聊天室"; + private boolean isBottom = true; + private int count = 0; + private RoomInfoResp roomInfoResp; + private EaseChatAdapter easeChatAdapter; + private CountDownTimer countDownTimer; + private String roomId; + private MessageListenerSingleton.PublicScreenMessageListener messageListener; + + // 清屏 + public void someMethod() { + easeChatAdapter.clearData(); + } + + public static ChatRoomFragment newInstance(String roomId) { + ChatRoomFragment transEaseChatFragment = new ChatRoomFragment(); + Bundle bundle = new Bundle(); + bundle.putString("roomId", roomId); + transEaseChatFragment.setArguments(bundle); + return transEaseChatFragment; + } + + @Override + protected ChatRoomPresenter bindPresenter() { + return new ChatRoomPresenter(this, getActivity()); + } + + @Override + public void initArgs(Bundle arguments) { + super.initArgs(arguments); + roomId = arguments.getString("roomId"); + } + + + @Override + public void onDestroyView() { + onFragmentShowDestroy(); + super.onDestroyView(); + } + + public void onFragmentShowDestroy() { + + if (countDownTimer != null) { + countDownTimer.cancel(); + } + if (messageListener != null) { + LogUtils.e("移除监听器"); + MessageListenerSingleton.getInstance().removePublicScreenMessageListener(messageListener); + } + } + + @Override + protected void initData() { + onChatRoomViewCreation(); + } + + /** + * 登录聊天室 + */ + public void onChatRoomViewCreation() { + // 先移除旧的监听器 + if (messageListener != null) { + MessageListenerSingleton.getInstance().removePublicScreenMessageListener(messageListener); + messageListener = null; + } + // 设置消息监听器 + setupMessageListener(); + + // 检查是否有缓存的消息需要处理 + checkAndProcessCachedMessages(); + } + + /** + * 设置消息监听器 + */ + private void setupMessageListener() { + // 创建并添加监听器 + messageListener = message -> { + // 确保在主线程更新 UI + if (getActivity() != null) { + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + handleRoomMessage(message); + } + }); + } + }; + MessageListenerSingleton.getInstance().addPublicScreenMessageListener(messageListener); + } + + /** + * 检查并处理缓存的消息 + */ + private void checkAndProcessCachedMessages() { + if (roomId == null || roomId.isEmpty()) { + return; + } + + // 延迟一小段时间,确保监听器已注册 + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + // 获取并处理缓存的消息 + List cachedMessages = MessageListenerSingleton.getInstance().getAndClearCachedMessages(roomId); + if (!cachedMessages.isEmpty()) { + LogUtils.d("PublicScreenEaseChatFragment", "处理缓存消息数量: " + cachedMessages.size()); + for (RoomMessageEvent message : cachedMessages) { + handleRoomMessage(message); + } + } + } + }, 300); // 延迟300ms确保监听器已注册 + } + + @Override + protected void initListener() { + mBinding.recycleViewPublic.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { + if (newState == RecyclerView.SCROLL_STATE_IDLE) { + LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); + //屏幕中最后一个可见子项的position + int lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition(); + //当前屏幕所看到的子项个数 + int visibleItemCount = layoutManager.getChildCount(); + //当前RecyclerView的所有子项个数 + int totalItemCount = layoutManager.getItemCount(); + //RecyclerView的滑动状态 + if (visibleItemCount > 0 && lastVisibleItemPosition == totalItemCount - 1) { + if (mBinding.tvCount != null) { + mBinding.tvCount.setVisibility(View.GONE); + } + isBottom = true; + count = 0; + } else { + isBottom = false; + } + } + } + }); + } + + public void getUpRoomInfo(RoomInfoResp resp) { + this.roomInfoResp = resp; + // 确保Fragment视图已创建 + if (isAdded() && getActivity() != null && mBinding != null) { + // 确保适配器已初始化 + if (easeChatAdapter == null) { + initChatAdapter(); + } + if (easeChatAdapter != null) { + easeChatAdapter.clearData(); + } + this.roomId = roomInfoResp.getRoom_info().getRoom_id(); + + RoomMessageEvent.T t = new RoomMessageEvent.T(); + t.setText("羽声严禁未成年人进行直播或打赏,官方将24小时在线巡查。我们提倡绿色直播,直播间严禁出现涉政、涉恐、涉黄、涉赌等违法违规内容,严禁宣传封建迷信、宗教极端思想、出现低俗色情、吸烟酗酒等内容,严禁违反社会主义核心价值观、践踏社会道德底线、诱导打赏、低俗 PK 、买卖金币等行为,请大家共同遵守、监督并及时举报。请勿相信各类刷钻、购买礼包、游戏币及电商贩卖等非官方广告信息,谨防网络诈骗。"); + // 加入群组成功 + handleRoomMessage(new RoomMessageEvent(1000, roomId, t)); + onChatRoomViewCreation(); + + } else { + // 如果视图尚未准备好,延迟执行 + if (getActivity() != null) { + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + // 使用post延迟执行,确保视图已创建 + if (getView() != null) { + getView().post(new Runnable() { + @Override + public void run() { + getUpRoomInfo(resp); + } + }); + } + } + }); + } + } + } + + @Override + protected void initView() { + LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext()); + mBinding.recycleViewPublic.setLayoutManager(linearLayoutManager); + initChatAdapter(); + easeChatAdapter.setOnItemClickListener((adapter, view, position) -> { + EMMessageInfo item = easeChatAdapter.getItem(position); + RoomMessageEvent emMessage = item.getEmMessage(); + if (emMessage.getText().getFromUserInfo() != null) { + RoomUserInfoFragment.show(roomInfoResp.getRoom_info().getRoom_id(), emMessage.getText().getFromUserInfo().getUser_id() != 0 ? emMessage.getText().getFromUserInfo().getUser_id() + "" : emMessage.getText().getFromUserInfo().getId() + "", emMessage.getText().getFromUserInfo().getPit_number(), getHostUser(roomInfoResp.getUser_info()), false, 5, isNumberWhether(), getChildFragmentManager()); + } + + }); +// //判断是否开启公屏 + setUpPublicScreen(); + mBinding.tvCount.setOnClickListener(this::onClick); + mBinding.tvTabAll.setOnClickListener(this::onClick); + mBinding.tvTabUser.setOnClickListener(this::onClick); + mBinding.tvTabSystem.setOnClickListener(this::onClick); + + } + + /** + * 初始化聊天适配器 + */ + private void initChatAdapter() { + if (easeChatAdapter == null) { + easeChatAdapter = new EaseChatAdapter(); + // 添加空值检查,确保mBinding和recycleViewPublic都不为null + if (mBinding != null) { + mBinding.recycleViewPublic.setAdapter(easeChatAdapter); + } + } + } + + private int isNumberWhether() { + if (roomInfoResp.getUser_info().getPit_number() == 9) { + return 1; + } + return 0; + } + + private int getHostUser(RoomUserBean item) { + if (item.getPit_number() != 0) { + if (item.getIs_room_owner() == 1) { + return 1; + } else if (item.getIs_management() == 1) { + return 2; + } else if (item.getIs_host() == 1) { + return 3; + } else { + return 4; + } + } else { + if (item.getIs_room_owner() == 1) { + return 1; + } else if (item.getIs_management() == 1) { + return 2; + } else if (item.getIs_host() == 1) { + return 3; + } + return 4; + } + } + + private void setUpPublicScreen() { + if (mBinding.recycleViewPublic.getChildCount() > 0) { + mBinding.recycleViewPublic.removeAllViews(); + } + mBinding.recycleViewPublic.setVisibility(View.VISIBLE);//开启消息列表 + mBinding.llHeadTab.setVisibility(View.GONE); + mBinding.tvClose.setVisibility(View.GONE); + count = 0;//未读数0 + isBottom = true; + } + + @Override + protected int getLayoutId() { + return R.layout.room_fragement_trans_ease_chat; + } + + + public void onClick(View view) { + int view_id = view.getId(); + if (view_id == R.id.tv_tab_all) { + easeChatAdapter.setShowType(EaseChatAdapter.SHOW_TYPE_ALL); + mBinding.tvTabAll.setTextColor(Color.parseColor("#FFFFFF")); + mBinding.tvTabAll.setTextSize(14); + + mBinding.tvTabUser.setTextColor(Color.parseColor("#FFFFFF")); + mBinding.tvTabSystem.setTextColor(Color.parseColor("#FFFFFF")); + mBinding.tvTabSystem.setBackgroundResource(0); + mBinding.tvTabUser.setBackgroundResource(0); + mBinding.tvTabUser.setTextSize(12); + mBinding.tvTabSystem.setTextSize(12); + + } else if (view_id == R.id.tv_tab_user) { + easeChatAdapter.setShowType(EaseChatAdapter.SHOW_TYPE_USER); + mBinding.tvTabUser.setTextColor(Color.parseColor("#FFFFFF")); + mBinding.tvTabUser.setTextSize(14); + + mBinding.tvTabAll.setTextColor(Color.parseColor("#FFFFFF")); + mBinding.tvTabSystem.setTextColor(Color.parseColor("#FFFFFF")); + mBinding.tvTabSystem.setBackgroundResource(0); + mBinding.tvTabAll.setBackgroundResource(0); + mBinding.tvTabAll.setTextSize(12); + mBinding.tvTabSystem.setTextSize(12); + } else if (view_id == R.id.tv_tab_system) { + easeChatAdapter.setShowType(EaseChatAdapter.SHOW_TYPE_SYSTEM); + + mBinding.tvTabSystem.setTextColor(Color.parseColor("#FFFFFF")); + mBinding.tvTabSystem.setTextSize(14); + + mBinding.tvTabAll.setTextColor(Color.parseColor("#FFFFFF")); + mBinding.tvTabUser.setTextColor(Color.parseColor("#FFFFFF")); + mBinding.tvTabUser.setBackgroundResource(0); + mBinding.tvTabAll.setBackgroundResource(0); + mBinding.tvTabAll.setTextSize(12); + mBinding.tvTabUser.setTextSize(12); + } else if (view_id == R.id.tv_count) { + mBinding.recycleViewPublic.scrollToPosition(easeChatAdapter.getItemCount() - 1); + mBinding.tvCount.setVisibility(View.GONE); + } + + } + + public void fasong(RoomInputEvent roomInputEvent) { + String message = roomInputEvent.text; + RoomMessageEvent.T t = new RoomMessageEvent.T(); + t.setText(message); + t.setFromUserInfo(SpUtil.getUserInfo()); + RoomMessageEvent roomMessageEvent = new RoomMessageEvent(1, roomInfoResp.getRoom_info().getRoom_id(), t); + handleRoomMessage(roomMessageEvent); + String json = GsonUtils.toJson(roomMessageEvent); + // 转换为 byte[] + byte[] binaryData = json.getBytes(StandardCharsets.UTF_8); + // 创建自定义消息 + V2TIMMessage v2TIMMessage = V2TIMManager.getMessageManager().createCustomMessage(binaryData); + // 发送消息 + V2TIMManager.getMessageManager().sendMessage(v2TIMMessage, null, "room" + roomInfoResp.getRoom_info().getRoom_id(), V2TIMMessage.V2TIM_PRIORITY_NORMAL, false, null, new V2TIMSendCallback() { + @Override + public void onProgress(int progress) { + // 自定义消息不会回调进度 + } + + @Override + public void onSuccess(V2TIMMessage message) { + // 发送群聊自定义消息成功 + EventBus.getDefault().post(new RoomTaskEvent()); + } + + @Override + public void onError(int code, String desc) { + // 发送群聊自定义消息失败 + } + }); + } + public void sendChatEmoji(EmotionDeatils emotionDeatils) { + EmotionDeatils event = new EmotionDeatils(); + if (emotionDeatils != null && emotionDeatils.getChildren() != null && !emotionDeatils.getChildren().isEmpty() && !emotionDeatils.getChildren().isEmpty()) { + int position = new Random().nextInt(emotionDeatils.getChildren().size()); + Children children = emotionDeatils.getChildren().get(position); + event.setImage(children.getImage()); + event.setAnimate_image(emotionDeatils.getAnimate_image()); + } else { + event = emotionDeatils; + } + RoomMessageEvent roomMessageEvent = new RoomMessageEvent(); + roomMessageEvent.setRoomId(roomId); + roomMessageEvent.setMsgType(2);//这是表情类型,1:单发文本消息 2:单发表情消息 + UserInfo userInfo = SpUtil.getUserInfo(); + RoomMessageEvent.T t = new RoomMessageEvent.T(); + t.setFromUserInfo(userInfo); + t.setEmoji(event); + roomMessageEvent.setText(t); + handleRoomMessage(roomMessageEvent); + String json = GsonUtils.toJson(roomMessageEvent); + // 转换为 byte[] + byte[] binaryData = json.getBytes(StandardCharsets.UTF_8); + // 创建自定义消息 + V2TIMMessage v2TIMMessage = V2TIMManager.getMessageManager().createCustomMessage(binaryData); + // 发送消息 + V2TIMManager.getMessageManager().sendMessage(v2TIMMessage, null, "room" + roomId, V2TIMMessage.V2TIM_PRIORITY_NORMAL, false, null, new V2TIMSendCallback() { + @Override + public void onProgress(int progress) { + // 自定义消息不会回调进度 + } + + @Override + public void onSuccess(V2TIMMessage message) { + // 发送群聊自定义消息成功 + } + + @Override + public void onError(int code, String desc) { + // 发送群聊自定义消息失败 + } + }); + + + } + + public void handleRoomMessage(RoomMessageEvent message) { + if (message == null) return; + + if (easeChatAdapter == null) { + easeChatAdapter = new EaseChatAdapter(); + } + + if (message.getRoomId() == null) { + return; + } + + if (roomId == null || !message.getRoomId().contains(roomId)) { + return; + } + + // 使用Handler将消息处理放到消息队列中,避免阻塞 + if (messageHandler.hasMessages(MSG_HANDLE_ROOM_MESSAGE)) { + // 如果队列中已有待处理消息,将当前消息加入队列 + Message msg = Message.obtain(); + msg.what = MSG_HANDLE_ROOM_MESSAGE; + msg.obj = message; + messageHandler.sendMessage(msg); + } else { + // 立即处理第一条消息 + processRoomMessage(message); + // 标记有待处理消息 + messageHandler.sendEmptyMessageDelayed(MSG_HANDLE_ROOM_MESSAGE, 100); + } + } + + private static final int MSG_HANDLE_ROOM_MESSAGE = 1001; + private final Handler messageHandler = new Handler(Looper.getMainLooper()) { + private List messageQueue = new ArrayList<>(); + + @Override + public void handleMessage(@NonNull Message msg) { + if (msg.what == MSG_HANDLE_ROOM_MESSAGE) { + if (!messageQueue.isEmpty()) { + // 批量处理消息 + processBatchMessages(messageQueue); + messageQueue.clear(); + } else if (msg.obj instanceof RoomMessageEvent) { + // 处理单条消息 + processRoomMessage((RoomMessageEvent) msg.obj); + } + } + } + }; + + private void processBatchMessages(List messages) { + if (messages.isEmpty() || easeChatAdapter == null) return; + + List messageInfos = new ArrayList<>(); + for (RoomMessageEvent message : messages) { + EMMessageInfo info = createMessageInfoIfNeeded(message); + if (info != null) { + messageInfos.add(info); + } + if (getActivity() instanceof RoomActivity) { + ((RoomActivity) getActivity()).roomInfoEvent(message); + } + } + + if (!messageInfos.isEmpty()) { + easeChatAdapter.addData(messageInfos); + scrollToBottomIfNeed(); + } + } + + private void processRoomMessage(RoomMessageEvent message) { + if (message == null) return; + + int msgType = message.getMsgType(); + RoomMessageEvent.T text = message.getText(); + + switch (msgType) { + case 1001: + if (text != null) { + RoomJoinMountModel roomJoinMountModel = new RoomJoinMountModel( + message.getRoomId(), text.getJia_jia(), 2); + EventBus.getDefault().post(roomJoinMountModel); + } + postAndAddMessage(message); + break; + + case 123: + easeChatAdapter.clearData(); + postAndAddMessage(message); + break; + case 1002: + case 1012: + case 1011: + case 1014: + case 1013: + case 1026: + case 1015: + case 1021: + case 1034: + case 1035: + case 1050: + case 1054: + case 1051: + case 1052: + case 1053: + case 1055: + case 1056: + case 1057: + case 1059: + case 1060: + case 1061: + case 1025: + case 1058: + if (getActivity() instanceof RoomActivity) { + ((RoomActivity) getActivity()).roomInfoEvent(message); + } + break; + + case 124: + if (text != null && text.getText() != null) { + try { + RoomMessageEvent.text parsedText = GsonUtils.fromJson( + text.getText(), RoomMessageEvent.text.class); + if (parsedText != null) { + MusicPlayBean musicPlayBean = new MusicPlayBean(); + musicPlayBean.setPosition(parsedText.getPosition()); + EventBus.getDefault().post(musicPlayBean); + } + } catch (Exception e) { + LogUtils.e("解析音乐播放消息失败", e); + } + } + break; + + case 1007: + case 1018: + case 1006: + case 1017: + case 1016: + if (text != null && text.getFromUserInfo() != null && + text.getFromUserInfo().getUser_id() == SpUtil.getUserId()) { + EMMessageInfo info = new EMMessageInfo(message); + easeChatAdapter.addData(info); + scrollToBottomIfNeed(); + } + if (getActivity() instanceof RoomActivity) { + ((RoomActivity) getActivity()).roomInfoEvent(message); + } + break; + + case 1003: + case 1004: + case 1000: + case 1: + case 2: + case 1030: + case 1033: + case 1032: + case 1039: + postAndAddMessage(message); + break; + + case 1038: + addSingleMessage(message); + break; + + case 1049: +// if (text != null && text.getStep() != 3) { + postAndAddMessage(message); +// } + break; + + case 1005: +// EventBus.getDefault().post(message); + if (getActivity() instanceof RoomActivity) { + ((RoomActivity) getActivity()).roomInfoEvent(message); + } + if (text != null && text.getText() != null) { + addSingleMessage(message); + } + break; + + default: +// EventBus.getDefault().post(message); + if (getActivity() instanceof RoomActivity) { + ((RoomActivity) getActivity()).roomInfoEvent(message); + } + break; + } + } + + private EMMessageInfo createMessageInfoIfNeeded(RoomMessageEvent message) { + int msgType = message.getMsgType(); + RoomMessageEvent.T text = message.getText(); + + switch (msgType) { + case 1001: + case 1002: + case 123: + case 1003: + case 1004: + case 1000: + case 1: + case 2: + case 1030: + case 1033: + case 1032: + case 1039: + case 1049: + return new EMMessageInfo(message); + + case 1005: + if (text != null && text.getText() != null) { + return new EMMessageInfo(message); + } + break; + + case 1038: + return new EMMessageInfo(message); + } + + return null; + } + + private void addSingleMessage(RoomMessageEvent message) { + if (easeChatAdapter != null) { + if (message.getMsgType() == 1049) { + if (message.getText().getStep() != 3) { + easeChatAdapter.addData(new EMMessageInfo(message)); + scrollToBottomIfNeed(); + } + } else { + easeChatAdapter.addData(new EMMessageInfo(message)); + scrollToBottomIfNeed(); + } + } + } + + private void postAndAddMessage(RoomMessageEvent message) { + if (getActivity() instanceof RoomActivity) { + ((RoomActivity) getActivity()).roomInfoEvent(message); + } + addSingleMessage(message); + } + + // 优化 scrollToBottomIfNeed 方法 + private void scrollToBottomIfNeed() { + if (isBottom && easeChatAdapter != null) { + int itemCount = easeChatAdapter.getItemCount(); + if (itemCount > 0) { + mBinding.recycleViewPublic.scrollToPosition(itemCount - 1); + } + } else { + count++; + mBinding.tvCount.setText(count + "条新消息"); + mBinding.tvCount.setVisibility(View.VISIBLE); + + // 当未读消息过多时,限制数量显示 + if (count > 99) { + mBinding.tvCount.setText("99+条新消息"); + } + } + } + + + @Subscribe(threadMode = ThreadMode.MAIN) + public void roomJoinMount(RoomSettingEvent roomSetting) { + if (roomSetting == null) { + easeChatAdapter.clearData(); + } + } + + /** + * 房间信息 + * + * @param resp + */ + @Subscribe(threadMode = ThreadMode.MAIN) + public void roomInfo(RoomInfoResp resp) { + this.roomInfoResp = resp; + } + +} diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/FriendshipRoomFragment.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/FriendshipRoomFragment.java index cb81cfae..58615f71 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/FriendshipRoomFragment.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/FriendshipRoomFragment.java @@ -71,7 +71,6 @@ public class FriendshipRoomFragment extends BaseRoomFragment mWheatViews = new ArrayList<>(); - private boolean topIsAnimate = false;//定义是否在播放svga,顶部俄 - private boolean centerIsAnimate = false; - /// 中间的 - private boolean bottomIsAnimate = false; RoomConcernDialogFragment dialogFragment; private Map userViewMap = new HashMap<>(); @@ -108,7 +103,6 @@ public class FriendshipRoomFragment extends BaseRoomFragment { -// if (data != null) { -// // 处理数据 -// roomInfoUpdate(data); -// } -// }); - return super.onCreateView(inflater, container, savedInstanceState); - } - @Override public void onConcernSelected(RoomRelationBean selectedDean, FriendUserBean relationshipList) { @@ -176,11 +151,8 @@ public class FriendshipRoomFragment extends BaseRoomFragment pitList = roomInfoResp.getRoom_info().getPit_list(); -// if (pitList != null && !pitList.isEmpty()) { -// try { -// RoomPitBean pitBean = pitList.get(Integer.parseInt(pitNumber) - 1); RoomPitBean pitBean = mWheatViews.get(Integer.parseInt(pitNumber) - 1).pitBean; pitBean.setUser_id(userId + ""); pitBean.setAvatar(fromUserInfo.getAvatar()); @@ -520,14 +461,10 @@ public class FriendshipRoomFragment extends BaseRoomFragment pitList = roomInfoResp.getRoom_info().getPit_list(); -// if (pitList != null && !pitList.isEmpty()) { -// try { -// RoomPitBean pitBean = pitList.get(Integer.parseInt(pitNumber) - 1); RoomPitBean pitBean = mWheatViews.get(Integer.parseInt(pitNumber) - 1).pitBean; pitBean.setUser_id(""); pitBean.setAvatar(""); @@ -562,19 +488,12 @@ public class FriendshipRoomFragment extends BaseRoomFragment 10) { -// continue; -// } -// -// RoomFriendshipWheatView object = mWheatViews.get(Integer.parseInt(roomPitBean.getPit_number()) - 1); -// -// if (object != null) { -// object.setData(roomPitBean); -// } else { -// continue; -// } -// } } - // 在 initData() 方法中初始化映射关系 -//初始化对应的map private void initUserViewMap() { userViewMap.clear(); // 注意:这里需要确保 pitBean 和 getUser_id() 在初始化时已经设置 @@ -713,71 +609,6 @@ public class FriendshipRoomFragment extends BaseRoomFragment0){ -// for (int i = 0; i < messageEvent.getText().getToUserInfos().size(); i++) { -// UserInfo toUserInfo = messageEvent.getText().getToUserInfos().get(i); -// -// } -// }else { -// -// -// RoomPitBean pitBean = mBinding.wheatView9.pitBean; -// if (pitBean.getUser_id().equals(messageEvent.getText().getToUserInfo().getUser_id() + "")) { -// pitBean.setCharm(messageEvent.getText().getToUserInfo().getCharm()); -// mBinding.wheatView9.setCharm(messageEvent.getText().getToUserInfo().getCharm()); -// return; -// } -// RoomPitBean pitBean1 = mBinding.wheatView10.pitBean; -// if (pitBean1.getUser_id().equals(messageEvent.getText().getToUserInfo().getUser_id() + "")) { -// pitBean1.setCharm(messageEvent.getText().getToUserInfo().getCharm()); -// mBinding.wheatView10.setCharm(messageEvent.getText().getToUserInfo().getCharm()); -//// mBinding.wheatView10.setData(pitBean1); -// return; -// } -// RoomPitBean pitBean2 = mBinding.wheatView1.pitBean; -// if (pitBean2.getUser_id().equals(messageEvent.getText().getToUserInfo().getUser_id() + "")) { -// pitBean2.setCharm(messageEvent.getText().getToUserInfo().getCharm()); -//// mBinding.wheatView1.setData(pitBean2); -// mBinding.wheatView1.setCharm(messageEvent.getText().getToUserInfo().getCharm()); -// return; -// } -// RoomPitBean pitBean3 = mBinding.wheatView2.pitBean; -// if (pitBean3.getUser_id().equals(messageEvent.getText().getToUserInfo().getUser_id() + "")) { -// pitBean3.setCharm(messageEvent.getText().getToUserInfo().getCharm()); -//// mBinding.wheatView2.setData(pitBean3); -// mBinding.wheatView2.setCharm(messageEvent.getText().getToUserInfo().getCharm()); -// return; -// } -// RoomPitBean pitBean4 = mBinding.wheatView3.pitBean; -// if (pitBean4.getUser_id().equals(messageEvent.getText().getToUserInfo().getUser_id() + "")) { -// pitBean4.setCharm(messageEvent.getText().getToUserInfo().getCharm()); -//// mBinding.wheatView3.setData(pitBean4); -// mBinding.wheatView3.setCharm(messageEvent.getText().getToUserInfo().getCharm()); -// return; -// } -// RoomPitBean pitBean5 = mBinding.wheatView4.pitBean; -// if (pitBean5.getUser_id().equals(messageEvent.getText().getToUserInfo().getUser_id() + "")) { -// pitBean5.setCharm(messageEvent.getText().getToUserInfo().getCharm()); -//// mBinding.wheatView4.setData(pitBean5); -// mBinding.wheatView4.setCharm(messageEvent.getText().getToUserInfo().getCharm()); -// return; -// } -// RoomPitBean pitBean6 = mBinding.wheatView5.pitBean; -// if (pitBean6.getUser_id().equals(messageEvent.getText().getToUserInfo().getUser_id() + "")) { -// pitBean6.setCharm(messageEvent.getText().getToUserInfo().getCharm()); -//// mBinding.wheatView5.setData(pitBean6); -// mBinding.wheatView5.setCharm(messageEvent.getText().getToUserInfo().getCharm()); -// return; -// } -// RoomPitBean pitBean7 = mBinding.wheatView6.pitBean; -// if (pitBean7.getUser_id().equals(messageEvent.getText().getToUserInfo().getUser_id() + "")) { -// pitBean7.setCharm(messageEvent.getText().getToUserInfo().getCharm()); -//// mBinding.wheatView6.setData(pitBean7); -// mBinding.wheatView6.setCharm(messageEvent.getText().getToUserInfo().getCharm()); -// return; -// } -// } } public void event1058(RoomMessageEvent messageEvent) { @@ -833,6 +664,7 @@ public class FriendshipRoomFragment extends BaseRoomFragment updateFriendshipState(FriendshipPartType.WAIT)); -// tvHeart.setOnClickListener(v -> updateFriendshipState(FriendshipPartType.HEART)); -// tvHand.setOnClickListener(v -> updateFriendshipState(FriendshipPartType.HAND)); - } private void queren() { @@ -1051,30 +877,6 @@ public class FriendshipRoomFragment extends BaseRoomFragment 0) { Logger.d("显示 iv_22 动画 - 心动值: " + heartList1.getHeartNum()); -// mBinding.iv22.setVisibility(View.VISIBLE); mBinding.imX2.setVisibility(View.VISIBLE); mBinding.tv2.setVisibility(View.VISIBLE); mBinding.tv2.setText(heartList1.getHeartNum() + ""); - // 添加回调确认动画是否加载成功 -// mBinding.iv22.setCallback(new SVGACallback() { -// @Override -// public void onRepeat() { -// Logger.d("SVGA onRepeat"); -// } -// -// @Override -// public void onStep(int i, double v) { -// // 每一步的回调 -// } -// -// @Override -// public void onPause() { -// Logger.d("SVGA onPause"); -// } -// -// @Override -// public void onFinished() { -// Logger.d("SVGA onFinished"); -// // 如果需要循环播放,可以在这里重新开始 -// if (mBinding.iv22.getVisibility() == View.VISIBLE) { -// mBinding.iv22.startAnimation(); -// } -// } -// }); -// if (!centerIsAnimate) { -// // 强制刷新视图 -// mBinding.iv22.requestLayout(); -// mBinding.iv22.invalidate(); -// -// ImageUtils.loadDecorationAvatar2(0, mBinding.iv22); -// mBinding.iv22.startAnimation(); -// centerIsAnimate = true; -// } } else { mBinding.imX2.setVisibility(View.GONE); -// mBinding.iv22.setVisibility(View.GONE); mBinding.tv2.setVisibility(View.GONE); -// mBinding.iv22.stopAnimation(); - centerIsAnimate = false; } if (heartList2 != null && heartList2.getHeartNum() > 0) { mBinding.imX1.setVisibility(View.VISIBLE); -// mBinding.iv11.setVisibility(View.VISIBLE); mBinding.tv1.setVisibility(View.VISIBLE); mBinding.tv1.setText(StringUtil.toWan2(heartList2.getHeartNum() + "", 1)); -// mBinding.tv1.setText(heartList2.getHeartNum() + ""); -// if (!topIsAnimate) { -// // 强制刷新视图 -// mBinding.iv11.requestLayout(); -// mBinding.iv11.invalidate(); -// -// mBinding.iv11.startAnimation(); -// topIsAnimate = true; -// ImageUtils.loadDecorationAvatar2(0, mBinding.iv11); -// } } else { mBinding.imX1.setVisibility(View.GONE); -// mBinding.iv11.setVisibility(View.GONE); mBinding.tv1.setVisibility(View.GONE); -// mBinding.iv11.stopAnimation(); - topIsAnimate = false; } if (heartList3 != null && heartList3.getHeartNum() > 0) { mBinding.imX3.setVisibility(View.VISIBLE); -// mBinding.iv33.setVisibility(View.VISIBLE); mBinding.tv3.setVisibility(View.VISIBLE); mBinding.tv3.setText(StringUtil.toWan2(heartList3.getHeartNum() + "", 2)); -// if (!bottomIsAnimate) { -// // 强制刷新视图 -// mBinding.iv33.requestLayout(); -// mBinding.iv33.invalidate(); -// -// mBinding.iv33.startAnimation(); -// bottomIsAnimate = true; -// ImageUtils.loadDecorationAvatar2(0, mBinding.iv33); -// } } else { mBinding.imX3.setVisibility(View.GONE); -// mBinding.iv33.setVisibility(View.GONE); mBinding.tv3.setVisibility(View.GONE); -// mBinding.iv33.stopAnimation(); - bottomIsAnimate = false; } } else { mBinding.imX2.setVisibility(GONE); mBinding.imX1.setVisibility(GONE); mBinding.imX3.setVisibility(GONE); -// mBinding.iv22.setVisibility(GONE); -// mBinding.iv11.setVisibility(GONE); -// mBinding.iv33.setVisibility(GONE); -// mBinding.iv22.stopAnimation(); -// mBinding.iv11.stopAnimation(); -// mBinding.iv33.stopAnimation(); - topIsAnimate = false; - centerIsAnimate = false; - bottomIsAnimate = false; mBinding.tv1.setVisibility(GONE); mBinding.tv2.setVisibility(GONE); mBinding.tv3.setVisibility(GONE); @@ -1308,19 +1025,9 @@ public class FriendshipRoomFragment extends BaseRoomFragment= 3) { - md1 = roomInfoResp.getFriend_info().getHeart_list().get(0); - md2 = roomInfoResp.getFriend_info().getHeart_list().get(1); - md3 = roomInfoResp.getFriend_info().getHeart_list().get(2); - } - if (pitBean != null && pitBean.getUser_id() != null && pitBean.getUser_id().equals(SpUtil.getUserId() + "")) { - ToastUtils.showShort("不能给自己助力哦"); - return; - } - if (pitBean.getPit_number().equals("1")) { - if (md2 != null && md2.getHeartNum() > 0 && mBinding.wheatView6.pitBean != null) { - // 弹出礼物视图 - songGift(pitBean); - } else { - ToastUtils.showShort("暂未有心动连线,快去送TA礼物"); - } - return; - } - if (pitBean.getPit_number().equals("2")) { - if (md1 != null && md1.getHeartNum() > 0 && mBinding.wheatView5.pitBean != null) { - songGift(pitBean); - } else { - ToastUtils.showShort("暂未有心动连线,快去送TA礼物"); - } - return; - } - if (pitBean.getPit_number().equals("3")) { - if (md3 != null && md3.getHeartNum() > 0 && mBinding.wheatView4.pitBean != null) { - songGift(pitBean); - } else { - ToastUtils.showShort("暂未有心动连线,快去送TA礼物"); - } - return; - } - if (pitBean.getPit_number().equals("4")) { - if (md3 != null && md3.getHeartNum() > 0 && mBinding.wheatView3.pitBean != null) { - songGift(pitBean); - } else { - ToastUtils.showShort("暂未有心动连线,快去送TA礼物"); - } - return; - } - if (pitBean.getPit_number().equals("5")) { - if (md1 != null && md1.getHeartNum() > 0 && mBinding.wheatView2.pitBean != null) { - songGift(pitBean); - } else { - ToastUtils.showShort("暂未有心动连线,快去送TA礼物"); - } - return; - } - if (pitBean.getPit_number().equals("6")) { - if (md2 != null && md2.getHeartNum() > 0 && mBinding.wheatView1.pitBean != null) { - songGift(pitBean); - } else { - ToastUtils.showShort("暂未有心动连线,快去送TA礼物"); - } - return; - } - } - } - - private void setVisibilityZL() { - FriendInfo.HeartList md1 = null; //中心的集合 - FriendInfo.HeartList md2 = null; //顶部的集合 - FriendInfo.HeartList md3 = null; //底部的集合 - if (roomInfoResp.getFriend_info().getHeart_list() != null && !roomInfoResp.getFriend_info().getHeart_list().isEmpty()) { - if (roomInfoResp.getFriend_info().getHeart_list().size() >= 3) { - md1 = roomInfoResp.getFriend_info().getHeart_list().get(0); - md2 = roomInfoResp.getFriend_info().getHeart_list().get(1); - md3 = roomInfoResp.getFriend_info().getHeart_list().get(2); - - } - } - } - - /// 设置中线展示 private void configPowerBtn() { @@ -1469,14 +1086,7 @@ public class FriendshipRoomFragment extends BaseRoomFragment 0) { if (mBinding.wheatView2.pitBean.getUser_id().equals(SpUtil.getUserId() + "")) { mBinding.wheatView2.setLockZl(false); @@ -1493,21 +1103,10 @@ public class FriendshipRoomFragment extends BaseRoomFragment 0) { if (mBinding.wheatView1.pitBean.getUser_id().equals(SpUtil.getUserId() + "")) { mBinding.wheatView1.setLockZl(false); @@ -1525,14 +1124,6 @@ public class FriendshipRoomFragment extends BaseRoomFragment()); } @@ -1689,17 +1266,12 @@ public class FriendshipRoomFragment extends BaseRoomFragment { -// if (getActivity() != null) { -// ImageUtils.clearDiskCache(getActivity()); -// } -// }).start(); } - /** - * 安全地停止并释放SVGA资源 - * - * @param svgaView SVGAImageView实例 - */ - private void stopAndReleaseSVGA(com.opensource.svgaplayer.SVGAImageView svgaView) { - if (svgaView != null) { - try { - // 停止动画 - svgaView.stopAnimation(); - // 清除回调 - svgaView.setCallback(null); - // 释放资源 - svgaView.clear(); - } catch (Exception e) { - LogUtils.e("Error releasing SVGA: " + e.getMessage()); - } - } - } - - @Override public void onDestroyView() { // 在视图销毁前释放资源 diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/HotListFragment.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/HotListFragment.java index e263b052..7f56b6d7 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/HotListFragment.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/HotListFragment.java @@ -106,40 +106,25 @@ public class HotListFragment extends BaseMvpFragment()); MvpPre.getRoomList(2, page+"", "20", "1", label_id); } }); - mAdapter.setOnRoomClickListener(new HotAdapter.OnRoomClickListener() { - - @Override - public void onRoomClick(TopRoom room, int position) { - if ( ClickUtils.isFastDoubleClick()){ - return; - } - voiceCategoryFragment.showLoading(); - // 添加索引有效性检查 - if (position < 0 || position >= mAdapter.getData().size()) { - return; - } - TopRoom item = mAdapter.getItem(position); - if (item != null ) { -// MessageListenerSingleton.getInstance().joinGroup(item.getRoom_id()); -// RoomManager.getInstance().fetchRoomDataAndEnter(getActivity(), item.getRoom_id() +"",""); - MessageListenerSingleton.getInstance().joinGroup(item.getRoom_id()); - - // 等待一段时间确保退出完成 -// try { -// Thread.sleep(500); -// } catch (InterruptedException e) { -// Thread.currentThread().interrupt(); -// } - RoomManager.getInstance().fetchRoomDataAndEnter(getActivity(), item.getRoom_id(), "",null); -// MvpPre.getRoomIn(item.getRoom_id(), ""); - } + mAdapter.setOnRoomClickListener((room, position) -> { + if ( ClickUtils.isFastDoubleClick()){ + return; + } + voiceCategoryFragment.showLoading(); + // 添加索引有效性检查 + if (position < 0 || position >= mAdapter.getData().size()) { + return; + } + TopRoom item = mAdapter.getItem(position); + if (item != null ) { + MessageListenerSingleton.getInstance().joinGroup(item.getRoom_id()); + RoomManager.getInstance().fetchRoomDataAndEnter(getActivity(), item.getRoom_id(), "",null); } }); } @@ -151,14 +136,14 @@ public class HotListFragment extends BaseMvpFragment data, int type) { - if (data != null && data.size() > 0) { + if (data != null && !data.isEmpty()) { if (page == 1) { mAdapter.setNewData(data); // 刷新时替换数据 } else { // 检查是否有重复数据 boolean hasDuplicate = false; List currentData = mAdapter.getData(); - if (!currentData.isEmpty() && data.size() > 0) { + if (!currentData.isEmpty() && !data.isEmpty()) { // 检查第一条数据是否已经存在 TopRoom firstNewData = data.get(0); for (TopRoom item : currentData) { diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/MusicSongListFragment.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/MusicSongListFragment.java index 0ec39769..2cd5f873 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/MusicSongListFragment.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/MusicSongListFragment.java @@ -45,10 +45,6 @@ import io.agora.musiccontentcenter.Music; * @description: 点唱已点歌曲 */ public class MusicSongListFragment extends BaseMvpFragment implements RequestContacts.View { - - public static final int TYPE_DATA = 1;//点歌 - public static final int TYPE_WEEK = 2;//已点 - private int type; private String roomId; private RoomInfoResp roomInfoResp; BaseQuickAdapter adapter; @@ -130,7 +126,6 @@ public class MusicSongListFragment extends BaseMvpFragment MvpPre.upSong(item.getDid(), "1")); if (item.getIs_hot() == 1) { helper.setVisible(R.id.muis_sy, true); diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/PublicScreenEaseChatFragment.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/PublicScreenEaseChatFragment.java deleted file mode 100644 index bcd4011b..00000000 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/PublicScreenEaseChatFragment.java +++ /dev/null @@ -1,1443 +0,0 @@ -package com.xscm.modulemain.activity.room.fragment; - -import android.content.Context; -import android.graphics.Color; -import android.os.Bundle; -import android.os.CountDownTimer; -import android.os.Handler; -import android.os.Looper; -import android.os.Message; -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.blankj.utilcode.util.GsonUtils; -import com.blankj.utilcode.util.LogUtils; -import com.tencent.imsdk.v2.V2TIMManager; -import com.tencent.imsdk.v2.V2TIMMessage; -import com.tencent.imsdk.v2.V2TIMSendCallback; -import com.xscm.modulemain.R; -import com.xscm.modulemain.activity.room.activity.RoomActivity; -import com.xscm.modulemain.activity.room.contacts.PublicScreenEaseChatContacts; -import com.xscm.modulemain.activity.room.presenter.PublicScreenEaseChatPresenter; -import com.xscm.modulemain.adapter.EaseChatAdapter; -import com.xscm.modulemain.databinding.RoomFragementTransEaseChatBinding; -import com.xscm.modulemain.dialog.RoomUserInfoFragment; -import com.xscm.moduleutil.base.BaseMvpFragment; -import com.xscm.moduleutil.bean.RoomInputEvent; -import com.xscm.moduleutil.bean.RoomMessageEvent; -import com.xscm.moduleutil.bean.RoomSettingEvent; -import com.xscm.moduleutil.bean.UserInfo; -import com.xscm.moduleutil.bean.room.Children; -import com.xscm.moduleutil.bean.room.EMMessageInfo; -import com.xscm.moduleutil.bean.room.EmotionDeatils; -import com.xscm.moduleutil.bean.room.RoomInfoResp; -import com.xscm.moduleutil.bean.room.RoomUserBean; -import com.xscm.moduleutil.event.RoomJoinMountModel; -import com.xscm.moduleutil.event.RoomTaskEvent; -import com.xscm.moduleutil.listener.MessageListenerSingleton; -import com.xscm.moduleutil.rtc.MusicPlayBean; -import com.xscm.moduleutil.utils.SpUtil; -import com.xscm.moduleutil.utils.logger.Logger; - -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -/** - * @author qx - * @data 2025/6/17 - * @description: 聊天室 - */ -public class PublicScreenEaseChatFragment extends BaseMvpFragment - implements PublicScreenEaseChatContacts.View { - - private final static String TAG = "聊天室"; - - private boolean isBottom = true; - private int count = 0; - - private String toChatUsername; - - private RoomInfoResp roomInfoResp; - private EaseChatAdapter easeChatAdapter; - private CountDownTimer countDownTimer; - private String roomId; - private RoomActivity mActivity; - private MessageListenerSingleton.PublicScreenMessageListener messageListener; - - @Override - public void onAttach(@NonNull Context context) { - super.onAttach(context); - if (context instanceof RoomActivity) { - mActivity = (RoomActivity) context; - } - } - - @Override - public void onDetach() { - super.onDetach(); - mActivity = null; - } - - // 在需要的地方调用 Activity 的方法 - public void someMethod() { - easeChatAdapter.clearData(); - } - - public static PublicScreenEaseChatFragment newInstance(String roomId) { - PublicScreenEaseChatFragment transEaseChatFragment = new PublicScreenEaseChatFragment(); - Bundle bundle = new Bundle(); - bundle.putString("roomId", roomId); - transEaseChatFragment.setArguments(bundle); - return transEaseChatFragment; - } - - @Override - protected PublicScreenEaseChatPresenter bindPresenter() { - return new PublicScreenEaseChatPresenter(this, getActivity()); - } - - @Override - public void initArgs(Bundle arguments) { - super.initArgs(arguments); -// roomInfoResp = (RoomInfoResp) arguments.getSerializable("roomInfo"); -// toChatUsername = roomInfoResp.getRoom_info().getChatrooms(); - roomId = arguments.getString("roomId"); - Logger.e(TAG, "toChatUsername:" + toChatUsername); - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - // 注册当前 Fragment 到 RoomMessageManager -// RoomMessageManager.getInstance().register(this); - } - - @Override - public void onDestroyView() { - onFragmentShowDestroy(); - super.onDestroyView(); - } - - public void onFragmentShowDestroy() { - - if (countDownTimer != null) { - countDownTimer.cancel(); - } - if (messageListener != null) { - LogUtils.e("移除监听器"); - MessageListenerSingleton.getInstance().removePublicScreenMessageListener(messageListener); - } - } - - @Override - protected void initData() { - onChatRoomViewCreation(); - } - - @Override - public void onResume() { - super.onResume(); - - } - - /** - * 登录聊天室 - */ - public void onChatRoomViewCreation() { -// MessageListenerSingleton.getInstance().joinGroup(roomId); -// RoomMessageEvent.T t = new RoomMessageEvent.T(); -// t.setText("羽声严禁未成年人进行直播或打赏,官方将24小时在线巡查。我们提倡绿色直播,直播间严禁出现涉政、涉恐、涉黄、涉赌等违法违规内容,严禁宣传封建迷信、宗教极端思想、出现低俗色情、吸烟酗酒等内容,严禁违反社会主义核心价值观、践踏社会道德底线、诱导打赏、低俗 PK 、买卖金币等行为,请大家共同遵守、监督并及时举报。请勿相信各类刷钻、购买礼包、游戏币及电商贩卖等非官方广告信息,谨防网络诈骗。"); -// // 加入群组成功 -// handleRoomMessage(new RoomMessageEvent(1000,roomId, t)); - - // 先移除旧的监听器 - if (messageListener != null) { - MessageListenerSingleton.getInstance().removePublicScreenMessageListener(messageListener); - messageListener = null; - } - // 执行加入操作 -// MessageListenerSingleton.getInstance().joinGroup(roomId); - // 设置消息监听器 - setupMessageListener(); - - // 检查是否有缓存的消息需要处理 - checkAndProcessCachedMessages(); -// if (messageListener == null) { -// -// // 创建并添加监听器 -// messageListener = new MessageListenerSingleton.PublicScreenMessageListener() { -// @Override -// public void onPublicScreenMessageReceived(RoomMessageEvent message) { -// // 确保在主线程更新 UI -// getActivity().runOnUiThread(new Runnable() { -// @Override -// public void run() { -// handleRoomMessage(message); -// } -// }); -// } -// }; -// } -// MessageListenerSingleton.getInstance().addPublicScreenMessageListener(messageListener); - - } - - /** - * 设置消息监听器 - */ - private void setupMessageListener() { - // 创建并添加监听器 - messageListener = new MessageListenerSingleton.PublicScreenMessageListener() { - @Override - public void onPublicScreenMessageReceived(RoomMessageEvent message) { - // 确保在主线程更新 UI - if (getActivity() != null) { - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - handleRoomMessage(message); - } - }); - } - } - }; - MessageListenerSingleton.getInstance().addPublicScreenMessageListener(messageListener); - } - - /** - * 检查并处理缓存的消息 - */ - private void checkAndProcessCachedMessages() { - if (roomId == null || roomId.isEmpty()) { - return; - } - - // 延迟一小段时间,确保监听器已注册 - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - // 获取并处理缓存的消息 - List cachedMessages = MessageListenerSingleton.getInstance().getAndClearCachedMessages(roomId); - if (!cachedMessages.isEmpty()) { - LogUtils.d("PublicScreenEaseChatFragment", "处理缓存消息数量: " + cachedMessages.size()); - for (RoomMessageEvent message : cachedMessages) { - handleRoomMessage(message); - } - } -// else { -// // 如果没有缓存消息,发送默认的欢迎消息 -// sendWelcomeMessage(); -// } - } - }, 300); // 延迟300ms确保监听器已注册 - } - - /** - * 发送欢迎消息 - */ - private void sendWelcomeMessage() { - RoomMessageEvent.T t = new RoomMessageEvent.T(); - t.setText("羽声语音严禁未成年人进行直播或打赏,官方将24小时在线巡查。我们提倡绿色直播,直播间严禁出现涉政、涉恐、涉黄、涉赌等违法违规内容,严禁宣传封建迷信、宗教极端思想、出现低俗色情、吸烟酗酒等内容,严禁违反社会主义核心价值观、践踏社会道德底线、诱导打赏、低俗 PK 、买卖金币等行为,请大家共同遵守、监督并及时举报。请勿相信各类刷钻、购买礼包、游戏币及电商贩卖等非官方广告信息,谨防网络诈骗。"); - // 加入群组成功 - handleRoomMessage(new RoomMessageEvent(1000, roomId, t)); - } - - @Override - protected void initListener() { - mBinding.recycleViewPublic.addOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { - if (newState == RecyclerView.SCROLL_STATE_IDLE) { - LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); - //屏幕中最后一个可见子项的position - int lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition(); - //当前屏幕所看到的子项个数 - int visibleItemCount = layoutManager.getChildCount(); - //当前RecyclerView的所有子项个数 - int totalItemCount = layoutManager.getItemCount(); - //RecyclerView的滑动状态 - if (visibleItemCount > 0 && lastVisibleItemPosition == totalItemCount - 1) { - if (mBinding.tvCount != null) { - mBinding.tvCount.setVisibility(View.GONE); - } - isBottom = true; - count = 0; - } else { - isBottom = false; - } - } - } - }); - } - - public void getUpRoomInfo(RoomInfoResp resp) { - this.roomInfoResp = resp; - // 确保Fragment视图已创建 - if (isAdded() && getActivity() != null && mBinding != null) { - // 确保适配器已初始化 - if (easeChatAdapter == null) { - initChatAdapter(); - } - if (easeChatAdapter != null) { - easeChatAdapter.clearData(); - } - toChatUsername = roomInfoResp.getRoom_info().getChatrooms(); - this.roomId = roomInfoResp.getRoom_info().getRoom_id(); - - RoomMessageEvent.T t = new RoomMessageEvent.T(); - t.setText("羽声严禁未成年人进行直播或打赏,官方将24小时在线巡查。我们提倡绿色直播,直播间严禁出现涉政、涉恐、涉黄、涉赌等违法违规内容,严禁宣传封建迷信、宗教极端思想、出现低俗色情、吸烟酗酒等内容,严禁违反社会主义核心价值观、践踏社会道德底线、诱导打赏、低俗 PK 、买卖金币等行为,请大家共同遵守、监督并及时举报。请勿相信各类刷钻、购买礼包、游戏币及电商贩卖等非官方广告信息,谨防网络诈骗。"); - // 加入群组成功 - handleRoomMessage(new RoomMessageEvent(1000, roomId, t)); - onChatRoomViewCreation(); - - } else { - // 如果视图尚未准备好,延迟执行 - if (getActivity() != null) { - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - // 使用post延迟执行,确保视图已创建 - if (getView() != null) { - getView().post(new Runnable() { - @Override - public void run() { - getUpRoomInfo(resp); - } - }); - } - } - }); - } - } - } - - @Override - protected void initView() { - LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext()); - mBinding.recycleViewPublic.setLayoutManager(linearLayoutManager); - initChatAdapter(); -// mBinding.recycleView.setAdapter(easeChatAdapter = new EaseChatAdapter()); -// easeChatAdapter.setOnItemChildClickListener((adapter, view, position) -> { -// EMMessageInfo item = easeChatAdapter.getItem(position); -// if (view.getId() == R.id.tv_red_rain_detail) { //点击红包结果详情 -// EMMessage emMessage = item != null ? item.getEmMessage() : null; -// if (emMessage == null) { -// return; -// } -// int red_rain_id = emMessage.getIntAttribute("record_id", 0); -// RainResultDetailFragment.Companion.newInstance(red_rain_id).show(getChildFragmentManager(), "红包雨详情"); -// } -// }); - easeChatAdapter.setOnItemClickListener((adapter, view, position) -> { - EMMessageInfo item = easeChatAdapter.getItem(position); - RoomMessageEvent emMessage = item.getEmMessage(); - if (emMessage.getText().getFromUserInfo() != null) { - RoomUserInfoFragment.show(roomInfoResp.getRoom_info().getRoom_id(), emMessage.getText().getFromUserInfo().getUser_id() != 0 ? emMessage.getText().getFromUserInfo().getUser_id() + "" : emMessage.getText().getFromUserInfo().getId() + "", emMessage.getText().getFromUserInfo().getPit_number(), getHostUser(roomInfoResp.getUser_info()), false, 5, isNumberWhether(), getChildFragmentManager()); - } - - }); -// -// //判断是否开启公屏 - setUpPublicScreen(); -// //是否隐藏欢迎动画 -// setEffectSwitch(SpUtils.getOpenEffect() == 1 ? new EffectEvent(true) : new EffectEvent(false)); - mBinding.tvCount.setOnClickListener(this::onClick); -// mBinding.llVerticalScroll.setOnClickListener(this::onSwitcher); -// - mBinding.tvTabAll.setOnClickListener(this::onClick); - mBinding.tvTabUser.setOnClickListener(this::onClick); - mBinding.tvTabSystem.setOnClickListener(this::onClick); - - } - - /** - * 初始化聊天适配器 - */ - private void initChatAdapter() { - if (easeChatAdapter == null) { - easeChatAdapter = new EaseChatAdapter(); - // 添加空值检查,确保mBinding和recycleViewPublic都不为null - if (mBinding != null) { - mBinding.recycleViewPublic.setAdapter(easeChatAdapter); - } - } - } - - private int isNumberWhether() { - if (roomInfoResp.getUser_info().getPit_number() == 9) { - return 1; - } - return 0; - } - - private int getHostUser(RoomUserBean item) { - if (item.getPit_number() != 0) { - if (item.getIs_room_owner() == 1) { - return 1; - } else if (item.getIs_management() == 1) { - return 2; - } else if (item.getIs_host() == 1) { - return 3; - } else { - return 4; - } - } else { - if (item.getIs_room_owner() == 1) { - return 1; - } else if (item.getIs_management() == 1) { - return 2; - } else if (item.getIs_host() == 1) { - return 3; - } - return 4; - } - } - - @Override - public void onDestroy() { - // 移除监听器 -// if (messageListener != null) { -// LogUtils.e("移除监听器"); -// MessageListenerSingleton.getInstance().removePublicScreenMessageListener(messageListener); -// } - super.onDestroy(); - } - - private void setUpPublicScreen() { -// if (roomInfoResp.getRoom_info().getChat_status() == 1) { -// //如果有数据或者recycle view有item view就删除;否则程序崩溃,找不到item - if (mBinding.recycleViewPublic.getChildCount() > 0) { - mBinding.recycleViewPublic.removeAllViews(); -// easeChatAdapter.clearData(); - } - mBinding.recycleViewPublic.setVisibility(View.VISIBLE);//开启消息列表 - mBinding.llHeadTab.setVisibility(View.GONE); - mBinding.tvClose.setVisibility(View.GONE); -// } else { -// mBinding.tvClose.setVisibility(View.VISIBLE); -// mBinding.llHeadTab.setVisibility(View.GONE); -// mBinding.recycleView.setVisibility(View.GONE);//隐藏消息列表 -// } - count = 0;//未读数0 - isBottom = true; - } - -// private void initSwitcher(List list) { -// if (countDownTimer != null) { -// mBinding.vfSwitcher.removeAllViews(); -// countDownTimer.cancel(); -// countDownTimer = null; -// } -// mBinding.vfSwitcher.stopFlipping(); -//// //队列最多保存十条数据 -//// vfSwitcher.removeAllViews(); -//// if (list.size() < queueMessageNum && oldList.size() > 0) { -//// for (int i = oldList.size() - 1; i > 0; i--) { -//// if (list.size() >= queueMessageNum) { -//// break; -//// } else { -//// list.add(oldList.get(i)); -//// } -//// } -//// } -// for (LuckyRankBean data : list) { -// View view = getLayoutInflater().inflate(R.layout.room_integral_item_mall_flipper, null); -// TextView textView = view.findViewById(R.id.tv_flipper_msg); -// String p = "许愿池"; -// if (!TextUtils.isEmpty(data.getTitle())) { -// p = data.getTitle(); -// } -// textView.setText(String.format("%s在%s获得%sX%s", data.getNickname(), p, data.getGift_name(), data.getGift_number())); -//// if (vfSwitcher.getChildCount() >= queueMessageNum) { -//// break; -//// } -// mBinding.vfSwitcher.addView(view); -// } -// int count = mBinding.vfSwitcher.getChildCount(); -// for (int i = 0; i < count - queueMessageNum; i++) { -// mBinding.vfSwitcher.removeViewAt(i); -// } -// mBinding.vfSwitcher.setInAnimation(requireContext(), R.anim.integral_flipper_in); -// mBinding.vfSwitcher.setOutAnimation(requireContext(), R.anim.integral_flipper_out); -// mBinding.vfSwitcher.setFlipInterval(5000); -// mBinding.vfSwitcher.setAutoStart(true); -// mBinding.vfSwitcher.startFlipping(); -// mBinding.llVerticalScroll.setBackground(ResourcesCompat.getDrawable(getResources(),R.drawable.room_bg_screen_gift_push,null)); -// mBinding.vfSwitcher.getInAnimation().setAnimationListener(new Animation.AnimationListener() { -// @Override -// public void onAnimationStart(Animation animation) { -// -// } -// -// @Override -// public void onAnimationRepeat(Animation animation) { -// -// } -// -// @Override -// public void onAnimationEnd(Animation animation) { -// //最后一个 -// if (mBinding.vfSwitcher.getDisplayedChild() == mBinding.vfSwitcher.getChildCount() - 1) { -// mBinding.vfSwitcher.stopFlipping(); -//// oldList.clear(); -// countDownTime(60); -// } -// } -// }); -// } - - /** - * 推送礼物显示计时 - * - * @param longTime - */ - public void countDownTime(long longTime) { - countDownTimer = new CountDownTimer(longTime * 1000, 1000) { - - @Override - public void onTick(long millisUntilFinished) { - - } - - @Override - public void onFinish() { - if (isAdded()) { - if (mBinding.vfSwitcher != null) { - mBinding.vfSwitcher.removeAllViews(); - } - if (mBinding.llVerticalScroll != null) { -// mBinding.llVerticalScroll.setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.room_null, null)); - } - } - } - }; - countDownTimer.start(); - } - - @Override - protected int getLayoutId() { - return R.layout.room_fragement_trans_ease_chat; - } - - - public void onClick(View view) { - int view_id = view.getId(); -// if (view_id == R.id.tv_flipper_msg) { -// isBottom = true; -// mBinding.recycleView.scrollToPosition(easeChatAdapter.getItemCount() - 1); -// mBinding.tvCount.setVisibility(View.GONE); -// }else - if (view_id == R.id.tv_tab_all) { - easeChatAdapter.setShowType(EaseChatAdapter.SHOW_TYPE_ALL); - mBinding.tvTabAll.setTextColor(Color.parseColor("#FFFFFF")); - mBinding.tvTabAll.setTextSize(14); - - mBinding.tvTabUser.setTextColor(Color.parseColor("#FFFFFF")); - mBinding.tvTabSystem.setTextColor(Color.parseColor("#FFFFFF")); - mBinding.tvTabSystem.setBackgroundResource(0); - mBinding.tvTabUser.setBackgroundResource(0); - mBinding.tvTabUser.setTextSize(12); - mBinding.tvTabSystem.setTextSize(12); - - } else if (view_id == R.id.tv_tab_user) { - easeChatAdapter.setShowType(EaseChatAdapter.SHOW_TYPE_USER); - mBinding.tvTabUser.setTextColor(Color.parseColor("#FFFFFF")); - mBinding.tvTabUser.setTextSize(14); - - mBinding.tvTabAll.setTextColor(Color.parseColor("#FFFFFF")); - mBinding.tvTabSystem.setTextColor(Color.parseColor("#FFFFFF")); - mBinding.tvTabSystem.setBackgroundResource(0); - mBinding.tvTabAll.setBackgroundResource(0); - mBinding.tvTabAll.setTextSize(12); - mBinding.tvTabSystem.setTextSize(12); - } else if (view_id == R.id.tv_tab_system) { - easeChatAdapter.setShowType(EaseChatAdapter.SHOW_TYPE_SYSTEM); - - mBinding.tvTabSystem.setTextColor(Color.parseColor("#FFFFFF")); - mBinding.tvTabSystem.setTextSize(14); - - mBinding.tvTabAll.setTextColor(Color.parseColor("#FFFFFF")); - mBinding.tvTabUser.setTextColor(Color.parseColor("#FFFFFF")); - mBinding.tvTabUser.setBackgroundResource(0); - mBinding.tvTabAll.setBackgroundResource(0); - mBinding.tvTabAll.setTextSize(12); - mBinding.tvTabUser.setTextSize(12); - } else if (view_id == R.id.tv_count) { - mBinding.recycleViewPublic.scrollToPosition(easeChatAdapter.getItemCount() - 1); - mBinding.tvCount.setVisibility(View.GONE); - } - - } - - - // @Subscribe(threadMode = ThreadMode.MAIN) - public void fasong(RoomInputEvent roomInputEvent) { - String message = roomInputEvent.text; - RoomMessageEvent.T t = new RoomMessageEvent.T(); - t.setText(message); - t.setFromUserInfo(SpUtil.getUserInfo()); - RoomMessageEvent roomMessageEvent = new RoomMessageEvent(1, roomInfoResp.getRoom_info().getRoom_id(), t); - handleRoomMessage(roomMessageEvent); - String json = GsonUtils.toJson(roomMessageEvent); -// 转换为 byte[] - byte[] binaryData = json.getBytes(StandardCharsets.UTF_8); - // 创建自定义消息 - V2TIMMessage v2TIMMessage = V2TIMManager.getMessageManager().createCustomMessage(binaryData); -// 发送消息 - V2TIMManager.getMessageManager().sendMessage(v2TIMMessage, null, "room" + roomInfoResp.getRoom_info().getRoom_id(), V2TIMMessage.V2TIM_PRIORITY_NORMAL, false, null, new V2TIMSendCallback() { - @Override - public void onProgress(int progress) { - // 自定义消息不会回调进度 - } - - @Override - public void onSuccess(V2TIMMessage message) { - // 发送群聊自定义消息成功 - EventBus.getDefault().post(new RoomTaskEvent()); - } - - @Override - public void onError(int code, String desc) { - // 发送群聊自定义消息失败 - } - }); - } - -// public void handleRoomMessage(RoomMessageEvent message) { -// LogUtils.e("@@@", "handleRoomMessage: " + message); -// LogUtils.e("@@@", "handleRoomMessage: roomId" + roomId); -// if (easeChatAdapter==null){ -// easeChatAdapter=new EaseChatAdapter(); -// } -// if (message.getRoomId() == null){ -// return; -// } -// if (!message.getRoomId().contains(roomId)) { -// return; -// } -// -// if (message.getMsgType() == 1001) { -// RoomJoinMountModel roomJoinMountModel = new RoomJoinMountModel(message.getRoomId(), message.getText().getJia_jia(), 2); -// EventBus.getDefault().post(roomJoinMountModel); -// EventBus.getDefault().post(message); -// easeChatAdapter.addData(new EMMessageInfo(message)); -// scrollToBottomIfNeed(); -// return; -// } else if (message.getMsgType() == 1002) { -// EventBus.getDefault().post(message); -// easeChatAdapter.addData(new EMMessageInfo(message)); -// scrollToBottomIfNeed(); -// return; -// } else if (message.getMsgType() == 123) { -// easeChatAdapter.clearData(); -// EventBus.getDefault().post(message); -// easeChatAdapter.addData(new EMMessageInfo(message)); -// scrollToBottomIfNeed(); -// return; -// } else if (message.getMsgType() == 1012) { -// EventBus.getDefault().post(message); -//// easeChatAdapter.addData(new EMMessageInfo(message)); -//// scrollToBottomIfNeed(); -// return; -// } else if (message.getMsgType() == 1014) { -// EventBus.getDefault().post(message); -// return; -// } else if (message.getMsgType() == 1013) { -// EventBus.getDefault().post(message); -// return; -// } else if (message.getMsgType() == 124) { -// RoomMessageEvent.text text = GsonUtils.fromJson(message.getText().getText(), RoomMessageEvent.text.class); -// MusicPlayBean musicPlayBean = new MusicPlayBean(); -// musicPlayBean.setPosition(text.getPosition()); -// EventBus.getDefault().post(musicPlayBean); -// return; -// } else if (message.getMsgType() == 1007 || message.getMsgType() == 1018 || message.getMsgType() == 1006 || message.getMsgType() == 1017) { -// if (message.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId()) { -// easeChatAdapter.addData(new EMMessageInfo(message)); -// } -// EventBus.getDefault().post(message); -// return; -// } else if (message.getMsgType() == 1016) { -// if (message.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId()) { -// easeChatAdapter.addData(new EMMessageInfo(message)); -// } -// EventBus.getDefault().post(message); -// return; -// } else if (message.getMsgType() == 1026) { -// EventBus.getDefault().post(message); -// return; -// } else if (message.getMsgType() == 1003 || message.getMsgType() == 1004) { -// EventBus.getDefault().post(message); -// easeChatAdapter.addData(new EMMessageInfo(message)); -// scrollToBottomIfNeed(); -// return; -// } else if (message.getMsgType() == 1015) { -// EventBus.getDefault().post(message); -// return; -// } else if (message.getMsgType() == 1021) { -// EventBus.getDefault().post(message); -// return; -// } else if (message.getMsgType() == 1034) { -// EventBus.getDefault().post(message); -// return; -// } else if (message.getMsgType() == 1000) { -// EventBus.getDefault().post(message); -// easeChatAdapter.addData(new EMMessageInfo(message)); -// scrollToBottomIfNeed(); -// return; -// } else if (message.getMsgType() == 1036 || message.getMsgType() == 1037) { -// EventBus.getDefault().post(message); -// return; -// } else if (message.getMsgType() == 1005) { -// EventBus.getDefault().post(message); -// if (message.getText().getText() == null) { -// return; -// } else { -// easeChatAdapter.addData(new EMMessageInfo(message)); -// scrollToBottomIfNeed(); -// return; -// } -// } else if (message.getMsgType() == 1035) { -// EventBus.getDefault().post(message); -// return; -// } else if (message.getMsgType() == 1) { -// EventBus.getDefault().post(message); -// easeChatAdapter.addData(new EMMessageInfo(message)); -// scrollToBottomIfNeed(); -// return; -// } else if (message.getMsgType() == 1030 || message.getMsgType() == 1033 || message.getMsgType() == 1032) { -// EventBus.getDefault().post(message); -// easeChatAdapter.addData(new EMMessageInfo(message)); -// scrollToBottomIfNeed(); -// return; -// } else if (message.getMsgType() == 1038) { -// easeChatAdapter.addData(new EMMessageInfo(message)); -// scrollToBottomIfNeed(); -// return; -// } else if (message.getMsgType() == 1049) { -// if (message.getText().getStep()!=3) { -// EventBus.getDefault().post(message); -// easeChatAdapter.addData(new EMMessageInfo(message)); -// scrollToBottomIfNeed(); -// } -// return; -// } else if (message.getMsgType() == 1050 || message.getMsgType() == 1054 || message.getMsgType() == 1051 || message.getMsgType() == 1052) { -// EventBus.getDefault().post(message); -// return; -// } else if (message.getMsgType() == 1053) { -// EventBus.getDefault().post(message); -// return; -// } else if (message.getMsgType() == 1055) { -// EventBus.getDefault().post(message); -// return; -// }else if (message.getMsgType()==1056 || message.getMsgType()==1057 || message.getMsgType()==1059){ -// EventBus.getDefault().post(message); -// return; -// }else if (message.getMsgType() == 1025){ -// EventBus.getDefault().post(message); -// return; -// }else if (message.getMsgType() == 1039){ -// EventBus.getDefault().post(message); -// easeChatAdapter.addData(new EMMessageInfo(message)); -// scrollToBottomIfNeed(); -// return; -// }else if (message.getMsgType() == 1058){ -// EventBus.getDefault().post(message); -// return; -// } -// EventBus.getDefault().post(message); - - /// / easeChatAdapter.addData(new EMMessageInfo(message)); - /// / scrollToBottomIfNeed(); -// } - public void sendChatEmoji(EmotionDeatils emotionDeatils) { - EmotionDeatils event = new EmotionDeatils(); - if (emotionDeatils != null && emotionDeatils.getChildren() != null && !emotionDeatils.getChildren().isEmpty() && emotionDeatils.getChildren().size() > 0) { - int position = new Random().nextInt(emotionDeatils.getChildren().size()); - Children children = emotionDeatils.getChildren().get(position); - event.setImage(children.getImage()); - event.setAnimate_image(emotionDeatils.getAnimate_image()); - } else { - event = emotionDeatils; - } - RoomMessageEvent roomMessageEvent = new RoomMessageEvent(); - roomMessageEvent.setRoomId(roomId); - roomMessageEvent.setMsgType(2);//这是表情类型,1:单发文本消息 2:单发表情消息 - UserInfo userInfo = SpUtil.getUserInfo(); - RoomMessageEvent.T t = new RoomMessageEvent.T(); - t.setFromUserInfo(userInfo); - t.setEmoji(event); - roomMessageEvent.setText(t); - handleRoomMessage(roomMessageEvent); - String json = GsonUtils.toJson(roomMessageEvent); -// 转换为 byte[] - byte[] binaryData = json.getBytes(StandardCharsets.UTF_8); - // 创建自定义消息 - V2TIMMessage v2TIMMessage = V2TIMManager.getMessageManager().createCustomMessage(binaryData); -// 发送消息 - V2TIMManager.getMessageManager().sendMessage(v2TIMMessage, null, "room" + roomId, V2TIMMessage.V2TIM_PRIORITY_NORMAL, false, null, new V2TIMSendCallback() { - @Override - public void onProgress(int progress) { - // 自定义消息不会回调进度 - } - - @Override - public void onSuccess(V2TIMMessage message) { - // 发送群聊自定义消息成功 -// EventBus.getDefault().post(new RoomTaskEvent()); - } - - @Override - public void onError(int code, String desc) { - // 发送群聊自定义消息失败 - } - }); - - - } - - public void handleRoomMessage(RoomMessageEvent message) { - if (message == null) return; - - if (easeChatAdapter == null) { - easeChatAdapter = new EaseChatAdapter(); - } - - if (message.getRoomId() == null) { - return; - } - - if (roomId == null || !message.getRoomId().contains(roomId)) { - return; - } - - // 使用Handler将消息处理放到消息队列中,避免阻塞 - if (messageHandler.hasMessages(MSG_HANDLE_ROOM_MESSAGE)) { - // 如果队列中已有待处理消息,将当前消息加入队列 - Message msg = Message.obtain(); - msg.what = MSG_HANDLE_ROOM_MESSAGE; - msg.obj = message; - messageHandler.sendMessage(msg); - } else { - // 立即处理第一条消息 - processRoomMessage(message); - // 标记有待处理消息 - messageHandler.sendEmptyMessageDelayed(MSG_HANDLE_ROOM_MESSAGE, 100); - } - } - - private static final int MSG_HANDLE_ROOM_MESSAGE = 1001; - private final Handler messageHandler = new Handler(Looper.getMainLooper()) { - private List messageQueue = new ArrayList<>(); - - @Override - public void handleMessage(@NonNull Message msg) { - if (msg.what == MSG_HANDLE_ROOM_MESSAGE) { - if (!messageQueue.isEmpty()) { - // 批量处理消息 - processBatchMessages(messageQueue); - messageQueue.clear(); - } else if (msg.obj instanceof RoomMessageEvent) { - // 处理单条消息 - processRoomMessage((RoomMessageEvent) msg.obj); - } - } - } - }; - - private void processBatchMessages(List messages) { - if (messages.isEmpty() || easeChatAdapter == null) return; - - List messageInfos = new ArrayList<>(); - for (RoomMessageEvent message : messages) { - EMMessageInfo info = createMessageInfoIfNeeded(message); - if (info != null) { - messageInfos.add(info); - } - // 发送事件总线消息 -// EventBus.getDefault().post(message); - if (getActivity() instanceof RoomActivity) { - ((RoomActivity) getActivity()).roomInfoEvent(message); - } - } - - if (!messageInfos.isEmpty()) { - easeChatAdapter.addData(messageInfos); - scrollToBottomIfNeed(); - } - } - - private void processRoomMessage(RoomMessageEvent message) { - if (message == null) return; - - int msgType = message.getMsgType(); - RoomMessageEvent.T text = message.getText(); - - switch (msgType) { - case 1001: - if (text != null) { - RoomJoinMountModel roomJoinMountModel = new RoomJoinMountModel( - message.getRoomId(), text.getJia_jia(), 2); - EventBus.getDefault().post(roomJoinMountModel); - } - postAndAddMessage(message); - break; - -// case 1002: -// postAndAddMessage(message); -// break; - - case 123: - easeChatAdapter.clearData(); - postAndAddMessage(message); - break; - case 1002: - case 1012: - case 1011: - case 1014: - case 1013: - case 1026: - case 1015: - case 1021: - case 1034: - case 1035: - case 1050: - case 1054: - case 1051: - case 1052: - case 1053: - case 1055: - case 1056: - case 1057: - case 1059: - case 1060: - case 1061: - case 1025: - case 1058: -// EventBus.getDefault().post(message); - if (getActivity() instanceof RoomActivity) { - ((RoomActivity) getActivity()).roomInfoEvent(message); - } - break; - - case 124: - if (text != null && text.getText() != null) { - try { - RoomMessageEvent.text parsedText = GsonUtils.fromJson( - text.getText(), RoomMessageEvent.text.class); - if (parsedText != null) { - MusicPlayBean musicPlayBean = new MusicPlayBean(); - musicPlayBean.setPosition(parsedText.getPosition()); - EventBus.getDefault().post(musicPlayBean); - } - } catch (Exception e) { - LogUtils.e("解析音乐播放消息失败", e); - } - } - break; - - case 1007: - case 1018: - case 1006: - case 1017: - case 1016: - if (text != null && text.getFromUserInfo() != null && - text.getFromUserInfo().getUser_id() == SpUtil.getUserId()) { - EMMessageInfo info = new EMMessageInfo(message); - easeChatAdapter.addData(info); - scrollToBottomIfNeed(); - } - if (getActivity() instanceof RoomActivity) { - ((RoomActivity) getActivity()).roomInfoEvent(message); - } - break; - - case 1003: - case 1004: - case 1000: - case 1: - case 2: - case 1030: - case 1033: - case 1032: - case 1039: - postAndAddMessage(message); - break; - - case 1038: - addSingleMessage(message); - break; - - case 1049: -// if (text != null && text.getStep() != 3) { - postAndAddMessage(message); -// } - break; - - case 1005: -// EventBus.getDefault().post(message); - if (getActivity() instanceof RoomActivity) { - ((RoomActivity) getActivity()).roomInfoEvent(message); - } - if (text != null && text.getText() != null) { - addSingleMessage(message); - } - break; - - default: -// EventBus.getDefault().post(message); - if (getActivity() instanceof RoomActivity) { - ((RoomActivity) getActivity()).roomInfoEvent(message); - } - break; - } - } - - private EMMessageInfo createMessageInfoIfNeeded(RoomMessageEvent message) { - int msgType = message.getMsgType(); - RoomMessageEvent.T text = message.getText(); - - switch (msgType) { - case 1001: - case 1002: - case 123: - case 1003: - case 1004: - case 1000: - case 1: - case 2: - case 1030: - case 1033: - case 1032: - case 1039: - case 1049: - return new EMMessageInfo(message); - - case 1005: - if (text != null && text.getText() != null) { - return new EMMessageInfo(message); - } - break; - - case 1038: - return new EMMessageInfo(message); - } - - return null; - } - - private void addSingleMessage(RoomMessageEvent message) { - if (easeChatAdapter != null) { - if (message.getMsgType() == 1049) { - if (message.getText().getStep() != 3) { - easeChatAdapter.addData(new EMMessageInfo(message)); - scrollToBottomIfNeed(); - } - } else { - easeChatAdapter.addData(new EMMessageInfo(message)); - scrollToBottomIfNeed(); - } - } - } - - private void postAndAddMessage(RoomMessageEvent message) { -// EventBus.getDefault().post(message); - - if (getActivity() instanceof RoomActivity) { - ((RoomActivity) getActivity()).roomInfoEvent(message); - } - addSingleMessage(message); - } - - // 在类的字段部分添加以下内容 - private static final int MAX_MESSAGE_COUNT = 500; // 限制最大消息数 - - // 优化 scrollToBottomIfNeed 方法 - private void scrollToBottomIfNeed() { - if (isBottom && mBinding.recycleViewPublic != null && easeChatAdapter != null) { - int itemCount = easeChatAdapter.getItemCount(); - if (itemCount > 0) { - mBinding.recycleViewPublic.scrollToPosition(itemCount - 1); - } - } else { - count++; - if (mBinding.tvCount != null) { - mBinding.tvCount.setText(count + "条新消息"); - mBinding.tvCount.setVisibility(View.VISIBLE); - } - - // 当未读消息过多时,限制数量显示 - if (count > 99) { - if (mBinding.tvCount != null) { - mBinding.tvCount.setText("99+条新消息"); - } - } - } - } - - - @Subscribe(threadMode = ThreadMode.MAIN) - public void roomJoinMount(RoomSettingEvent roomSetting) { - if (roomSetting == null) { - easeChatAdapter.clearData(); - } - } - -// private void scrollToBottomIfNeed() { -// if (isBottom && mBinding.recycleView != null) { -// mBinding.recycleView.scrollToPosition(easeChatAdapter.getItemCount() - 1); -// } else { -// count++; -// mBinding.tvCount.setText(count + "条新消息"); -// mBinding.tvCount.setVisibility(View.VISIBLE); -// } -// } - - /** - * 房间信息 - * - * @param resp - */ - @Subscribe(threadMode = ThreadMode.MAIN) - public void roomInfo(RoomInfoResp resp) { - this.roomInfoResp = resp; -// onChatRoomViewCreation(); - } - - - /** - * 获取聊天室数据 - */ - private void onConversationInit() { -// if (conversation == null) { -// if (mBinding.recycleView != null) { -// mBinding.recycleView.removeCallbacks(joinChatRoomTask); -// } -// int chatType = EaseConstant.CHATTYPE_CHATROOM; -// conversation = EMClient.getInstance().chatManager().getConversation(toChatUsername, EaseCommonUtils.getConversationType(chatType), true); -// if (!TextUtils.isEmpty(roomInfoResp.getRoom_info().getOfficial_notice())) { -// appendMessage(1, 6013, roomInfoResp.getRoom_info().getOfficial_notice()); -// } -// if (!TextUtils.isEmpty(roomInfoResp.getRoom_info().getGreeting())) { -// appendMessage(1, 6014, roomInfoResp.getRoom_info().getGreeting()); -// } -// appendWelcomeMessage(); -// } - } - - /** - * 添加表情消息 - * - * @param sendFaceEvent - */ -// @Subscribe(threadMode = ThreadMode.MAIN) -// public void sendFaceEvent(SendFaceEvent sendFaceEvent) { -// MvpPre.sendFace(sendFaceEvent.getRoom_id(), sendFaceEvent.getFace_id(), sendFaceEvent.getPitNumber(), sendFaceEvent.getType()); -// RoomUserBean userBean = roomInfoResp.getUser_info(); -// EMMessage txtSendMessage = EMMessage.createTextSendMessage(sendFaceEvent.getFace_special(), toChatUsername); -// txtSendMessage.setAttribute("action", 6); -// txtSendMessage.setAttribute("type", EMMessageInfo.SRLiveRoomChatMsgTypeCustomEmoji); -// txtSendMessage.setAttribute("face_pic", sendFaceEvent.getFace_pic()); -// txtSendMessage.setAttribute("face_special", sendFaceEvent.getFace_special()); -// txtSendMessage.setAttribute("user_id", userBean.getUser_id()); -// txtSendMessage.setAttribute("rank_icon", userBean.getRank_icon()); -// txtSendMessage.setAttribute("charm_icon", userBean.getCharm_icon()); -// txtSendMessage.setAttribute("nobility_icon", userBean.getNobility_icon()); -// txtSendMessage.setAttribute("user_title", BaseApplication.getInstance().getUser().getUser_title()); -// txtSendMessage.setAttribute("nickname", userBean.getNickname()); -// if (roomInfoResp.getRoom_info().getActual_role() == 5) { -// txtSendMessage.setAttribute("role", roomInfoResp.getRoom_info().getActual_role()); -// } else { -// txtSendMessage.setAttribute("role", roomInfoResp.getRoom_info().getRole()); -// } -// txtSendMessage.setAttribute("user_is_new", userBean.getUser_is_new()); -// txtSendMessage.setMsgTime(System.currentTimeMillis()); -// txtSendMessage.setLocalTime(System.currentTimeMillis()); -// easeChatAdapter.addData(new EMMessageInfo(txtSendMessage)); -// refreshSelectLast(); -// } - - /** - * 添加文本消息 - *

- * // * @param roomInputEvent - */ -// @Subscribe(threadMode = ThreadMode.MAIN) -// public void sendTxtEvent(RoomInputEvent roomInputEvent) { -// RoomUserBean userBean = roomInfoResp.getUser_info(); -// EMMessage txtSendMessage = EMMessage.createTextSendMessage(roomInputEvent.text, toChatUsername); -// -// txtSendMessage.setAttribute("action", 2); -// txtSendMessage.setAttribute("type", EMMessageInfo.SRLiveRoomChatMsgTypeChat); -// txtSendMessage.setAttribute("user_id", userBean.getUser_id()); -// txtSendMessage.setAttribute("rank_icon", userBean.getRank_icon()); -// txtSendMessage.setAttribute("charm_icon", userBean.getCharm_icon()); -// txtSendMessage.setAttribute("nobility_icon", userBean.getNobility_icon()); -// txtSendMessage.setAttribute("user_title", BaseApplication.getInstance().getUser().getUser_title()); -// txtSendMessage.setAttribute("nickname", userBean.getNickname()); -// if (roomInfoResp.getRoom_info().getActual_role() == 5) { -// txtSendMessage.setAttribute("role", roomInfoResp.getRoom_info().getActual_role()); -// } else { -// txtSendMessage.setAttribute("role", roomInfoResp.getRoom_info().getRole()); -// } -// txtSendMessage.setAttribute("user_is_new", userBean.getUser_is_new()); -// txtSendMessage.setMsgTime(System.currentTimeMillis()); -// txtSendMessage.setLocalTime(System.currentTimeMillis()); -// easeChatAdapter.addData(new EMMessageInfo(txtSendMessage)); -// refreshSelectLast(); -// } - private void appendWelcomeMessage() { -// RoomUserBean userBean = roomInfoResp.getUser_info(); -// EMMessage txtSendMessage = EMMessage.createTxtSendMessage("加入直播间", toChatUsername); -// txtSendMessage.setAttribute("action", 3); -// txtSendMessage.setAttribute("charm_icon", userBean.getCharm_icon()); -// txtSendMessage.setAttribute("type", EMMessageInfo.SRLiveRoomChatMsgTypeGoInRoom); -// txtSendMessage.setAttribute("user_id", userBean.getUser_id()); -// txtSendMessage.setAttribute("rank_icon", userBean.getRank_icon()); -// txtSendMessage.setAttribute("charm_icon", userBean.getCharm_icon()); -// txtSendMessage.setAttribute("nobility_icon", userBean.getNobility_icon()); -// txtSendMessage.setAttribute("user_title", BaseApplication.getInstance().getUser().getUser_title()); -// txtSendMessage.setAttribute("nickname", userBean.getNickname()); -// if (roomInfoResp.getRoom_info().getActual_role() == 5) { -// txtSendMessage.setAttribute("role", roomInfoResp.getRoom_info().getActual_role()); -// } else { -// txtSendMessage.setAttribute("role", roomInfoResp.getRoom_info().getRole()); -// } -// -// txtSendMessage.setAttribute("user_is_new", userBean.getUser_is_new()); -// txtSendMessage.setMsgTime(System.currentTimeMillis()); -// txtSendMessage.setLocalTime(System.currentTimeMillis()); -// easeChatAdapter.addData(new EMMessageInfo(txtSendMessage)); - } - - private void appendMessage(int action, int type, String text) { -// EMMessage txtSendMessage = EMMessage.createTxtSendMessage(text, toChatUsername); -// txtSendMessage.setAttribute("action", action); -// txtSendMessage.setAttribute("type", type); -// txtSendMessage.setMsgTime(System.currentTimeMillis()); -// txtSendMessage.setLocalTime(System.currentTimeMillis()); -// easeChatAdapter.addData(new EMMessageInfo(txtSendMessage)); - } - - -// @Override -// public void onError(int i, String s) { -// Logger.e(TAG, "加入聊天室失败:code=" + i + " 信息: " + s); -// if (mBinding.recycleView != null) { -// mBinding.recycleView.removeCallbacks(joinChatRoomTask); -// mBinding.recycleView.postDelayed(joinChatRoomTask, 5000); -// } -// } - -// @Override -// public void onMessageReceived(List list) { -// if (conversation != null) { -// conversation.markAllMessagesAsRead(); -// } -// -// if (mBinding.recycleView.getVisibility() == View.GONE) { -// return; -// } -// ThreadUtils.runOnUiThread(new Runnable() { -// @Override -// public void run() { -// List items = new ArrayList<>(); -// for (EMMessage item : list) { -// if (item.getChatType() != EMMessage.ChatType.ChatRoom) { -// continue; -// } -// if (toChatUsername != null && !toChatUsername.equals(item.getTo())) { -// continue; -// } -// //如果房间id不对应,则不接收 -// String roomId = item.getStringAttribute("room_id", ""); -// if (!TextUtils.isEmpty(roomId) && !roomId.equals(roomInfoResp.getRoom_info().getRoom_id())) { -// continue; -// } -// int type = item.getIntAttribute("type", 0); -// if (type > 6000 && type < 7000) { //屏蔽6000-7000之外的数据 -// if (type == 6001 && item.getStringAttribute("user_id", "").equals(SpUtils.getUserId())) {//屏蔽自己加入房间消息 -// continue; -// } -// if (type == 6010 && item.getStringAttribute("user_id", "").equals(SpUtils.getUserId())) {//屏蔽自己发送的表情消息 -// continue; -// } -// if (type == 6012 && item.getStringAttribute("user_id", "").equals(SpUtils.getUserId())) {//屏蔽自己发送的文本消息 -// continue; -// } -// items.add(new EMMessageInfo(item)); -// } -// } -// easeChatAdapter.addData(items); -// if (easeChatAdapter.getItemCount() > 1000) { -// easeChatAdapter.clearSomeData(); -// } -// if (isBottom) { -// count = 0; -// refreshSelectLast(); -// } else if (items.size() > 0) { -// count += items.size(); -// if (roomInfoResp.getRoom_info().getChat_status() == 1) { -// if (mBinding.tvCount != null) { -// mBinding.tvCount.setVisibility(View.VISIBLE); -// mBinding.tvCount.setText(count + "条新消息"); -// } -// } -// } -// } -// }); -// } - - - /** - * 用户进入房间 - * - * @param roomUserJoinModel - */ -// @Subscribe(sticky = true, threadMode = ThreadMode.MAIN) -// public void subscribeMessages(RoomUserJoinModel roomUserJoinModel) { -// mBinding.wav.addAnim(roomUserJoinModel); -// EventBus.getDefault().removeStickyEvent(roomUserJoinModel); -// } - - /** - * 关闭公屏 - */ -// @Subscribe(threadMode = ThreadMode.MAIN) -// public void subscribeMessages(ClosePublicScreenEvent closePublicScreenEvent) { -// mBinding.tvClose.setVisibility(View.VISIBLE); -// mBinding.llHeadTab.setVisibility(View.GONE); -// mBinding.recycleView.setVisibility(View.GONE);//隐藏消息列表 -// mBinding.tvCount.setVisibility(View.GONE);//隐藏未读消息数 -// count = 0;//未读消息数清零 -// isBottom = true; -// MvpPre.switchPublicScreen(roomInfoResp.getRoom_info().getRoom_id(), "0"); -// } - - /** - * 开启公屏 - */ -// @Subscribe(threadMode = ThreadMode.MAIN) -// public void subscribeMessages(OpenPublicScreenEvent openPublicScreenEvent) { -// count = 0;//未读消息数清零 -// isBottom = true; -// //如果有数据或者recycle view有item view就删除;否则程序崩溃,找不到item -// if (mBinding.recycleView.getChildCount() > 0) { -// mBinding.recycleView.removeAllViews(); -// easeChatAdapter.clearData(); -// } -// mBinding.recycleView.setVisibility(View.VISIBLE);//开启消息列表 -// mBinding.tvClose.setVisibility(View.GONE); -// mBinding.llHeadTab.setVisibility(View.VISIBLE); -// MvpPre.switchPublicScreen(roomInfoResp.getRoom_info().getRoom_id(), "1"); -// } - - /** - * 开关公屏 1开2关 - *

- * // * @param event - */ -// @Subscribe(threadMode = ThreadMode.MAIN) -// public void subscribeMessages(PublicScreenEvent event) { -// if (roomInfoResp.getRoom_info().getRoom_id().equals(event.getRoom_id())) { -// roomInfoResp.getRoom_info().setChat_status(event.getStatus()); -// setUpPublicScreen(); -// } -// } - private void refreshSelectLast() { - if (mBinding.recycleViewPublic != null) { - mBinding.recycleViewPublic.scrollToPosition(easeChatAdapter.getItemCount() - 1); - } - } - - /** - * 特效设置 - */ -// @Subscribe(threadMode = ThreadMode.MAIN) -// public void setEffectSwitch(EffectEvent event) { -// if (event.isEffectOn()) {//特效开启 -// if (!mBinding.wav.animEnded) { -// mBinding.wav.setVisibility(View.VISIBLE); -// } -// } else { -// mBinding.wav.closeEffect(); -// mBinding.wav.setVisibility(View.GONE); -// } -// } - - /** - * 浇水礼物推送 - */ -// @Subscribe(threadMode = ThreadMode.MAIN) -// public void setSwitcher(LuckyRankListBean listBean) { -// if (listBean != null) { -//// oldList = listBean; -// initSwitcher(listBean); -// } -// } - - /** - * 推送区域 - */ -// public void onSwitcher(View view) { -// recordDialogFragment = RoomWinningRecordDialogFragment.newInstance(); -// if (recordDialogFragment != null -// && recordDialogFragment.getDialog() != null -// && recordDialogFragment.getDialog().isShowing() -// && !recordDialogFragment.isRemoving()) { -// //dialog is showing so do something -// } else { -// recordDialogFragment.show((getActivity()).getSupportFragmentManager(), "RoomWaterTreeRankDialog"); -// //dialog is not showing -// } -// AppLogUtil.reportAppLog(AppLogEvent.D010604); -// } - -// @Override -// public void onConnected() { -// onChatRoomViewCreation(); -// } - -// @Override -// public void onDisconnected(int i) { -// Logger.e("onDisconnected", i); -// } - - - /** - * 重连任务 - */ -// private Runnable joinChatRoomTask = new Runnable() { -// @Override -// public void run() { -// onChatRoomViewCreation(); -// } -// }; - -// @Override -// public void onResume() { -// super.onResume(); -// if (mBinding.vfSwitcher != null) { -// mBinding.vfSwitcher.startFlipping(); -// } -// } - -// @Override -// public void onPause() { -// super.onPause(); -// if (mBinding.vfSwitcher != null) { -// mBinding.vfSwitcher.stopFlipping(); -// } -// } -} diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RankingChildFragment.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RankingChildFragment.java index 582c7607..2376cef1 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RankingChildFragment.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RankingChildFragment.java @@ -37,14 +37,11 @@ public class RankingChildFragment extends BaseMvpFragment { + if (view.getId() == R.id.room_item_head) { + CharmRankingResp item = cAdapter.getItem(position); + RoomUserInfoFragment.show(roomId,item.getUser_id(), "", getHostUser(), true, 3, 0, getChildFragmentManager()); } }); } else { - wAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() { - @Override - public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) { - if (view.getId() == R.id.room_item_head) { - CharmRankingResp item = wAdapter.getItem(position); - - RoomUserInfoFragment.show(roomId,item.getUser_id(), "", getHostUser(), true, 3, 0, getChildFragmentManager()); -// WealthRankingResp.ListsBean item = wAdapter.getItem(position); -// ARouter.getInstance().build(ARouteConstants.NEW_HOME_PAGE).withString("userId", item.getUser_id()).withBoolean("returnRoom", true).navigation(); - } + wAdapter.setOnItemChildClickListener((adapter, view, position) -> { + if (view.getId() == R.id.room_item_head) { + CharmRankingResp item = wAdapter.getItem(position); + RoomUserInfoFragment.show(roomId,item.getUser_id(), "", getHostUser(), true, 3, 0, getChildFragmentManager()); } }); } @@ -192,8 +172,6 @@ public class RankingChildFragment extends BaseMvpFragment { + QXRedBagSendView redBagView = new QXRedBagSendView(getContext()); + redBagView.showInView((ViewGroup) getWindow().getDecorView()); + dismiss(); }); - mBinding.imRedK.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - RetrofitClient.getInstance().grab(mRedPacketInfo.getRedpacket_id(), new BaseObserver() { + mBinding.imRedK.setOnClickListener(v -> { + RetrofitClient.getInstance().grab(mRedPacketInfo.getRedpacket_id(), new BaseObserver() { + @Override + public void onSubscribe(@NotNull Disposable d) { + + } + + @Override + public void onNext(@NotNull RedPackGrab redPackGrab) { + if (redPackGrab.getCode() == 1) { + mRedPacketInfo.setIs_qiang(1); + ARouter.getInstance().build(ARouteConstants.ROOM_RED_RESULT).withString("redpacketId", mRedPacketInfo.getRedpacket_id()).navigation(); + dismiss(); + } else if (redPackGrab.getCode() == 2) { + ToastUtils.showShort("您已经抢过红包了"); + ARouter.getInstance().build(ARouteConstants.ROOM_RED_RESULT).withString("redpacketId", mRedPacketInfo.getRedpacket_id()).navigation(); + dismiss(); + } else { + snatched(); + } + + } + }); + }); + mBinding.tvCk.setOnClickListener(v -> ARouter.getInstance().build(ARouteConstants.ROOM_RED_RESULT).withString("redpacketId", mRedPacketInfo.getRedpacket_id()).navigation()); + mBinding.textPl.setOnClickListener(v -> { + if (drawType == RedEnvelopeStatus.QXRedBagDrawTypeCollect){ + RetrofitClient.getInstance().followRoom(mRedPacketInfo.getRoom_id()+"","1", new BaseObserver() { @Override public void onSubscribe(@NotNull Disposable d) { } @Override - public void onNext(@NotNull RedPackGrab redPackGrab) { - if (redPackGrab != null) { - if (redPackGrab.getCode() == 1) { - mRedPacketInfo.setIs_qiang(1); - ARouter.getInstance().build(ARouteConstants.ROOM_RED_RESULT).withString("redpacketId", mRedPacketInfo.getRedpacket_id()).navigation(); - dismiss(); - } else if (redPackGrab.getCode() == 2) { - ToastUtils.showShort("您已经抢过红包了"); - ARouter.getInstance().build(ARouteConstants.ROOM_RED_RESULT).withString("redpacketId", mRedPacketInfo.getRedpacket_id()).navigation(); - dismiss(); - } else { - snatched(); - } + public void onNext(@NotNull String s) { + if (mContext instanceof RoomActivity) { + ((RoomActivity) mContext).setUserInfo(); + } + if (mRedPacketInfo.canOpenNow()){ + setType(QXRedBagDrawTypeOpen); + }else { + setType(QXRedBagDrawTypeTimeDown); } } }); - -// QXRedBagSendView redBagView = new QXRedBagSendView(getContext()); -// redBagView.showInView((ViewGroup) getWindow().getDecorView()); - - } - }); - mBinding.tvCk.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ARouter.getInstance().build(ARouteConstants.ROOM_RED_RESULT).withString("redpacketId", mRedPacketInfo.getRedpacket_id()).navigation(); - } - }); - mBinding.textPl.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (drawType == RedEnvelopeStatus.QXRedBagDrawTypeCollect){ - RetrofitClient.getInstance().followRoom(mRedPacketInfo.getRoom_id()+"","1", new BaseObserver() { - @Override - public void onSubscribe(@NotNull Disposable d) { - - } - - @Override - public void onNext(@NotNull String s) { - if (mContext instanceof RoomActivity) { - ((RoomActivity) mContext).setUserInfo(); - } - - if (mRedPacketInfo.canOpenNow()){ - setType(QXRedBagDrawTypeOpen); - }else { - setType(QXRedBagDrawTypeTimeDown); - } - } - }); - - }else if (drawType == RedEnvelopeStatus.QXRedBagDrawTypePwdSend){ - UserInfo userInfo = new UserInfo(); - userInfo.setRed_num(mRedPacketInfo.getPassword()); - EventBus.getDefault().post(userInfo); - dismiss(); - } -// ARouter.getInstance().build(ARouteConstants.ROOM_RED_RESULT).withString("redpacketId", mRedPacketInfo.getRedpacket_id()).navigation(); + }else if (drawType == RedEnvelopeStatus.QXRedBagDrawTypePwdSend){ + UserInfo userInfo = new UserInfo(); + userInfo.setRed_num(mRedPacketInfo.getPassword()); + EventBus.getDefault().post(userInfo); + dismiss(); } }); } @@ -186,6 +162,7 @@ public class RedEnvelopesFragment extends BaseDialog 0) { @@ -234,7 +212,6 @@ public class RedEnvelopesFragment extends BaseDialog 0) { diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RedViewModel.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RedViewModel.java deleted file mode 100644 index 34d2d142..00000000 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RedViewModel.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.xscm.modulemain.activity.room.fragment; - -import androidx.lifecycle.ViewModel; - -public class RedViewModel extends ViewModel { - // TODO: Implement the ViewModel -} \ No newline at end of file diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RelationshipFragment.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RelationshipFragment.java index 0df70a16..bc62a078 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RelationshipFragment.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RelationshipFragment.java @@ -64,28 +64,6 @@ public class RelationshipFragment extends BaseMvpDialogFragment list=new ArrayList<>(); -// for (int i = 0; i < 3; i++){ -//// RelationshipBean relationshipBean=new RelationshipBean(); -//// relationshipBean.setAvatar("https://img2.baidu.com/it/u=3879116093,1671048885&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500"); -//// relationshipBean.setAvatar2("https://img2.baidu.com/it/u=3879116093,1671048885&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500"); -//// relationshipBean.setNickname("名称1"); -//// relationshipBean.setNickname2("名称2"); -//// relationshipBean.setRelation("兄弟"); -//// relationshipBean.setTime("5天"); -//// list.add(relationshipBean); -// } -// adapter=new RelationshipAdapter(); -// mBinding.bannerViewPager -// .setScrollDuration(0) -// .setOrientation(ViewPager2.ORIENTATION_VERTICAL) -// .setAutoPlay(false) -// .setAdapter(adapter); -// -// mBinding.bannerViewPager.setIndicatorVisibility(View.GONE); -// mBinding.bannerViewPager.create(list); - } @Override @@ -93,14 +71,11 @@ public class RelationshipFragment extends BaseMvpDialogFragment { + if (view.getId() == R.id.im_zhid) { + queren(1, data.getId(), ""); + } else if (view.getId() == R.id.im_shanchu) { + queren(2, data.getId(), data.getDelete_me_coin()); } }); @@ -116,7 +91,6 @@ public class RelationshipFragment extends BaseMvpDialogFragment { // 点击“确认”按钮时执行删除操作 -// MvpPre.applySong(roomId); MvpPre.topRelationCard(id + ""); dismiss(); }, @@ -132,7 +106,6 @@ public class RelationshipFragment extends BaseMvpDialogFragment { // 点击“确认”按钮时执行删除操作 -// MvpPre.applySong(roomId); MvpPre.deleteRelationCard(id + ""); dismiss(); }, diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RequestFragment.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RequestFragment.java index e5387b61..05e416ed 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RequestFragment.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RequestFragment.java @@ -50,7 +50,6 @@ public class RequestFragment extends BaseMvpFragment adapter; private int page = 1; @@ -111,22 +110,11 @@ public class RequestFragment extends BaseMvpFragment{ -// if (hasFocus) { -// new Handler(Looper.getMainLooper()).postDelayed(() -> { -// if ( mBinding.scrollView != null) { -// mBinding.scrollView.post(() -> mBinding.scrollView.fullScroll(View.FOCUS_DOWN)); // 滚动到底部 -// } -// }, 200); -// } -// }); mBinding.editQuery.setText(SpUtil.getMusicName()); mBinding.editQuery.addTextChangedListener(new TextWatcher() { @@ -137,9 +125,6 @@ public class RequestFragment extends BaseMvpFragment auctionList; - // private ImageView imActionJs, imActionYs; - // private LinearLayout stub; - private boolean isButtonsInflated = false; private int type; RoomFragment parentFragment; @@ -99,31 +94,6 @@ public class RoomAuctionFragment extends BaseMvpFragment { -// if (data != null) { -// // 处理数据 -// roomInfoUpdate(data); -// } -// }); - - return super.onCreateView(inflater, container, savedInstanceState); - } - - @Override - public void onAttach(@NonNull Context context) { - super.onAttach(context); -// roomInfoResp = (RoomInfoResp) getArguments().getSerializable("roomInfo"); -// type = getArguments().getInt("type"); - } - public void upRoomInfo(RoomInfoResp roomInfoResp) { this.roomInfoResp = roomInfoResp; } @@ -154,10 +124,6 @@ public class RoomAuctionFragment extends BaseMvpFragment 0) { + if (roomAuction.getAuction_list() != null && !roomAuction.getAuction_list().isEmpty()) { auctionList = roomAuction.getAuction_list(); gexList(); } @@ -262,19 +216,7 @@ public class RoomAuctionFragment extends BaseMvpFragment { + if (ClickUtils.isFastDoubleClick()) { + return; + } + if (pitBean.getUser_id() != null && !pitBean.getUser_id().isEmpty() && !pitBean.getUser_id().equals("0")) { + RoomCharmDialog.newInstance(roomInfoResp.getRoom_info().getRoom_id(), pitBean.getUser_id()).show(getChildFragmentManager(), "RoomCharmDialog"); } }); @@ -418,16 +323,12 @@ public class RoomAuctionFragment extends BaseMvpFragment { + if (ClickUtils.isFastDoubleClick()) { + return; + } + if (pitBean.getUser_id() != null && !pitBean.getUser_id().isEmpty() && !pitBean.getUser_id().equals("0")) { + RoomCharmDialog.newInstance(roomInfoResp.getRoom_info().getRoom_id(), pitBean.getUser_id()).show(getChildFragmentManager(), "RoomCharmDialog"); } }); mBinding.ivAuction3.setOnClickListener(view -> { @@ -508,11 +409,6 @@ public class RoomAuctionFragment extends BaseMvpFragment { -// steView(newType); -// // 根据新的type更新TextView样式 -// int defaultColor = ContextCompat.getColor(requireContext(), com.xscm.moduleutil.R.color.color_0DFFB9); // 绿色 -// int selectedColor = ContextCompat.getColor(requireContext(), com.xscm.moduleutil.R.color.color_white); // 白色 -// int clickedColor = ContextCompat.getColor(requireContext(), com.xscm.moduleutil.R.color.color_BB8BE2); // 蓝色 -// float defaultSize = 16f; -// float selectedSize = 24f; -// -// toggleTextStyles(mBinding.qinmi, mBinding.zhenai, defaultColor, selectedColor, clickedColor, defaultSize, selectedSize, type); - // 点击“确认”按钮时执行 MvpPre.auctionMode(roomInfoResp.getRoom_info().getRoom_id(), newType == 1 ? "1" : "2"); }, @@ -690,7 +570,6 @@ public class RoomAuctionFragment extends BaseMvpFragment 0) { -// for (int i = 0; i < auctionList.size(); i++) { -// if (auctionList.get(i).getUser_id().equals(messageEvent.getText().getFromUserInfo().getUser_id() + "")) { -// auctionList.get(i).setDress(messageEvent.getText().getFromUserInfo().getDress()); -// auctionList.get(i).setAvatar(messageEvent.getText().getFromUserInfo().getAvatar()); -// auctionList.get(i).setNickname(messageEvent.getText().getFromUserInfo().getNickname()); -// auctionList.get(i).setSex(messageEvent.getText().getFromUserInfo().getSex() + ""); -// gexList(); -// } -// } -// -// } -// } -// -// } private void gengv() { if (auctionUserBean != null) { mBinding.tvRelation.setText(auctionUserBean.getRelation_name()); @@ -1144,16 +824,12 @@ public class RoomAuctionFragment extends BaseMvpFragment { -// if (item.isAddButton()) { -// // 跳转选择图片(比如打开系统相册) -// chooseImage(); -// } else { -// // 选择某张图片作为背景 -// checkedPicture = item.getImage_url(); -// EventBus.getDefault().post(new RoomBgBean()); -// notifyDataSetChanged(); -// } -// }); } } - public void closeDialog(View view) { - dismiss(); - } - - } diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RoomCabinFragment.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RoomCabinFragment.java index 351bd807..5751f291 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RoomCabinFragment.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RoomCabinFragment.java @@ -4,34 +4,23 @@ import static android.view.View.GONE; import static android.view.View.VISIBLE; import android.annotation.SuppressLint; -import android.content.Intent; -import android.os.Build; import android.os.Bundle; import android.os.CountDownTimer; -import android.provider.Settings; import android.util.Log; -import android.view.LayoutInflater; import android.view.SurfaceView; import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; -import androidx.core.app.NotificationManagerCompat; import com.blankj.utilcode.util.LogUtils; -import com.blankj.utilcode.util.ObjectUtils; import com.blankj.utilcode.util.TimeUtils; +import com.hjq.toast.ToastUtils; +import com.orhanobut.logger.Logger; import com.xscm.modulemain.R; import com.xscm.modulemain.activity.room.activity.RoomActivity; +import com.xscm.modulemain.activity.room.contacts.RoomCabinContacts; +import com.xscm.modulemain.activity.room.presenter.RoomCabinPresenter; import com.xscm.modulemain.databinding.RoomCabinFragmentBinding; import com.xscm.modulemain.dialog.ExitRoomBottomSheet; import com.xscm.modulemain.dialog.RoomGiftDialogFragment; -import com.hjq.toast.ToastUtils; -import com.orhanobut.logger.Logger; -import com.xscm.modulemain.activity.room.contacts.RoomCabinContacts; -import com.xscm.modulemain.activity.room.presenter.RoomCabinPresenter; import com.xscm.moduleutil.base.BaseRoomFragment; import com.xscm.moduleutil.base.CommonAppContext; import com.xscm.moduleutil.bean.RoomMessageEvent; @@ -40,14 +29,10 @@ import com.xscm.moduleutil.bean.room.RoomCpUserBean; import com.xscm.moduleutil.bean.room.RoomInfoResp; import com.xscm.moduleutil.bean.room.RoomPitBean; import com.xscm.moduleutil.event.CabinEvent; -import com.xscm.moduleutil.event.RoomBeckoningEvent; import com.xscm.moduleutil.listener.MessageListenerSingleton; import com.xscm.moduleutil.rtc.AgoraManager; import com.xscm.moduleutil.utils.SpUtil; -import com.xscm.moduleutil.widget.SharedViewModel; -import com.xscm.moduleutil.widget.dialog.CommonDialog; -import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; @@ -69,10 +54,8 @@ public class RoomCabinFragment extends BaseRoomFragment { - Intent intent = new Intent(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS); - intent.putExtra(Settings.EXTRA_APP_PACKAGE, getActivity().getPackageName()); - intent.putExtra(Settings.EXTRA_CHANNEL_ID, getActivity().getApplicationInfo().uid); - } else { - intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); - } - startActivity(intent); - dialog.dismiss(); - }) - .show(); - } @Override protected RoomCabinPresenter bindPresenter() { @@ -153,54 +101,31 @@ public class RoomCabinFragment extends BaseRoomFragment { -// if (data != null) { -// // 处理数据 -// roomInfoUpdate(data); -// } -// }); - return super.onCreateView(inflater, container, savedInstanceState); } + @Override protected void initView() { super.initView(); - mBinding.im1.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (!isShow) { - switchMic(2); - isMute(1); - } else { - switchMic(1); - } - + mBinding.im1.setOnClickListener(v -> { + if (!isShow) { + switchMic(2); + isMute(1); + } else { + switchMic(1); } + }); - mBinding.im2.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - RoomPitBean roomPitBean = mBinding.roomMakeWheat2.pitBean; - UserInfo userInfo = new UserInfo(); - userInfo.setUser_id(Integer.parseInt(roomPitBean.getUser_id()!=null ? roomPitBean.getUser_id() : "0")); - userInfo.setNickname(roomPitBean.getNickname()); - userInfo.setAvatar(roomPitBean.getAvatar()); - userInfo.setPit_number(""); - RoomGiftDialogFragment.show(null, userInfo, roomInfoResp.getRoom_info().getRoom_id(),0,"", getParentFragmentManager()); + mBinding.im2.setOnClickListener(v -> { + RoomPitBean roomPitBean = mBinding.roomMakeWheat2.pitBean; + UserInfo userInfo = new UserInfo(); + userInfo.setUser_id(Integer.parseInt(roomPitBean.getUser_id()!=null ? roomPitBean.getUser_id() : "0")); + userInfo.setNickname(roomPitBean.getNickname()); + userInfo.setAvatar(roomPitBean.getAvatar()); + userInfo.setPit_number(""); + RoomGiftDialogFragment.show(null, userInfo, roomInfoResp.getRoom_info().getRoom_id(),0,"", getParentFragmentManager()); - } }); if (!CommonAppContext.getInstance().isShowAg){ switchMic(2); @@ -209,62 +134,30 @@ public class RoomCabinFragment extends BaseRoomFragment { + if (!isMicPlace) { + joinChannel(); + isMicPlace = true; + mBinding.im3.setImageResource(com.xscm.moduleutil.R.mipmap.clogs_car); + CommonAppContext.getInstance().isMicPlace = true; + } else { + isMicPlace = false; + ToastUtils.show("将停止屏幕共享"); + AgoraManager.getInstance(getActivity()).stopScreenCapture(); + mBinding.im3.setImageResource(com.xscm.moduleutil.R.mipmap.gongxiang); + CommonAppContext.getInstance().isMicPlace = false; } }); if (roomInfoResp != null && roomInfoResp.getRoom_owner().getUser_id().equals(SpUtil.getUserId()+"")){ mBinding.im3.setVisibility(VISIBLE); -// setvkk(false); }else { mBinding.im3.setVisibility(GONE); } -// if (label_id!=null&& label_id.equals(LABEL_ID_MOVIE)){ -// mBinding.im3.setVisibility(GONE); -// } } - // 获取 MediaProjectionManager -// MediaProjectionManager mediaProjectionManager = (MediaProjectionManager) getSelfActivity().getSystemService(Context.MEDIA_PROJECTION_SERVICE); -// private MediaProjection[] mediaProjection = new MediaProjection[1]; -// private final ActivityResultLauncher mediaProjectionLauncher = registerForActivityResult( -// new ActivityResultContracts.StartActivityForResult(), result -> { -// if (result.getResultCode() == Activity.RESULT_OK) { -// try { -// // 获取申请到的 MediaProjection -// mediaProjection[0] = mediaProjectionManager -// .getMediaProjection(result.getResultCode(), result.getData()); -// // r MediaProjection,需要在 startScreenCapture 之前调用 -// -// AgoraManager.getInstance(getActivity()).setExternalMediaProjection(mediaProjection); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } -// } -// ); - // 请求屏幕捕获 - private void requestScreenCapture() { -// Intent intent = mediaProjectionManager.createScreenCaptureIntent(); -// mediaProjectionLauncher.launch(intent); - } + public void handleMsgType1028(RoomMessageEvent messageEvent){ if (messageEvent.getMsgType()==1028){ mBinding.tvHeartValue2.setText(messageEvent.getText().getHot_value()); @@ -272,90 +165,13 @@ public class RoomCabinFragment extends BaseRoomFragment= Build.VERSION_CODES.O) { -// // Android 12+ 需要指定 foregroundServiceType -// Intent serviceIntent = new Intent(context, FloatingWindowService.class); -// serviceIntent.setAction("ACTION_START_FLOAT"); -// context.startForegroundService(serviceIntent); -// } -// -// } } @Override @@ -440,7 +227,6 @@ public class RoomCabinFragment extends BaseRoomFragment mediaProjectionLauncher = registerForActivityResult( -// new ActivityResultContracts.StartActivityForResult(), -// result -> { -// if (result.getResultCode() == Activity.RESULT_OK) { -// try { -// mediaProjection[0] = mediaProjectionManager -// .getMediaProjection(result.getResultCode(), result.getData()); -// joinChannel(); -// } catch (Exception e) { -// Log.e("RoomCabinFragment", "error msg: " + e.getMessage()); -// } -// } -// } -// ); - - private void isConfig() { - - enableNotifications(); - } - - private void joinChannel() { AgoraManager.getInstance(getActivity()).updateChannelMediaOptions(); @@ -838,11 +578,5 @@ public class RoomCabinFragment extends BaseRoomFragment fragments = new ArrayList<>(); -// fragments.add(RankingChildFragment.newInstance(mRoomId, childType, type)); -// fragments.add(RankingChildFragment.newInstance(mRoomId, childType, type)); -// fragments.add(RankingChildFragment.newInstance(mRoomId, childType, type)); -// MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(fragments, getChildFragmentManager()); -// mBinding.vpRankChild.setAdapter(myFragmentPagerAdapter); -// mBinding.vpRankChild.setCurrentItem(0); -// mBinding.slidingTabLayout.setViewPager(mBinding.vpRankChild, title); mBinding.tvCharm.setOnClickListener(this::onViewClicked); mBinding.tvWealth.setOnClickListener(this::onViewClicked); diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RoomFragment.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RoomFragment.java index 696c8fe3..b65b2180 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RoomFragment.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RoomFragment.java @@ -1129,7 +1129,7 @@ public class RoomFragment extends BaseMvpFragment adapter; - private RoomOnline online; public RoomKtvFragment() {} public RoomKtvFragment(RoomInfoResp roomInfoResp) { @@ -84,47 +82,6 @@ public class RoomKtvFragment extends BaseMvpFragment { -// View muZc = view.findViewById(R.id.mu_zc); -// ViewGroup parent = (ViewGroup) muZc.getParent(); -// -// Rect bounds = new Rect(); -// muZc.getHitRect(bounds); -// // 扩展点击区域 -// bounds.top -=55; -// bounds.bottom += 50; -// bounds.left -= 30; -// bounds.right += 30; -// -// parent.setTouchDelegate(new TouchDelegate(bounds, muZc)); -// }); - } - private SharedViewModel sharedViewModel; - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { -// sharedViewModel = new ViewModelProvider(requireActivity()).get(SharedViewModel.class); -// -// // 观察专门给子Fragment的数据 -// sharedViewModel.getChildFragmentData().observe(getViewLifecycleOwner(), data -> { -// if (data != null) { -// // 处理数据 -// roomInfoUpdate(data); -// } -// }); - return super.onCreateView(inflater, container, savedInstanceState); - } public View getNegativeMarginView() { return mBinding.muZc; @@ -175,7 +132,6 @@ public class RoomKtvFragment extends BaseMvpFragment { + if (ClickUtils.isFastDoubleClick()) { + return; } + if (pitBean.getUser_id() != null && !pitBean.getUser_id().isEmpty() && !pitBean.getUser_id().equals("0")) { + RoomCharmDialog.newInstance(roomInfoResp.getRoom_info().getRoom_id(), pitBean.getUser_id()).show(getChildFragmentManager(), "RoomCharmDialog"); + } + }); - - // 设置透明覆盖层的点击事件 -// View touchOverlay = mBinding.getRoot().findViewById(R.id.mu_zc_touch_overlay); -// -// touchOverlay.setOnClickListener(v -> { -// // 转发点击事件给实际的 mu_zc 视图 -// muZc.performClick(); -// }); - } private int isNumberWhether() { @@ -641,8 +557,6 @@ public class RoomKtvFragment extends BaseMvpFragment 0) { } else { -// if (mBinding.muZc.pitBean.getUser_id().equals(SpUtil.getUserId() + "")) { -// ((RoomActivity) getActivity()).setRoleType(2, -1); -// ((RoomActivity) getActivity()).switchMic(2); -// } else { ((RoomActivity) getActivity()).setRoleType(0, 0); ((RoomActivity) getActivity()).switchMic(2); -// } - - } } } @@ -827,9 +726,6 @@ public class RoomKtvFragment extends BaseMvpFragment list) { -// adapter.setNewData(list); } @Override diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/SingSongFragment.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/SingSongFragment.java index f7c5b26f..904d5f10 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/SingSongFragment.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/SingSongFragment.java @@ -132,17 +132,16 @@ public class SingSongFragment extends BaseRoomFragment { -// upDtaView(true); -// }); -// Observable.timer(100, TimeUnit.MILLISECONDS) -// .observeOn(AndroidSchedulers.mainThread()) -// .subscribe(aLong -> { -// upDtaView(false); -// }); + Observable.timer(10, TimeUnit.MILLISECONDS) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(aLong -> { + upDtaView(true); + }); + Observable.timer(60, TimeUnit.MILLISECONDS) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(aLong -> { + upDtaView(false); + }); } public void upRoomInfo(RoomInfoResp roomInfoResp) { diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/VoiceCategoryFragment.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/VoiceCategoryFragment.java index fa1d03ce..4960c25e 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/VoiceCategoryFragment.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/VoiceCategoryFragment.java @@ -95,12 +95,6 @@ public class VoiceCategoryFragment extends BaseMvpFragment implements ChatRoomContacts.IPublicScreenEaseChatPre { + public ChatRoomPresenter(ChatRoomContacts.View view, Context context) { + super(view, context); + } + + @Override + public void logEmchat(int code, String msg, String toChatUsername) { + + } + + @Override + public void switchPublicScreen(String room_id, String status) { + + } + +} \ No newline at end of file diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/presenter/PublicScreenEaseChatPresenter.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/presenter/PublicScreenEaseChatPresenter.java deleted file mode 100644 index edad2d79..00000000 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/room/presenter/PublicScreenEaseChatPresenter.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.xscm.modulemain.activity.room.presenter; - -import android.content.Context; - -import com.xscm.modulemain.activity.room.contacts.PublicScreenEaseChatContacts; -import com.xscm.moduleutil.presenter.BasePresenter; - -public class PublicScreenEaseChatPresenter extends BasePresenter implements PublicScreenEaseChatContacts.IPublicScreenEaseChatPre { - public PublicScreenEaseChatPresenter(PublicScreenEaseChatContacts.View view, Context context) { - super(view, context); - } - - @Override - public void logEmchat(int code, String msg, String toChatUsername) { -// ApiClient.getInstance().logEmchat(code, msg, toChatUsername, new BaseObserver() { -// @Override -// public void onSubscribe(Disposable d) { -// addDisposable(d); -// } -// -// @Override -// public void onNext(String s) { -// -// } -// -// @Override -// public void onComplete() { -// -// } -// }); - } - - @Override - public void switchPublicScreen(String room_id, String status) { -// ApiClient.getInstance().switchPublicScreen(room_id, status, new BaseObserver() { -// @Override -// public void onSubscribe(Disposable d) { -// addDisposable(d); -// } -// -// @Override -// public void onNext(String s) { -// -// } -// -// @Override -// public void onComplete() { -// -// } -// }); - } - - public void sendFace(String roomId, String face_id, String pit, int type) { -// ApiClient.getInstance().sendFace(roomId, face_id, pit, type, new BaseObserver() { -// @Override -// public void onSubscribe(Disposable d) { -// addDisposable(d); -// } -// -// @Override -// public void onNext(String s) { -// -// } -// -// @Override -// public void onComplete() { -// -// } -// }); - } -} \ No newline at end of file diff --git a/modulemain/src/main/java/com/xscm/modulemain/manager/RoomManager.java b/modulemain/src/main/java/com/xscm/modulemain/manager/RoomManager.java index 5ba118bf..48de0c7f 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/manager/RoomManager.java +++ b/modulemain/src/main/java/com/xscm/modulemain/manager/RoomManager.java @@ -254,6 +254,7 @@ public class RoomManager { LogUtils.dTag("RoomActivity", "navigateToRoom:房间信息获取存在问题"); return; } + intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); ActivityUtils.getTopActivity().startActivity(intent); } catch (Exception e) { Logger.e(TAG, "跳转房间页面失败: " + e.getMessage());