diff --git a/common/src/main/java/com/yunbao/common/dialog/MessageLongClickPopuwindow.java b/common/src/main/java/com/yunbao/common/dialog/MessageLongClickPopuwindow.java index 1361f1b6c..13815eca6 100644 --- a/common/src/main/java/com/yunbao/common/dialog/MessageLongClickPopuwindow.java +++ b/common/src/main/java/com/yunbao/common/dialog/MessageLongClickPopuwindow.java @@ -1,7 +1,10 @@ package com.yunbao.common.dialog; import android.app.Activity; +import android.content.ClipData; +import android.content.ClipboardManager; import android.graphics.drawable.BitmapDrawable; +import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; @@ -10,8 +13,18 @@ import android.widget.LinearLayout; import android.widget.PopupWindow; import com.yunbao.common.R; +import com.yunbao.common.bean.IMLoginModel; +import com.yunbao.common.manager.IMLoginManager; +import com.yunbao.common.utils.ToastUtil; +import io.rong.imkit.IMCenter; +import io.rong.imlib.RongIMClient; import io.rong.imlib.model.Message; +import io.rong.message.RecallNotificationMessage; +import io.rong.message.TextMessage; + +import static android.content.Context.CLIPBOARD_SERVICE; +import static com.yunbao.common.utils.WordUtil.getString; /** * 消息長按彈窗 @@ -20,7 +33,7 @@ public class MessageLongClickPopuwindow implements View.OnClickListener { private Activity mContext; private View popupView; private PopupWindow popupWindow; - private LinearLayout copyLinear; + private LinearLayout copyLinear, withdrawLinear, quoteLinear; private Message message; public MessageLongClickPopuwindow(Activity context) { @@ -31,6 +44,24 @@ public class MessageLongClickPopuwindow implements View.OnClickListener { public MessageLongClickPopuwindow setMessage(Message message) { this.message = message; + long sentTime = message.getSentTime(); + Log.e("MessageLongClick ", "sentTime:" + sentTime); + Log.e("MessageLongClick ", "currentTimeMillis:" + System.currentTimeMillis()); + Log.e("MessageLongClick ", "秒:" + ((System.currentTimeMillis() - sentTime) / 1000)); + //超过俩分钟无法撤回 + if (((System.currentTimeMillis() - sentTime) / 1000) > 120) { + withdrawLinear.setVisibility(View.GONE); + } + //只可以撤回自己的消息 + IMLoginModel model = IMLoginManager.get(mContext).getUserInfo(); + if (!message.getSenderUserId().equals(String.valueOf(model.getId()))) { + withdrawLinear.setVisibility(View.GONE); + } + //非文字信息无法复制 + if (!message.getObjectName().equals("RC:TxtMsg")) { + copyLinear.setVisibility(View.GONE); + } + return this; } @@ -55,10 +86,13 @@ public class MessageLongClickPopuwindow implements View.OnClickListener { } private void initView() { - popupView.findViewById(R.id.copy_linear).setOnClickListener(this); - popupView.findViewById(R.id.withdraw_linear).setOnClickListener(this); - popupView.findViewById(R.id.quote_linear).setOnClickListener(this); - long sentTime = message.getSentTime(); + copyLinear = popupView.findViewById(R.id.copy_linear); + copyLinear.setOnClickListener(this); + withdrawLinear = popupView.findViewById(R.id.withdraw_linear); + withdrawLinear.setOnClickListener(this); + quoteLinear = popupView.findViewById(R.id.quote_linear); + quoteLinear.setOnClickListener(this); + } @Override @@ -66,11 +100,44 @@ public class MessageLongClickPopuwindow implements View.OnClickListener { int id = v.getId(); //复制 if (id == R.id.copy_linear) { - + copyMethod(); + popupWindow.dismiss(); } else if (id == R.id.withdraw_linear) {//撤回 - + withdrawMethod(); + popupWindow.dismiss(); } else if (id == R.id.quote_linear) {//引用 } } + + private void copyMethod() { + //文字消息支持复制 + if (message.getContent() instanceof TextMessage) { + String content = ((TextMessage) message.getContent()).getContent(); + ClipboardManager cm = (ClipboardManager) mContext.getSystemService(CLIPBOARD_SERVICE); + ClipData clipData = ClipData.newPlainText("text", content); + cm.setPrimaryClip(clipData); + ToastUtil.show(getString(R.string.copy_success)); + + } + } + + /** + * 撤回消息 + */ + private void withdrawMethod() { + IMCenter.getInstance().recallMessage(message, "撤回成功", new RongIMClient.ResultCallback() { + @Override + public void onSuccess(RecallNotificationMessage recallNotificationMessage) { + ToastUtil.show(getString(R.string.withdraw_success)); + //删除草稿信息 + IMCenter.getInstance().clearTextMessageDraft(message.getConversationType(), message.getTargetId(), null); + } + + @Override + public void onError(RongIMClient.ErrorCode errorCode) { + ToastUtil.show(errorCode.msg); + } + }); + } } diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index f63211ec1..876821101 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -850,4 +850,5 @@ 聯系您的專屬指導員 給您匹配更多風格的主播唷! 趕快聯系他/她吧! + 撤回成功 diff --git a/live/src/main/java/com/yunbao/live/activity/PDLiveConversationActivity.java b/live/src/main/java/com/yunbao/live/activity/PDLiveConversationActivity.java index d450ed4c8..d73531594 100644 --- a/live/src/main/java/com/yunbao/live/activity/PDLiveConversationActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/PDLiveConversationActivity.java @@ -40,8 +40,13 @@ import org.greenrobot.eventbus.ThreadMode; import java.util.ArrayList; +import io.rong.imkit.IMCenter; +import io.rong.imkit.model.ResultCallback; import io.rong.imkit.userinfo.RongUserInfoManager; +import io.rong.imlib.RongIMClient; +import io.rong.imlib.model.Conversation; import io.rong.imlib.model.UserInfo; +import okhttp3.internal.http2.ErrorCode; /** * 聊天会话界面 @@ -109,7 +114,7 @@ public class PDLiveConversationActivity extends AbsActivity implements View.OnCl titleView.setText("系統消息"); inputPanel.setVisibility(View.GONE); } - + getDraft(); } @@ -183,6 +188,23 @@ public class PDLiveConversationActivity extends AbsActivity implements View.OnCl } } + /** + * 获取草稿箱信息系 + */ + private void getDraft() { + RongIMClient.getInstance().getTextMessageDraft(Conversation.ConversationType.PRIVATE, targetId, new RongIMClient.ResultCallback() { + @Override + public void onSuccess(String s) { + inputPanel.setPresetInformation(s); + } + + @Override + public void onError(RongIMClient.ErrorCode errorCode) { + + } + }); + } + @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); @@ -205,6 +227,12 @@ public class PDLiveConversationActivity extends AbsActivity implements View.OnCl @Override protected void onDestroy() { super.onDestroy(); + //获取输入框信息存进输入框 + String content = inputPanel.getPresetInformation(); + if (!TextUtils.isEmpty(content)){ + IMCenter.getInstance().saveTextMessageDraft(Conversation.ConversationType.PRIVATE, targetId, content, null); + } + EventBus.getDefault().unregister(this); } diff --git a/live/src/main/java/com/yunbao/live/views/InputPanelViewHolder.java b/live/src/main/java/com/yunbao/live/views/InputPanelViewHolder.java index 549146b62..6e9fd6c4a 100644 --- a/live/src/main/java/com/yunbao/live/views/InputPanelViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/InputPanelViewHolder.java @@ -54,6 +54,13 @@ public class InputPanelViewHolder extends LinearLayout implements View.OnClickLi return this; } + /** + * 获取输入框信息 + */ + public String getPresetInformation() { + return editBtn.getText().toString().trim(); + } + /** * 必传字段 * @@ -157,7 +164,7 @@ public class InputPanelViewHolder extends LinearLayout implements View.OnClickLi @Override public void onSuccess(Message message) { - + IMCenter.getInstance().clearTextMessageDraft(Conversation.ConversationType.PRIVATE, targetId, null); } @Override @@ -185,7 +192,6 @@ public class InputPanelViewHolder extends LinearLayout implements View.OnClickLi inputPanelSendBtn.setBackground(getResources().getDrawable(R.mipmap.btn_sand1)); } else { isSend = false; - IMCenter.getInstance().saveTextMessageDraft(types, targetId, editBtn.getText().toString(), null); inputPanelSendBtn.setBackground(getResources().getDrawable(R.mipmap.btn_sand)); } int offset;