From 9433586dfd90d4d0d9ded2f40d4336ecf5fa78e0 Mon Sep 17 00:00:00 2001 From: huangjian Date: Fri, 2 Sep 2022 16:34:39 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A2=AB=E8=B8=A2=E5=90=8E5=E5=88=86=E9=92=9F?= =?UTF-8?q?=E5=86=85=E4=B8=8D=E8=83=BD=E8=BF=9B=E5=85=A5=E6=AD=A4=E6=88=BF?= =?UTF-8?q?=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/yizhuan/erban/MainActivity.java | 1 + .../erban/avroom/activity/AVRoomActivity.java | 10 ++++ .../XChatConstants.java | 4 ++ .../yizhuan/xchat_android_core/DemoCache.java | 23 ++++++++ .../manager/AvRoomDataManager.java | 58 +++++++++++++------ 5 files changed, 78 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/yizhuan/erban/MainActivity.java b/app/src/main/java/com/yizhuan/erban/MainActivity.java index b58fd76ee..038bb31cf 100644 --- a/app/src/main/java/com/yizhuan/erban/MainActivity.java +++ b/app/src/main/java/com/yizhuan/erban/MainActivity.java @@ -281,6 +281,7 @@ public class MainActivity extends BaseMvpActivity } else if (event == RoomEvent.ROOM_CHAT_RECONNECTION) { updateRoomState(); } else if (event == RoomEvent.MY_SELF_KICK_OUT_ROOM_BY_S_ADMIN) { + AvRoomDataManager.get().addCurrentRoomLimitEnter(); toast(R.string.kick_out_room_by_s_admin); StatisticManager.Instance().onEvent(StatisticsProtocol.USER_KICKED_EVENT, "用户被踢"); getMvpPresenter().exitRoom(); diff --git a/app/src/main/java/com/yizhuan/erban/avroom/activity/AVRoomActivity.java b/app/src/main/java/com/yizhuan/erban/avroom/activity/AVRoomActivity.java index 752b4b6f6..c13a0de2a 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/activity/AVRoomActivity.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/activity/AVRoomActivity.java @@ -126,6 +126,7 @@ import com.yizhuan.xchat_android_core.utils.StringUtils; import com.yizhuan.xchat_android_library.base.factory.CreatePresenter; import com.yizhuan.xchat_android_library.rxbus.RxBus; import com.yizhuan.xchat_android_library.utils.JavaUtil; +import com.yizhuan.xchat_android_library.utils.SingleToastUtil; import com.yizhuan.xchat_android_library.utils.UIUtils; import org.greenrobot.eventbus.EventBus; @@ -230,6 +231,10 @@ public class AVRoomActivity extends BaseMvpActivity readKickOutRoom() { + String string = SettingsPref.instance().getString(KEY_KICK_OUT_ROOM, null); + if (TextUtils.isEmpty(string)) return null; + return new Gson().fromJson(string, + new TypeToken>() { + }.getType()); + } + + public static void saveKickOutRoom(String roomUid) { + Map map = readKickOutRoom(); + if (map == null) map = new HashMap<>(); + for (Iterator> it = map.entrySet().iterator(); it.hasNext(); ) { + if (CurrentTimeUtils.getCurrentTime() - it.next().getValue() > XChatConstants.KICK_OUT_ROOM_LIMIT_ENTER_TIME) { + it.remove(); + } + } + map.put(roomUid, CurrentTimeUtils.getCurrentTime()); + SettingsPref.instance().putString(KEY_KICK_OUT_ROOM, new Gson().toJson(map)); + } + } diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/manager/AvRoomDataManager.java b/core/src/main/java/com/yizhuan/xchat_android_core/manager/AvRoomDataManager.java index f83221b4d..d33d997fc 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/manager/AvRoomDataManager.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/manager/AvRoomDataManager.java @@ -22,6 +22,8 @@ import com.netease.nimlib.sdk.chatroom.model.EnterChatRoomResultData; import com.netease.nimlib.sdk.msg.attachment.NotificationAttachment; import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum; import com.netease.nimlib.sdk.msg.constant.NotificationType; +import com.yizhuan.xchat_android_constants.XChatConstants; +import com.yizhuan.xchat_android_core.DemoCache; import com.yizhuan.xchat_android_core.auth.AuthModel; import com.yizhuan.xchat_android_core.bean.RoomQueueInfo; import com.yizhuan.xchat_android_core.im.custom.bean.RoomPkBean; @@ -36,6 +38,7 @@ import com.yizhuan.xchat_android_core.room.bean.RoomModeType; import com.yizhuan.xchat_android_core.super_admin.SuperAdminDataMrg; import com.yizhuan.xchat_android_core.super_admin.util.SuperAdminUtil; import com.yizhuan.xchat_android_core.user.UserModel; +import com.yizhuan.xchat_android_core.utils.CurrentTimeUtils; import com.yizhuan.xchat_android_core.utils.LogUtils; import com.yizhuan.xchat_android_core.utils.StringUtils; import com.yizhuan.xchat_android_library.rxbus.RxBus; @@ -93,6 +96,11 @@ public final class AvRoomDataManager { public final List roomSuperAdminList = new ArrayList<>(); @NonNull public final MutableLiveData roomPkLiveData = new MutableLiveData<>(); + /** + * 是否需要关麦,用户自己的行为,不受房主管理员的管理,与闭麦状态相同,当闭麦这个值就是ture; + * 2022/9/1更改:无论什么情况上麦,默认都是关麦的! + */ + public final boolean mIsNeedOpenMic = true; private final PublishProcessor> chatRoomMsgProcessor = PublishProcessor.create(); @Nullable public RoomInfo mCurrentRoomInfo; @@ -138,11 +146,6 @@ public final class AvRoomDataManager { * 坑位上用户的头饰 */ public HashMap> mHeadWearMap; - /** - * 是否需要关麦,用户自己的行为,不受房主管理员的管理,与闭麦状态相同,当闭麦这个值就是ture; - * 2022/9/1更改:无论什么情况上麦,默认都是关麦的! - */ - public final boolean mIsNeedOpenMic = true; /** * 是否需要打开礼物特效 */ @@ -210,6 +213,10 @@ public final class AvRoomDataManager { * 公屏数据 */ private List chatRoomMessages = new LinkedList<>(); + /** + * 记录该用户被踢房间的uid + */ + private Map kickOutRoomUids; private AvRoomDataManager() { mRoomManagerList = new ArrayList<>(); @@ -222,6 +229,8 @@ public final class AvRoomDataManager { dragons = new ArrayList<>(); mHeadWearMap = new HashMap<>(); observerChatRoomMessage(); + kickOutRoomUids = DemoCache.readKickOutRoom(); + if (kickOutRoomUids == null) kickOutRoomUids = new HashMap<>(); } public static AvRoomDataManager get() { @@ -244,23 +253,24 @@ public final class AvRoomDataManager { /** * 云信的RoomInfo和我们服务端的RoomInfo是不同步的,需要单独保存一下有用到的字段 + * * @param roomInfo */ - public void updateServiceRoomInfo(RoomInfo roomInfo){ + public void updateServiceRoomInfo(RoomInfo roomInfo) { //我们自己服务端信息 - mCurrentRoomInfo = roomInfo; - mBoxSwitchVo = roomInfo.boxSwitchVo; - phrases = roomInfo.getSpeakTemplate(); - nick = roomInfo.getNick(); - gender = roomInfo.getGender(); - avatar = roomInfo.getAvatar(); - isRoomFans = roomInfo.isRoomFans(); - trtcSig = roomInfo.getTrtcSig(); - clearScreenTime = roomInfo.getClearScreenTime(); - showPkBeginTime = roomInfo.isShowPkBeginTime(); - pkBeginTime = roomInfo.getPkBeginTime(); - redEnvelopeOpen = roomInfo.isRedEnvelopeOpen(); + mCurrentRoomInfo = roomInfo; + mBoxSwitchVo = roomInfo.boxSwitchVo; + phrases = roomInfo.getSpeakTemplate(); + nick = roomInfo.getNick(); + gender = roomInfo.getGender(); + avatar = roomInfo.getAvatar(); + isRoomFans = roomInfo.isRoomFans(); + trtcSig = roomInfo.getTrtcSig(); + clearScreenTime = roomInfo.getClearScreenTime(); + showPkBeginTime = roomInfo.isShowPkBeginTime(); + pkBeginTime = roomInfo.getPkBeginTime(); + redEnvelopeOpen = roomInfo.isRedEnvelopeOpen(); } /** @@ -1292,6 +1302,18 @@ public final class AvRoomDataManager { return isDatingMode() && roomQueueInfo.mChatRoomMember.isHasSelectUser(); } + public boolean isLimitEnterRoom(String roomUid) { + Long limitTime = kickOutRoomUids.get(roomUid); + return limitTime != null && CurrentTimeUtils.getCurrentTime() - limitTime < XChatConstants.KICK_OUT_ROOM_LIMIT_ENTER_TIME; + } + + public void addCurrentRoomLimitEnter() { + if (mCurrentRoomInfo == null) return; + String roomUid = String.valueOf(getRoomUid()); + kickOutRoomUids.put(roomUid, CurrentTimeUtils.getCurrentTime()); + DemoCache.saveKickOutRoom(roomUid); + } + private static final class Helper { private static final AvRoomDataManager INSTANCE = new AvRoomDataManager(); }