From 1424ff61e191022c78fb6feb80c5a03a07d26de9 Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Wed, 11 Oct 2023 18:28:33 +0800 Subject: [PATCH] update --- .../message/ChatMessageFragment.java | 60 ++++++++++++++- .../adapter/BottomListDialogAdapter.java | 70 ++++++++++++++++++ .../adapter/MsgChatMessageListAdapter.java | 23 ++++++ .../onetoone/dialog/BottomListDialog.java | 69 +++++++++++++++++ .../onetoone/view/MsgInputPanelForGift.java | 1 + .../src/main/res/drawable/bg_gift_top_up.xml | 6 +- .../main/res/layout/dialog_bottom_list.xml | 35 ++++++++- .../main/res/layout/item_dialog_bottom.xml | 23 ++++++ OneToOne/src/main/res/layout/item_gift.xml | 2 +- .../res/layout/view_message_input_gift.xml | 8 +- .../src/main/res/mipmap-xxhdpi/ic_drill.png | Bin 0 -> 2524 bytes 11 files changed, 286 insertions(+), 11 deletions(-) create mode 100644 OneToOne/src/main/java/com/shayu/onetoone/adapter/BottomListDialogAdapter.java create mode 100644 OneToOne/src/main/java/com/shayu/onetoone/adapter/MsgChatMessageListAdapter.java create mode 100644 OneToOne/src/main/java/com/shayu/onetoone/dialog/BottomListDialog.java create mode 100644 OneToOne/src/main/res/layout/item_dialog_bottom.xml create mode 100644 OneToOne/src/main/res/mipmap-xxhdpi/ic_drill.png 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 c6095ad0d..a2530440d 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 @@ -15,11 +15,15 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.lxj.xpopup.XPopup; +import com.lxj.xpopup.interfaces.OnSelectListener; import com.makeramen.roundedimageview.RoundedImageView; import com.shayu.onetoone.R; +import com.shayu.onetoone.adapter.MsgChatMessageListAdapter; import com.shayu.onetoone.bean.MessageChatAuthContent; import com.shayu.onetoone.bean.MessageChatTipsContent; import com.shayu.onetoone.bean.UserBean; +import com.shayu.onetoone.dialog.BottomListDialog; import com.shayu.onetoone.dialog.TipsDialog; import com.shayu.onetoone.listener.OnCallStatusListener; import com.shayu.onetoone.listener.OnDialogClickListener; @@ -32,15 +36,20 @@ import com.yunbao.common.CommonAppConfig; import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.http.base.HttpCallback; import com.yunbao.common.interfaces.ImageResultCallback; +import com.yunbao.common.interfaces.OnItemClickListener; import com.yunbao.common.utils.ProcessImageUtil; +import com.yunbao.common.utils.SpUtil; +import com.yunbao.common.utils.StringUtil; import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.WordUtil; import java.io.File; import java.lang.reflect.Field; +import java.util.Arrays; import java.util.Date; import io.rong.imkit.IMCenter; +import io.rong.imkit.conversation.MessageListAdapter; import io.rong.imkit.model.UiMessage; import io.rong.imlib.IRongCallback; import io.rong.imlib.RongIMClient; @@ -70,6 +79,8 @@ public class ChatMessageFragment extends AbsConversationFragment { ImageView status; Button follow; + MsgChatMessageListAdapter mAdapter; + private String token; private static final String TAG = "聊天界面"; @@ -86,6 +97,9 @@ public class ChatMessageFragment extends AbsConversationFragment { initCamera(); mSendBtn.setOnClickListener(v -> { + if (StringUtil.isEmpty(mEditText.getText().toString())) { + return; + } SendMessageManager.sendMessageForText(targetId, mEditText.getText().toString(), new OnSendMessageListener() { @Override public void onSuccess(String token) { @@ -180,7 +194,14 @@ public class ChatMessageFragment extends AbsConversationFragment { @Override public void onSuccess(String token) { super.onSuccess(token); - ToastUtil.show("弹视频聊天"); + //ToastUtil.show("弹视频聊天"); + new BottomListDialog(mContext).setSelect(new OnItemClickListener() { + @Override + public void onItemClick(String bean, int position) { + ToastUtil.show(bean + "|" + position); + } + }).setStrings(Arrays.asList("发起语音通话\n200钻/分钟", "发起视频通话\n100钻/分钟")) + .showDialog(); } @Override @@ -212,6 +233,10 @@ public class ChatMessageFragment extends AbsConversationFragment { } private void checkAuth(OnSendMessageListener listener) { + if (true) { + listener.onSuccess(""); + return; + } OTONetManager.getInstance(mContext) .getTargetUserInfo(Integer.parseInt(targetId), new HttpCallback() { @Override @@ -276,8 +301,22 @@ public class ChatMessageFragment extends AbsConversationFragment { @Override public void onSuccess(String token) { super.onSuccess(token); - ToastUtil.show(token); mEditText.setText(""); + if (!SpUtil.getInstance().isExists("chat_msg_safe_tip_" + targetId)) { + SpUtil.getInstance().setBooleanValue("chat_msg_safe_tip_" + targetId, true); + MessageChatTipsContent content = MessageChatTipsContent.obtain(WordUtil.getNewString(R.string.message_chat_tip1)); + IMCenter.getInstance().insertOutgoingMessage(conversationType, targetId, Message.SentStatus.SENT, content, System.currentTimeMillis(), new RongIMClient.ResultCallback() { + @Override + public void onSuccess(Message message) { + } + + @Override + public void onError(RongIMClient.ErrorCode e) { + System.out.println("失败:" + e.getMessage()); + + } + }); + } } }); } @@ -394,6 +433,23 @@ public class ChatMessageFragment extends AbsConversationFragment { @Override public boolean onViewLongClick(int clickType, UiMessage data) { + View position = mList.getLayoutManager().findViewByPosition(mAdapter.getPosition(data.getMessageId())); + new XPopup.Builder(getContext()) + .atView(position) // 依附于所点击的View,内部会自动判断在上方或者下方显示 + .asAttachList(new String[]{"分享", "编辑", "不带icon"}, + new int[]{R.mipmap.ic_launcher, R.mipmap.ic_launcher}, + new OnSelectListener() { + @Override + public void onSelect(int position, String text) { + ToastUtil.show("click " + text); + } + }) + .show(); return true; } + + @Override + protected MessageListAdapter onResolveAdapter() { + return new MsgChatMessageListAdapter(this); + } } diff --git a/OneToOne/src/main/java/com/shayu/onetoone/adapter/BottomListDialogAdapter.java b/OneToOne/src/main/java/com/shayu/onetoone/adapter/BottomListDialogAdapter.java new file mode 100644 index 000000000..b99b2021b --- /dev/null +++ b/OneToOne/src/main/java/com/shayu/onetoone/adapter/BottomListDialogAdapter.java @@ -0,0 +1,70 @@ +package com.shayu.onetoone.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.shayu.onetoone.R; +import com.yunbao.common.interfaces.OnItemClickListener; + +import java.util.List; + +public class BottomListDialogAdapter extends RecyclerView.Adapter { + private List list; + private Context mContext; + private OnItemClickListener onItemClickListener; + + public BottomListDialogAdapter(Context mContext) { + this.mContext = mContext; + } + + public void setList(List list) { + this.list = list; + } + + public void setContext(Context mContext) { + this.mContext = mContext; + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.onItemClickListener = onItemClickListener; + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + return new ViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_dialog_bottom, parent, false)); + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + holder.setData(list.get(position),position); + } + + @Override + public int getItemCount() { + return list.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder { + TextView textView; + + public ViewHolder(@NonNull View itemView) { + super(itemView); + textView = itemView.findViewById(R.id.item); + } + + public void setData(String data, int position) { + textView.setText(data); + itemView.setOnClickListener(v -> { + onItemClickListener.onItemClick(data, position); + }); + } + + } +} diff --git a/OneToOne/src/main/java/com/shayu/onetoone/adapter/MsgChatMessageListAdapter.java b/OneToOne/src/main/java/com/shayu/onetoone/adapter/MsgChatMessageListAdapter.java new file mode 100644 index 000000000..85794af7c --- /dev/null +++ b/OneToOne/src/main/java/com/shayu/onetoone/adapter/MsgChatMessageListAdapter.java @@ -0,0 +1,23 @@ +package com.shayu.onetoone.adapter; + +import io.rong.imkit.conversation.MessageListAdapter; +import io.rong.imkit.model.UiMessage; +import io.rong.imkit.widget.adapter.IViewProviderListener; + +public class MsgChatMessageListAdapter extends MessageListAdapter { + public MsgChatMessageListAdapter(IViewProviderListener listener) { + super(listener); + } + + public void onLongClick(int messageId) { + } + + public int getPosition(int messageId) { + for (int i = 0; i < getData().size(); i++) { + if (getData().get(i).getMessageId() == messageId){ + return i; + } + } + return 0; + } +} diff --git a/OneToOne/src/main/java/com/shayu/onetoone/dialog/BottomListDialog.java b/OneToOne/src/main/java/com/shayu/onetoone/dialog/BottomListDialog.java new file mode 100644 index 000000000..55b48ffc4 --- /dev/null +++ b/OneToOne/src/main/java/com/shayu/onetoone/dialog/BottomListDialog.java @@ -0,0 +1,69 @@ +package com.shayu.onetoone.dialog; + +import android.content.Context; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.lxj.xpopup.XPopup; +import com.shayu.onetoone.R; +import com.shayu.onetoone.adapter.BottomListDialogAdapter; +import com.yunbao.common.dialog.AbsDialogPopupWindow; +import com.yunbao.common.interfaces.OnItemClickListener; +import com.yunbao.common.utils.ToastUtil; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class BottomListDialog extends AbsDialogPopupWindow { + List strings; + OnItemClickListener select; + RecyclerView recyclerView; + BottomListDialogAdapter adapter; + View cancel; + + public BottomListDialog(@NonNull Context context) { + super(context); + strings = new ArrayList<>(); + } + + public BottomListDialog setStrings(List strings) { + this.strings = strings; + return this; + } + + public BottomListDialog setSelect(OnItemClickListener select) { + this.select = select; + return this; + } + + @Override + public void buildDialog(XPopup.Builder builder) { + + } + + @Override + public int bindLayoutId() { + return R.layout.dialog_bottom_list; + } + + @Override + protected void onCreate() { + super.onCreate(); + recyclerView = findViewById(R.id.recyclerView); + cancel = findViewById(R.id.cancel); + cancel.setOnClickListener(v -> dismiss()); + adapter = new BottomListDialogAdapter(getContext()); + adapter.setList(strings); + adapter.setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(String bean, int position) { + select.onItemClick(bean, position); + dialog.dismiss(); + } + }); + recyclerView.setAdapter(adapter); + } +} 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 4271114fe..6076bdacc 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/view/MsgInputPanelForGift.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/view/MsgInputPanelForGift.java @@ -86,6 +86,7 @@ public class MsgInputPanelForGift extends AbsInputPanel { private void sendGift(GiftBean item) { MessageChatGiftContent bean = MessageChatGiftContent.obtain(JSONObject.toJSONString(item), "1", IMLoginManager.get(mContext).getUserInfo().getId() + ""); + bean.setExtra(JSONObject.toJSONString(item)); IMCenter.getInstance().sendMessage(Message.obtain(targetId, Conversation.ConversationType.PRIVATE, bean), null, null, diff --git a/OneToOne/src/main/res/drawable/bg_gift_top_up.xml b/OneToOne/src/main/res/drawable/bg_gift_top_up.xml index ae032536c..6aeb52708 100644 --- a/OneToOne/src/main/res/drawable/bg_gift_top_up.xml +++ b/OneToOne/src/main/res/drawable/bg_gift_top_up.xml @@ -1,9 +1,9 @@ - + - - + + \ No newline at end of file diff --git a/OneToOne/src/main/res/layout/dialog_bottom_list.xml b/OneToOne/src/main/res/layout/dialog_bottom_list.xml index 77d9ef65f..05b48de55 100644 --- a/OneToOne/src/main/res/layout/dialog_bottom_list.xml +++ b/OneToOne/src/main/res/layout/dialog_bottom_list.xml @@ -1,6 +1,39 @@ + android:layout_height="wrap_content"> + + + + + \ No newline at end of file diff --git a/OneToOne/src/main/res/layout/item_dialog_bottom.xml b/OneToOne/src/main/res/layout/item_dialog_bottom.xml new file mode 100644 index 000000000..5a67f82b4 --- /dev/null +++ b/OneToOne/src/main/res/layout/item_dialog_bottom.xml @@ -0,0 +1,23 @@ + + + + + \ No newline at end of file diff --git a/OneToOne/src/main/res/layout/item_gift.xml b/OneToOne/src/main/res/layout/item_gift.xml index 9ad957014..34ff9b5f6 100644 --- a/OneToOne/src/main/res/layout/item_gift.xml +++ b/OneToOne/src/main/res/layout/item_gift.xml @@ -50,7 +50,7 @@ android:layout_width="13dp" android:layout_height="13dp" android:layout_gravity="center" - app:srcCompat="@mipmap/home_me_diamonds" /> + app:srcCompat="@mipmap/ic_drill" /> + app:srcCompat="@mipmap/ic_drill" /> diff --git a/OneToOne/src/main/res/mipmap-xxhdpi/ic_drill.png b/OneToOne/src/main/res/mipmap-xxhdpi/ic_drill.png new file mode 100644 index 0000000000000000000000000000000000000000..a362cc527697edc61aef1cadb9719cfd8946fe22 GIT binary patch literal 2524 zcmV<22_yE2P)Px;mPtfGRA@u(mwRwj)g8w_=iIw@H@nGhlHG(PBu3teJPlR^0gGa-Ql(&RspHhC z+Of7XwpzwkJ2L)ZA6D(OTI*A_yTQAukg0V3U2`z4x5X zO~9d`yaMewlRI?$SDQfuTcU+FhD4A+8TIiR(^47eSYo~@kz z2)KqoYp_9R1PZhZgHJsas{pOiV7F&*yPK7=e`MI=MNx5U>U3aE89-}28dwJ01(ZS- z?J6)V1jeBlG-w-i8dM6cQlOLI1?~=j>Idz);~;!lbk;^|@r={S!~0&{Q9t4KN3$mj zbJ74>?=Mw$>Q*81zadN+g+llsU@wo9_cJ81H|wC_-hbZh90JM=f@sx?aC^`ygH|p= zWe`@J#FnkNjV&(-xAEb~mv?VI8Hket(CTws;_?5z_) zoDe{39m=%4yhbK=Tw+!)L0fzsOOLE8+ z0zeO>H$rwB$N(5o5HZsAtFW6AsL2;$6^tVki$L<1b)x9^TaO2ETmY?GqfTG*AJgxy zyhN0g6Bs=Q=`Th4%W%4$#BRACVdP_!d=)cxBhsosJDoUt9~x9uM$ZSC2Qr4x0Yp$B zj8;$y5anRb0iy~h(@tW~Dr96dS~=ue->0}{J~Gsr#OS<6JTCbsuQCy zhV+jCa{{>gKs5sS;Qthf_6FSkeb`;Q$sK6K?e8TzWjeu$lfW_ukdcKVc;luIgZNMY zt)K9bI_J;CJFe<&Xu{1LAY4-iDu=K1YMkD`Av!mcGpYzqxdW1$hxTe{3P|%%ZtunI zTaD5K_)2GhuNI6lkmJDJHdK{#E3~~tuUkZRdmNQagOI3nhJwlx3hTy!6@k3-Y@Bm1 z6#28Z9Sv~|fNsApM#0P%2o_wb>Q|#2AK6S2qofv`esCO&WD?O=Pj7yhz^E$-$0mXk zhtSla^vLdp^e(jB1ktMzK5tpykQ=fbR0rr3^uGbE&y(pju@f%2grAJ#!#&uK6}Bk* z^lY!SK*2-^OiN;xFA`$R>qkQT7l1zSKmmsF5_vN|$^L&pvI(T0tQkX@F|52AgjY~9 zU8qbK14fSQKnJnOcVc=$`K!U{gv>6q*9T-iB2)*4S8}^R_=l>G&Vbtk9lrq?!EJ6N zw{<;Q_^>Mcw$j(0% zS%EM@S!BZtu*$AQ7(vMNpflZgGy|V+$7lD|xrQzCpk@<5lL$gpF8&SQx zP;GDGx~(|57BKQLBZUMiXOi95Lv~LaI%s2*l|so_+IQ}!e(h$QRDzPEzqM;%nESq$Ya93X~h%<%Ab4@%syQo^l^Ja)9o5>}!ry`GA|GmP#i^b!W264{Z#9HmBR9^a~*$;QaJ*}qqA`S{WdZ?fRh{`*Pp}5DMF*81nVY~c&{J- z=y1Z6;#;9>UVHLHhq&Wbq2mqKz2A=5M%fd&f$SGD8Iwrm1aj$B=)n&c7oTx0=^ZPO z6DNWYR&pI%C$hlYIMy7%5JZIJX@P<HbUS6wR$$ z9iDMcvHkXsv8pCP>@zDUobm%97I+8pGj^R;89kZRcidb%W$eATzGS6WmWYCxcZteJ zA3vFKr~1xW1MmWAf9~e$^7*03qUsT^Nt~7ItOA^sh>x0d1mJ(6^6}OfabU!OVJa|^ mLc