diff --git a/app/src/main/java/com/yizhuan/erban/avroom/presenter/AvRoomPresenter.java b/app/src/main/java/com/yizhuan/erban/avroom/presenter/AvRoomPresenter.java index bb114f750..0ab96099d 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/presenter/AvRoomPresenter.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/presenter/AvRoomPresenter.java @@ -2,7 +2,9 @@ package com.yizhuan.erban.avroom.presenter; import android.annotation.SuppressLint; import android.os.Bundle; + import androidx.annotation.Nullable; + import android.text.TextUtils; import android.util.Log; import android.util.SparseArray; @@ -12,9 +14,16 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; +import com.netease.nimlib.sdk.NIMClient; +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.model.ChatRoomInfo; import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember; +import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage; 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.netease.nimlib.sdk.util.Entry; import com.orhanobut.logger.Logger; import com.yizhuan.erban.avroom.view.IAvRoomView; @@ -28,6 +37,7 @@ import com.yizhuan.xchat_android_core.manager.AvRoomDataManager; import com.yizhuan.xchat_android_core.manager.IMNetEaseManager; import com.yizhuan.xchat_android_core.manager.RoomEvent; import com.yizhuan.xchat_android_core.manager.RtcEngineManager; +import com.yizhuan.xchat_android_core.manager.event.HistoryMessageEvent; import com.yizhuan.xchat_android_core.monsterhunting.bean.MonsterInfo; import com.yizhuan.xchat_android_core.monsterhunting.model.MonsterHuntingModel; import com.yizhuan.xchat_android_core.patriarch.exception.PmRoomLimitException; @@ -52,12 +62,14 @@ import com.yizhuan.xchat_android_core.super_admin.SuperAdminDataMrg; import com.yizhuan.xchat_android_library.base.PresenterEvent; import com.yizhuan.xchat_android_library.net.rxnet.callback.CallBack; +import com.yizhuan.xchat_android_library.rxbus.RxBus; import com.yizhuan.xchat_android_library.threadmgr.ThreadPoolManager; import com.yizhuan.xchat_android_library.utils.ListUtils; import org.greenrobot.eventbus.EventBus; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Objects; @@ -140,6 +152,20 @@ public class AvRoomPresenter extends BaseMvpPresenter { .subscribe(roomQueueInfoSparseArray -> { long uid = AuthModel.get().getCurrentUid(); RtcEngineManager.get().startRtcEngine(uid); + if (!roomInfo.isCloseScreen()) { + NIMClient.getService(ChatRoomService.class) + .pullMessageHistoryExType(String.valueOf(roomInfo.getRoomId()), 0, + 10, QueryDirectionEnum.QUERY_OLD, 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) { + Collections.reverse(result); + RxBus.get().post(new HistoryMessageEvent(result)); + } + } + }); + } //成功进入房间发送log 到阿里 StatisticManager.Instance().sendAliyunLog(LogFactory.create( 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 2c8e8ab2f..1a5a7bc04 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 @@ -4,6 +4,7 @@ import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; + import androidx.annotation.NonNull; import androidx.core.content.ContextCompat; import androidx.core.content.res.ResourcesCompat; @@ -11,6 +12,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.OrientationHelper; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.SimpleItemAnimator; + import android.text.Editable; import android.text.SpannableStringBuilder; import android.text.Spanned; @@ -101,6 +103,7 @@ 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.manager.event.HistoryMessageEvent; import com.yizhuan.xchat_android_core.miniworld.bean.MiniWorldInWorldInfo; import com.yizhuan.xchat_android_core.monsterhunting.bean.MonsterHuntingResult; import com.yizhuan.xchat_android_core.monsterhunting.bean.MonsterProtocol; @@ -201,6 +204,7 @@ public class MessageView extends FrameLayout { private DialogManager mDialogManager; private Disposable subscribe; + private Disposable historyDisposable; private static final int LOAD_MESSAGE_COUNT = 10; @@ -240,21 +244,25 @@ public class MessageView extends FrameLayout { updateGameItemStatus(gameRespondEvent.fromAcount); } }); + historyDisposable = RxBus.get().toFlowable(HistoryMessageEvent.class) + .subscribe(historyMessageEvent -> addHistoryMessages(historyMessageEvent.getMessages())); } @Override protected void onDetachedFromWindow() { disposable.dispose(); subscribe.dispose(); + historyDisposable.dispose(); super.onDetachedFromWindow(); } private int imageHeight; private int imageWidth; + private void init(Context context) { - imageHeight= Utils.dip2px(context, 15); - imageWidth= Utils.dip2px(context, 59); + imageHeight = Utils.dip2px(context, 15); + imageWidth = Utils.dip2px(context, 59); whiteColor = ContextCompat.getColor(context, R.color.white); greyColor = ContextCompat.getColor(context, R.color.white_transparent_50); @@ -272,7 +280,7 @@ public class MessageView extends FrameLayout { expLevelWidth = expLevelHeight * 22 / 17;//expLevelHeight * 114 / 45 giftLength = Utils.dip2px(context, 35); // 内容区域 - layoutManger = new LinearLayoutManager(context, OrientationHelper.VERTICAL, false); + layoutManger = new LinearLayoutManager(context, RecyclerView.VERTICAL, false); FrameLayout.LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); messageListView = new RecyclerView(context); messageListView.setLayoutParams(params); @@ -368,6 +376,12 @@ public class MessageView extends FrameLayout { return chatRoomMessages.size() - 1; } + private void addHistoryMessages(List messages) { + chatRoomMessages.addAll(chatRoomMessages.size() > 0 ? 1 : 0, messages); + mMessageAdapter.notifyDataSetChanged(); + messageListView.scrollToPosition(mMessageAdapter.getItemCount() - 1); + } + private void keepSizeUnderLimit() { while (chatRoomMessages.size() > MAX_MESSAGE_SIZE) { Log.i("keepSizeUnderLimit", "size" + chatRoomMessages.size()); @@ -393,7 +407,6 @@ public class MessageView extends FrameLayout { } - /** * 修改关注状态 * @@ -1349,7 +1362,7 @@ public class MessageView extends FrameLayout { SpannableBuilder text = new SpannableBuilder(tvContent) .append("厉害了 ", new ForegroundColorSpan(greyColor)) .append(attachment.getNick() + " ", new ForegroundColorSpan(roomTipColor)) - .append(attachment.getBoxTypeStr()+" ", new ForegroundColorSpan(greyColor)) + .append(attachment.getBoxTypeStr() + " ", new ForegroundColorSpan(greyColor)) .append(attachment.getPrizeName(), new ForegroundColorSpan(Color.WHITE)); if (attachment.getPrizeNum() > 1) { text.append(" x" + attachment.getPrizeNum() + " ", new ForegroundColorSpan(roomTipColor)); @@ -1519,8 +1532,8 @@ public class MessageView extends FrameLayout { SpannableBuilder text = new SpannableBuilder(tvContent); text.append(isOfficial ? ResourcesCompat.getDrawable(getResources(), - R.mipmap.ic_user_official_13dp, null) : null, - badgeWidth, badgeHeight) + R.mipmap.ic_user_official_13dp, null) : null, + badgeWidth, badgeHeight) .append(newUser ? Constants.NEW_USER_ICON : "", badgeWidth, badgeHeight) .append(NobleUtil.getLocalResourcePath(userBadge), badgeWidth, badgeHeight); @@ -2185,7 +2198,7 @@ public class MessageView extends FrameLayout { } }); - } else if (welcomeInfo.isShowAttentedBtn()){ + } else if (welcomeInfo.isShowAttentedBtn()) { text.append(" ").append( ResourcesCompat.getDrawable(getResources(), R.drawable.icon_room_attent_gray, null), @@ -2203,9 +2216,9 @@ public class MessageView extends FrameLayout { * 进入公聊大厅页面,加载历史记录 */ public void fetchHistory() { - IMMessage anchor = MessageBuilder.createEmptyMessage(AvRoomDataManager.get().getRoomId()+"", SessionTypeEnum.P2P, System.currentTimeMillis()); + IMMessage anchor = MessageBuilder.createEmptyMessage(AvRoomDataManager.get().getRoomId() + "", SessionTypeEnum.P2P, System.currentTimeMillis()); InvocationFuture> listInvocationFuture = IMMessageManager.get().pullMessageHistory(anchor, 50, false); - Log.e(TAG, "fetchHistory: "+listInvocationFuture ); + Log.e(TAG, "fetchHistory: " + listInvocationFuture); } @Override 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 6581cac3d..b838fb83a 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 @@ -3,11 +3,12 @@ package com.yizhuan.xchat_android_core.manager; import android.annotation.SuppressLint; import android.graphics.Point; import android.graphics.drawable.Drawable; -import androidx.annotation.Nullable; import android.text.TextUtils; import android.util.Log; import android.util.SparseArray; +import androidx.annotation.Nullable; + import com.netease.nimlib.sdk.NIMChatRoomSDK; import com.netease.nimlib.sdk.RequestCallback; import com.netease.nimlib.sdk.chatroom.constant.MemberType; diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/manager/event/HistoryMessageEvent.java b/core/src/main/java/com/yizhuan/xchat_android_core/manager/event/HistoryMessageEvent.java new file mode 100644 index 000000000..dd9c22f44 --- /dev/null +++ b/core/src/main/java/com/yizhuan/xchat_android_core/manager/event/HistoryMessageEvent.java @@ -0,0 +1,22 @@ +package com.yizhuan.xchat_android_core.manager.event; + +import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage; + +import java.util.List; + +public class HistoryMessageEvent { + + private List messages; + + public HistoryMessageEvent(List messages) { + this.messages = messages; + } + + public List getMessages() { + return messages; + } + + public void setMessages(List messages) { + this.messages = messages; + } +}