This commit is contained in:
zlzw 2023-10-23 18:30:40 +08:00
parent be02488180
commit 307ec30807
28 changed files with 643 additions and 71 deletions

View File

@ -57,7 +57,7 @@ public class EndCallActivity extends AbsOTOActivity {
return;
}
ImgLoader.display(mContext, user.getUser().getAvatar(), avatar);
ImgLoader.displayBlur(mContext, user.getUser().getAvatar(), findViewById(R.id.bg), 45);
ImgLoader.displayBlur(mContext, user.getUser().getAvatar(), findViewById(R.id.bg), 85);
usernameView.setText(user.getUser().getUserNicename());
callTimerButton.setText(timer);
if (user.getUser().isFollow()) {

View File

@ -24,6 +24,7 @@ import com.shayu.onetoone.bean.MatchingItemSizeBean;
import com.shayu.onetoone.bean.OfficialNoticeBean;
import com.shayu.onetoone.dialog.FirstTipsDialog;
import com.shayu.onetoone.dialog.TipsDialog;
import com.shayu.onetoone.event.HomeBusEvent;
import com.shayu.onetoone.event.MessageMsgBusEvent;
import com.shayu.onetoone.listener.OnDialogClickListener;
import com.shayu.onetoone.manager.CallClientManager;
@ -118,11 +119,10 @@ public class MainActivity extends AbsOTOActivity {
@Override
public void onCountChanged(int count) {
showRedPoint(count);
Bus.get().post(new MessageMsgBusEvent(MessageMsgBusEvent.TYPE_UPDATE_SYSTEM));
}
});
CallClientManager.getManager();
//initFirstLoginTips();
initFirstLoginTips();
}
private void initFirstLoginTips() {
@ -141,6 +141,7 @@ public class MainActivity extends AbsOTOActivity {
} else {
isShow = false;
}
Bus.get().post(new HomeBusEvent(HomeBusEvent.TYPE_UPDATE_MATCHING, data.getNum()));
if (isShow) {
new FirstTipsDialog(mContext)
.setHome(isMan)
@ -171,8 +172,6 @@ public class MainActivity extends AbsOTOActivity {
protected void onResume() {
super.onResume();
checkUserInfoIsSet();
//测试
//RouteManager.forwardChooseActivity();
}
/**
@ -203,6 +202,7 @@ public class MainActivity extends AbsOTOActivity {
for (OfficialNoticeBean datum : data) {
point += datum.getNum();
}
Bus.get().post(new MessageMsgBusEvent(MessageMsgBusEvent.TYPE_UPDATE_SYSTEM,point + count));
//大于0则是通过会话未读监听器获取到的数则不用再调用获取未读数接口了
if (count >= 0) {
updateUnreadCount(point + count);

View File

@ -4,6 +4,7 @@ import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
@ -12,13 +13,24 @@ import com.shayu.onetoone.R;
import com.shayu.onetoone.activity.fragments.BaseFragment;
import com.shayu.onetoone.adapter.HomeRecommendListAdapter;
import com.shayu.onetoone.bean.HomeItemBean;
import com.shayu.onetoone.bean.MatchingItemSizeBean;
import com.shayu.onetoone.bean.SendConsumeBean;
import com.shayu.onetoone.dialog.FirstTipsDialog;
import com.shayu.onetoone.event.HomeBusEvent;
import com.shayu.onetoone.event.MessageMsgBusEvent;
import com.shayu.onetoone.listener.OnSendMessageListener;
import com.shayu.onetoone.manager.OTONetManager;
import com.shayu.onetoone.manager.RouteManager;
import com.shayu.onetoone.manager.SendMessageManager;
import com.yanzhenjie.recyclerview.SwipeRecyclerView;
import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.interfaces.OnItemClickListener;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.utils.ToastUtil;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.List;
@ -36,20 +48,28 @@ public class RecommendFragment extends BaseFragment {
private int page = 1;
private boolean isScreen;
Bundle screen;
View matching;
ImageView matching;
@Override
public void onDestroy() {
super.onDestroy();
Bus.getOff(this);
}
@Override
public void initView(View itemView) {
Bus.getOn(this);
recyclerView = itemView.findViewById(R.id.recyclerView);
mRefreshLayout = itemView.findViewById(R.id.swipeRefreshLayout);
top = itemView.findViewById(R.id.btn_top_list);
matching=itemView.findViewById(R.id.matching);
matching = itemView.findViewById(R.id.matching);
adapter = new HomeRecommendListAdapter(getContext());
recyclerView.setAdapter(adapter);
mRefreshLayout.setNestedScrollingEnabled(false);
mRefreshLayout.setRefreshHeader(new RongRefreshHeader(this.getContext()));
mRefreshLayout.setRefreshFooter(new RongRefreshHeader(this.getContext()));
recyclerView.setEmptyView(itemView.findViewById(R.id.view_empty));
recyclerView.setAutoLoadMore(true);
mRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
page = 1;
@ -62,7 +82,7 @@ public class RecommendFragment extends BaseFragment {
}
});
top.setOnClickListener(view -> {
recyclerView.scrollToPosition(0);
recyclerView.scrollToPosition(0);
});
matching.setOnClickListener(v -> {
SendMessageManager.matching(new OnSendMessageListener() {
@ -71,7 +91,7 @@ public class RecommendFragment extends BaseFragment {
super.onSuccess(token, bean);
Bundle bundle = new Bundle();
bundle.putString("data", JSONObject.toJSONString(bean));
RouteManager.forwardActivity(RouteManager.ACTIVITY_MATCHING,bundle);
RouteManager.forwardActivity(RouteManager.ACTIVITY_MATCHING, bundle);
}
@Override
@ -152,6 +172,7 @@ public class RecommendFragment extends BaseFragment {
if (page != 1 && data.isEmpty()) {
page--;
mRefreshLayout.finishLoadMore();
recyclerView.loadMoreFinish(true, false);
return;
}
if (page != 1) {
@ -173,4 +194,16 @@ public class RecommendFragment extends BaseFragment {
public View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_recommend, container, false);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void event(HomeBusEvent event) {
if (event.getType() == HomeBusEvent.TYPE_UPDATE_MATCHING) {
int num = event.getMatching();
if (num > 0) {
matching.setImageResource(R.mipmap.ic_matching_free);
} else {
matching.setImageResource(R.mipmap.ic_matching);
}
}
}
}

View File

@ -29,11 +29,13 @@ import com.shayu.onetoone.bean.GiftBean;
import com.shayu.onetoone.bean.MessageChatAuthContent;
import com.shayu.onetoone.bean.MessageChatTipsContent;
import com.shayu.onetoone.bean.MessageConsumeConfigBean;
import com.shayu.onetoone.bean.OfficialNoticeBean;
import com.shayu.onetoone.bean.SendConsumeBean;
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.event.MessageMsgBusEvent;
import com.shayu.onetoone.listener.OnDialogClickListener;
import com.shayu.onetoone.listener.OnSendMessageListener;
import com.shayu.onetoone.manager.CallClientManager;
@ -48,12 +50,15 @@ import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.interfaces.ImageResultCallback;
import com.yunbao.common.interfaces.OnItemClickListener;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.utils.Bus;
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 org.greenrobot.eventbus.Subscribe;
import java.io.File;
import java.lang.reflect.Field;
import java.util.Arrays;
@ -81,6 +86,7 @@ import io.rong.message.TextMessage;
public class ChatMessageFragment extends AbsConversationFragment {
Button mSendBtn;
View mInputPanel;
View numLayout;
EditText mEditText;
ImageView img, call, video, gift;
ProcessImageUtil cameraUtil;
@ -94,6 +100,7 @@ public class ChatMessageFragment extends AbsConversationFragment {
TextView home;
ImageView sex;
ImageView status;
TextView num;
Button follow;
@ -101,10 +108,20 @@ public class ChatMessageFragment extends AbsConversationFragment {
private static final String TAG = "聊天界面";
private MessageConsumeConfigBean configBean;
@Override
public void onDestroy() {
super.onDestroy();
Bus.getOff(this);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Bus.getOn(this);
targetId = getActivity().getIntent().getStringExtra("targetId");
num = findViewById(R.id.num);
numLayout = findViewById(R.id.constraintLayout2);
numLayout.setVisibility(View.INVISIBLE);
initBtn();
initChat();
initPriceBean();
@ -120,8 +137,8 @@ public class ChatMessageFragment extends AbsConversationFragment {
}
SendMessageManager.sendMessageForText(targetId, mEditText.getText().toString(), new OnSendMessageListener() {
@Override
public void onSuccess(String token,SendConsumeBean bean) {
super.onSuccess(token,bean);
public void onSuccess(String token, SendConsumeBean bean) {
super.onSuccess(token, bean);
ChatMessageFragment.this.token = token;
sendText();
@ -148,6 +165,7 @@ public class ChatMessageFragment extends AbsConversationFragment {
});
});
updateMyInfo();
showRedPoint();
}
@Override
@ -202,11 +220,11 @@ public class ChatMessageFragment extends AbsConversationFragment {
giftPanel.setOnItemClickListener(new OnItemClickListener<GiftBean>() {
@Override
public void onItemClick(GiftBean bean, int position) {
if(call.getTag()!=null){
call.setTag(null);
call.setImageResource(R.mipmap.ic_msg_call);
video.setImageResource(R.mipmap.ic_msg_video);
}
if (call.getTag() != null) {
call.setTag(null);
call.setImageResource(R.mipmap.ic_msg_call);
video.setImageResource(R.mipmap.ic_msg_video);
}
}
});
mVoiceToggleBtn.setOnClickListener(view -> {
@ -218,13 +236,13 @@ public class ChatMessageFragment extends AbsConversationFragment {
});
video.setOnClickListener(v -> {
if(call.getTag()!=null){
if (call.getTag() != null) {
return;
}
checkAuth(new OnSendMessageListener() {
@Override
public void onSuccess(String token, SendConsumeBean bean) {
super.onSuccess(token,bean);
super.onSuccess(token, bean);
new BottomListDialog(mContext).setSelect(new OnItemClickListener<String>() {
@Override
public void onItemClick(String bean, int position) {
@ -244,19 +262,18 @@ public class ChatMessageFragment extends AbsConversationFragment {
super.onError(status, msg);
new TipsDialog(mContext)
.setTitle("餘額不足")
.setContent("與TA視頻聊天每分鐘續消耗"+configBean.getVideoPrice()
+"鑽石,您可通過充值獲取更多鑽石,以便繼續聊天")
.setContent("與TA視頻聊天每分鐘續消耗" + configBean.getVideoPrice()
+ "鑽石,您可通過充值獲取更多鑽石,以便繼續聊天")
.setCancelText("離開")
.setApplyText("去充值")
.showDialog();
}
});
}
}).setStrings(Collections.singletonList("发起视频通话\n"+configBean.getVideoPrice()+"钻/分钟"))
}).setStrings(Collections.singletonList("发起视频通话\n" + configBean.getVideoPrice() + "钻/分钟"))
.showDialog();
}
@Override
@ -267,13 +284,13 @@ public class ChatMessageFragment extends AbsConversationFragment {
});
});
call.setOnClickListener(v -> {
if(call.getTag()!=null){
if (call.getTag() != null) {
return;
}
checkAuth(new OnSendMessageListener() {
@Override
public void onSuccess(String token,SendConsumeBean bean) {
super.onSuccess(token,bean);
public void onSuccess(String token, SendConsumeBean bean) {
super.onSuccess(token, bean);
new BottomListDialog(mContext).setSelect(new OnItemClickListener<String>() {
@Override
public void onItemClick(String bean, int position) {
@ -293,8 +310,8 @@ public class ChatMessageFragment extends AbsConversationFragment {
super.onError(status, msg);
new TipsDialog(mContext)
.setTitle("餘額不足")
.setContent("與TA语音聊天每分鐘續消耗"+configBean.getMp3Price()
+"鑽石,您可通過充值獲取更多鑽石,以便繼續聊天")
.setContent("與TA语音聊天每分鐘續消耗" + configBean.getMp3Price()
+ "鑽石,您可通過充值獲取更多鑽石,以便繼續聊天")
.setCancelText("離開")
.setApplyText("去充值")
.showDialog();
@ -302,7 +319,7 @@ public class ChatMessageFragment extends AbsConversationFragment {
});
}
}).setStrings(Collections.singletonList("发起语音通话\n"+configBean.getMp3Price()+"钻/分钟"))
}).setStrings(Collections.singletonList("发起语音通话\n" + configBean.getMp3Price() + "钻/分钟"))
.showDialog();
}
@ -323,8 +340,8 @@ public class ChatMessageFragment extends AbsConversationFragment {
SendMessageManager.sendMessageForText(targetId, "图片信息", new OnSendMessageListener() {
@Override
public void onSuccess(String token,SendConsumeBean bean) {
super.onSuccess(token,bean);
public void onSuccess(String token, SendConsumeBean bean) {
super.onSuccess(token, bean);
ChatMessageFragment.this.token = token;
if (isCamera) {
cameraUtil.getImageByCamera(false);
@ -364,7 +381,7 @@ public class ChatMessageFragment extends AbsConversationFragment {
if (data.getInfo().getName_auth() == 1) {
listener.onError(0, "");
} else {
listener.onSuccess("",null);
listener.onSuccess("", null);
}
}
@ -419,8 +436,8 @@ public class ChatMessageFragment extends AbsConversationFragment {
}
@Override
public void onSuccess(String token,SendConsumeBean bean) {
super.onSuccess(token,bean);
public void onSuccess(String token, SendConsumeBean bean) {
super.onSuccess(token, bean);
mEditText.setText("");
if (!SpUtil.getInstance().isExists("chat_msg_safe_tip_" + targetId)) {
SpUtil.getInstance().setBooleanValue("chat_msg_safe_tip_" + targetId, true);
@ -544,8 +561,8 @@ public class ChatMessageFragment extends AbsConversationFragment {
} else {
sex.setImageResource(R.mipmap.ic_message_tab_woman);
}
System.out.println("同性別:"+data.getUser().getSex()+"|"+IMLoginManager.get(mContext).getUserInfo().getSex());
if(data.getUser().getSex()== IMLoginManager.get(mContext).getUserInfo().getSex()){
System.out.println("同性別:" + data.getUser().getSex() + "|" + IMLoginManager.get(mContext).getUserInfo().getSex());
if (data.getUser().getSex() == IMLoginManager.get(mContext).getUserInfo().getSex()) {
call.setVisibility(View.GONE);
video.setVisibility(View.GONE);
}
@ -562,7 +579,7 @@ public class ChatMessageFragment extends AbsConversationFragment {
if (data.getUser().isFollow()) {
follow.setVisibility(View.GONE);
}
if(data.getGiftNum()==0){
if (data.getGiftNum() == 0) {
call.setImageResource(R.mipmap.ic_msg_call_lock);
video.setImageResource(R.mipmap.ic_msg_video_lock);
call.setTag("true");
@ -653,7 +670,7 @@ public class ChatMessageFragment extends AbsConversationFragment {
for (LocalMedia item : selectList) {
String mimeType = item.getMimeType();
if (mimeType.startsWith("image")) {
ImageMessage imageMessage=ImageMessage.obtain(Uri.parse(item.getPath()),sendOrigin);
ImageMessage imageMessage = ImageMessage.obtain(Uri.parse(item.getPath()), sendOrigin);
Message message = Message.obtain(targetId, conversationType, imageMessage);
message.setSenderUserId(CommonAppConfig.getInstance().getUid());
message.setObjectName("RC:ImgMsg");
@ -693,12 +710,13 @@ public class ChatMessageFragment extends AbsConversationFragment {
}
}
}
private void initPriceBean(){
private void initPriceBean() {
OTONetManager.getInstance(mContext)
.getMessageConsumeConfig(targetId, new HttpCallback<MessageConsumeConfigBean>() {
@Override
public void onSuccess(MessageConsumeConfigBean data) {
configBean=data;
configBean = data;
}
@Override
@ -707,4 +725,53 @@ public class ChatMessageFragment extends AbsConversationFragment {
}
});
}
private void showRedPoint() {
OTONetManager.getInstance(mContext).getMessageSystemLists(new HttpCallback<List<OfficialNoticeBean>>() {
int point = 0;
@Override
public void onSuccess(List<OfficialNoticeBean> data) {
for (OfficialNoticeBean datum : data) {
point += datum.getNum();
}
RongIMClient.getInstance().getTotalUnreadCount(new RongIMClient.ResultCallback<Integer>() {
@Override
public void onSuccess(Integer integer) {
Integer tmp = integer + point;
if (tmp <= 0) {
numLayout.setVisibility(View.INVISIBLE);
return;
}
numLayout.setVisibility(View.VISIBLE);
num.setText(tmp + "");
}
@Override
public void onError(RongIMClient.ErrorCode e) {
}
});
}
@Override
public void onError(String error) {
}
});
}
@Subscribe
public void event(MessageMsgBusEvent event) {
if (event.getType() == MessageMsgBusEvent.TYPE_UPDATE_SYSTEM) {
if (event.getNum() <= 0) {
numLayout.setVisibility(View.INVISIBLE);
return;
}
if (num.getVisibility() == View.GONE) {
numLayout.setVisibility(View.VISIBLE);
}
num.setText(event.getNum() + "");
}
}
}

View File

@ -1,25 +1,242 @@
package com.shayu.onetoone.activity.fragments.message;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.text.SpannableString;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.alibaba.fastjson.JSONObject;
import com.shayu.onetoone.R;
import com.shayu.onetoone.activity.fragments.BaseFragment;
import com.shayu.onetoone.adapter.MsgMessageRecyclerViewAdapter;
import com.shayu.onetoone.bean.HomeItemBean;
import com.shayu.onetoone.bean.OfficialNoticeBean;
import com.shayu.onetoone.event.MessageMsgBusEvent;
import com.shayu.onetoone.manager.OTONetManager;
import com.yanzhenjie.recyclerview.OnItemClickListener;
import com.yanzhenjie.recyclerview.OnItemMenuClickListener;
import com.yanzhenjie.recyclerview.OnItemMenuStateListener;
import com.yanzhenjie.recyclerview.SwipeMenuBridge;
import com.yanzhenjie.recyclerview.SwipeMenuCreator;
import com.yanzhenjie.recyclerview.SwipeMenuItem;
import com.yanzhenjie.recyclerview.SwipeRecyclerView;
import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.utils.DpUtil;
import com.yunbao.common.utils.StringUtil;
import org.greenrobot.eventbus.Subscribe;
import java.util.ArrayList;
import java.util.List;
import io.rong.common.RLog;
import io.rong.imkit.config.ConversationListBehaviorListener;
import io.rong.imkit.config.RongConfigCenter;
import io.rong.imkit.conversationlist.model.BaseUiConversation;
import io.rong.imkit.conversationlist.model.GatheredConversation;
import io.rong.imkit.conversationlist.model.SingleConversation;
import io.rong.imkit.utils.RouteUtils;
import io.rong.imkit.widget.FixedLinearLayoutManager;
import io.rong.imkit.widget.adapter.BaseAdapter;
import io.rong.imkit.widget.adapter.ViewHolder;
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;
import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Conversation;
import io.rong.imlib.model.Message;
import io.rong.imlib.model.UserInfo;
/**
* 消息-好友
*/
public class MsgFriendFragment extends BaseFragment {
public class MsgFriendFragment extends BaseFragment implements BaseAdapter.OnItemClickListener {
SwipeRecyclerView mList;
SmartRefreshLayout mRefreshLayout;
MsgMessageRecyclerViewAdapter mAdapter;
List<BaseUiConversation> list;
private int page = 1;
private static final String TAG = MsgFriendFragment.class.getName();
@Override
public void onDestroy() {
super.onDestroy();
Bus.getOff(this);
}
@Override
public void initView(View itemView) {
Bus.getOn(this);
mList = itemView.findViewById(R.id.recyclerView);
mRefreshLayout = itemView.findViewById(R.id.swipeRefreshLayout);
mAdapter = new MsgMessageRecyclerViewAdapter(mList);
mAdapter.setItemClickListener(this);
list = new ArrayList<>();
mList.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
//mList.setSwipeMenuCreator(initSwipeMenuCreator());
mList.setHasFixedSize(true);
mList.setEmptyView(itemView.findViewById(R.id.view_empty));
mList.setAutoMarginEnabled(true);
mList.setOnItemMenuClickListener(new OnItemMenuClickListener() {
@Override
public void onItemClick(SwipeMenuBridge menuBridge, int adapterPosition) {
}
});
mList.setOnItemMenuStateListener(new OnItemMenuStateListener() {
@Override
public void onMenuState(RecyclerView.ViewHolder viewHolder, int menuState) {
}
});
LinearLayoutManager layoutManager = new FixedLinearLayoutManager(this.getActivity());
mList.setLayoutManager(layoutManager);
mList.setAdapter(this.mAdapter);
initRefreshView();
initData();
}
protected void initRefreshView() {
this.mRefreshLayout.setNestedScrollingEnabled(false);
this.mRefreshLayout.setRefreshHeader(new RongRefreshHeader(this.getContext()));
this.mRefreshLayout.setRefreshFooter(new RongRefreshHeader(this.getContext()));
this.mRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
page = 1;
initData();
}
});
this.mRefreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
initData();
}
});
}
@Override
public View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_msg_friend, container, false);
}
private SwipeMenuCreator initSwipeMenuCreator() {
SwipeMenuCreator creator = (leftMenu, rightMenu, position) -> {
SwipeMenuItem top = new SwipeMenuItem(getContext());
SwipeMenuItem del = new SwipeMenuItem(getContext());
top.setBackgroundColor(Color.parseColor("#D9D9D9"));
del.setBackgroundColor(Color.parseColor("#FE5268"));
top.setText("置顶");
del.setText("删除");
top.setHeight(ViewGroup.LayoutParams.MATCH_PARENT);
top.setWidth(DpUtil.dp2px(71));
del.setHeight(ViewGroup.LayoutParams.MATCH_PARENT);
del.setWidth(DpUtil.dp2px(71));
rightMenu.addMenuItem(top);
rightMenu.addMenuItem(del);
};
return creator;
}
private void initData() {
OTONetManager.getInstance(mContext)
.getFriends(page, new HttpCallback<List<HomeItemBean>>() {
@Override
public void onSuccess(List<HomeItemBean> data) {
if (page == 1) {
list.clear();
}
if (data.isEmpty()) {
mAdapter.setDataCollection(list);
mAdapter.notifyDataSetChanged();
mRefreshLayout.finishRefresh();
mRefreshLayout.finishLoadMore();
return;
}
for (int i = 0; i < data.size(); i++) {
getNewData(data.get(i), i == data.size() - 1);
}
}
@Override
public void onError(String error) {
}
public synchronized void getNewData(HomeItemBean item, boolean over) {
RongIMClient.getInstance().getConversation(Conversation.ConversationType.PRIVATE, item.getId() + "", new RongIMClient.ResultCallback<Conversation>() {
@Override
public void onSuccess(Conversation conversation) {
SingleConversation singleConversation = new SingleConversation(mContext, conversation);
if (StringUtil.isEmpty(singleConversation.mConversationContent.toString())) {
singleConversation.mConversationContent = new SpannableString("你们什么都没聊");
}
list.add(singleConversation);
if (over) {
mAdapter.setDataCollection(list);
mAdapter.notifyDataSetChanged();
mRefreshLayout.finishRefresh();
mRefreshLayout.finishLoadMore();
page++;
}
}
@Override
public void onError(RongIMClient.ErrorCode e) {
}
});
}
});
}
@Override
public void onItemClick(View view, ViewHolder holder, int position) {
if (position >= 0 && position < this.mAdapter.getData().size()) {
BaseUiConversation baseUiConversation = (BaseUiConversation) this.mAdapter.getItem(position);
ConversationListBehaviorListener listBehaviorListener = RongConfigCenter.conversationListConfig().getListener();
if (listBehaviorListener != null && listBehaviorListener.onConversationClick(view.getContext(), view, baseUiConversation)) {
RLog.d(TAG, "ConversationList item click event has been intercepted by App.");
} else {
if (baseUiConversation != null && baseUiConversation.mCore != null) {
if (baseUiConversation instanceof GatheredConversation) {
RouteUtils.routeToSubConversationListActivity(view.getContext(), ((GatheredConversation) baseUiConversation).mGatheredType, baseUiConversation.mCore.getConversationTitle());
} else {
RouteUtils.routeToConversationActivity(view.getContext(), baseUiConversation.getConversationIdentifier());
}
} else {
RLog.e(TAG, "invalid conversation.");
}
}
}
}
@Override
public boolean onItemLongClick(View view, ViewHolder holder, int position) {
return false;
}
@Subscribe
public void event(MessageMsgBusEvent event) {
if (event.getType() == MessageMsgBusEvent.TYPE_UPDATE_SYSTEM) {
page = 1;
initData();
}
}
}

View File

@ -1,5 +1,6 @@
package com.shayu.onetoone.activity.message;
import android.app.Dialog;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.SurfaceView;
@ -12,19 +13,24 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.fastjson.JSONObject;
import com.lxj.xpopup.XPopup;
import com.lxj.xpopup.core.BasePopupView;
import com.lzf.easyfloat.EasyFloat;
import com.lzf.easyfloat.enums.ShowPattern;
import com.lzf.easyfloat.interfaces.OnFloatCallbacks;
import com.lzf.easyfloat.interfaces.OnPermissionResult;
import com.lzf.easyfloat.permission.PermissionUtils;
import com.makeramen.roundedimageview.RoundedImageView;
import com.shayu.onetoone.R;
import com.shayu.onetoone.activity.AbsOTOActivity;
import com.shayu.onetoone.bean.FollowBean;
import com.shayu.onetoone.bean.UserBean;
import com.shayu.onetoone.dialog.GiftDialog;
import com.shayu.onetoone.dialog.TipsDialog;
import com.shayu.onetoone.dialog.TipsTextDialog;
import com.shayu.onetoone.listener.OnCallStatusListener;
import com.shayu.onetoone.listener.OnDialogClickListener;
import com.shayu.onetoone.manager.CallClientManager;
import com.shayu.onetoone.manager.OTONetManager;
import com.shayu.onetoone.manager.RouteManager;
@ -143,7 +149,7 @@ public class CallAudioActivity extends AbsOTOActivity implements View.OnClickLis
userName.setText(data.getUser().getUserNicename());
userInfo.setText(data.getUser().getSignature());
ImgLoader.display(mContext, data.getUser().getAvatar(), avatar);
ImgLoader.displayBlur(mContext, data.getUser().getAvatar(), vague, 50);
ImgLoader.displayBlur(mContext, data.getUser().getAvatar(), vague, 85);
if (data.getUser().isFollow()) {
follow.setVisibility(View.GONE);
} else {
@ -188,6 +194,29 @@ public class CallAudioActivity extends AbsOTOActivity implements View.OnClickLis
}
private void showWindow(boolean toChatView) {
if(!PermissionUtils.checkPermission(this)){
new TipsDialog(mContext)
.setTitle("请允许悬浮窗权限才能进行小窗")
.setApplyText("前往")
.setCancelText("取消")
.setOnDialogClickListener(new OnDialogClickListener() {
@Override
public void onApply(Dialog dialog) {
super.onApply(dialog);
PermissionUtils.requestPermission(CallAudioActivity.this, new OnPermissionResult() {
@Override
public void permissionResult(boolean b) {
if(b){
showWindow(toChatView);
}
}
});
}
})
.showDialog();
return;
}
ImageView icon = new ImageView(mContext);
icon.setTag(getIntent().getExtras());
icon.setImageResource(io.rong.callkit.R.drawable.rc_voip_audio_answer_selector_new);
@ -256,12 +285,25 @@ public class CallAudioActivity extends AbsOTOActivity implements View.OnClickLis
@Override
public void onCallStart(String userId, SurfaceView surfaceView) {
gift.setVisibility(View.VISIBLE);
money.setVisibility(View.VISIBLE);
if (model.equals(CallClientManager.AUDIO_RECEIVED_CALL)) {
gift.setVisibility(View.INVISIBLE);
money.setVisibility(View.INVISIBLE);
} else {
gift.setVisibility(View.VISIBLE);
money.setVisibility(View.VISIBLE);
}
}
@Override
public void onCallEnd() {
Bundle bundle = new Bundle();
bundle.putString("model", CallClientManager.AUDIO_CALL);
bundle.putString("targetId", targetId);
bundle.putString("callId", targetId);
bundle.putString("user", JSONObject.toJSONString(userData));
bundle.putString("time", callTime.getText().toString());
bundle.putString("path", RouteManager.ACTIVITY_CALL_AUDIO);
RouteManager.forwardActivity(RouteManager.ACTIVITY_END_CALL, bundle);
finish();
}
@ -292,6 +334,9 @@ public class CallAudioActivity extends AbsOTOActivity implements View.OnClickLis
}
void createShow(long msg) {
if (model.equals(CallClientManager.AUDIO_RECEIVED_CALL)) {
return;
}
tipsDialog = new TipsTextDialog(mContext)
.setTips("通话将在" + msg + "秒后断\n开请及时充值")
.setOnItemClickListener(new OnItemClickListener<String>() {

View File

@ -1,5 +1,6 @@
package com.shayu.onetoone.activity.message;
import android.app.Dialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
@ -21,14 +22,18 @@ import com.lxj.xpopup.core.BasePopupView;
import com.lzf.easyfloat.EasyFloat;
import com.lzf.easyfloat.enums.ShowPattern;
import com.lzf.easyfloat.interfaces.OnFloatCallbacks;
import com.lzf.easyfloat.interfaces.OnPermissionResult;
import com.lzf.easyfloat.permission.PermissionUtils;
import com.makeramen.roundedimageview.RoundedImageView;
import com.shayu.onetoone.R;
import com.shayu.onetoone.activity.AbsOTOActivity;
import com.shayu.onetoone.bean.FollowBean;
import com.shayu.onetoone.bean.UserBean;
import com.shayu.onetoone.dialog.GiftDialog;
import com.shayu.onetoone.dialog.TipsDialog;
import com.shayu.onetoone.dialog.TipsTextDialog;
import com.shayu.onetoone.listener.OnCallStatusListener;
import com.shayu.onetoone.listener.OnDialogClickListener;
import com.shayu.onetoone.manager.CallClientManager;
import com.shayu.onetoone.manager.OTONetManager;
import com.shayu.onetoone.manager.RouteManager;
@ -187,6 +192,11 @@ public class CallVideoActivity extends AbsOTOActivity {
callTime = itemView.findViewById(R.id.call_time);
// 为所有View设置点击事件监听器
setClickListeners();
if(model.equals(CallClientManager.VIDEO_RECEIVED_CALL)){
gift.setVisibility(View.INVISIBLE);
money.setVisibility(View.INVISIBLE);
}
}
private void setClickListeners() {
@ -233,6 +243,29 @@ public class CallVideoActivity extends AbsOTOActivity {
}
private void showWindow(boolean toChatView) {
if(!PermissionUtils.checkPermission(this)){
new TipsDialog(mContext)
.setTitle("请允许悬浮窗权限才能进行小窗")
.setApplyText("前往")
.setCancelText("取消")
.setOnDialogClickListener(new OnDialogClickListener() {
@Override
public void onApply(Dialog dialog) {
super.onApply(dialog);
PermissionUtils.requestPermission(CallVideoActivity.this, new OnPermissionResult() {
@Override
public void permissionResult(boolean b) {
if(b){
showWindow(toChatView);
}
}
});
}
})
.showDialog();
return;
}
CallClientManager.getManager().getRemoteVideo().setTag(getIntent().getExtras());
myView.removeAllViews();
targetView.removeAllViews();
@ -431,6 +464,9 @@ public class CallVideoActivity extends AbsOTOActivity {
}
void createShow(long msg) {
if(model.equals(CallClientManager.VIDEO_RECEIVED_CALL)){
return;
}
tipsDialog = new TipsTextDialog(mContext)
.setTips("通话将在" + msg + "秒后断\n开请及时充值")
.setOnItemClickListener(new OnItemClickListener<String>() {

View File

@ -25,6 +25,7 @@ import com.shayu.onetoone.bean.SendConsumeBean;
import com.shayu.onetoone.bean.SystemMessageBean;
import com.shayu.onetoone.bean.UserBean;
import com.shayu.onetoone.dialog.TipsDialog;
import com.shayu.onetoone.event.MessageMsgBusEvent;
import com.shayu.onetoone.listener.OnDialogClickListener;
import com.shayu.onetoone.manager.OTONetManager;
import com.shayu.onetoone.manager.RouteManager;
@ -34,6 +35,8 @@ import com.yunbao.common.utils.RouteUtil;
import com.yunbao.common.utils.SpUtil;
import com.yunbao.common.utils.StringUtil;
import org.greenrobot.eventbus.Subscribe;
import java.util.Set;
import io.rong.imkit.conversation.ConversationFragment;
@ -136,5 +139,4 @@ public class ChatActivity extends AbsOTOActivity {
}
});
}
}

View File

@ -93,6 +93,7 @@ public class HomeRecommendListAdapter extends RecyclerView.Adapter<HomeRecommend
star.setText(itemBean.getStar() + "·" + itemBean.getStar_name());
sign.setText(itemBean.getSignature());
userName.setText(itemBean.getUser_nicename());
tagLayout.removeAllViews();
if (WordUtil.isNewZh()) {
addTag(itemBean.getCn_label());
} else {
@ -108,6 +109,11 @@ public class HomeRecommendListAdapter extends RecyclerView.Adapter<HomeRecommend
} else {
auth.setVisibility(View.GONE);
}
if(itemBean.getIs_accost()==1){
chat.setImageResource(R.mipmap.ic_home_recommend_chat_up);
}else{
chat.setImageResource(R.mipmap.ic_home_recommend_chat);
}
ImgLoader.display(mContext, itemBean.getAvatar(), avatar);
chat.setOnClickListener(new View.OnClickListener() {
@Override
@ -136,6 +142,11 @@ public class HomeRecommendListAdapter extends RecyclerView.Adapter<HomeRecommend
ToastUtil.show("跳充值页面");
}
})
.setApplyText("确定")
.showDialog();
}else{
new TipsDialog(mContext)
.setTitle(msg)
.showDialog();
}
}

View File

@ -1,13 +1,17 @@
package com.shayu.onetoone.adapter;
import android.graphics.Color;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import com.shayu.onetoone.R;
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;
import io.rong.imlib.model.Message;
public class MsgChatMessageListAdapter extends MessageListAdapter {
public MsgChatMessageListAdapter(IViewProviderListener<UiMessage> listener) {
@ -21,6 +25,16 @@ public class MsgChatMessageListAdapter extends MessageListAdapter {
return super.onCreateViewHolder(parent, viewType);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
super.onBindViewHolder(holder, position);
if(getData().get(position).getMessageDirection()== Message.MessageDirection.SEND) {
holder.setTextColor(R.id.rc_text, Color.WHITE);
}else{
holder.setTextColor(R.id.rc_text, Color.parseColor("#555555"));
}
}
public int getPosition(int messageId) {
for (int i = 0; i < getData().size(); i++) {
if (getData().get(i).getMessageId() == messageId){

View File

@ -0,0 +1,23 @@
package com.shayu.onetoone.event;
public class HomeBusEvent extends AbsBusEvent {
public static final int TYPE_UPDATE_MATCHING = 0;
private int matching;
public HomeBusEvent(int type) {
super(type);
}
public HomeBusEvent(int type, int matching) {
super(type);
this.matching = matching;
}
public int getMatching() {
return matching;
}
public void setMatching(int matching) {
this.matching = matching;
}
}

View File

@ -4,7 +4,22 @@ public class MessageMsgBusEvent extends AbsBusEvent {
public static final int TYPE_ALL_READ = 0;
public static final int TYPE_UPDATE_SYSTEM=1;
private int num;
public MessageMsgBusEvent(int type, int num) {
super(type);
this.num = num;
}
public MessageMsgBusEvent(int type) {
super(type);
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}

View File

@ -36,12 +36,12 @@ import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Conversation;
public class CallClientManager {
public static final String VIDEO_RECEIVED_CALL = "receivedCall";//接听
public static final String VIDEO_CALL = "call";//拨打
public static final String VIDEO_FLOAT = "floatWindow";//浮窗
public static final String AUDIO_RECEIVED_CALL = "receivedCall";//接听
public static final String AUDIO_CALL = "call";//拨打
public static final String AUDIO_FLOAT = "floatWindow";//浮窗
public static final String VIDEO_RECEIVED_CALL = "receivedVideoCall";//接听
public static final String VIDEO_CALL = "callVideo";//拨打
public static final String VIDEO_FLOAT = "videoFloatWindow";//浮窗
public static final String AUDIO_RECEIVED_CALL = "receivedAudioCall";//接听
public static final String AUDIO_CALL = "callAudio";//拨打
public static final String AUDIO_FLOAT = "audioFloatWindow";//浮窗
private static CallClientManager manager;
private SurfaceView localVideo, remoteVideo;
private List<OnCallStatusListener> listeners;
@ -347,13 +347,14 @@ public class CallClientManager {
@Override
public void onReceivedCall(RongCallSession callSession) {
Bundle bundle = new Bundle();
bundle.putString("model", VIDEO_RECEIVED_CALL);
bundle.putString("targetId", callSession.getTargetId());
bundle.putString("callId", callSession.getCallId());
bundle.putString("sessionId", callSession.getSessionId());
if (callSession.getMediaType() == RongCallCommon.CallMediaType.VIDEO) {
bundle.putString("model", VIDEO_RECEIVED_CALL);
RouteManager.forwardActivity(RouteManager.ACTIVITY_CALL_VIDEO, bundle);
} else {
bundle.putString("model", AUDIO_RECEIVED_CALL);
RouteManager.forwardActivity(RouteManager.ACTIVITY_CALL_AUDIO, bundle);
}
}

View File

@ -1197,4 +1197,21 @@ public class OTONetManager {
}
}).isDisposed();
}
public void getFriends(int page,HttpCallback<List<HomeItemBean>> callback) {
API.get().otoApi(mContext).
getFriends(page+"")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(listResponseModel -> {
if (listResponseModel.getData().getCode() == 0) {
callback.onSuccess(listResponseModel.getData().getInfo());
} else {
callback.onError(listResponseModel.getData().getMsg());
}
}, throwable -> {
if (callback != null) {
callback.onError(mContext.getString(com.yunbao.common.R.string.net_error));
}
}).isDisposed();
}
}

View File

@ -155,7 +155,7 @@ public interface OneToOneApi {
@GET("/api/public/?service=Friendappmoney.info")
Observable<ResponseModel<PurseBean>> getPurseInfo();
@GET("/api/public/?service=Friendappuser.follow")
@GET("/api/public/?service=User.setAttents")
Observable<ResponseModel<List<FollowBean>>> follow(@Query("touid") String toUid);
/**
@ -305,6 +305,9 @@ public interface OneToOneApi {
@GET("/api/public/?service=Friendappinfos.getSage")
Observable<ResponseModel<AuthBloggerBean>> getBloggerInfo(
);
@GET("/api/public/?service=Friendappuser.friend")
Observable<ResponseModel<List<HomeItemBean>>> getFriends(@Query("p")String p);
}

View File

@ -3,6 +3,7 @@ package com.shayu.onetoone.view;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.os.SystemClock;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
@ -35,6 +36,8 @@ public class MsgInputPanelForAudio extends AbsInputPanel {
ImageView btnText;
ImageView btnClose;
private float mLastTouchY;
private long smStartRecTime;
private boolean mUpDirection;
private String token;
@ -157,6 +160,7 @@ public class MsgInputPanelForAudio extends AbsInputPanel {
}
MsgInputPanelForAudio.this.mLastTouchY = mLastTouchY;
MsgInputPanelForAudio.this.mUpDirection = false;
smStartRecTime = SystemClock.elapsedRealtime();
AudioRecordManager.getInstance().startRecord(v.getRootView(), mRongExtension.getConversationIdentifier());
return false;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -28,7 +28,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_dialog_tip"
android:minWidth="256dp"
android:minWidth="289dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
@ -38,9 +38,9 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="80dp"
android:layout_marginStart="36dp"
android:layout_marginStart="25dp"
android:layout_marginTop="21dp"
android:layout_marginEnd="36dp">
android:layout_marginEnd="25dp">
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/avatar"
@ -56,12 +56,15 @@
<TextView
android:id="@+id/username"
android:layout_width="wrap_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="7dp"
android:ellipsize="end"
android:maxEms="6"
android:singleLine="true"
android:text="小柒"
android:textColor="#333333"
android:textSize="18sp"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="@+id/avatar"
app:layout_constraintStart_toEndOf="@+id/avatar"
app:layout_constraintTop_toTopOf="@+id/avatar" />

View File

@ -5,12 +5,29 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button3"
<io.rong.imkit.widget.refresh.SmartRefreshLayout
android:id="@+id/swipeRefreshLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.yanzhenjie.recyclerview.SwipeRecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/rc_conversationlist_item" />
</io.rong.imkit.widget.refresh.SmartRefreshLayout>
<include
android:id="@+id/view_empty"
layout="@layout/view_friend_empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="26dp"
android:text="Button"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

View File

@ -153,10 +153,9 @@
<ImageView
android:id="@+id/input_panel_add_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="4dp"
android:layout_weight="1"
android:background="@color/yellow"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="gone"
android:src="@mipmap/ic_msg_add" />
</LinearLayout>
@ -164,11 +163,11 @@
<LinearLayout
android:id="@+id/audio_layout"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:visibility="visible"
android:orientation="horizontal" />
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@mipmap/bg_friend_empty" />
<TextView
android:id="@+id/textView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/view_friend_empty_text"
app:layout_constraintEnd_toEndOf="@+id/imageView7"
app:layout_constraintHorizontal_bias="0.433"
app:layout_constraintStart_toStartOf="@+id/imageView7"
app:layout_constraintTop_toBottomOf="@+id/imageView7" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -20,6 +20,7 @@
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginEnd="61dp"
android:visibility="invisible"
android:layout_marginBottom="62dp"
app:layout_constraintBottom_toBottomOf="@+id/audio_btn"
app:layout_constraintEnd_toStartOf="@+id/audio_btn"
@ -31,17 +32,16 @@
android:layout_height="wrap_content"
android:layout_marginStart="61dp"
android:layout_marginBottom="62dp"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="@+id/audio_btn"
app:layout_constraintStart_toEndOf="@+id/audio_btn"
app:srcCompat="@mipmap/ic_chat_video_close" />
<TextView
android:id="@+id/time_text"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="TextView"
app:layout_constraintBottom_toTopOf="@+id/audio_btn"
app:layout_constraintEnd_toEndOf="@+id/audio_btn"
app:layout_constraintStart_toStartOf="@+id/audio_btn" />

View File

@ -21,6 +21,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="21dp"
android:visibility="invisible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/follow"
app:srcCompat="@mipmap/ic_message_msg_more" />

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

@ -14,7 +14,24 @@
<string name="greet_upload_img">上传图片(非必選)</string>
<string name="greet_clear_config">清除设置</string>
<string name="greet_save_config">保存设置</string>
<string name="my_arnings">我的收益</string>
<string name="my_arnings_reward_description">獎勵說明</string>
<string name="my_arnings_total_amount_available_for_withdrawal">可提現總額</string>
<string name="my_arnings_today_earnings">今日收益:</string>
<string name="my_arnings_settlement_record">結算記錄</string>
<string name="my_arnings_cumulative_income">累計收益:</string>
<string name="my_arnings_exchange_for_diamond_star_coins">兌換鑽石/星幣</string>
<string name="my_arnings_incentive_withdrawal">獎勵提現</string>
<string name="my_arnings_incentive_withdrawal_minimum">(最低$ %s)</string>
<string name="my_arnings_exchange_star">兌換星幣</string>
<string name="my_arnings_exchange_record">兌換記錄</string>
<string name="my_arnings_total_convertibility">可兌換總額</string>
<string name="my_arnings_gold_coin">金幣</string>
<string name="my_arnings_toggle">切換</string>
<string name="diamond_exchange_input_hint">請輸入需兌換的星幣金額</string>
<string name="diamond_exchange_immediate_exchange">立即兌換</string>
<string name="diamond_exchange_full_conversion">全額兌換</string>
<string name="choose_img_max">最多选&#160;%1$s&#160;张图片哦</string>
<string name="view_friend_empty_text">暫無好友消息~</string>
</resources>

View File

@ -14,6 +14,24 @@
<string name="greet_upload_img">上传图片(非必選)</string>
<string name="greet_clear_config">清除设置</string>
<string name="greet_save_config">保存设置</string>
<string name="my_arnings">我的收益</string>
<string name="my_arnings_reward_description">獎勵說明</string>
<string name="my_arnings_total_amount_available_for_withdrawal">可提現總額</string>
<string name="my_arnings_today_earnings">今日收益:</string>
<string name="my_arnings_settlement_record">結算記錄</string>
<string name="my_arnings_cumulative_income">累計收益:</string>
<string name="my_arnings_exchange_for_diamond_star_coins">兌換鑽石/星幣</string>
<string name="my_arnings_incentive_withdrawal">獎勵提現</string>
<string name="my_arnings_incentive_withdrawal_minimum">(最低$ %s)</string>
<string name="my_arnings_exchange_star">兌換星幣</string>
<string name="my_arnings_exchange_record">兌換記錄</string>
<string name="my_arnings_total_convertibility">可兌換總額</string>
<string name="my_arnings_gold_coin">金幣</string>
<string name="my_arnings_toggle">切換</string>
<string name="diamond_exchange_input_hint">請輸入需兌換的星幣金額</string>
<string name="diamond_exchange_immediate_exchange">立即兌換</string>
<string name="diamond_exchange_full_conversion">全額兌換</string>
<string name="choose_img_max">最多选&#160;%1$s&#160;张图片哦</string>
<string name="view_friend_empty_text">暫無好友消息~</string>
</resources>

View File

@ -32,4 +32,6 @@
<string name="diamond_exchange_full_conversion">全額兌換</string>
<string name="choose_img_max">最多选&#160;%1$s&#160;张图片哦</string>
<string name="view_friend_empty_text">friend empty</string>
</resources>