From 3c3ca67a766e3407a7cdbf942bf5b1979956f05f Mon Sep 17 00:00:00 2001 From: huangjian Date: Wed, 20 Jul 2022 16:39:11 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9B=E6=88=BF=E5=8E=86=E5=8F=B2=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E6=9F=A5=E8=AF=A2=E6=96=B9=E5=BC=8F=E4=BC=98=E5=8C=96?= =?UTF-8?q?(=E5=8F=AA=E5=9C=A8=E8=BF=9B=E6=88=BF=E6=88=90=E5=8A=9F?= =?UTF-8?q?=E5=90=8E=E6=9F=A5=E8=AF=A2=E4=B8=80=E6=AC=A1,=E4=B8=8E?= =?UTF-8?q?=E6=9C=80=E5=B0=8F=E5=8C=96=E6=97=A0=E5=85=B3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../erban/avroom/activity/AVRoomActivity.java | 11 +---- .../erban/avroom/fragment/BaseRoomFragment.kt | 22 +-------- .../avroom/fragment/FakeSingleRoomFragment.kt | 28 ++++++----- .../erban/avroom/fragment/GameRoomFragment.kt | 4 +- .../avroom/fragment/HomePartyFragment.java | 22 ++------- .../fragment/HomePartyRoomFragment.java | 4 +- .../avroom/fragment/SingleRoomFragment.kt | 4 +- .../avroom/presenter/AvRoomPresenter.java | 1 + .../avroom/presenter/BaseRoomPresenter.java | 39 --------------- .../erban/avroom/view/IBaseRoomView.kt | 5 -- .../erban/avroom/widget/MessageView.java | 31 ++++-------- .../widget/VerticalViewPagerAdapter.java | 6 +-- .../manager/AvRoomDataManager.java | 39 +++++++++------ .../room/model/AvRoomModel.java | 48 +++++++++++++++++++ .../room/model/inteface/IAvRoomModel.java | 2 + 15 files changed, 113 insertions(+), 153 deletions(-) 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 61d409d9f..56b9f9f57 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 @@ -109,9 +109,6 @@ import com.yizhuan.xchat_android_core.room.bean.RoomModeType; import com.yizhuan.xchat_android_core.room.bean.SimplePartyRoomInfo; import com.yizhuan.xchat_android_core.room.dragonball.DragonBallModel; import com.yizhuan.xchat_android_core.room.event.FinishAvRoomEvent; -import com.yizhuan.xchat_android_core.room.event.RoomClearScreenEvent; -import com.yizhuan.xchat_android_core.room.model.AvRoomModel; -import com.yizhuan.xchat_android_core.room.model.RoomBaseModel; import com.yizhuan.xchat_android_core.room.pk.event.PKStateEvent; import com.yizhuan.xchat_android_core.statistic.StatisticManager; import com.yizhuan.xchat_android_core.statistic.protocol.StatisticsProtocol; @@ -122,7 +119,6 @@ import com.yizhuan.xchat_android_core.user.bean.UserInfo; import com.yizhuan.xchat_android_core.utils.LogUtils; import com.yizhuan.xchat_android_core.utils.StringUtils; import com.yizhuan.xchat_android_library.base.factory.CreatePresenter; -import com.yizhuan.xchat_android_library.net.rxnet.callback.CallBack; import com.yizhuan.xchat_android_library.utils.JavaUtil; import com.yizhuan.xchat_android_library.utils.UIUtils; @@ -366,7 +362,6 @@ public class AVRoomActivity extends BaseMvpActivity?> : private var mDisposable: Disposable? = null private var isCloseScreen = false private var isOpenRedPackage = false - private var isRoomMin = false @JvmField protected var isDatingMode = false @@ -221,14 +220,6 @@ open class BaseRoomFragment?> : softKeyboardListener() } - - override fun onInitArguments(bundle: Bundle?) { - super.onInitArguments(bundle) - if (bundle != null) { - isRoomMin = bundle.getBoolean(Constants.IS_ROOM_MIN, false) - } - } - @SuppressLint("CheckResult") @CallSuper override fun initiate() { @@ -274,12 +265,7 @@ open class BaseRoomFragment?> : GiftModel.get().refreshGiftList(AvRoomDataManager.get().roomUid.toString()).subscribe() checkFollowOwner() mvpPresenter?.loadRoomRank() - //最小化恢复时,更新礼物值 - if (isRoomMin) { - GiftValueMrg.get().updateRoomGiftValue(false) - } else { - mvpPresenter?.loadMessageHistory(AvRoomDataManager.get().clearScreenTime) - } + GiftValueMrg.get().updateRoomGiftValue(false) } @CallSuper @@ -631,7 +617,6 @@ open class BaseRoomFragment?> : */ @Subscribe(threadMode = ThreadMode.MAIN) fun onClearScreenEvent(event: RoomClearScreenEvent?) { - AvRoomDataManager.get().chatRoomDataRelease(false) messageView.clear() } @@ -1115,11 +1100,6 @@ open class BaseRoomFragment?> : } } - - override fun showMessageHistory(messages: List?) { - messageView.addHistoryMessages(messages) - } - override fun onFollowSuccess(position: Int) { StatisticManager.Instance() .onEvent(StatisticsProtocol.EVENT_FOLLOW_OWNER_FROM_ROOM, "语音房-关注房主") diff --git a/app/src/main/java/com/yizhuan/erban/avroom/fragment/FakeSingleRoomFragment.kt b/app/src/main/java/com/yizhuan/erban/avroom/fragment/FakeSingleRoomFragment.kt index 1125b8441..c684f258a 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/fragment/FakeSingleRoomFragment.kt +++ b/app/src/main/java/com/yizhuan/erban/avroom/fragment/FakeSingleRoomFragment.kt @@ -12,6 +12,10 @@ import com.yizhuan.xchat_android_core.room.bean.RoomInfo import com.yizhuan.xchat_android_core.room.model.AvRoomModel import com.yizhuan.xchat_android_core.utils.CurrentTimeUtils import com.yizhuan.xchat_android_core.utils.StringUtils +import io.reactivex.Single +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.Disposable +import java.util.concurrent.TimeUnit class FakeSingleRoomFragment : BaseViewBindingFragment() { @@ -22,11 +26,7 @@ class FakeSingleRoomFragment : BaseViewBindingFragment(), companion object { @JvmStatic - fun newInstance(isRoomMin: Boolean): GameRoomFragment { + fun newInstance(): GameRoomFragment { val roomFragment = GameRoomFragment() val bundle = Bundle() - //是否是最小化进来 - bundle.putBoolean(Constants.IS_ROOM_MIN, isRoomMin) roomFragment.arguments = bundle return roomFragment } diff --git a/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyFragment.java b/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyFragment.java index 828748041..98da752a9 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyFragment.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyFragment.java @@ -34,7 +34,6 @@ import com.yizhuan.erban.friend.view.SelectFriendActivity; import com.yizhuan.erban.home.helper.OpenRoomHelper; import com.yizhuan.erban.ui.widget.ShareDialog; import com.yizhuan.erban.utils.RegexUtil; -import com.yizhuan.xchat_android_core.Constants; import com.yizhuan.xchat_android_core.gift.bean.GiftMultiReceiverInfo; import com.yizhuan.xchat_android_core.gift.bean.GiftReceiveInfo; import com.yizhuan.xchat_android_core.gift.bean.LuckyBagGifts; @@ -93,9 +92,6 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe private ImageView roomMore; private ImageView ivRoomShare; - - private boolean isRoomMin; - private GiftV2View giftView; private ViewStub mVsGift2View; @@ -112,11 +108,9 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe private SelectGameAdapter gameAdapter; - public static HomePartyFragment newInstance(boolean isRoomMin) { + public static HomePartyFragment newInstance() { HomePartyFragment homePartyFragment = new HomePartyFragment(); Bundle bundle = new Bundle(); - //是否是最小化进来 - bundle.putBoolean(Constants.IS_ROOM_MIN, isRoomMin); homePartyFragment.setArguments(bundle); return homePartyFragment; } @@ -145,14 +139,6 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe roomId.setText(htmlText); } - @Override - protected void onInitArguments(Bundle bundle) { - super.onInitArguments(bundle); - if (bundle != null) { - isRoomMin = bundle.getBoolean(Constants.IS_ROOM_MIN, false); - } - } - @Override public int getRootLayoutId() { return R.layout.fragment_chatroom_game_main; @@ -403,17 +389,17 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe switch (currentRoomInfo.getType()) { case RoomInfo.ROOMTYPE_GAME: if (!(tempFragment instanceof GameRoomFragment)) { - tempFragment = GameRoomFragment.newInstance(isRoomMin); + tempFragment = GameRoomFragment.newInstance(); } break; case RoomInfo.ROOM_TYPE_SINGLE: if (!(tempFragment instanceof SingleRoomFragment)) { - tempFragment = SingleRoomFragment.newInstance(isRoomMin); + tempFragment = SingleRoomFragment.newInstance(); } break; default: if (!(tempFragment instanceof HomePartyRoomFragment)) { - tempFragment = HomePartyRoomFragment.newInstance(isRoomMin); + tempFragment = HomePartyRoomFragment.newInstance(); } break; } diff --git a/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyRoomFragment.java b/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyRoomFragment.java index eebed5a11..e6e9deb42 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyRoomFragment.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyRoomFragment.java @@ -104,11 +104,9 @@ public class HomePartyRoomFragment extends BaseRoomFragment { fromType == AVRoomActivity.FROM_TYPE_GAME_RECOMMEND ? 1 : 0 , fromUid) .subscribe((stringServiceResult) -> EventBus.getDefault().post(new AudioPartyOpenEvent())); + mAvRoomModel.loadMessageHistory(AvRoomDataManager.get().clearScreenTime); }, this::dealEnterRoomError); } diff --git a/app/src/main/java/com/yizhuan/erban/avroom/presenter/BaseRoomPresenter.java b/app/src/main/java/com/yizhuan/erban/avroom/presenter/BaseRoomPresenter.java index a89dfc6ca..84f3535cb 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/presenter/BaseRoomPresenter.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/presenter/BaseRoomPresenter.java @@ -508,45 +508,6 @@ public class BaseRoomPresenter extends BaseMvpPresenter .subscribe(aLong -> getMvpView().noFollow2()); } - /** - * 公屏历史消息 - */ - public void loadMessageHistory(long startTime) { - RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo; - - if (roomInfo == null) return; - if (!roomInfo.isCloseScreen()) { - int count = 10; - InitInfo initInfo = InitialModel.get().getCacheInitInfo(); - if (initInfo != null) count = initInfo.getRoomMessageCount(); - int finalCount = count; - NIMClient.getService(ChatRoomService.class) - .pullMessageHistoryExType( - String.valueOf(roomInfo.getRoomId()), - startTime, - count, - startTime == 0 ? QueryDirectionEnum.QUERY_OLD : QueryDirectionEnum.QUERY_NEW, - new MsgTypeEnum[]{MsgTypeEnum.text}) - .setCallback(new RequestCallbackWrapper>() { - @Override - public void onResult(int code, List result, Throwable exception) { - if (code == ResponseCode.RES_SUCCESS && result != null && result.size() > 0) { - if (startTime != 0 && result.size() >= finalCount) { - loadMessageHistory(0); - return; - } - if (startTime == 0) { - Collections.reverse(result); - } - if (getMvpView() != null) { - getMvpView().showMessageHistory(result); - } - } - } - }); - } - } - /** * 关注房主 * diff --git a/app/src/main/java/com/yizhuan/erban/avroom/view/IBaseRoomView.kt b/app/src/main/java/com/yizhuan/erban/avroom/view/IBaseRoomView.kt index 63e3e2415..638fb965c 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/view/IBaseRoomView.kt +++ b/app/src/main/java/com/yizhuan/erban/avroom/view/IBaseRoomView.kt @@ -59,11 +59,6 @@ interface IBaseRoomView : IMvpBaseView { */ fun noFollow2() - /** - * 没有关注用户的监听 - */ - fun showMessageHistory(messages: List?) - /** * 关注成功 * @param position diff --git a/app/src/main/java/com/yizhuan/erban/avroom/widget/MessageView.java b/app/src/main/java/com/yizhuan/erban/avroom/widget/MessageView.java index 361125316..a5e1fcc75 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/widget/MessageView.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/widget/MessageView.java @@ -1,6 +1,5 @@ package com.yizhuan.erban.avroom.widget; -import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_BOX; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_RED_PACKAGE; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_BOX_ME; import static com.yizhuan.xchat_android_core.redpackage.RedPackageTypeKt.ALL_DIAMOND; @@ -11,7 +10,6 @@ import static com.yizhuan.xchat_android_core.redpackage.RedPackageTypeKt.ROOM_GI import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; -import android.graphics.Typeface; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.text.Editable; @@ -21,7 +19,6 @@ import android.text.Spanned; import android.text.TextUtils; import android.text.method.LinkMovementMethod; import android.text.style.ForegroundColorSpan; -import android.text.style.StyleSpan; import android.util.AttributeSet; import android.util.Log; import android.view.Gravity; @@ -44,16 +41,12 @@ import com.netease.nim.uikit.business.uinfo.UserInfoHelper; import com.netease.nim.uikit.common.ui.span.RadiusBackgroundSpan; import com.netease.nim.uikit.common.util.log.LogUtil; import com.netease.nim.uikit.common.util.sys.ScreenUtil; -import com.netease.nimlib.sdk.InvocationFuture; import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage; import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessageExtension; import com.netease.nimlib.sdk.chatroom.model.ChatRoomNotificationAttachment; -import com.netease.nimlib.sdk.msg.MessageBuilder; import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum; import com.netease.nimlib.sdk.msg.constant.NotificationType; -import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; import com.netease.nimlib.sdk.msg.model.IMMessage; -import com.orhanobut.logger.Logger; import com.tongdaxing.erban.sadmin.utils.SaAttachmentToMsgUtil; import com.yizhuan.erban.R; import com.yizhuan.erban.UIHelper; @@ -73,7 +66,6 @@ import com.yizhuan.erban.utils.RegexUtil; 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.Constants; import com.yizhuan.xchat_android_core.bean.attachmsg.RoomQueueMsgAttachment; import com.yizhuan.xchat_android_core.decoration.car.bean.CarInfo; import com.yizhuan.xchat_android_core.fansteam.FansTeamMsgInfo; @@ -126,7 +118,6 @@ import com.yizhuan.xchat_android_core.magic.bean.MagicReceivedInfo; import com.yizhuan.xchat_android_core.magic.bean.MagicReceiver; import com.yizhuan.xchat_android_core.magic.bean.MultiMagicReceivedInfo; import com.yizhuan.xchat_android_core.manager.AvRoomDataManager; -import com.yizhuan.xchat_android_core.manager.IMMessageManager; import com.yizhuan.xchat_android_core.manager.IMNetEaseManager; import com.yizhuan.xchat_android_core.miniworld.bean.MiniWorldInWorldInfo; import com.yizhuan.xchat_android_core.monsterhunting.bean.MonsterHuntingResult; @@ -155,7 +146,6 @@ import com.yizhuan.xchat_android_core.statistic.protocol.StatisticsProtocol; import com.yizhuan.xchat_android_core.user.UserModel; import com.yizhuan.xchat_android_core.user.bean.UserInfo; import com.yizhuan.xchat_android_core.utils.ExtensionUtil; -import com.yizhuan.xchat_android_core.utils.LogUtils; import com.yizhuan.xchat_android_core.utils.net.DontWarnObserver; import com.yizhuan.xchat_android_core.utils.net.RxHelper; import com.yizhuan.xchat_android_core.vip.VipMessageInfo; @@ -168,9 +158,7 @@ import com.yizhuan.xchat_android_library.utils.SizeUtils; import org.greenrobot.eventbus.EventBus; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -186,7 +174,6 @@ import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.functions.Consumer; import io.reactivex.functions.Function; -import lombok.Setter; /** * 直播间消息界面 @@ -262,7 +249,7 @@ public class MessageView extends FrameLayout { } messageListView.scrollToPosition(mMessageAdapter.getItemCount() - 1); disposable = AvRoomDataManager.get().getChatRoomMsgProcessor() - .subscribe(chatRoomMessage -> onCurrentRoomReceiveNewMsg(chatRoomMessage)); + .subscribe(this::onCurrentRoomReceiveNewMsg); } @Override @@ -409,8 +396,13 @@ public class MessageView extends FrameLayout { } - public void onCurrentRoomReceiveNewMsg(ChatRoomMessage messages) { - addMessages(messages); + public void onCurrentRoomReceiveNewMsg(List messages) { + if (messages == null) return; + if (messages.size() == 1) { + addMessages(messages.get(0)); + } else { + addHistoryMessages(messages); + } } /** @@ -425,13 +417,8 @@ public class MessageView extends FrameLayout { checkAtMe(msg, false); } - public void addHistoryMessages(List messages) { + private void addHistoryMessages(List messages) { chatRoomMessages.addAll(chatRoomMessages.size() > 0 ? 1 : 0, messages); - - //同步AvRoomDataManager里面的公屏消息列表 - List cacheMessages = AvRoomDataManager.get().getChatRoomMessages(); - cacheMessages.addAll(cacheMessages.size() > 0 ? 1 : 0, messages); - mMessageAdapter.notifyDataSetChanged(); messageListView.scrollToPosition(mMessageAdapter.getItemCount() - 1); for (ChatRoomMessage message : messages) { diff --git a/app/src/main/java/com/yizhuan/erban/avroom/widget/VerticalViewPagerAdapter.java b/app/src/main/java/com/yizhuan/erban/avroom/widget/VerticalViewPagerAdapter.java index 0c4eee43b..da9090c09 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/widget/VerticalViewPagerAdapter.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/widget/VerticalViewPagerAdapter.java @@ -21,12 +21,10 @@ import com.yizhuan.erban.avroom.fragment.HomePartyFragment; public class VerticalViewPagerAdapter extends FragmentStateAdapter { private final SparseArray fragmentList; - private final boolean isRoomMin; - public VerticalViewPagerAdapter(FragmentActivity fm, boolean isRoomMin) { + public VerticalViewPagerAdapter(FragmentActivity fm) { super(fm); fragmentList = new SparseArray<>(); - this.isRoomMin = isRoomMin; } @@ -36,7 +34,7 @@ public class VerticalViewPagerAdapter extends FragmentStateAdapter { Fragment fragment = fragmentList.get(position); if (fragment == null) { if (position == 0) { - fragment = HomePartyFragment.newInstance(isRoomMin); + fragment = HomePartyFragment.newInstance(); } else { fragment = new FakeSingleRoomFragment(); } 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 ed4ae22bb..af36c00da 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 @@ -28,6 +28,7 @@ import com.yizhuan.xchat_android_core.im.custom.bean.RoomPkBean; import com.yizhuan.xchat_android_core.room.bean.BoxSwitchVo; import com.yizhuan.xchat_android_core.room.bean.RoomInfo; import com.yizhuan.xchat_android_core.room.bean.SimplePartyRoomInfo; +import com.yizhuan.xchat_android_core.room.event.RoomClearScreenEvent; import com.yizhuan.xchat_android_core.room.game.GameStatus; import com.yizhuan.xchat_android_core.room.giftvalue.helper.GiftValueMrg; import com.yizhuan.xchat_android_core.room.ktv.event.KtvEvent; @@ -40,8 +41,11 @@ import com.yizhuan.xchat_android_core.utils.StringUtils; import com.yizhuan.xchat_android_library.rxbus.RxBus; import com.yizhuan.xchat_android_library.utils.ListUtils; +import org.greenrobot.eventbus.EventBus; + import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; @@ -89,6 +93,7 @@ public final class AvRoomDataManager { public final List roomSuperAdminList = new ArrayList<>(); @NonNull public final MutableLiveData roomPkLiveData = new MutableLiveData<>(); + private final PublishProcessor> chatRoomMsgProcessor = PublishProcessor.create(); @Nullable public RoomInfo mCurrentRoomInfo; public BoxSwitchVo mBoxSwitchVo; @@ -158,7 +163,6 @@ public final class AvRoomDataManager { * 龙珠数组 */ public List dragons; - // 房主基本信息 public String nick; public int gender; @@ -174,7 +178,6 @@ public final class AvRoomDataManager { public String trtcSig; //清空公屏消息时间 public long clearScreenTime; - public boolean showPkBeginTime; public long pkBeginTime; /** @@ -202,7 +205,6 @@ public final class AvRoomDataManager { * 公屏数据 */ private List chatRoomMessages = new LinkedList<>(); - private PublishProcessor chatRoomMsgProcessor = PublishProcessor.create(); private AvRoomDataManager() { mRoomManagerList = new ArrayList<>(); @@ -222,6 +224,7 @@ public final class AvRoomDataManager { } public void release() { + EventBus.getDefault().post(new RoomClearScreenEvent()); IMNetEaseManager.get().release(); AudioEngineManager.get().leaveChannel(); clear(); @@ -863,19 +866,27 @@ public final class AvRoomDataManager { public void addChatRoomMessage(ChatRoomMessage msg) { if (msg == null) return; + addChatRoomMessages(new ArrayList<>(Collections.singletonList(msg))); + } - if (msg.getMsgType() == MsgTypeEnum.notification) { - NotificationAttachment attachment = (NotificationAttachment) msg.getAttachment(); - if (attachment != null && attachment.getType() == NotificationType.ChatRoomMemberIn) { - boolean isSuperAdmin = SuperAdminUtil.isSuperAdmin(msg); - if (isSuperAdmin) return; + public void addChatRoomMessages(List msgList) { + if (ListUtils.isListEmpty(msgList)) return; + + Iterator iterator = msgList.iterator(); + ChatRoomMessage msg; + while (iterator.hasNext()) { + msg = iterator.next(); + if (msg.getMsgType() == MsgTypeEnum.notification) { + NotificationAttachment attachment = (NotificationAttachment) msg.getAttachment(); + if (attachment != null && attachment.getType() == NotificationType.ChatRoomMemberIn) { + boolean isSuperAdmin = SuperAdminUtil.isSuperAdmin(msg); + if (isSuperAdmin) iterator.remove(); + } } } - chatRoomMessages.add(msg); - if (chatRoomMsgProcessor != null) { - chatRoomMsgProcessor.onNext(msg); - } + chatRoomMessages.addAll(msgList); + chatRoomMsgProcessor.onNext(msgList); keepSizeUnderLimit(); } @@ -885,7 +896,7 @@ public final class AvRoomDataManager { } } - public PublishProcessor getChatRoomMsgProcessor() { + public PublishProcessor> getChatRoomMsgProcessor() { return chatRoomMsgProcessor; } @@ -1085,7 +1096,7 @@ public final class AvRoomDataManager { List accounts = new ArrayList<>(); accounts.add(String.valueOf(uid)); NIMChatRoomSDK.getChatRoomService().fetchRoomMembersByIds( - String.valueOf(getRoomId()), accounts) + String.valueOf(getRoomId()), accounts) .setCallback(new RequestCallback>() { @Override public void onSuccess(List param) { diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/room/model/AvRoomModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/room/model/AvRoomModel.java index 9d51efc2c..bfe118a58 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/room/model/AvRoomModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/room/model/AvRoomModel.java @@ -7,19 +7,27 @@ import com.google.gson.Gson; import com.google.gson.JsonElement; import com.netease.nimlib.sdk.AbortableFuture; import com.netease.nimlib.sdk.NIMChatRoomSDK; +import com.netease.nimlib.sdk.NIMClient; import com.netease.nimlib.sdk.RequestCallback; import com.netease.nimlib.sdk.RequestCallbackWrapper; +import com.netease.nimlib.sdk.ResponseCode; +import com.netease.nimlib.sdk.chatroom.ChatRoomService; import com.netease.nimlib.sdk.chatroom.constant.MemberQueryType; import com.netease.nimlib.sdk.chatroom.constant.MemberType; import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember; +import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage; import com.netease.nimlib.sdk.chatroom.model.EnterChatRoomData; import com.netease.nimlib.sdk.chatroom.model.EnterChatRoomResultData; +import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum; +import com.netease.nimlib.sdk.msg.model.QueryDirectionEnum; import com.orhanobut.logger.Logger; import com.yizhuan.xchat_android_core.auth.AuthModel; import com.yizhuan.xchat_android_core.bean.response.ServiceResult; import com.yizhuan.xchat_android_core.decoration.car.bean.CarInfo; import com.yizhuan.xchat_android_core.decoration.headwear.bean.HeadWearInfo; import com.yizhuan.xchat_android_core.home.bean.HomeRoomInfo; +import com.yizhuan.xchat_android_core.initial.InitialModel; +import com.yizhuan.xchat_android_core.initial.bean.InitInfo; import com.yizhuan.xchat_android_core.level.UserLevelVo; import com.yizhuan.xchat_android_core.manager.AvRoomDataManager; import com.yizhuan.xchat_android_core.manager.IMNetEaseManager; @@ -52,6 +60,7 @@ import com.yizhuan.xchat_android_library.utils.config.BasicConfig; import org.greenrobot.eventbus.EventBus; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -618,4 +627,43 @@ public class AvRoomModel extends RoomBaseModel implements IAvRoomModel { .compose(RxHelper.handleBeanData()) .compose(RxHelper.handleSchedulers()); } + + /** + * 公屏历史消息 + */ + @Override + public void loadMessageHistory(long startTime) { + RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo; + + if (roomInfo == null) return; + if (!roomInfo.isCloseScreen()) { + int count = 10; + InitInfo initInfo = InitialModel.get().getCacheInitInfo(); + if (initInfo != null) count = initInfo.getRoomMessageCount(); + int finalCount = count; + NIMClient.getService(ChatRoomService.class) + .pullMessageHistoryExType( + String.valueOf(roomInfo.getRoomId()), + startTime, + count, + startTime == 0 ? QueryDirectionEnum.QUERY_OLD : QueryDirectionEnum.QUERY_NEW, + new MsgTypeEnum[]{MsgTypeEnum.text}) + .setCallback(new RequestCallbackWrapper>() { + @Override + public void onResult(int code, List result, Throwable exception) { + if (code == ResponseCode.RES_SUCCESS && result != null && result.size() > 0) { + if (startTime != 0 && result.size() >= finalCount) { + loadMessageHistory(0); + return; + } + if (startTime == 0) { + Collections.reverse(result); + } + AvRoomDataManager.get().addChatRoomMessages(result); + } + } + }); + } + } + } diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/room/model/inteface/IAvRoomModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/room/model/inteface/IAvRoomModel.java index e5171ee74..ca78fabb2 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/room/model/inteface/IAvRoomModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/room/model/inteface/IAvRoomModel.java @@ -179,4 +179,6 @@ public interface IAvRoomModel extends IModel { Single> getRecommendRoomList(String roomId); Single getNextSingleRoomInfo(); + + void loadMessageHistory(long startTime); }