From fd377b5280478c667070acfffdee9b1a25d605f8 Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Wed, 11 Oct 2023 14:08:23 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E9=80=81=E7=A4=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/shayu/onetoone/AppContext.java | 2 + .../message/ChatMessageFragment.java | 12 --- .../onetoone/adapter/GiftListAdapter.java | 4 + .../MsgMessageRecyclerViewAdapter.java | 1 - .../onetoone/bean/MessageChatGiftContent.java | 83 +++++++++--------- .../onetoone/manager/SendMessageManager.java | 9 ++ .../MessageChatReceiveGiftItemProvider.java | 60 +++++++++++-- .../onetoone/view/MsgInputPanelForGift.java | 76 +++++++++++++++-- .../layout/view_message_chat_receive_gift.xml | 85 ++++++++++--------- .../res/layout/view_message_input_gift.xml | 4 +- 10 files changed, 227 insertions(+), 109 deletions(-) diff --git a/OneToOne/src/main/java/com/shayu/onetoone/AppContext.java b/OneToOne/src/main/java/com/shayu/onetoone/AppContext.java index 375fc1224..369a34713 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/AppContext.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/AppContext.java @@ -10,6 +10,7 @@ import com.alibaba.android.arouter.launcher.ARouter; import com.facebook.FacebookSdk; import com.shayu.onetoone.activity.fragments.message.ChatMessageFragment; import com.shayu.onetoone.activity.message.ChatActivity; +import com.shayu.onetoone.bean.MessageChatGiftContent; import com.shayu.onetoone.bean.MessageChatTipsContent; import com.shayu.onetoone.provider.CustomConversationProvider; import com.shayu.onetoone.provider.MessageChatReceiveGiftItemProvider; @@ -78,6 +79,7 @@ public class AppContext extends CommonAppContext { ArrayList> myMessages = new ArrayList<>(); myMessages.add(MessageChatTipsContent.class); + myMessages.add(MessageChatGiftContent.class); RongIMClient.registerMessageType(myMessages); RongConfigCenter.conversationConfig().addMessageProvider(new InstructorSendRewardProvider(getApplicationContext())); diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/ChatMessageFragment.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/ChatMessageFragment.java index f6e9bc859..f8e9c5ef4 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/ChatMessageFragment.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/ChatMessageFragment.java @@ -1,30 +1,23 @@ package com.shayu.onetoone.activity.fragments.message; -import android.annotation.SuppressLint; import android.app.Dialog; import android.net.Uri; import android.os.Bundle; -import android.util.Log; import android.view.LayoutInflater; -import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; -import android.view.WindowInsets; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; -import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; import com.makeramen.roundedimageview.RoundedImageView; import com.shayu.onetoone.R; import com.shayu.onetoone.bean.MessageChatTipsContent; import com.shayu.onetoone.bean.UserBean; -import com.shayu.onetoone.dialog.GiftDialog; import com.shayu.onetoone.dialog.TipsDialog; import com.shayu.onetoone.listener.OnDialogClickListener; import com.shayu.onetoone.listener.OnSendMessageListener; @@ -45,12 +38,7 @@ import java.lang.reflect.Field; import java.util.Date; import io.rong.imkit.IMCenter; -import io.rong.imkit.conversation.ConversationFragment; -import io.rong.imkit.manager.AudioPlayManager; -import io.rong.imkit.manager.AudioRecordManager; import io.rong.imkit.model.UiMessage; -import io.rong.imkit.utils.PermissionCheckUtil; -import io.rong.imkit.utils.RongOperationPermissionUtils; import io.rong.imlib.IRongCallback; import io.rong.imlib.RongIMClient; import io.rong.imlib.model.Conversation; diff --git a/OneToOne/src/main/java/com/shayu/onetoone/adapter/GiftListAdapter.java b/OneToOne/src/main/java/com/shayu/onetoone/adapter/GiftListAdapter.java index 92101b023..0f6bf41db 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/adapter/GiftListAdapter.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/adapter/GiftListAdapter.java @@ -48,6 +48,10 @@ public class GiftListAdapter extends RecyclerView.Adapter cache = new HashMap<>(); + public static void sendMessageForGift(String toUid,String giftId,OnSendMessageListener listener){ + SendData sendData = new SendData(Integer.parseInt(toUid), + 3, + giftId, + "礼物消息", + "1", + 1); + send(sendData, listener); + } public static void sendMessageForAudio(String toUid,OnSendMessageListener listener){ SendData sendData = new SendData(Integer.parseInt(toUid), 1, diff --git a/OneToOne/src/main/java/com/shayu/onetoone/provider/MessageChatReceiveGiftItemProvider.java b/OneToOne/src/main/java/com/shayu/onetoone/provider/MessageChatReceiveGiftItemProvider.java index faeb30daa..201c44586 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/provider/MessageChatReceiveGiftItemProvider.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/provider/MessageChatReceiveGiftItemProvider.java @@ -2,30 +2,42 @@ package com.shayu.onetoone.provider; import android.content.Context; import android.text.Spannable; +import android.view.Gravity; +import android.view.View; import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import com.alibaba.fastjson.JSONObject; import com.shayu.onetoone.R; -import com.shayu.onetoone.bean.MessageChatGiftContent; +import com.shayu.onetoone.bean.GiftBean; import com.shayu.onetoone.bean.MessageChatGiftContent; import com.yunbao.common.glide.ImgLoader; +import com.yunbao.common.manager.IMLoginManager; +import com.yunbao.common.utils.ToastUtil; import java.util.List; +import io.rong.common.RLog; import io.rong.imkit.conversation.messgelist.provider.BaseMessageItemProvider; import io.rong.imkit.model.UiMessage; import io.rong.imkit.widget.adapter.IViewProviderListener; import io.rong.imkit.widget.adapter.ViewHolder; +import io.rong.imlib.model.Message; import io.rong.imlib.model.MessageContent; +/** + * 聊天送礼适配器 + */ public class MessageChatReceiveGiftItemProvider extends BaseMessageItemProvider { private Context mContext; public MessageChatReceiveGiftItemProvider(Context mContext) { this.mContext = mContext; - mConfig.showPortrait = false; + mConfig.showPortrait = true; mConfig.showSummaryWithName = false; mConfig.showContentBubble = false; - mConfig.centerInHorizontal = true; + mConfig.centerInHorizontal = false; } @Override @@ -33,11 +45,47 @@ public class MessageChatReceiveGiftItemProvider extends BaseMessageItemProvider< return ViewHolder.createViewHolder(mContext, parent, R.layout.view_message_chat_receive_gift); } + @Override + public void bindViewHolder(ViewHolder holder, UiMessage uiMessage, int position, List list, IViewProviderListener listener) { + if (holder instanceof MessageViewHolder) { + try { + MessageContent content = uiMessage.getMessage().getContent(); + if (content instanceof MessageChatGiftContent) { + MessageChatGiftContent messageChatGiftContent = (MessageChatGiftContent) content; + if (messageChatGiftContent.getSendUid().equals(IMLoginManager.get(mContext).getUserInfo().getId() + "")) { + uiMessage.getMessage().setMessageDirection(Message.MessageDirection.SEND); + } else { + uiMessage.getMessage().setMessageDirection(Message.MessageDirection.RECEIVE); + } + } + } catch (ClassCastException var10) { + RLog.e("BaseMessageItemProvider", "bindViewHolder MessageContent cast Exception, e:" + var10); + } + } + super.bindViewHolder(holder, uiMessage, position, list, listener); + } + @Override protected void bindMessageContentViewHolder(ViewHolder holder, ViewHolder parentHolder, MessageChatGiftContent messageChatGiftContent, UiMessage uiMessage, int position, List list, IViewProviderListener listener) { - holder.setText(R.id.title, messageChatGiftContent.getTitle()); - holder.setText(R.id.description, messageChatGiftContent.getContent()); - ImgLoader.display(mContext, messageChatGiftContent.getImageUrl(), holder.getView(R.id.giftIcon)); + GiftBean item = JSONObject.parseObject(messageChatGiftContent.getGift(), GiftBean.class); + + holder.setText(R.id.description, item.getGiftname() + " x" + messageChatGiftContent.getNumber()); + ImgLoader.display(mContext, item.getGifticon(), holder.getView(R.id.giftIcon)); + LinearLayout holderView = holder.getView(R.id.layout_root); + FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); + if (messageChatGiftContent.getSendUid().equals(IMLoginManager.get(mContext).getUserInfo().getId() + "")) { + params.gravity = Gravity.END; + uiMessage.setMessageDirection(Message.MessageDirection.SEND); + } else { + uiMessage.setMessageDirection(Message.MessageDirection.RECEIVE); + params.gravity = Gravity.START; + } + try { + holderView.setLayoutParams(params); + } catch (Exception e) { + e.printStackTrace(); + } + } @Override diff --git a/OneToOne/src/main/java/com/shayu/onetoone/view/MsgInputPanelForGift.java b/OneToOne/src/main/java/com/shayu/onetoone/view/MsgInputPanelForGift.java index 2cf815671..f3616de7f 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/view/MsgInputPanelForGift.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/view/MsgInputPanelForGift.java @@ -5,29 +5,46 @@ import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; +import com.alibaba.fastjson.JSONObject; import com.shayu.onetoone.R; import com.shayu.onetoone.adapter.GiftListAdapter; import com.shayu.onetoone.bean.GiftBean; +import com.shayu.onetoone.bean.MessageChatGiftContent; +import com.shayu.onetoone.bean.MessageChatTipsContent; +import com.shayu.onetoone.listener.OnSendMessageListener; import com.shayu.onetoone.manager.OTONetManager; +import com.shayu.onetoone.manager.SendMessageManager; import com.shayu.onetoone.widget.PagerConfig; import com.shayu.onetoone.widget.PagerGridLayoutManager; import com.shayu.onetoone.widget.PagerGridSnapHelper; +import com.yunbao.common.CommonAppConfig; import com.yunbao.common.http.base.HttpCallback; +import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.utils.ToastUtil; +import com.yunbao.common.utils.WordUtil; import java.util.ArrayList; import java.util.List; import androidx.fragment.app.FragmentActivity; import androidx.recyclerview.widget.RecyclerView; -import io.rong.imkit.conversation.extension.RongExtension; -public class MsgInputPanelForGift extends AbsInputPanel{ +import io.rong.imkit.IMCenter; +import io.rong.imkit.conversation.extension.RongExtension; +import io.rong.imlib.IRongCallback; +import io.rong.imlib.RongIMClient; +import io.rong.imlib.model.Conversation; +import io.rong.imlib.model.Message; +import io.rong.imlib.model.SendMessageOption; +import kotlinx.coroutines.channels.Send; + +public class MsgInputPanelForGift extends AbsInputPanel { RecyclerView gifList; GiftListAdapter mAdapter; TextView money; Button topUpBtn; Button sendBtn; + String token; public MsgInputPanelForGift(String targetId, FragmentActivity fragmentActivity, RongExtension mRongExtension) { super(targetId, fragmentActivity, mRongExtension, R.layout.view_message_input_gift); @@ -43,7 +60,7 @@ public class MsgInputPanelForGift extends AbsInputPanel{ gifList = viewGroup.findViewById(R.id.gift_list); money = viewGroup.findViewById(R.id.money); topUpBtn = viewGroup.findViewById(R.id.top_up_btn); - sendBtn =viewGroup.findViewById(R.id.send_btn); + sendBtn = viewGroup.findViewById(R.id.send_btn); mAdapter = new GiftListAdapter(mContext); PagerGridLayoutManager manager = new PagerGridLayoutManager(2, 4, PagerGridLayoutManager.HORIZONTAL); gifList.setLayoutManager(manager); @@ -53,17 +70,66 @@ public class MsgInputPanelForGift extends AbsInputPanel{ PagerConfig.setMillisecondsPreInch(150); gifList.setAdapter(mAdapter); initData(); + sendBtn.setOnClickListener(v -> { + GiftBean item = mAdapter.getItem(); + SendMessageManager.sendMessageForGift(targetId, item.getId() + "", new OnSendMessageListener() { + @Override + public void onSuccess(String token) { + super.onSuccess(token); + MsgInputPanelForGift.this.token = token; + sendGift(item); + + } + + @Override + public void onError(int status, String msg) { + super.onError(status, msg); + } + }); + }); } + + private void sendGift(GiftBean item) { + MessageChatGiftContent bean = MessageChatGiftContent.obtain(JSONObject.toJSONString(item), "1", IMLoginManager.get(mContext).getUserInfo().getId() + ""); + IMCenter.getInstance().sendMessage(Message.obtain(targetId, Conversation.ConversationType.PRIVATE, bean), + null, + null, + new IRongCallback.ISendMessageCallback() { + @Override + public void onAttached(Message message) { + + } + + @Override + public void onSuccess(Message message) { + SendMessageManager.onCallSuccess(token, new OnSendMessageListener() { + @Override + public void onError(int status, String msg) { + super.onError(status, msg); + ToastUtil.show(msg); + } + }); + } + + @Override + public void onError(Message message, RongIMClient.ErrorCode errorCode) { + System.out.println("失败:" + errorCode.getMessage()); + System.out.println("失败:" + errorCode.getValue()); + } + } + ); + } + private void initData() { OTONetManager.getInstance(mContext) .getGiftList(new HttpCallback>() { @Override public void onSuccess(List data) { - List list=new ArrayList<>(); + List list = new ArrayList<>(); for (int i = 0; i < 10; i++) { list.addAll(data); } - mAdapter.setList(list); + mAdapter.setList(data); } @Override diff --git a/OneToOne/src/main/res/layout/view_message_chat_receive_gift.xml b/OneToOne/src/main/res/layout/view_message_chat_receive_gift.xml index b081f970c..16dae6a08 100644 --- a/OneToOne/src/main/res/layout/view_message_chat_receive_gift.xml +++ b/OneToOne/src/main/res/layout/view_message_chat_receive_gift.xml @@ -1,45 +1,52 @@ - + android:layout_width="match_parent" + android:layout_height="wrap_content"> - - - - - - \ No newline at end of file + android:background="@drawable/bg_chat_gift"> + + + + + + + + + \ No newline at end of file diff --git a/OneToOne/src/main/res/layout/view_message_input_gift.xml b/OneToOne/src/main/res/layout/view_message_input_gift.xml index b0af08d54..258f077ca 100644 --- a/OneToOne/src/main/res/layout/view_message_input_gift.xml +++ b/OneToOne/src/main/res/layout/view_message_input_gift.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:background="@color/white" android:layout_width="match_parent" - android:layout_height="wrap_content"> + android:layout_height="210dp">