From 95890adf7c7ea325585ee579b7f9aabab87da482 Mon Sep 17 00:00:00 2001 From: huangjian Date: Mon, 6 Jun 2022 17:16:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=88=BF=E9=97=B4=E6=96=B0?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=89=93=E6=8B=9B=E5=91=BC=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../erban/avroom/activity/AVRoomActivity.java | 11 +++ .../avroom/presenter/AvRoomPresenter.java | 57 +++++++---- .../erban/avroom/view/IAvRoomView.java | 6 ++ .../erban/avroom/widget/MessageView.java | 61 +++++------- .../erban/home/dialog/HelloMessageDialog.kt | 35 ++++++- .../erban/home/dialog/RoomHelloDialog.kt | 4 +- .../main/res/drawable-xhdpi/ic_new_user.png | Bin 0 -> 367 bytes .../res/drawable-xhdpi/ic_new_user_hello.png | Bin 0 -> 1336 bytes .../drawable-xhdpi/new_user_hello_bg_room.png | Bin 0 -> 50386 bytes .../new_user_hello_ic_room_close.png | Bin 0 -> 398 bytes .../res/drawable/shape_white_6dp_round.xml | 8 ++ .../main/res/layout/dialog_hello_message.xml | 90 ++++++++++++++++-- .../user/bean/UserInfo.java | 5 + .../channel_page/bean/HelloMessageInfo.kt | 9 ++ .../channel_page/model/ChannelPageModel.java | 15 +++ .../channel_page/model/IChannelPageModel.java | 3 + 16 files changed, 238 insertions(+), 66 deletions(-) create mode 100644 app/src/main/res/drawable-xhdpi/ic_new_user.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_new_user_hello.png create mode 100644 app/src/main/res/drawable-xhdpi/new_user_hello_bg_room.png create mode 100644 app/src/main/res/drawable-xhdpi/new_user_hello_ic_room_close.png create mode 100644 app/src/main/res/drawable/shape_white_6dp_round.xml create mode 100644 core/src/model_channel_page/java/com/yizhuan/xchat_android_core/channel_page/bean/HelloMessageInfo.kt 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 938f2b9a5..292e822f2 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 @@ -57,6 +57,7 @@ import com.yizhuan.erban.base.BaseMvpActivity; import com.yizhuan.erban.common.widget.CircleImageView; import com.yizhuan.erban.common.widget.CustomImageSpan; import com.yizhuan.erban.common.widget.dialog.DialogManager; +import com.yizhuan.erban.home.dialog.HelloMessageDialog; import com.yizhuan.erban.ui.patriarch.help.LimitEnterRoomHelper; import com.yizhuan.erban.ui.pay.ChargeActivity; import com.yizhuan.erban.ui.user.UserInfoActivity; @@ -75,6 +76,7 @@ import com.yizhuan.xchat_android_core.DemoCache; import com.yizhuan.xchat_android_core.auth.AuthModel; import com.yizhuan.xchat_android_core.auth.event.LogoutEvent; import com.yizhuan.xchat_android_core.bean.BaseProtocol; +import com.yizhuan.xchat_android_core.channel_page.bean.HelloMessageInfo; import com.yizhuan.xchat_android_core.gift.bean.LuckyBagNoticeInfo; import com.yizhuan.xchat_android_core.im.custom.bean.RoomPKAttachment; import com.yizhuan.xchat_android_core.im.custom.bean.RoomPkBean; @@ -125,6 +127,7 @@ import java.lang.ref.WeakReference; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; +import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -968,6 +971,9 @@ public class AVRoomActivity extends BaseMvpActivity { getMvpView().enterRoomSuccess(); } mAvRoomModel.userRoomIn( - String.valueOf(uid), - roomInfo.getUid(), - fromType == AVRoomActivity.FROM_TYPE_GAME_RECOMMEND ? 1 : 0 - , fromUid) + String.valueOf(uid), + roomInfo.getUid(), + fromType == AVRoomActivity.FROM_TYPE_GAME_RECOMMEND ? 1 : 0 + , fromUid) .subscribe((stringServiceResult) -> EventBus.getDefault().post(new AudioPartyOpenEvent())); }, this::dealEnterRoomError); } @SuppressLint("CheckResult") - private void initAnotherPKData(){ - if (AvRoomDataManager.get().isOpenAnotherPKMode()){ + private void initAnotherPKData() { + if (AvRoomDataManager.get().isOpenAnotherPKMode()) { RoomPKModel.INSTANCE.getRoomPKData(AvRoomDataManager.get().getRoomUid()) .compose(bindToLifecycle()) .subscribe(roomPkBean -> AvRoomDataManager.get().roomPkLiveData.setValue(roomPkBean)); @@ -227,10 +229,10 @@ public class AvRoomPresenter extends BaseMvpPresenter { //进入房间失败发送阿里log StatisticManager.Instance().sendAliyunLog(LogFactory.create( - LogProtocol.LogLevel.LEVEL_ERROR, - LogProtocol.Topic.TOPIC_IM_LOG, - LogProtocol.Event.EVENT_IM_CHANNEL - ) + LogProtocol.LogLevel.LEVEL_ERROR, + LogProtocol.Topic.TOPIC_IM_LOG, + LogProtocol.Event.EVENT_IM_CHANNEL + ) .append("roomUid", roomUid) .append("uid", String.valueOf(AuthModel.get().getCurrentUid())) .append("type", "1") @@ -369,10 +371,10 @@ public class AvRoomPresenter extends BaseMvpPresenter { } //获取房间信息失败 发送log 到阿里 StatisticManager.Instance().sendAliyunLog(LogFactory.create( - LogProtocol.LogLevel.LEVEL_ERROR, - LogProtocol.Topic.TOPIC_BUSINESS_LOG, - LogProtocol.Event.EVENT_ROOM_GET - ) + LogProtocol.LogLevel.LEVEL_ERROR, + LogProtocol.Topic.TOPIC_BUSINESS_LOG, + LogProtocol.Event.EVENT_ROOM_GET + ) .append("targetUid", uId) .append("uid", String.valueOf(AuthModel.get().getCurrentUid())) .append("error", "{code:" + "" + " reason:" + " RoomInfo == null || RoomInfo.getRoomId() == 0" + "}")); @@ -407,10 +409,10 @@ public class AvRoomPresenter extends BaseMvpPresenter { //获取房间信息失败 发送log 到阿里 StatisticManager.Instance().sendAliyunLog(LogFactory.create( - LogProtocol.LogLevel.LEVEL_ERROR, - LogProtocol.Topic.TOPIC_BUSINESS_LOG, - LogProtocol.Event.EVENT_ROOM_GET - ) + LogProtocol.LogLevel.LEVEL_ERROR, + LogProtocol.Topic.TOPIC_BUSINESS_LOG, + LogProtocol.Event.EVENT_ROOM_GET + ) .append("targetUid", uId) .append("uid", String.valueOf(AuthModel.get().getCurrentUid())) .append("error", "{code:" + roomResult.getCode() @@ -457,6 +459,25 @@ public class AvRoomPresenter extends BaseMvpPresenter { .subscribe(chatRoomMembers -> AvRoomDataManager.get().setAllRoomSuperAdminList(chatRoomMembers)); } + /** + * 检查是否需要显示新用户打招呼消息弹窗 + */ + @SuppressLint("CheckResult") + public void checkHelloMessage() { + + if (AvRoomDataManager.get().mCurrentRoomInfo == null) return; + + Single.timer(5, TimeUnit.SECONDS) + .flatMap(aLong -> ChannelPageModel.get().checkHelloMessage()) + .compose(bindToLifecycle()) + .subscribe(helloMessageInfo -> { + if (getMvpView() != null && helloMessageInfo.getRoomPopup()) { + getMvpView().showHelloMessageDialog(helloMessageInfo); + } + }); + + } + private void startGetOnlineMemberNumberJob() { Observable.interval(1, 10, TimeUnit.SECONDS, Schedulers.from(ThreadPoolManager.instance().getScheduleExecutor())) diff --git a/app/src/main/java/com/yizhuan/erban/avroom/view/IAvRoomView.java b/app/src/main/java/com/yizhuan/erban/avroom/view/IAvRoomView.java index 8f48472c1..0b4ea1095 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/view/IAvRoomView.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/view/IAvRoomView.java @@ -1,6 +1,7 @@ package com.yizhuan.erban.avroom.view; +import com.yizhuan.xchat_android_core.channel_page.bean.HelloMessageInfo; import com.yizhuan.xchat_android_core.home.bean.BannerInfo; import com.yizhuan.xchat_android_core.monsterhunting.bean.MonsterInfo; import com.yizhuan.xchat_android_core.redPacket.bean.ActionDialogInfo; @@ -41,6 +42,11 @@ public interface IAvRoomView extends IMvpBaseView { */ void showBlackEnterRoomView(); + /** + * 显示新用户打招呼消息 + */ + void showHelloMessageDialog(HelloMessageInfo helloMessageInfo); + /** * 取消loading弹窗 */ 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 d7fbf5b57..9c33d865c 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 @@ -33,6 +33,7 @@ import android.widget.FrameLayout; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import androidx.core.content.res.ResourcesCompat; import androidx.recyclerview.widget.LinearLayoutManager; @@ -1870,14 +1871,13 @@ public class MessageView extends FrameLayout { private void addCommonTag(ChatRoomMessage chatRoomMessage, @NonNull SpannableBuilder builder, TextView tvContent) { ChatRoomMessageExtension extension = chatRoomMessage.getChatRoomMessageExtension(); String userLevel = NobleUtil.getLevel(UserLevelResourceType.EXPER_URL, chatRoomMessage); - boolean newUser = NobleUtil.getIsNewUser(UserInfo.IS_NEW_USER, chatRoomMessage); boolean isOfficial = NobleUtil.getIsOfficial(UserInfo.IS_OFFICIAL, chatRoomMessage); String vipIcon = NobleUtil.getResource(UserInfo.VIP_ICON, chatRoomMessage); builder.append(vipIcon, expLevelHeight) .append(isOfficial ? ResourcesCompat.getDrawable(getResources(), R.mipmap.ic_user_official_13dp, null) : null, badgeWidth, badgeHeight) - .append(newUser ? Constants.NEW_USER_ICON : "", badgeWidth, badgeHeight) + .append(getNewUserDrawable(chatRoomMessage), badgeWidth, badgeHeight) .append(AvRoomDataManager.get().isSuperAdmin(chatRoomMessage.getFromAccount()) ? ResourcesCompat.getDrawable(getResources(), R.drawable.ic_room_super_admin, null) : null, SizeUtils.dp2px(tvContent.getContext(), 23), expLevelHeight); @@ -1941,9 +1941,8 @@ public class MessageView extends FrameLayout { */ private void setMsgRoomTip(TextView tvContent, RoomTipAttachment roomTipAttachment, ChatRoomMessage chatRoomMessage) { if (TextUtils.isEmpty(roomTipAttachment.getNick())) roomTipAttachment.setNick(""); - boolean newUser = NobleUtil.getIsNewUser(UserInfo.IS_NEW_USER, chatRoomMessage); SpannableBuilder text = new SpannableBuilder(tvContent) - .append(newUser ? Constants.NEW_USER_ICON : "", badgeWidth, badgeHeight) + .append(getNewUserDrawable(chatRoomMessage), badgeWidth, badgeHeight) .append(RegexUtil.getPrintableString(roomTipAttachment.getNick()), new ForegroundColorSpan(roomTipColor)) .append(roomTipAttachment.getSecond() == CustomAttachment.CUSTOM_MSG_SUB_TYPE_ROOM_TIP_SHARE_ROOM ? " 分享了房间" : " 关注了房主", new ForegroundColorSpan(greyColor)); @@ -1958,9 +1957,8 @@ public class MessageView extends FrameLayout { */ private void setFollowRoomTip(TextView tvContent, RoomTipAttachment roomTipAttachment, ChatRoomMessage chatRoomMessage) { if (TextUtils.isEmpty(roomTipAttachment.getNick())) roomTipAttachment.setNick(""); - boolean newUser = NobleUtil.getIsNewUser(UserInfo.IS_NEW_USER, chatRoomMessage); SpannableBuilder text = new SpannableBuilder(tvContent) - .append(newUser ? Constants.NEW_USER_ICON : "", badgeWidth, badgeHeight) + .append(getNewUserDrawable(chatRoomMessage), badgeWidth, badgeHeight) .append(RegexUtil.getPrintableString(roomTipAttachment.getNick()), new ForegroundColorSpan(roomTipColor)) .append(" 收藏了房间", new ForegroundColorSpan(greyColor)); tvContent.setText(text.build()); @@ -1980,7 +1978,6 @@ public class MessageView extends FrameLayout { List faceReceiveInfos = faceAttachment.getFaceReceiveInfos(); FaceReceiveInfo faceReceiveInfo; FaceInfo faceInfo; - String logNick = null; for (int i = 0; i < faceReceiveInfos.size(); i++) { faceReceiveInfo = faceReceiveInfos.get(i); faceInfo = DynamicFaceModel.get().findFaceInfoById(faceReceiveInfo.getFaceId()); @@ -1988,9 +1985,7 @@ public class MessageView extends FrameLayout { faceReceiveInfo.getResultIndexes().size() <= 0 || faceInfo == null) continue; String nick = RegexUtil.getPrintableString(faceReceiveInfo.getNick()); - logNick = nick; - boolean newUser = NobleUtil.getIsNewUser(UserInfo.IS_NEW_USER, chatRoomMessage); - builder.append(newUser ? Constants.NEW_USER_ICON : "", badgeWidth, badgeHeight) + builder.append(getNewUserDrawable(chatRoomMessage), badgeWidth, badgeHeight) .append(nick, new ForegroundColorSpan(greyColor)) .append(": " + (faceReceiveInfo.getResultIndexes().size() > 1 ? "\n" : ""), new ForegroundColorSpan(greyColor)); List resultIndexes = faceReceiveInfo.getResultIndexes(); @@ -2021,9 +2016,8 @@ public class MessageView extends FrameLayout { private void setMsgMultiGift(TextView tvContent, MultiGiftAttachment giftAttachment, ChatRoomMessage chatRoomMessage) { GiftInfo giftInfo = giftAttachment.getMultiGiftReceiveInfo().getGift(); String nick = RegexUtil.getPrintableString(giftAttachment.getMultiGiftReceiveInfo().getNick()); - boolean newUser = NobleUtil.getIsNewUser(UserInfo.IS_NEW_USER, chatRoomMessage); SpannableBuilder text = new SpannableBuilder(tvContent) - .append(newUser ? Constants.NEW_USER_ICON : "", badgeWidth, badgeHeight) + .append(getNewUserDrawable(chatRoomMessage), badgeWidth, badgeHeight) .append(nick, new ForegroundColorSpan(roomTipNickColor), new OriginalDrawStatusClickSpan() { @Override @@ -2058,9 +2052,8 @@ public class MessageView extends FrameLayout { } } String nick = RegexUtil.getPrintableString(giftAttachment.getMultiLuckyGiftReceiveInfo().getNick()); - boolean newUser = NobleUtil.getIsNewUser(UserInfo.IS_NEW_USER, chatRoomMessage); SpannableBuilder text = new SpannableBuilder(tvContent) - .append(newUser ? Constants.NEW_USER_ICON : "", badgeWidth, badgeHeight) + .append(getNewUserDrawable(chatRoomMessage), badgeWidth, badgeHeight) .append(nick, new ForegroundColorSpan(roomTipNickColor), new OriginalDrawStatusClickSpan() { @Override @@ -2114,9 +2107,8 @@ public class MessageView extends FrameLayout { } } String nick = RegexUtil.getPrintableString(giftAttachment.getMultiLuckyGiftReceiveInfo().getNick()); - boolean newUser = NobleUtil.getIsNewUser(UserInfo.IS_NEW_USER, chatRoomMessage); SpannableBuilder text = new SpannableBuilder(tvContent) - .append(newUser ? Constants.NEW_USER_ICON : "", badgeWidth, badgeHeight) + .append(getNewUserDrawable(chatRoomMessage), badgeWidth, badgeHeight) .append(nick, new ForegroundColorSpan(roomTipNickColor), new OriginalDrawStatusClickSpan() { @Override @@ -2165,9 +2157,8 @@ public class MessageView extends FrameLayout { private void setMsgBatchGift(TextView tvContent, GiftBatchAttachment attachment, ChatRoomMessage chatRoomMessage) { GiftInfo giftInfo = attachment.getGiftMultiReceiverInfo().getGift(); String nick = RegexUtil.getPrintableString(attachment.getGiftMultiReceiverInfo().getNick()); - boolean newUser = NobleUtil.getIsNewUser(UserInfo.IS_NEW_USER, chatRoomMessage); SpannableBuilder text = new SpannableBuilder(tvContent) - .append(newUser ? Constants.NEW_USER_ICON : "", badgeWidth, badgeHeight) + .append(getNewUserDrawable(chatRoomMessage), badgeWidth, badgeHeight) .append(nick, new ForegroundColorSpan(roomTipNickColor), new OriginalDrawStatusClickSpan() { @Override @@ -2213,9 +2204,8 @@ public class MessageView extends FrameLayout { MagicInfo magicInfo = MagicModel.get().getMagicInfo(multiMagicReceivedInfo.getMagicId()); String nick = RegexUtil.getPrintableString(multiMagicReceivedInfo.getNick()); boolean showEffect = multiMagicReceivedInfo.isNeedShowExplode(); - boolean newUser = NobleUtil.getIsNewUser(UserInfo.IS_NEW_USER, chatRoomMessage, chatRoomMessage.getFromAccount()); SpannableBuilder text = new SpannableBuilder(tvContent) - .append(newUser ? Constants.NEW_USER_ICON : "", badgeWidth, badgeHeight) + .append(getNewUserDrawable(chatRoomMessage), badgeWidth, badgeHeight) .append(nick, new ForegroundColorSpan(roomTipNickColor), new OriginalDrawStatusClickSpan() { @Override public void onClick(@NonNull View widget) { @@ -2248,9 +2238,8 @@ public class MessageView extends FrameLayout { MagicInfo magicInfo = MagicModel.get().getMagicInfo(magicMultiReceiverInfo.getMagicId()); String nick = RegexUtil.getPrintableString(magicMultiReceiverInfo.getNick()); boolean showEffect = magicMultiReceiverInfo.isNeedShowExplode(); - boolean newUser = NobleUtil.getIsNewUser(UserInfo.IS_NEW_USER, chatRoomMessage, chatRoomMessage.getFromAccount()); SpannableBuilder text = new SpannableBuilder(tvContent) - .append(newUser ? Constants.NEW_USER_ICON : "", badgeWidth, badgeHeight) + .append(getNewUserDrawable(chatRoomMessage), badgeWidth, badgeHeight) .append(nick, new ForegroundColorSpan(roomTipNickColor), new OriginalDrawStatusClickSpan() { @Override public void onClick(@NonNull View widget) { @@ -2301,10 +2290,8 @@ public class MessageView extends FrameLayout { boolean showEffect = magicReceivedInfo.isNeedShowExplodeEffect(); String nick = RegexUtil.getPrintableString(magicReceivedInfo.getNick()); String targetNick = RegexUtil.getPrintableString(magicReceivedInfo.getTargetNick()); - boolean sendNewUser = NobleUtil.getIsNewUser(UserInfo.IS_NEW_USER, chatRoomMessage, chatRoomMessage.getFromAccount()); - boolean receiverNewUser = NobleUtil.getIsNewUser(UserInfo.IS_NEW_USER, chatRoomMessage, String.valueOf(magicReceivedInfo.getTargetUid())); SpannableBuilder text = new SpannableBuilder(tvContent) - .append(sendNewUser ? Constants.NEW_USER_ICON : "", badgeWidth, badgeHeight) + .append(getNewUserDrawable(chatRoomMessage), badgeWidth, badgeHeight) .append(nick, new ForegroundColorSpan(roomTipNickColor), new OriginalDrawStatusClickSpan() { @Override @@ -2315,7 +2302,6 @@ public class MessageView extends FrameLayout { } }) .append(" 给 ", new ForegroundColorSpan(getResources().getColor(R.color.white))) - .append(receiverNewUser ? Constants.NEW_USER_ICON : "", badgeWidth, badgeHeight) .append(targetNick, new ForegroundColorSpan(roomTipNickColor), new OriginalDrawStatusClickSpan() { @Override @@ -2346,11 +2332,9 @@ public class MessageView extends FrameLayout { if (giftReceiveInfo == null) return; String nick = RegexUtil.getPrintableString(giftReceiveInfo.getNick()); String targetNick = RegexUtil.getPrintableString(giftReceiveInfo.getTargetNick()); - boolean sendNewUser = NobleUtil.getIsNewUser(UserInfo.IS_NEW_USER, chatRoomMessage, chatRoomMessage.getFromAccount()); - boolean receiverNewUser = NobleUtil.getIsNewUser(UserInfo.IS_NEW_USER, chatRoomMessage, String.valueOf(giftReceiveInfo.getTargetUid())); String num = "X" + giftReceiveInfo.getGiftNum(); SpannableBuilder text = new SpannableBuilder(tvContent) - .append(sendNewUser ? Constants.NEW_USER_ICON : "", badgeWidth, badgeHeight) + .append(getNewUserDrawable(chatRoomMessage), badgeWidth, badgeHeight) .append(nick, new ForegroundColorSpan(roomTipNickColor), new OriginalDrawStatusClickSpan() { @Override @@ -2361,7 +2345,6 @@ public class MessageView extends FrameLayout { } }) .append(" 送给 ", new ForegroundColorSpan(getResources().getColor(R.color.white))) - .append(receiverNewUser ? Constants.NEW_USER_ICON : "", badgeWidth, badgeHeight) .append(targetNick, new ForegroundColorSpan(roomTipNickColor), new OriginalDrawStatusClickSpan() { @Override @@ -2709,15 +2692,19 @@ public class MessageView extends FrameLayout { } - /** - * 进入公聊大厅页面,加载历史记录 - */ - public void fetchHistory() { - IMMessage anchor = MessageBuilder.createEmptyMessage(AvRoomDataManager.get().getRoomId() + "", SessionTypeEnum.P2P, System.currentTimeMillis()); - InvocationFuture> listInvocationFuture = IMMessageManager.get().pullMessageHistory(anchor, 50, false); - Log.e(TAG, "fetchHistory: " + listInvocationFuture); + @Nullable + private Drawable getNewUserDrawable(ChatRoomMessage chatRoomMessage) { + boolean newUser = NobleUtil.getIsNewUser(UserInfo.IS_NEW_USER, chatRoomMessage); + boolean isHelloUser = NobleUtil.getIsNewUser(UserInfo.IS_FROM_SAY_HELLO_CHANNEL, chatRoomMessage); + if (newUser) { + return ResourcesCompat.getDrawable(getResources(), + isHelloUser ? R.drawable.ic_new_user_hello : R.drawable.ic_new_user, + null); + } + return null; } + @SuppressLint("CheckResult") @Override public void onClick(View v) { diff --git a/app/src/main/java/com/yizhuan/erban/home/dialog/HelloMessageDialog.kt b/app/src/main/java/com/yizhuan/erban/home/dialog/HelloMessageDialog.kt index 88198b22c..ff3b6901b 100644 --- a/app/src/main/java/com/yizhuan/erban/home/dialog/HelloMessageDialog.kt +++ b/app/src/main/java/com/yizhuan/erban/home/dialog/HelloMessageDialog.kt @@ -2,12 +2,19 @@ package com.yizhuan.erban.home.dialog import android.annotation.SuppressLint import android.os.Bundle +import android.view.Gravity import android.view.WindowManager +import android.widget.ImageView +import androidx.core.view.isGone +import androidx.core.view.isVisible +import com.netease.nim.uikit.common.util.sys.ScreenUtil import com.yizhuan.erban.avroom.activity.AVRoomActivity import com.yizhuan.erban.base.BaseDialog import com.yizhuan.erban.databinding.DialogHelloMessageBinding import com.yizhuan.erban.databinding.DialogNewUserHelloBinding import com.yizhuan.erban.ui.utils.load +import com.yizhuan.tutu.room_chat.activity.RoomMsgActivity +import com.yizhuan.xchat_android_core.channel_page.bean.HelloMessageInfo import com.yizhuan.xchat_android_core.channel_page.bean.NewUserHelloInfo import com.yizhuan.xchat_android_core.utils.subAndReplaceDot @@ -15,9 +22,9 @@ class HelloMessageDialog : BaseDialog() { companion object { - fun newInstance(newUserHelloInfo: NewUserHelloInfo): HelloMessageDialog { + fun newInstance(helloMessageInfo: HelloMessageInfo): HelloMessageDialog { val args = Bundle() - args.putSerializable("newUserHelloInfo", newUserHelloInfo) + args.putSerializable("helloMessageInfo", helloMessageInfo) val fragment = HelloMessageDialog() fragment.arguments = args return fragment @@ -26,14 +33,34 @@ class HelloMessageDialog : BaseDialog() { } override var width: Int = WindowManager.LayoutParams.MATCH_PARENT + override var height: Int = WindowManager.LayoutParams.WRAP_CONTENT + override var gravity: Int = Gravity.TOP override var dimAmount: Float = 0f - private val newUserHelloInfo: NewUserHelloInfo by lazy { - requireArguments().getSerializable("newUserHelloInfo") as NewUserHelloInfo + private val helloMessageInfo: HelloMessageInfo by lazy { + requireArguments().getSerializable("helloMessageInfo") as HelloMessageInfo } @SuppressLint("CheckResult", "SetTextI18n") override fun init() { + val avatarList = listOf(binding.ivAvatar0, binding.ivAvatar1, binding.ivAvatar2) + avatarList.forEachIndexed { index, imageView -> + val avatarUrl = helloMessageInfo.sayHelloUserAvatarList?.getOrNull(index) + imageView.load(avatarUrl) + imageView.isGone = avatarUrl.isNullOrEmpty() + } + binding.tvContent.text = if (helloMessageInfo.sayHelloUserAvatarList?.size == 1) { + "Ta给你发送了一条消息~" + } else { + "Ta们向你发送了多条消息~" + } + binding.tvView.setOnClickListener { + RoomMsgActivity.start(context) + dismissAllowingStateLoss() + } + binding.ivClose.setOnClickListener { + dismissAllowingStateLoss() + } } diff --git a/app/src/main/java/com/yizhuan/erban/home/dialog/RoomHelloDialog.kt b/app/src/main/java/com/yizhuan/erban/home/dialog/RoomHelloDialog.kt index a5185a0b0..28891e8f1 100644 --- a/app/src/main/java/com/yizhuan/erban/home/dialog/RoomHelloDialog.kt +++ b/app/src/main/java/com/yizhuan/erban/home/dialog/RoomHelloDialog.kt @@ -43,7 +43,9 @@ class RoomHelloDialog : BaseDialog() { AVRoomActivity.startForFromType( requireContext(), newUserHelloInfo.roomUid, - AVRoomActivity.FROM_TYPE_HELLO + AVRoomActivity.FROM_TYPE_HELLO, + newUserHelloInfo.sayHelloUserNickname, + newUserHelloInfo.sayHelloUserUid.toString() ) } } diff --git a/app/src/main/res/drawable-xhdpi/ic_new_user.png b/app/src/main/res/drawable-xhdpi/ic_new_user.png new file mode 100644 index 0000000000000000000000000000000000000000..10c70a57fb5ff6ad7d4ef13a24e100976c6160ee GIT binary patch literal 367 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 XflG81jy)e600000NkvXXu0mjfrHx2Y literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/new_user_hello_ic_room_close.png b/app/src/main/res/drawable-xhdpi/new_user_hello_ic_room_close.png new file mode 100644 index 0000000000000000000000000000000000000000..f70169c9a6390ac79baab970c1d8c328030465be GIT binary patch literal 398 zcmV;90df9`P)Px$NJ&INR9HvtmO+lfFbqZi-_D`911A^_tbi3Knbiy|fJ$6|J8&qr9z`lr)JaR? zxJZ%QWoySzFOD0cv4@TE!hz@BF*odn2L`+)yd}IP=I#ME+=^il*#lStxRN~OaEr(q zz$btk$?u$;VT^hXi^v_oN55c4@@EP_M797{eawU8;@!Z()+Q=?A^Dqv7{G>*WA3h) z84e32K>nG|i77FyZi#1+DIjauP_r7iH@yS!6`AV721Gp@KE3So9MdMiBhYbu6Ie6D zQF{zco0)yqFf%-I2*c~q>5 + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_hello_message.xml b/app/src/main/res/layout/dialog_hello_message.xml index 660c1f3d9..400a01773 100644 --- a/app/src/main/res/layout/dialog_hello_message.xml +++ b/app/src/main/res/layout/dialog_hello_message.xml @@ -1,12 +1,90 @@ - + android:layout_height="wrap_content"> + + + + + + + + + + + + + + + + + + + + + - diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserInfo.java b/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserInfo.java index 87a5473ff..37dd49282 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserInfo.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserInfo.java @@ -41,6 +41,7 @@ public class UserInfo implements Serializable { public static final transient int GENDER_MALE = 1; public static final transient int GENDER_FEMALE = 2; public static String IS_NEW_USER = "newUser"; + public static String IS_FROM_SAY_HELLO_CHANNEL = "fromSayHelloChannel"; public static String GENDER = "gender"; public static String IS_OFFICIAL = "official"; public static String DEF_USER = "defUser"; @@ -252,6 +253,9 @@ public class UserInfo implements Serializable { private boolean newUser; @Getter @Setter + private boolean fromSayHelloChannel; + @Getter + @Setter private LiveTagInfo userInfoSkillVo; @Getter @@ -581,6 +585,7 @@ public class UserInfo implements Serializable { map.put(GENDER, userInfo.getGender()); map.put(IS_OFFICIAL, userInfo.getDefUser() == USER_TYPE_OFFICIAL); map.put(IS_NEW_USER, isNewUser()); + map.put(IS_FROM_SAY_HELLO_CHANNEL, isFromSayHelloChannel()); map.put(DEF_USER, userInfo.getDefUser()); map.put(HAS_PRETTY, userInfo.isHasPrettyErbanNo()); diff --git a/core/src/model_channel_page/java/com/yizhuan/xchat_android_core/channel_page/bean/HelloMessageInfo.kt b/core/src/model_channel_page/java/com/yizhuan/xchat_android_core/channel_page/bean/HelloMessageInfo.kt new file mode 100644 index 000000000..cb32ace91 --- /dev/null +++ b/core/src/model_channel_page/java/com/yizhuan/xchat_android_core/channel_page/bean/HelloMessageInfo.kt @@ -0,0 +1,9 @@ +package com.yizhuan.xchat_android_core.channel_page.bean + +import java.io.Serializable + +data class HelloMessageInfo( + val roomPopup: Boolean = false, + val sayHelloUserAvatarList: List? = null, + val sayHelloUserNum: Int = 0, +) : Serializable \ No newline at end of file diff --git a/core/src/model_channel_page/java/com/yizhuan/xchat_android_core/channel_page/model/ChannelPageModel.java b/core/src/model_channel_page/java/com/yizhuan/xchat_android_core/channel_page/model/ChannelPageModel.java index 9db25a3d9..a9127e8c2 100644 --- a/core/src/model_channel_page/java/com/yizhuan/xchat_android_core/channel_page/model/ChannelPageModel.java +++ b/core/src/model_channel_page/java/com/yizhuan/xchat_android_core/channel_page/model/ChannelPageModel.java @@ -3,7 +3,9 @@ package com.yizhuan.xchat_android_core.channel_page.model; import com.yizhuan.xchat_android_core.base.BaseModel; import com.yizhuan.xchat_android_core.bean.response.ServiceResult; import com.yizhuan.xchat_android_core.channel_page.bean.ChannelPageInfo; +import com.yizhuan.xchat_android_core.channel_page.bean.HelloMessageInfo; import com.yizhuan.xchat_android_core.channel_page.bean.NewUserHelloInfo; +import com.yizhuan.xchat_android_core.manager.AvRoomDataManager; import com.yizhuan.xchat_android_core.user.bean.InviteUserInfo; import com.yizhuan.xchat_android_core.utils.net.RxHelper; import com.yizhuan.xchat_android_library.net.rxnet.RxNet; @@ -74,6 +76,13 @@ public class ChannelPageModel extends BaseModel implements IChannelPageModel { .compose(RxHelper.handleSchAndExce()); } + @Override + public Single checkHelloMessage() { + return api.checkHelloMessage(AvRoomDataManager.get().getRoomUid()) + .compose(RxHelper.handleBeanData()) + .compose(RxHelper.handleSchAndExce()); + } + /** * */ @@ -144,6 +153,12 @@ public class ChannelPageModel extends BaseModel implements IChannelPageModel { @GET("/newUserStart/indexSayHello") Single> checkNewUserInRoom(); + /** + * 新用户推荐房间进入房间后收到消息提示弹窗 + */ + @GET("/newUserStart/roomSayHello") + Single> checkHelloMessage(@Query("roomUid") Long roomUid); + /** * 字节跳动推广接口 */ diff --git a/core/src/model_channel_page/java/com/yizhuan/xchat_android_core/channel_page/model/IChannelPageModel.java b/core/src/model_channel_page/java/com/yizhuan/xchat_android_core/channel_page/model/IChannelPageModel.java index 7dcf68c75..8b70c984b 100644 --- a/core/src/model_channel_page/java/com/yizhuan/xchat_android_core/channel_page/model/IChannelPageModel.java +++ b/core/src/model_channel_page/java/com/yizhuan/xchat_android_core/channel_page/model/IChannelPageModel.java @@ -1,6 +1,7 @@ package com.yizhuan.xchat_android_core.channel_page.model; import com.yizhuan.xchat_android_core.channel_page.bean.ChannelPageInfo; +import com.yizhuan.xchat_android_core.channel_page.bean.HelloMessageInfo; import com.yizhuan.xchat_android_core.channel_page.bean.NewUserHelloInfo; import com.yizhuan.xchat_android_core.user.bean.InviteUserInfo; @@ -18,6 +19,8 @@ public interface IChannelPageModel { Single checkNewUserInRoom(); + Single checkHelloMessage(); + void checkAd(); void checkByteDanceAd(String evenType);