This commit is contained in:
Martin
2024-07-26 18:38:53 +08:00
parent 5d0f29db42
commit d167ae82b4
48 changed files with 1506 additions and 340 deletions

View File

@@ -39,6 +39,7 @@ import io.rong.imkit.widget.adapter.ViewHolder;
import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Conversation;
import io.rong.imlib.model.Message;
import io.rong.message.SightMessage;
import io.rong.message.TextMessage;
public class MainConversationListAdapter extends ConversationListAdapter {
@@ -55,6 +56,11 @@ public class MainConversationListAdapter extends ConversationListAdapter {
this.mContext = mContext;
}
public void setSrcList(List<BaseUiConversation> srcList) {
this.srcList = srcList;
notifyDataSetChanged();
}
public void setOnRefreshListener(OnRecyclerListRefreshListener<List<BaseUiConversation>> onRefreshListener) {
this.onRefreshListener = onRefreshListener;
}
@@ -134,6 +140,13 @@ public class MainConversationListAdapter extends ConversationListAdapter {
} else if (holder.getView(R.id.rc_conversation_date) != null) {
holder.getView(R.id.rc_conversation_date).setVisibility(View.GONE);
}
if("0".equals(conversation.mCore.getDraft())){
holder.setImageDrawable(R.id.rc_conversation_live_online_icon,mContext.getResources().getDrawable(R.mipmap.msg_online));
holder.setText(R.id.rc_conversation_live_online,WordUtil.isNewZh()?"在線":"Online");
}else{
holder.setImageDrawable(R.id.rc_conversation_live_online_icon,mContext.getResources().getDrawable(R.mipmap.msg_off));
holder.setText(R.id.rc_conversation_live_online,WordUtil.isNewZh()?"離線":"Offline");
}
if (holder.getView(R.id.rc_conversation_live_status) == null || IMLoginManager.get(holder.getContext()).getAnchorB() != 1) {
return;
}
@@ -322,7 +335,12 @@ public class MainConversationListAdapter extends ConversationListAdapter {
BaseUiConversation conversation = mDataList.get(id);
conversation.mCore.setSentTime(bean.getSentTime());
conversation.mCore.setUnreadMessageCount(integer);
conversation.mConversationContent = new SpannableString(((TextMessage) bean.getContent()).getContent());
if(bean.getContent() instanceof SightMessage){
conversation.mConversationContent = new SpannableString(WordUtil.isNewZh()?"[小視頻]":"[Video]");
}else{
conversation.mConversationContent = new SpannableString(((TextMessage) bean.getContent()).getContent());
}
mDataList.set(id, conversation);
notifyItemChanged(id);
}

View File

@@ -0,0 +1,101 @@
package com.yunbao.common.adapter;
import static com.yunbao.common.utils.StringUtil.isEmpty;
import android.annotation.SuppressLint;
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.yunbao.common.R;
import com.yunbao.common.bean.MessageChatUserBean;
import com.yunbao.common.bean.MsgRecommendBean;
import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.common.views.weight.ClipPathCircleImage;
import java.util.ArrayList;
import java.util.List;
/**
* Created by cxf on 2019/4/22.
*/
public class MsgRecommendAdapter extends RecyclerView.Adapter<MsgRecommendAdapter.Vh> {
private Context mContext;
private List<MsgRecommendBean> mList;
private LayoutInflater mInflater;
public MsgRecommendAdapter.onItemSayHi onItemSayHi;
public void setOnItemSayHi(onItemSayHi onItemSayHi) {
this.onItemSayHi = onItemSayHi;
}
public MsgRecommendAdapter(Context context, List<MsgRecommendBean> list) {
mContext = context;
mInflater = LayoutInflater.from(context);
mList = list;
}
public void setDataCollection(List<MsgRecommendBean> data) {
if (data == null) {
data = new ArrayList();
}
this.mList = data;
this.notifyDataSetChanged();
}
@NonNull
@Override
public Vh onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new Vh(mInflater.inflate(R.layout.msg_main_recommend_item, parent, false));
}
@Override
public void onBindViewHolder(@NonNull Vh holder, @SuppressLint("RecyclerView") int position) {
if (isEmpty() || mList.isEmpty()) {
return;
}
ImgLoader.display(holder.itemView.getContext(), mList.get(position).getAvatar(), holder.mAvatar);
holder.rc_conversation_title.setText(mList.get(position).getUser_nicename());
holder.sayHi.setText(mList.get(position).isSayHi()? (WordUtil.isNewZh()?"已打招呼":"Said Hallo"):(WordUtil.isNewZh()?"打招呼":"Greet"));
holder.sayHi.setBackground(mList.get(position).isSayHi()? mContext.getDrawable(R.drawable.bg_msg_recommended):mContext.getDrawable(R.drawable.bg_msg_recommend));
holder.sayHi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(onItemSayHi!=null){
onItemSayHi.onSayHi(mList.get(position),position);
}
}
});
}
@Override
public int getItemCount() {
return mList.size();
}
class Vh extends RecyclerView.ViewHolder {
private ClipPathCircleImage mAvatar;
private TextView rc_conversation_title;
private TextView sayHi;
public Vh(@NonNull View itemView) {
super(itemView);
mAvatar = itemView.findViewById(R.id.avatar);
rc_conversation_title = itemView.findViewById(R.id.rc_conversation_title);
sayHi = itemView.findViewById(R.id.sayHi);
}
}
public interface onItemSayHi{
void onSayHi(MsgRecommendBean model,int position);
}
}

View File

@@ -54,6 +54,16 @@ public class HomeUserInfoBean extends BaseModel {
private String rong_online;
private String type;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getRong_online() {
return rong_online;
}

View File

@@ -0,0 +1,24 @@
package com.yunbao.common.bean;
/**
* 消息列表用户在线状态
*/
public class MsgOnlineStatusBean {
private String id;
private String online;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getOnline() {
return online;
}
public void setOnline(String online) {
this.online = online;
}
}

View File

@@ -0,0 +1,70 @@
package com.yunbao.common.bean;
/**
* 消息-推荐消息
*/
public class MsgRecommendBean {
private String id;
private String avatar;
private String user_login;
private String user_nicename;
private String langue;
private String online;
private boolean sayHi = false;
public boolean isSayHi() {
return sayHi;
}
public void setSayHi(boolean sayHi) {
this.sayHi = sayHi;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
public String getUser_login() {
return user_login;
}
public void setUser_login(String user_login) {
this.user_login = user_login;
}
public String getUser_nicename() {
return user_nicename;
}
public void setUser_nicename(String user_nicename) {
this.user_nicename = user_nicename;
}
public String getLangue() {
return langue;
}
public void setLangue(String langue) {
this.langue = langue;
}
public String getOnline() {
return online;
}
public void setOnline(String online) {
this.online = online;
}
}

View File

@@ -0,0 +1,6 @@
package com.yunbao.common.event;
public class LiveMsgWindowsCloseEvent {
public LiveMsgWindowsCloseEvent() {
}
}

View File

@@ -0,0 +1,33 @@
package com.yunbao.common.event;
import com.yunbao.common.bean.BaseModel;
/**
* 未读消息整合
*/
public class MessageIMLiveEvent extends BaseModel {
private int number = 0;
private int message = 0;
public int getMessage() {
return message;
}
public MessageIMLiveEvent setMessage(int message) {
this.message = message;
return this;
}
public MessageIMLiveEvent(int number) {
this.number = number;
}
public int getNumber() {
return number;
}
public MessageIMLiveEvent setNumber(int number) {
this.number = number;
return this;
}
}

View File

@@ -1,33 +1,51 @@
package com.yunbao.common.fragment;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.alibaba.fastjson.JSON;
import com.yunbao.common.bean.IMLoginModel;
import com.yunbao.common.bean.MainMessageChatListTimer;
import com.yunbao.common.bean.MessageChatUserBean;
import com.yunbao.common.bean.MsgOnlineStatusBean;
import com.yunbao.common.http.CommonHttpUtil;
import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.interfaces.OnRecyclerListRefreshListener;
import com.yunbao.common.adapter.MainConversationListAdapter;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.manager.InstructorRemarkManager;
import com.yunbao.common.utils.StringUtil;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import io.rong.imkit.conversationlist.model.BaseUiConversation;
import io.rong.imkit.conversationlist.model.SingleConversation;
import io.rong.imkit.userinfo.RongUserInfoManager;
import io.rong.imkit.widget.refresh.SmartRefreshLayout;
import io.rong.imlib.model.Conversation;
import io.rong.imlib.model.Message;
import io.rong.imlib.model.UserInfo;
public abstract class AbsMainMessageChatListFragment extends Fragment {
private static final String TAG = "全部聊天";
public RecyclerView recyclerView;
public MainConversationListAdapter mAdapter;
public SmartRefreshLayout refreshLayout;
@@ -118,6 +136,45 @@ public abstract class AbsMainMessageChatListFragment extends Fragment {
});
}
public void loadLiveOnlineStatus(List<BaseUiConversation> srcList, OnRecyclerListRefreshListener<List<BaseUiConversation>> onRefreshListener){
List<String> uids = new ArrayList<>();
isNet = true;
for (BaseUiConversation conversation : srcList) {
map.put(conversation.mCore.getTargetId(), conversation);
if (conversation.mCore.getConversationType() == Conversation.ConversationType.PRIVATE) {
uids.add(conversation.mCore.getTargetId());
}
}
CommonHttpUtil.getUserOnline(String.join(",", uids), new com.yunbao.common.http.HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if(code==0&&info!=null){
List<MsgOnlineStatusBean> listUserBean = JSON.parseArray(Arrays.toString(info), MsgOnlineStatusBean.class);
for (int i = 0; i <srcList.size(); i++) {
srcList.get(i).mCore.setDraft(listUserBean.get(i).getOnline());
}
onRefreshListener.onFinish(srcList);
isNet = false;
}
}
});
}
public static String toStringWithComma(String[] array) {
if (array == null || array.length == 0) {
return "";
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < array.length; i++) {
sb.append(array[i]);
if (i < array.length - 1) {
sb.append(",");
}
}
return sb.toString();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void sendMessage(io.rong.imlib.model.Message bean) {
int id1 = mAdapter.getMessageId(bean.getSenderUserId());

View File

@@ -10,11 +10,8 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import com.google.gson.Gson;
import com.yunbao.common.R;
import com.yunbao.common.adapter.MainConversationListAdapter;
import com.yunbao.common.utils.DpUtil;
import com.yunbao.common.utils.L;
import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
@@ -119,7 +116,6 @@ public class MainMessageChatFragment extends ConversationListFragment {
}
list.addAll(data);
getChatRecordList(list, search);
L.eSw(new Gson().toJson(list));
}
private void getChatRecordList(List<BaseUiConversation> list, String search) {

View File

@@ -1,27 +1,44 @@
package com.yunbao.common.fragment;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.yunbao.common.R;
import com.yunbao.common.bean.MessageChatUserBean;
import com.yunbao.common.event.MessageIMLiveEvent;
import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.interfaces.OnRecyclerListRefreshListener;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.manager.InstructorRemarkManager;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.utils.L;
import com.yunbao.common.utils.StringUtil;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import io.rong.imkit.conversationlist.model.BaseUiConversation;
import io.rong.imkit.conversationlist.model.SingleConversation;
import io.rong.imkit.userinfo.RongUserInfoManager;
import io.rong.imkit.widget.refresh.api.RefreshLayout;
import io.rong.imkit.widget.refresh.listener.OnLoadMoreListener;
import io.rong.imkit.widget.refresh.listener.OnRefreshListener;
import io.rong.imlib.model.Conversation;
import io.rong.imlib.model.Message;
import io.rong.imlib.model.UserInfo;
public class MainMessageChatListFragment extends AbsMainMessageChatListFragment {
private static final String TAG = "MainMessageChatListFragment";
@@ -33,20 +50,20 @@ public class MainMessageChatListFragment extends AbsMainMessageChatListFragment
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
L.eSw("111111");
return inflater.inflate(R.layout.fragment_main_message_chat_list, container, false);
}
MainMessageChatFragment conversationListFragment;
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Log.i(TAG, "onViewCreated: 准备创建融云");
public void onResume() {
super.onResume();
conversationListFragment = new MainMessageChatFragment();
setAdapter(conversationListFragment.getAdapter());
FragmentManager manager = ((FragmentActivity) mContext).getSupportFragmentManager();
FragmentManager manager = getChildFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(view.findViewById(R.id.container).getId(), conversationListFragment);
transaction.replace(R.id.container, conversationListFragment);
transaction.commitAllowingStateLoss();
//自定义空数据背景View
//conversationListFragment.setEmptyView(emptyView);
@@ -60,10 +77,95 @@ public class MainMessageChatListFragment extends AbsMainMessageChatListFragment
public void onFinish(Map<String, Integer> stringIntegerMap) {
conversationListFragment.getAdapter().setTimerMap(stringIntegerMap);
updateList();
loadLiveOnlineStatus(baseUiConversations, new OnRecyclerListRefreshListener<List<BaseUiConversation>>() {
@Override
public void onFinish(List<BaseUiConversation> baseUiConversations) {
conversationListFragment.getAdapter().setSrcList(baseUiConversations);
}
});
int count=0;
for (int i = 0; i <baseUiConversations.size(); i++) {
count = count+ baseUiConversations.get(i).getUnreadMessageCount();
}
Bus.get().post(new MessageIMLiveEvent(baseUiConversations.size()));
}
});
List<String> uids = new ArrayList<>();
for (BaseUiConversation conversation : baseUiConversations) {
map.put(conversation.mCore.getTargetId(), conversation);
if (conversation.mCore.getConversationType() == Conversation.ConversationType.PRIVATE) {
uids.add(conversation.mCore.getTargetId());
}
}
getUserInfo(uids);
}
});
}
private void getUserInfo(List<String> uidList) {
String uids = String.join(",", uidList);
LiveNetManager.get(getContext())
.getOtherList(uids, new HttpCallback<List<MessageChatUserBean>>() {
@Override
public void onSuccess(List<MessageChatUserBean> data) {
List<BaseUiConversation> list = new ArrayList<>();
for (MessageChatUserBean datum : data) {
Conversation conversation = new Conversation();
BaseUiConversation baseUiConversation = new SingleConversation(getContext(), conversation);
baseUiConversation.mCore.setTargetId(datum.getId());
baseUiConversation.mCore.setSenderUserId(IMLoginManager.get(getContext()).getUserInfo().getId() + "");
baseUiConversation.mCore.setSentStatus(Message.SentStatus.CANCELED);
baseUiConversation.mCore.setSentTime(-1);
baseUiConversation.mCore.setConversationType(Conversation.ConversationType.PRIVATE);
baseUiConversation.mCore.setPortraitUrl(datum.getAvatar());
String remark = InstructorRemarkManager.get(getContext()).getInstructorRemark().get(datum.getId());
baseUiConversation.mCore.setConversationTitle(StringUtil.isEmpty(remark) ? datum.getUserNiceName() : remark);
list.add(baseUiConversation);
UserInfo userInfo = new UserInfo(baseUiConversation.mCore.getTargetId(),
baseUiConversation.mCore.getConversationTitle(),
Uri.parse(baseUiConversation.mCore.getPortraitUrl()));
RongUserInfoManager.getInstance().refreshUserInfoCache(userInfo);
}
if (!list.isEmpty()) {
List<BaseUiConversation> srcList = new ArrayList<>(mAdapter.getSrcList());
srcList.addAll(list);
Log.i(TAG, "onSuccess: 增加用户数:" + list.size() + "||总用户数:" + srcList.size());
for (BaseUiConversation conversation : srcList) {
Log.i(TAG, "onSuccess: 用户id:" + conversation.mCore.getTargetId() + "||用户名:" + conversation.mCore.getConversationTitle() + "||用户头像:" + conversation.mCore.getPortraitUrl());
}
int position = 0;
try {
position = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition();
} catch (Exception e) {
}
mAdapter.setDataCollection(srcList);
//mAdapter.onFinish();
recyclerView.scrollToPosition(position);
}
onRefreshFinished();
onLoadMoreFinished();
}
@Override
public void onError(String error) {
onLoadMoreFinished();
onRefreshFinished();
}
});
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
L.eSw("222222");
Log.i(TAG, "onViewCreated: 准备创建融云");
}

View File

@@ -1,51 +1,131 @@
package com.yunbao.common.fragment;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.gson.Gson;
import com.alibaba.fastjson.JSON;
import com.yunbao.common.R;
import com.yunbao.common.adapter.MainConversationListAdapter;
import com.yunbao.common.utils.L;
import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.adapter.MsgRecommendAdapter;
import com.yunbao.common.bean.MsgRecommendBean;
import com.yunbao.common.http.CommonHttpUtil;
import com.yunbao.common.http.HttpCallback;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import io.rong.imkit.conversationlist.ConversationListAdapter;
import io.rong.imkit.conversationlist.ConversationListFragment;
import io.rong.imkit.conversationlist.model.BaseUiConversation;
import io.rong.imkit.conversationlist.model.SingleConversation;
import io.rong.imkit.event.Event;
import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Conversation;
import io.rong.imlib.model.SearchConversationResult;
import io.rong.imkit.widget.refresh.SmartRefreshLayout;
import io.rong.imkit.widget.refresh.api.RefreshLayout;
import io.rong.imkit.widget.refresh.listener.OnLoadMoreListener;
import io.rong.imkit.widget.refresh.listener.OnRefreshListener;
import io.rong.imkit.widget.refresh.wrapper.RongRefreshHeader;
public class MainMessageRecommendFragment extends ConversationListFragment {
public class MainMessageRecommendFragment extends AbsMainMessageChatListFragment {
SmartRefreshLayout mRefreshLayout;
RecyclerView mList;
Context mContext;
MsgRecommendAdapter adapter;
List<MsgRecommendBean> list = new ArrayList<>();
@Nullable
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.msg_main_recommend_list_fragment, container, false);
}
public MainMessageRecommendFragment(Context context) {
this.mContext = context;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initView(view);
initRefreshView();
initData();
}
private void initView(View view) {
mRefreshLayout = view.findViewById(R.id.rc_refresh);
mList = view.findViewById(R.id.rc_conversation_list);
LinearLayoutManager layoutManager = new LinearLayoutManager(this.getActivity());
mList.setLayoutManager(layoutManager);
mList.setItemViewCacheSize(0);
}
protected void initRefreshView() {
mRefreshLayout.setNestedScrollingEnabled(false);
mRefreshLayout.setRefreshHeader(new RongRefreshHeader(getContext()));
mRefreshLayout.setRefreshFooter(new RongRefreshHeader(getContext()));
mRefreshLayout.setEnableLoadMore(false);
mRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
initData();
}
});
mRefreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
}
});
adapter = new MsgRecommendAdapter(mContext,list);
mList.setAdapter(adapter);
adapter.setOnItemSayHi(new MsgRecommendAdapter.onItemSayHi() {
@Override
public void onSayHi(MsgRecommendBean model,int position) {
if (model.isSayHi()) {
return;
}
CommonHttpUtil.sayHi(model.getId(), new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if (code == 0) {
list.get(position).setSayHi(true);
adapter.notifyItemChanged(position);
}
ToastUtil.show(msg);
}
});
}
});
}
private void initData() {
CommonHttpUtil.getMainMsgRecommend(new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if (code == 0 && info != null) {
list = JSON.parseArray(Arrays.toString(info), MsgRecommendBean.class);
adapter.setDataCollection(list);
mRefreshLayout.finishRefresh(true);
} else {
ToastUtil.show(msg);
}
}
});
}
@Override
public void onChatList() {
}
@Override
public void search(String string) {
}
@Override
public void updateList() {
}
}

View File

@@ -685,6 +685,39 @@ public class CommonHttpUtil {
.params("dynamic_id", dynamic_id)
.execute(callback);
}
/**
* 获取打招呼推荐列表
*/
public static void getMainMsgRecommend(HttpCallback callback) {
HttpClient.getInstance().get("Pdluser.getRecommendUser", "Pdluser.getRecommendUser")
.execute(callback);
}
/**
* 打招呼
* @param toUid
* @param callback
*/
public static void sayHi(String toUid,HttpCallback callback) {
HttpClient.getInstance().get("Pdluser.liveCall", "Pdluser.liveCall")
.params("target_uid",toUid)
.params("behavior_type","5")
.execute(callback);
}
/**
*获取聊天列表用户在线状态
* @param toUid
* @param callback
*/
public static void getUserOnline(String toUid,HttpCallback callback) {
HttpClient.getInstance().get("Pdluser.getUserOnline", "Pdluser.getUserOnline")
.params("uids",toUid)
.execute(callback);
}
}

View File

@@ -0,0 +1,49 @@
package com.yunbao.common.views;
import android.content.Context;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.exoplayer2.C;
import com.makeramen.roundedimageview.RoundedImageView;
import com.yunbao.common.R;
import com.yunbao.common.bean.MsgRecommendBean;
import com.yunbao.common.bean.playerObject;
import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.common.views.weight.ClipPathCircleImage;
public class MsgCommemdViewHolder extends RecyclerView.ViewHolder {
private ClipPathCircleImage mAvatar;
private TextView rc_conversation_title;
private TextView sayHi;
public MsgCommemdViewHolder(@NonNull View itemView) {
super(itemView);
mAvatar = itemView.findViewById(R.id.avatar);
rc_conversation_title = itemView.findViewById(R.id.rc_conversation_title);
sayHi = itemView.findViewById(R.id.sayHi);
}
public void setData(MsgRecommendBean model, Context mContext,onItemSayHi onItemSayHi) {
ImgLoader.display(itemView.getContext(), model.getAvatar(), mAvatar);
rc_conversation_title.setText(model.getUser_nicename());
sayHi.setText(model.isSayHi()? (WordUtil.isNewZh()?"已打招呼":"Said Hallo"):(WordUtil.isNewZh()?"打招呼":"Greet"));
sayHi.setBackground(model.isSayHi()? mContext.getDrawable(R.drawable.bg_msg_recommended):mContext.getDrawable(R.drawable.bg_msg_recommend));
sayHi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(onItemSayHi!=null){
onItemSayHi.onSayHi(model);
}
}
});
}
public interface onItemSayHi{
void onSayHi(MsgRecommendBean model);
}
}

View File

@@ -0,0 +1,40 @@
package com.yunbao.common.views;
import android.content.Context;
import androidx.annotation.NonNull;
import com.lxj.xpopup.core.AttachPopupView;
import com.yunbao.common.R;
import com.yunbao.common.views.weight.ViewClicksAntiShake;
public class MsgRecommendPopupView extends AttachPopupView {
ItemDelListener itemDelListener;
public MsgRecommendPopupView(@NonNull Context context, ItemDelListener itemDelListener) {
super(context);
this.itemDelListener = itemDelListener;
}
@Override
protected int getImplLayoutId() {
return R.layout.view_msg_recommend;
}
@Override
protected void onCreate() {
//特效设置
ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.close), new ViewClicksAntiShake.ViewClicksCallBack() {
@Override
public void onViewClicks() {
dismiss();
itemDelListener.onItemDel();
}
});
}
public interface ItemDelListener {
void onItemDel();
}
}

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white" />
<stroke
android:width="1.2dp"
android:color="#EB6FFF" />
<corners android:radius="21dp" />
</shape>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners
android:topLeftRadius="15dp"
android:topRightRadius="15dp"
android:bottomLeftRadius="15dp"
android:bottomRightRadius="15dp" />
<gradient
android:endColor="#FF83C6"
android:startColor="#EB6FFF" />
</shape>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners
android:topLeftRadius="15dp"
android:topRightRadius="15dp"
android:bottomLeftRadius="15dp"
android:bottomRightRadius="15dp" />
<gradient
android:endColor="#D8D8D8"
android:startColor="#D8D8D8" />
</shape>

View File

@@ -213,30 +213,62 @@
</LinearLayout>
<LinearLayout
android:id="@+id/followLayout"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:background="@drawable/bg_main_com_type"
android:gravity="center"
android:orientation="horizontal"
android:paddingStart="10dp"
android:paddingEnd="10dp">
android:orientation="vertical"
android:gravity="center_horizontal"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/followIcon"
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@mipmap/icon_like_follow" />
<TextView
android:id="@+id/followName"
<LinearLayout
android:id="@+id/followLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="@string/focus_on"
android:textColor="@color/white"
android:textSize="14dp"
android:textStyle="bold" />
android:layout_height="35dp"
android:minWidth="90dp"
android:background="@drawable/bg_main_com_type"
android:gravity="center"
android:paddingStart="10dp"
android:paddingEnd="10dp">
<ImageView
android:id="@+id/followIcon"
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@mipmap/icon_like_follow" />
<TextView
android:id="@+id/followName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="@string/focus_on"
android:textColor="@color/white"
android:textSize="14dp"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:id="@+id/msgLayout"
android:layout_marginTop="5dp"
android:layout_width="wrap_content"
android:minWidth="90dp"
android:layout_height="35dp"
android:background="@drawable/backgroud_user_home_msg"
android:gravity="center"
android:paddingStart="10dp"
android:paddingEnd="10dp">
<com.flyjingfish.gradienttextviewlib.GradientTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/im_pri_chat"
android:textStyle="bold"
android:textSize="14dp"
app:gradient_angle="45"
android:layout_marginLeft="5dp"
app:gradient_endColor="#FF83C6"
app:gradient_startColor="#EB6FFF" />
</LinearLayout>
</LinearLayout>

View File

@@ -529,11 +529,32 @@
android:textColor="#FF9A9A9A"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/live_tool_qa"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="23dp"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@mipmap/icon_live_qa" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="@string/dialog_live_function_qa"
android:textColor="#FF9A9A9A"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/live_tool_call_me"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible"
android:layout_marginStart="23dp"
android:gravity="center"
android:orientation="vertical">
@@ -566,26 +587,7 @@
android:layout_marginStart="16dp"
android:layout_marginBottom="20dp">
<LinearLayout
android:id="@+id/live_tool_qa"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@mipmap/icon_live_qa" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="@string/dialog_live_function_qa"
android:textColor="#FF9A9A9A"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout>
</HorizontalScrollView>
</LinearLayout>

View File

@@ -16,36 +16,12 @@
>
<com.yunbao.common.views.weight.ClipPathCircleImage
android:id="@+id/rc_conversation_portrait"
android:id="@+id/avatar"
android:layout_width="54dp"
android:layout_height="54dp"
android:scaleType="centerCrop"
android:src="@mipmap/beauty_jingbai" />
<RelativeLayout
android:id="@+id/rc_conversation_unread"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true">
<ImageView
android:id="@+id/rc_conversation_unread_bg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/rc_unread_count_bg_normal" />
<TextView
android:id="@+id/rc_conversation_unread_count"
style="@style/TextStyle.Alignment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="15"
android:textColor="@color/rc_white_color"
android:textSize="@dimen/rc_font_auxiliary_size" />
</RelativeLayout>
</RelativeLayout>
<LinearLayout
@@ -57,7 +33,8 @@
<TextView
android:id="@+id/rc_conversation_title"
style="@style/TextStyle.Alignment"
android:layout_width="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxWidth="120dp"
@@ -65,25 +42,21 @@
android:maxLines="1"
android:textColor="@color/rc_text_main_color"
android:textSize="@dimen/rc_font_secondary_size"
tools:text="张三11111111111111111111111" />
tools:text="" />
<TextView
android:id="@+id/rc_conversation_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="25dp"
android:singleLine="true"
android:textSize="8sp"
android:visibility="visible"
tools:text="在线" />
<ImageView
android:id="@+id/rc_conversation_status_icon"
android:layout_width="5dp"
android:layout_height="5dp"
android:src="@color/green_81c160"
android:layout_marginTop="25dp"
android:visibility="visible" />
android:id="@+id/sayHi"
android:layout_width="51dp"
android:layout_height="26dp"
android:ellipsize="end"
android:background="@drawable/bg_msg_recommend"
android:maxWidth="120dp"
android:gravity="center"
android:layout_gravity="center_vertical"
android:maxLines="1"
android:textColor="@color/white"
android:textSize="11dp"
tools:text="打招呼" />
</LinearLayout>

View File

@@ -2,7 +2,6 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:gravity="bottom"
android:layout_height="match_parent"
android:orientation="vertical">
@@ -11,7 +10,7 @@
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rc_conversation_list"

View File

@@ -57,6 +57,7 @@
android:id="@+id/rc_conversation_title_layout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginStart="@dimen/rc_margin_size_12"
android:orientation="horizontal"
app:autoTextEllipsize="@+id/rc_conversation_title"
@@ -74,14 +75,40 @@
android:maxWidth="120dp"
android:maxLines="1"
android:textColor="@color/rc_text_main_color"
android:textSize="@dimen/rc_font_secondary_size"
app:layout_constrainedWidth="true"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toEndOf="@+id/rc_conversation_portrait_rl"
app:layout_constraintTop_toTopOf="parent"
android:textSize="13dp"
tools:text="张三11111111111111111111111" />
<LinearLayout
android:layout_marginTop="14dp"
android:layout_marginEnd="@dimen/rc_margin_size_12"
android:layout_width="wrap_content"
android:layout_height="match_parent">
<TextView
android:id="@+id/rc_conversation_live_online"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:textColor="#AAAAAA"
android:layout_marginStart="10dp"
android:layout_marginTop="5dp"
android:textSize="8sp"
android:text="在线"
android:visibility="visible" />
<ImageView
android:layout_marginLeft="-3dp"
android:id="@+id/rc_conversation_live_online_icon"
android:layout_width="10dp"
android:layout_height="10dp"
android:textColor="#EC70FD"
android:layout_marginTop="3dp"
android:textSize="18sp"
android:scaleType="centerCrop"
android:src="@mipmap/msg_online"
android:visibility="visible" />
</LinearLayout>
<TextView
android:id="@+id/rc_conversation_live_status"
android:layout_width="wrap_content"
@@ -97,25 +124,9 @@
android:textColor="#EC70FD"
android:textSize="10sp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/rc_conversation_title"
app:layout_constraintStart_toEndOf="@+id/rc_conversation_title"
app:layout_constraintTop_toTopOf="parent"
tools:text="看直播10min"
tools:visibility="visible" />
<TextView
android:id="@+id/rc_conversation_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/rc_margin_size_12"
android:layout_marginTop="@dimen/rc_margin_size_16"
android:singleLine="true"
android:textSize="8sp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/rc_conversation_title"
app:layout_constraintStart_toEndOf="@+id/rc_conversation_live_status"
app:layout_constraintTop_toTopOf="parent"
tools:text="在线" />
</LinearLayout>
@@ -131,7 +142,7 @@
android:maxLines="1"
android:text="你好朋友11111111111111111111111111111111111111111"
android:textColor="@color/rc_secondary_color"
android:textSize="@dimen/rc_font_text_third_size"
android:textSize="13dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@+id/rc_conversation_portrait_rl"

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:background="@color/transparent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/close"
android:src="@mipmap/recommed_msg_bg"
android:layout_width="wrap_content"
android:scaleType="fitStart"
android:layout_height="wrap_content" />
</FrameLayout>

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB