From 0706611df85652e67f504ce8f954445ae1f7ed7c Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Thu, 12 Oct 2023 14:40:47 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E8=81=8A=E5=A4=A9=E9=95=BF=E6=8C=89?= =?UTF-8?q?=E6=B0=94=E6=B3=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fragments/home/RecommendFragment.java | 12 +- .../message/ChatMessageFragment.java | 66 ++++++- .../adapter/MsgChatMessageListAdapter.java | 11 +- .../onetoone/dialog/MsgChatClickDialog.java | 93 ++++++++++ .../main/res/layout/dialog_msg_chat_click.xml | 12 ++ .../src/main/res/layout/rc_message_item.xml | 161 ++++++++++++++++++ .../res/mipmap-xxhdpi/bg_chat_click.9.png | Bin 0 -> 3140 bytes 7 files changed, 342 insertions(+), 13 deletions(-) create mode 100644 OneToOne/src/main/java/com/shayu/onetoone/dialog/MsgChatClickDialog.java create mode 100644 OneToOne/src/main/res/layout/dialog_msg_chat_click.xml create mode 100644 OneToOne/src/main/res/layout/rc_message_item.xml create mode 100644 OneToOne/src/main/res/mipmap-xxhdpi/bg_chat_click.9.png diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/home/RecommendFragment.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/home/RecommendFragment.java index 1595a82ec..c3406e1d1 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/home/RecommendFragment.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/home/RecommendFragment.java @@ -1,5 +1,6 @@ package com.shayu.onetoone.activity.fragments.home; +import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -9,6 +10,7 @@ import androidx.annotation.NonNull; import com.shayu.onetoone.R; import com.shayu.onetoone.activity.fragments.BaseFragment; +import com.shayu.onetoone.activity.HomepageRankingActivity; import com.shayu.onetoone.adapter.HomeRecommendListAdapter; import com.shayu.onetoone.bean.HomeItemBean; import com.shayu.onetoone.manager.OTONetManager; @@ -33,8 +35,8 @@ public class RecommendFragment extends BaseFragment { public void initView(View itemView) { recyclerView = itemView.findViewById(R.id.recyclerView); mRefreshLayout = itemView.findViewById(R.id.swipeRefreshLayout); - top=itemView.findViewById(R.id.btn_top_list); - adapter=new HomeRecommendListAdapter(getContext()); + top = itemView.findViewById(R.id.btn_top_list); + adapter = new HomeRecommendListAdapter(getContext()); recyclerView.setAdapter(adapter); mRefreshLayout.setNestedScrollingEnabled(false); mRefreshLayout.setRefreshHeader(new RongRefreshHeader(this.getContext())); @@ -50,7 +52,8 @@ public class RecommendFragment extends BaseFragment { } }); top.setOnClickListener(view -> { - recyclerView.scrollToPosition(0); + // recyclerView.scrollToPosition(0); + startActivity(new Intent(getContext(), HomepageRankingActivity.class)); }); initData(); } @@ -62,7 +65,8 @@ public class RecommendFragment extends BaseFragment { private void onConversationListRefresh(RefreshLayout refreshLayout) { initData(); } - private void initData(){ + + private void initData() { OTONetManager.getInstance(mContext) .getHomeRecommend(new HttpCallback>() { @Override 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 a2063102d..c393bb344 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,6 +1,10 @@ package com.shayu.onetoone.activity.fragments.message; +import static android.content.Context.CLIPBOARD_SERVICE; + import android.app.Dialog; +import android.content.ClipData; +import android.content.ClipboardManager; import android.net.Uri; import android.os.Bundle; import android.util.Log; @@ -24,6 +28,7 @@ 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.MsgChatClickDialog; import com.shayu.onetoone.dialog.TipsDialog; import com.shayu.onetoone.listener.OnCallStatusListener; import com.shayu.onetoone.listener.OnDialogClickListener; @@ -432,21 +437,66 @@ public class ChatMessageFragment extends AbsConversationFragment { @Override public boolean onViewLongClick(int clickType, UiMessage data) { - View position = mLinearLayoutManager.findViewByPosition(((MsgChatMessageListAdapter)mAdapter).getPosition(data.getMessageId())); + View position = mLinearLayoutManager.findViewByPosition(((MsgChatMessageListAdapter) mAdapter).getPosition(data.getMessageId())); + boolean isMy = data.getMessage().getMessageDirection() == Message.MessageDirection.SEND; + boolean isTextMessage = data.getMessage().getContent() instanceof TextMessage; + String[] list; + if (isTextMessage) { + if (isMy) { + list = new String[]{"複製", "刪除"}; + } else { + list = new String[]{"複製"}; + } + } else { + if (isMy) { + list = new String[]{"刪除"}; + } else { + list = null; + } + } + if (list == null) { + return true; + } new XPopup.Builder(getContext()) - .atView(position) // 依附于所点击的View,内部会自动判断在上方或者下方显示 - .asAttachList(new String[]{"分享", "编辑", "不带icon"}, - new int[]{R.mipmap.ic_launcher, R.mipmap.ic_launcher}, - new OnSelectListener() { + .atView(position.findViewById(R.id.rc_content)) + .hasShadowBg(false) + .positionByWindowCenter(true) + .asCustom(new MsgChatClickDialog(getActivity()) + .setList(Arrays.asList(list)) + .setOnItemClickListener(new OnItemClickListener() { @Override - public void onSelect(int position, String text) { - ToastUtil.show("click " + text); + public void onItemClick(String bean, int position) { + if (bean.equals("複製")) { + copyText(data); + } else { + delete(data); + } } - }) + })) .show(); return true; } + private void copyText(UiMessage uiMessage) { + ClipboardManager cm = (ClipboardManager) getContext().getSystemService(CLIPBOARD_SERVICE); + ClipData clipData = ClipData.newPlainText("text", uiMessage.getContentSpannable()); + cm.setPrimaryClip(clipData); + } + + private void delete(UiMessage uiMessage) { + IMCenter.getInstance().deleteMessages(Conversation.ConversationType.PRIVATE, targetId, new int[]{uiMessage.getMessageId()}, new RongIMClient.ResultCallback() { + @Override + public void onSuccess(Boolean aBoolean) { + + } + + @Override + public void onError(RongIMClient.ErrorCode e) { + + } + }); + } + @Override protected MessageListAdapter onResolveAdapter() { return new MsgChatMessageListAdapter(this); diff --git a/OneToOne/src/main/java/com/shayu/onetoone/adapter/MsgChatMessageListAdapter.java b/OneToOne/src/main/java/com/shayu/onetoone/adapter/MsgChatMessageListAdapter.java index 85794af7c..161313609 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/adapter/MsgChatMessageListAdapter.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/adapter/MsgChatMessageListAdapter.java @@ -1,15 +1,24 @@ package com.shayu.onetoone.adapter; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; + import io.rong.imkit.conversation.MessageListAdapter; import io.rong.imkit.model.UiMessage; import io.rong.imkit.widget.adapter.IViewProviderListener; +import io.rong.imkit.widget.adapter.ViewHolder; public class MsgChatMessageListAdapter extends MessageListAdapter { public MsgChatMessageListAdapter(IViewProviderListener listener) { super(listener); } + //onCreateMessageContentViewH - public void onLongClick(int messageId) { + + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + return super.onCreateViewHolder(parent, viewType); } public int getPosition(int messageId) { diff --git a/OneToOne/src/main/java/com/shayu/onetoone/dialog/MsgChatClickDialog.java b/OneToOne/src/main/java/com/shayu/onetoone/dialog/MsgChatClickDialog.java new file mode 100644 index 000000000..8308ac6a5 --- /dev/null +++ b/OneToOne/src/main/java/com/shayu/onetoone/dialog/MsgChatClickDialog.java @@ -0,0 +1,93 @@ +package com.shayu.onetoone.dialog; + +import android.content.Context; +import android.graphics.Color; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.lxj.xpopup.core.AttachPopupView; +import com.lxj.xpopup.core.BubbleAttachPopupView; +import com.shayu.onetoone.R; +import com.shayu.onetoone.event.MessageMsgBusEvent; +import com.shayu.onetoone.manager.RouteManager; +import com.yunbao.common.interfaces.OnItemClickListener; +import com.yunbao.common.utils.Bus; +import com.yunbao.common.utils.DpUtil; + +import java.util.List; + +/** + * 聊天界面长按气泡菜单 + */ +public class MsgChatClickDialog extends AttachPopupView implements View.OnClickListener { + LinearLayout rootView; + List list; + OnItemClickListener onItemClickListener; + + public MsgChatClickDialog(@NonNull Context context) { + super(context); + } + + public MsgChatClickDialog setList(List list) { + this.list = list; + return this; + } + + public MsgChatClickDialog setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.onItemClickListener = onItemClickListener; + return this; + } + + @Override + protected int getImplLayoutId() { + return R.layout.dialog_msg_chat_click; + } + + @Override + protected boolean isShowUpToTarget() { + return true; + } + + @Override + protected void onCreate() { + super.onCreate(); + isShowUp = true; + rootView = findViewById(R.id.rootView); + rootView.setGravity(Gravity.CENTER); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT); + params.gravity = Gravity.CENTER; + for (int i = 0; i < list.size(); i++) { + String item = list.get(i); + TextView textView = new TextView(getContext()); + textView.setText(item); + textView.setGravity(Gravity.CENTER); + textView.setTag(i); + textView.setTextColor(Color.WHITE); + textView.setLayoutParams(params); + textView.setOnClickListener(this); + rootView.addView(textView,params); + + TextView tmp = new TextView(getContext()); + tmp.setLayoutParams(params); + tmp.setText(" | "); + tmp.setGravity(Gravity.CENTER); + tmp.setTextColor(Color.WHITE); + rootView.addView(tmp,params); + } + rootView.removeViewAt(rootView.getChildCount()-1); + } + + @Override + public void onClick(View v) { + if (onItemClickListener != null) { + onItemClickListener.onItemClick(((TextView) v).getText().toString(), (Integer) v.getTag()); + } + dismiss(); + } +} diff --git a/OneToOne/src/main/res/layout/dialog_msg_chat_click.xml b/OneToOne/src/main/res/layout/dialog_msg_chat_click.xml new file mode 100644 index 000000000..ae3529c54 --- /dev/null +++ b/OneToOne/src/main/res/layout/dialog_msg_chat_click.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/OneToOne/src/main/res/layout/rc_message_item.xml b/OneToOne/src/main/res/layout/rc_message_item.xml new file mode 100644 index 000000000..b3fa7937a --- /dev/null +++ b/OneToOne/src/main/res/layout/rc_message_item.xml @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OneToOne/src/main/res/mipmap-xxhdpi/bg_chat_click.9.png b/OneToOne/src/main/res/mipmap-xxhdpi/bg_chat_click.9.png new file mode 100644 index 0000000000000000000000000000000000000000..530a61609d2f42b086949857c8cb9abb80c8e0f9 GIT binary patch literal 3140 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 b&tEPXgW}&Lw{E$k?|=(oVr5(fcZ>ZWB47Yi literal 0 HcmV?d00001