From 05d4f84844c2bc2f6090b75ee23d2a4106f279c4 Mon Sep 17 00:00:00 2001
From: zlzw <583819556@qq.com>
Date: Sun, 8 Oct 2023 22:36:18 +0800
Subject: [PATCH] update
---
OneToOne/src/main/AndroidManifest.xml | 2 +-
.../java/com/shayu/onetoone/AppContext.java | 5 +-
.../onetoone/activity/AbsOTOActivity.java | 5 +
.../onetoone/activity/LauncherActivity.java | 1 +
.../shayu/onetoone/activity/MainActivity.java | 80 ++++++++-
.../fragments/home/RecommendFragment.java | 5 +
.../message/ChatMessageFragment.java | 9 +-
.../fragments/message/MsgMessageFragment.java | 157 +++++++++++++-----
...y.java => MsgMoreGreetConfigActivity.java} | 4 +-
.../MsgMessageRecyclerViewAdapter.java | 70 +++++---
.../onetoone/bean/OfficialNoticeBean.java | 81 +++++++++
.../onetoone/event/MessageMsgBusEvent.java | 1 +
.../shayu/onetoone/manager/OTONetManager.java | 33 +++-
.../shayu/onetoone/network/OneToOneApi.java | 10 +-
.../provider/CustomConversationProvider.java | 17 +-
.../src/main/res/layout/activity_main.xml | 14 +-
.../main/res/layout/activity_msg_config.xml | 9 +-
.../src/main/res/layout/dialog_msg_more.xml | 16 +-
.../res/layout/rc_conversationlist_item.xml | 24 ++-
.../src/main/res/values-zh-rHK/strings.xml | 13 ++
.../src/main/res/values-zh-rTW/strings.xml | 13 ++
OneToOne/src/main/res/values/dimens.xml | 4 +
OneToOne/src/main/res/values/strings.xml | 13 ++
.../common/http/base/PostRequestParams.java | 8 +-
.../yunbao/common/utils/ProcessImageUtil.java | 10 +-
25 files changed, 498 insertions(+), 106 deletions(-)
rename OneToOne/src/main/java/com/shayu/onetoone/activity/message/{MsgMoreConfigActivity.java => MsgMoreGreetConfigActivity.java} (98%)
create mode 100644 OneToOne/src/main/java/com/shayu/onetoone/bean/OfficialNoticeBean.java
create mode 100644 OneToOne/src/main/res/values/dimens.xml
diff --git a/OneToOne/src/main/AndroidManifest.xml b/OneToOne/src/main/AndroidManifest.xml
index d2e8ab715..d37995b02 100644
--- a/OneToOne/src/main/AndroidManifest.xml
+++ b/OneToOne/src/main/AndroidManifest.xml
@@ -121,7 +121,7 @@
android:name=".activity.MainActivity"
android:exported="false" />
>() {
+ int point = 0;
+
+ @Override
+ public void onSuccess(List data) {
+ for (OfficialNoticeBean datum : data) {
+ point += datum.getNum();
+ }
+ //大于0则是通过会话未读监听器获取到的数,则不用再调用获取未读数接口了
+ if (count >= 0) {
+ updateUnreadCount(point + count);
+ return;
+ }
+ RongIMClient.getInstance().getTotalUnreadCount(new RongIMClient.ResultCallback() {
+ @Override
+ public void onSuccess(Integer integer) {
+ updateUnreadCount(point + integer);
+ }
+
+ @Override
+ public void onError(RongIMClient.ErrorCode e) {
+
+ }
+ });
+ }
+
+ @Override
+ public void onError(String error) {
+
+ }
+ });
+ }
+
+ private void updateUnreadCount(int count) {
+ if(count==0){
+ dslTabLayout.setDrawBadge(false);
+ }else {
+ dslTabLayout.setDrawBadge(true);
+ }
+ dslTabLayout.updateTabBadge(2, count + "");
+
}
@Override
protected int getLayoutId() {
return R.layout.activity_main;
}
+
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ public void busEvent(MessageMsgBusEvent event) {
+ if (event.getType() == MessageMsgBusEvent.TYPE_ALL_READ) {
+ updateUnreadCount(0);
+ }
+ }
}
\ No newline at end of file
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 3f5dfe8e9..733905fb1 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
@@ -22,11 +22,13 @@ public class RecommendFragment extends BaseFragment {
SmartRefreshLayout mRefreshLayout;
SwipeRecyclerView recyclerView;
HomeRecommendListAdapter adapter;
+ View top;
@Override
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());
recyclerView.setAdapter(adapter);
mRefreshLayout.setNestedScrollingEnabled(false);
@@ -42,6 +44,9 @@ public class RecommendFragment extends BaseFragment {
onConversationListLoadMore();
}
});
+ top.setOnClickListener(view -> {
+ recyclerView.scrollToPosition(0);
+ });
}
private void onConversationListLoadMore() {
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 508f73882..c7f42c79f 100644
--- a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/ChatMessageFragment.java
+++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/ChatMessageFragment.java
@@ -15,6 +15,7 @@ import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.interfaces.ImageResultCallback;
import com.yunbao.common.utils.ProcessImageUtil;
import com.yunbao.common.utils.ToastUtil;
+import com.yunbao.common.utils.WordUtil;
import java.io.File;
import java.lang.reflect.Field;
@@ -50,16 +51,16 @@ public class ChatMessageFragment extends ConversationFragment {
initCamera();
call.setOnClickListener(v -> {
- MessageChatTipsContent bean= MessageChatTipsContent.obtain("【安全提示】為保障您的權益,慶提高警惕,不要輕易添加或提供第三方聯繫方式");
+ MessageChatTipsContent bean= MessageChatTipsContent.obtain(WordUtil.getString(R.string.message_chat_tip1));
IMCenter.getInstance().insertOutgoingMessage(conversationType, targetId, Message.SentStatus.SENT, bean, System.currentTimeMillis(), new RongIMClient.ResultCallback() {
@Override
public void onSuccess(Message message) {
- ToastUtil.show("成功");
+ ToastUtil.show(R.string.system_tip_success);
}
@Override
public void onError(RongIMClient.ErrorCode e) {
- ToastUtil.show("失败:"+e.getMessage());
+ ToastUtil.show(R.string.system_tip_failure);
System.out.println("失败:"+e.getMessage());
}
@@ -145,7 +146,7 @@ public class ChatMessageFragment extends ConversationFragment {
@Override
public void onError(Message message, RongIMClient.ErrorCode errorCode) {
- ToastUtil.show("发送失败");
+ ToastUtil.show(R.string.system_tip_failure);
System.out.println("发送失败:" + errorCode.getMessage());
}
});
diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/MsgMessageFragment.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/MsgMessageFragment.java
index b8429bd1d..5f0374e80 100644
--- a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/MsgMessageFragment.java
+++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/MsgMessageFragment.java
@@ -1,6 +1,5 @@
package com.shayu.onetoone.activity.fragments.message;
-import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.net.Uri;
@@ -14,33 +13,28 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
-import android.widget.Toast;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.lifecycle.Observer;
-import androidx.lifecycle.ViewModelProvider;
-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.MsgMessageBean;
+import com.shayu.onetoone.bean.OfficialNoticeBean;
import com.shayu.onetoone.event.MessageMsgBusEvent;
+import com.shayu.onetoone.manager.OTONetManager;
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.CommonAppConfig;
import com.yunbao.common.glide.ImgLoader;
+import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.utils.Bus;
-import com.yunbao.common.utils.DialogUitl;
import com.yunbao.common.utils.DpUtil;
import com.yunbao.common.utils.RandomUtil;
-import com.yunbao.common.utils.StringUtil;
+import com.yunbao.common.utils.ToastUtil;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
@@ -48,6 +42,12 @@ import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.List;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.lifecycle.Observer;
+import androidx.lifecycle.ViewModelProvider;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
import io.rong.common.RLog;
import io.rong.imkit.GlideKitImageEngine;
import io.rong.imkit.IMCenter;
@@ -64,7 +64,6 @@ 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.dialog.OptionsPopupDialog;
import io.rong.imkit.widget.refresh.SmartRefreshLayout;
import io.rong.imkit.widget.refresh.api.RefreshLayout;
import io.rong.imkit.widget.refresh.constant.RefreshState;
@@ -76,6 +75,7 @@ import io.rong.imlib.IRongCoreEnum;
import io.rong.imlib.RongCoreClient;
import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Conversation;
+import io.rong.imlib.model.Message;
import io.rong.imlib.model.UserInfo;
/**
@@ -96,7 +96,6 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt
protected Handler mHandler = new Handler(Looper.getMainLooper());
protected boolean delayRefresh = false;
- View notification, interaction, system;
@Override
public void onDestroy() {
@@ -121,10 +120,12 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt
Bus.getOn(this);
mList = itemView.findViewById(R.id.recyclerView);
mRefreshLayout = itemView.findViewById(R.id.swipeRefreshLayout);
- mAdapter = new MsgMessageRecyclerViewAdapter();
+ mAdapter = new MsgMessageRecyclerViewAdapter(mList);
list = new ArrayList<>();
mList.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
mList.setSwipeMenuCreator(initSwipeMenuCreator());
+ mList.setHasFixedSize(true);
+ mList.setAutoMarginEnabled(true);
mList.setOnItemMenuClickListener(new OnItemMenuClickListener() {
@Override
public void onItemClick(SwipeMenuBridge menuBridge, int adapterPosition) {
@@ -141,19 +142,15 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt
BaseUiConversation conversation = mAdapter.getData().get(swipeRunnable.adapterPosition);
if (swipeRunnable.menuPosition == 0) {
topItem(conversation, swipeRunnable.adapterPosition);
- // ToastUtil.showDebug("置顶:" + mAdapter.getList().get(adapterPosition).getNickname());
} else {
removeItem(conversation, swipeRunnable.adapterPosition);
- // ToastUtil.showDebug("删除:" + mAdapter.getList().get(adapterPosition).getNickname());
- //mAdapter.getData().remove(adapterPosition);
- //mAdapter.notifyDataSetChanged();
}
swipeRunnable = null;
}, 100);
}
}
});
- initListTop();
+ initSystemNotice();
initUserInfo(0);
initRongConfig();
}
@@ -199,37 +196,67 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt
}
- private void initListTop() {
+ private void initSystemNotice() {
- mAdapter.add(setTopData("官方通知", "测试", "12:00", null, 5), 0);
- mAdapter.add(setTopData("互动消息", "测试2", "13:00", null, 0), 1);
- mAdapter.add(setTopData("系统消息", "测试3", "14:00", null, 15), 2);
+
+ OTONetManager.getInstance(mContext)
+ .getMessageSystemLists(new HttpCallback>() {
+ @Override
+ public void onSuccess(List data) {
+ for (OfficialNoticeBean datum : data) {
+ if (datum.getType() == 3) {
+ continue;
+ }
+ mAdapter.add(setTopData(datum.getTitle(), datum.getContent(), datum.getAddtime()*1000, datum.getNew_image(), datum.getNum(), datum.getType()), datum.getType());
+ }
+ onConversationListRefresh(mRefreshLayout);
+ mAdapter.notifyDataSetChanged();
+ }
+
+ @Override
+ public void onError(String error) {
+
+ }
+
+ });
}
- private SingleConversation setTopData(String title, String content, String time, String avatar, int num) {
+ private SingleConversation setTopData(String title, String content, long time, String avatar, int num, int id) {
SingleConversation conversation = new SingleConversation(getContext(), new Conversation());
conversation.mCore.setConversationType(Conversation.ConversationType.PRIVATE);
conversation.mCore.setSenderUserName(title);
- conversation.mCore.setConversationTitle(title + "?");
+ conversation.mCore.setConversationTitle(title);
+ conversation.mCore.setSentTime(time);
+ conversation.mCore.setSentStatus(Message.SentStatus.SENT);
conversation.mConversationContent = new SpannableString(content);
- conversation.mCore.setSentTime(System.currentTimeMillis());
conversation.mCore.setUnreadMessageCount(num);
- conversation.mCore.setTargetId("10000");
+ conversation.mCore.setTargetId(id + "");
+ UserInfo info = new UserInfo(id + "", title, Uri.parse(avatar));
+ JSONObject json = new JSONObject();
+ json.put("sex", -1);
+ json.put("age", -1);
+ info.setExtra(json.toJSONString());
+ RongUserInfoManager.getInstance().refreshUserInfoCache(info);
return conversation;
}
private void clearTopData() {
-
+ mAdapter.clearSystemNotification();
+ mAdapter.notifyDataSetChanged();
}
+ /**
+ * 全部标记已读
+ */
public void allRead() {
clearTopData();
RongCoreClient.getInstance().getUnreadConversationList(new IRongCoreCallback.ResultCallback>() {
@Override
public void onSuccess(List conversations) {
for (Conversation conversation : conversations) {
+ Log.i(TAG, "onSuccess: " + conversation.getTargetId());
if (conversation.getConversationType() != Conversation.ConversationType.PRIVATE) {
continue;
}
@@ -238,6 +265,8 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt
new RongIMClient.ResultCallback() {
@Override
public void onSuccess(Boolean aBoolean) {
+ onConversationListRefresh(mRefreshLayout);
+ Bus.get().post(new MessageMsgBusEvent(MessageMsgBusEvent.TYPE_ALL_READ));
}
@Override
@@ -265,8 +294,7 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt
@Override
public void onSuccess(Boolean aBoolean) {
Log.i(TAG, "置顶 onSuccess: " + aBoolean);
- mList.requestLayout();
- mList.invalidate();
+ onConversationListRefresh(mRefreshLayout);
}
@Override
@@ -286,7 +314,7 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt
@Override
public void onSuccess(Boolean aBoolean) {
Log.i(TAG, "删除 onSuccess: " + aBoolean);
- //mRefreshLayout.postInvalidate();
+ onConversationListRefresh(null);
}
@Override
@@ -340,7 +368,7 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt
protected void initRefreshView() {
if (this.mRefreshLayout == null) {
- RLog.d(this.TAG, "initRefreshView null");
+ RLog.d(TAG, "initRefreshView null");
} else {
this.mRefreshLayout.setNestedScrollingEnabled(false);
this.mRefreshLayout.setRefreshHeader(new RongRefreshHeader(this.getContext()));
@@ -363,12 +391,11 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt
this.mConversationListViewModel.getConversationList(false, false, 0L);
this.mConversationListViewModel.getConversationListLiveData().observe(this.getViewLifecycleOwner(), new Observer>() {
public void onChanged(List uiConversations) {
- RLog.d(MsgMessageFragment.this.TAG, "conversation list onChanged.");
- if (MsgMessageFragment.this.mNewState == 0) {
- MsgMessageFragment.this.mAdapter.setDataCollection(uiConversations);
- } else {
+ RLog.d(TAG, "conversation list onChanged. |" + MsgMessageFragment.this.mNewState);
+ if (MsgMessageFragment.this.mNewState == 1) {
MsgMessageFragment.this.delayRefresh = true;
}
+ MsgMessageFragment.this.mAdapter.setDataCollection(uiConversations);
}
});
@@ -410,7 +437,6 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt
if (this.mConversationListViewModel != null) {
this.mConversationListViewModel.getConversationList(false, true, 0L);
}
-
}
protected void onConversationListLoadMore() {
@@ -439,6 +465,16 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt
public void onItemClick(View view, ViewHolder holder, int position) {
if (position >= 0 && position < this.mAdapter.getData().size()) {
BaseUiConversation baseUiConversation = (BaseUiConversation) this.mAdapter.getItem(position);
+ String targetId = baseUiConversation.mCore.getTargetId();
+ try {
+ long type=Integer.parseInt(targetId);
+ if(type<100){
+ ToastUtil.showDebug("还没做");
+ return;
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
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.");
@@ -459,6 +495,51 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt
@Override
public boolean onItemLongClick(View view, ViewHolder holder, int position) {
+ /*if (position >= 0 && position < this.mAdapter.getData().size()) {
+ final BaseUiConversation baseUiConversation = (BaseUiConversation) this.mAdapter.getItem(position);
+ ConversationListBehaviorListener listBehaviorListener = RongConfigCenter.conversationListConfig().getListener();
+ if (listBehaviorListener != null && listBehaviorListener.onConversationLongClick(view.getContext(), view, baseUiConversation)) {
+ RLog.d(this.TAG, "ConversationList item click event has been intercepted by App.");
+ return true;
+ } else {
+ final ArrayList items = new ArrayList();
+ final String removeItem = view.getContext().getResources().getString(io.rong.imkit.R.string.rc_conversation_list_dialog_remove);
+ final String setTopItem = view.getContext().getResources().getString(io.rong.imkit.R.string.rc_conversation_list_dialog_set_top);
+ final String cancelTopItem = view.getContext().getResources().getString(io.rong.imkit.R.string.rc_conversation_list_dialog_cancel_top);
+ if (!(baseUiConversation instanceof GatheredConversation)) {
+ if (baseUiConversation.mCore.isTop()) {
+ items.add(cancelTopItem);
+ } else {
+ items.add(setTopItem);
+ }
+ }
+
+ items.add(removeItem);
+ int size = items.size();
+ OptionsPopupDialog.newInstance(view.getContext(), (String[]) items.toArray(new String[size])).setOptionsPopupDialogListener(new OptionsPopupDialog.OnOptionsItemClickedListener() {
+ public void onOptionsItemClicked(final int which) {
+ if (!((String) items.get(which)).equals(setTopItem) && !((String) items.get(which)).equals(cancelTopItem)) {
+ if (((String) items.get(which)).equals(removeItem)) {
+ IMCenter.getInstance().removeConversation(baseUiConversation.mCore.getConversationType(), baseUiConversation.mCore.getTargetId(), (RongIMClient.ResultCallback) null);
+ }
+ } else {
+ IMCenter.getInstance().setConversationToTop(baseUiConversation.getConversationIdentifier(), !baseUiConversation.mCore.isTop(), false, new RongIMClient.ResultCallback() {
+ public void onSuccess(Boolean value) {
+ Toast.makeText(view.getContext(), (CharSequence) items.get(which), Toast.LENGTH_SHORT).show();
+ }
+
+ public void onError(RongIMClient.ErrorCode errorCode) {
+ }
+ });
+ }
+
+ }
+ }).show();
+ return true;
+ }
+ } else {
+ return false;
+ }*/
return false;
}
@@ -487,6 +568,8 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt
public void busEvent(MessageMsgBusEvent event) {
if (event.getType() == MessageMsgBusEvent.TYPE_ALL_READ) {
allRead();
+ }else if(event.getType()==MessageMsgBusEvent.TYPE_UPDATE_SYSTEM){
+ initSystemNotice();
}
}
}
diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/message/MsgMoreConfigActivity.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/message/MsgMoreGreetConfigActivity.java
similarity index 98%
rename from OneToOne/src/main/java/com/shayu/onetoone/activity/message/MsgMoreConfigActivity.java
rename to OneToOne/src/main/java/com/shayu/onetoone/activity/message/MsgMoreGreetConfigActivity.java
index e264cc92b..5038af1e4 100644
--- a/OneToOne/src/main/java/com/shayu/onetoone/activity/message/MsgMoreConfigActivity.java
+++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/message/MsgMoreGreetConfigActivity.java
@@ -35,7 +35,7 @@ import java.util.List;
* 打招呼设置界面
*/
@Route(path = RouteManager.ACTIVITY_MSG_MORE_CONFIG_ACTIVITY)
-public class MsgMoreConfigActivity extends AbsOTOActivity {
+public class MsgMoreGreetConfigActivity extends AbsOTOActivity {
List deleteList = new ArrayList<>();
RecyclerView recyclerView;
MsgGreetConfigAdapter adapter;
@@ -93,7 +93,7 @@ public class MsgMoreConfigActivity extends AbsOTOActivity {
cancel.setOnClickListener(v -> clearGreet());
recyclerView.setOnClickListener(v -> adapter.notifyDataSetChanged());
findViewById(R.id.upload_img).setOnClickListener(v -> {
- imageUtil.getImageByAlumb();
+ imageUtil.getImageByAlumb(false);
});
initData();
imageUtil.setImageResultCallback(new ImageResultCallback() {
diff --git a/OneToOne/src/main/java/com/shayu/onetoone/adapter/MsgMessageRecyclerViewAdapter.java b/OneToOne/src/main/java/com/shayu/onetoone/adapter/MsgMessageRecyclerViewAdapter.java
index 9ba773252..8c168dc5f 100644
--- a/OneToOne/src/main/java/com/shayu/onetoone/adapter/MsgMessageRecyclerViewAdapter.java
+++ b/OneToOne/src/main/java/com/shayu/onetoone/adapter/MsgMessageRecyclerViewAdapter.java
@@ -2,10 +2,14 @@ package com.shayu.onetoone.adapter;
import android.text.SpannableString;
+import com.yanzhenjie.recyclerview.SwipeRecyclerView;
+
import androidx.annotation.NonNull;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -14,6 +18,7 @@ import io.rong.imkit.conversationlist.ConversationListAdapter;
import io.rong.imkit.conversationlist.model.BaseUiConversation;
import io.rong.imkit.conversationlist.model.SingleConversation;
import io.rong.imkit.widget.adapter.ViewHolder;
+import io.rong.imkit.widget.refresh.SmartRefreshLayout;
import io.rong.imlib.model.Conversation;
/**
@@ -21,42 +26,65 @@ import io.rong.imlib.model.Conversation;
*/
public class MsgMessageRecyclerViewAdapter extends ConversationListAdapter {
List conversationList = null;
- Map map = new HashMap<>();
+ Map map = new HashMap<>();
+
+ SwipeRecyclerView mList;
+
+ public MsgMessageRecyclerViewAdapter(SwipeRecyclerView mList) {
+ this.mList = mList;
+ }
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
-
+ String targetId = getData().get(position).mCore.getTargetId();
+ try {
+ int type=Integer.parseInt(targetId);
+ mList.setSwipeItemMenuEnabled(position, type > 100);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
super.onBindViewHolder(holder, position);
}
@Override
public void setDataCollection(List data) {
- List tmp = new ArrayList<>();
- if(conversationList!=null) {
- tmp.addAll(conversationList);
- }
+ conversationList = new ArrayList<>(data);
+ List top = new ArrayList<>();
+ List data2 = new ArrayList<>();
for (BaseUiConversation datum : data) {
- if (datum.mCore.getConversationType() == Conversation.ConversationType.PRIVATE) {
- SingleConversation conversation = (SingleConversation) datum;
- if (conversation.mConversationContent.length() >= 6) {
- conversation.mConversationContent = new SpannableString(conversation.mConversationContent.toString().substring(0, 6) + "...·");
+ if (datum.mCore.getConversationType() == Conversation.ConversationType.PRIVATE || datum.mCore.getConversationType() == Conversation.ConversationType.SYSTEM) {
+ if (datum.mCore.isTop()) {
+ top.add(datum);
} else {
- conversation.mConversationContent = new SpannableString(conversation.mConversationContent.toString() + "·");
+ data2.add(datum);
}
- tmp.add(datum);
}
}
- for (BaseUiConversation conversation : map.keySet()) {
- if ( map.get(conversation) >= tmp.size()) {
- tmp.add(conversation);
- }else{
- tmp.add(map.get(conversation),conversation);
- }
- }
- super.setDataCollection(tmp);
+ List list = new ArrayList<>(top);
+ data2.addAll(map.values());
+ Collections.sort(data2,new ListComparator());
+ list.addAll(data2);
+
+ super.setDataCollection(list);
}
+
public void add(SingleConversation item, int position) {
- map.put(item, position);
+ map.put(position,item);
+ }
+
+ public void clearSystemNotification(){
+ for (BaseUiConversation conversation : map.values()) {
+ conversation.mCore.setUnreadMessageCount(0);
+ }
+ }
+
+ private class ListComparator implements Comparator {
+
+ @Override
+ public int compare(BaseUiConversation baseUiConversation, BaseUiConversation t1) {
+ System.out.println(" "+t1.mCore.getSentTime()+"|"+baseUiConversation.mCore.getSentTime()+" "+baseUiConversation.mCore.getConversationTitle()+"|"+t1.mCore.getConversationTitle());
+ return (int) (t1.mCore.getSentTime()-baseUiConversation.mCore.getSentTime());
+ }
}
}
diff --git a/OneToOne/src/main/java/com/shayu/onetoone/bean/OfficialNoticeBean.java b/OneToOne/src/main/java/com/shayu/onetoone/bean/OfficialNoticeBean.java
new file mode 100644
index 000000000..1d3ded00b
--- /dev/null
+++ b/OneToOne/src/main/java/com/shayu/onetoone/bean/OfficialNoticeBean.java
@@ -0,0 +1,81 @@
+package com.shayu.onetoone.bean;
+
+import com.yunbao.common.bean.BaseModel;
+
+public class OfficialNoticeBean extends BaseModel {
+ String title;
+ String image;
+ String new_image;
+ String content;
+ long addtime;
+ int num;
+ String link;
+ int type;
+
+ public OfficialNoticeBean() {
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getImage() {
+ return image;
+ }
+
+ public void setImage(String image) {
+ this.image = image;
+ }
+
+ public String getNew_image() {
+ return new_image;
+ }
+
+ public void setNew_image(String new_image) {
+ this.new_image = new_image;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+ public long getAddtime() {
+ return addtime;
+ }
+
+ public void setAddtime(long addtime) {
+ this.addtime = addtime;
+ }
+
+ public int getNum() {
+ return num;
+ }
+
+ public void setNum(int num) {
+ this.num = num;
+ }
+
+ public String getLink() {
+ return link;
+ }
+
+ public void setLink(String link) {
+ this.link = link;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+}
diff --git a/OneToOne/src/main/java/com/shayu/onetoone/event/MessageMsgBusEvent.java b/OneToOne/src/main/java/com/shayu/onetoone/event/MessageMsgBusEvent.java
index 22c71085b..be5d32e14 100644
--- a/OneToOne/src/main/java/com/shayu/onetoone/event/MessageMsgBusEvent.java
+++ b/OneToOne/src/main/java/com/shayu/onetoone/event/MessageMsgBusEvent.java
@@ -2,6 +2,7 @@ package com.shayu.onetoone.event;
public class MessageMsgBusEvent extends AbsBusEvent {
public static final int TYPE_ALL_READ = 0;
+ public static final int TYPE_UPDATE_SYSTEM=1;
public MessageMsgBusEvent(int type) {
super(type);
diff --git a/OneToOne/src/main/java/com/shayu/onetoone/manager/OTONetManager.java b/OneToOne/src/main/java/com/shayu/onetoone/manager/OTONetManager.java
index e71416f0c..7c1abfce4 100644
--- a/OneToOne/src/main/java/com/shayu/onetoone/manager/OTONetManager.java
+++ b/OneToOne/src/main/java/com/shayu/onetoone/manager/OTONetManager.java
@@ -1,11 +1,13 @@
package com.shayu.onetoone.manager;
import android.content.Context;
+import android.net.Uri;
import android.util.Log;
import com.shayu.onetoone.bean.AvatarBean;
import com.shayu.onetoone.bean.GreetBean;
import com.shayu.onetoone.bean.JoinAnchorBean;
+import com.shayu.onetoone.bean.OfficialNoticeBean;
import com.shayu.onetoone.bean.UserBean;
import com.shayu.onetoone.network.API;
import com.yunbao.common.CommonAppConfig;
@@ -14,6 +16,7 @@ import com.yunbao.common.bean.HttpCallbackModel;
import com.yunbao.common.bean.IMLoginModel;
import com.yunbao.common.http.ResponseModel;
import com.yunbao.common.http.base.HttpCallback;
+import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.utils.MD5Util;
import java.io.File;
@@ -22,6 +25,8 @@ import java.util.List;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
+import io.rong.imkit.userinfo.RongUserInfoManager;
+import io.rong.imlib.model.UserInfo;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
@@ -80,6 +85,9 @@ public class OTONetManager {
@Override
public void accept(ResponseModel liveGiftBeanResponseModel) throws Exception {
if (callback != null) {
+ IMLoginModel userInfo = liveGiftBeanResponseModel.getData().getInfo().getUser();
+ UserInfo info = new UserInfo(userInfo.getId() + "", userInfo.getUserNicename(), Uri.parse(userInfo.getAvatar()));
+ RongUserInfoManager.getInstance().refreshUserInfoCache(info);
callback.onSuccess(liveGiftBeanResponseModel.getData().getInfo());
}
}
@@ -346,8 +354,9 @@ public class OTONetManager {
public void updateFile(File file, HttpCallback callback) {
MultipartBody.Part uploadFile = createUploadFile(file);
+ IMLoginModel userInfo = IMLoginManager.get(mContext).getUserInfo();
API.get().otoApi(mContext)
- .updateFile(uploadFile)
+ .updateFile(uploadFile,userInfo.getId()+"",userInfo.getToken())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer>() {
@@ -367,6 +376,28 @@ public class OTONetManager {
}
}).isDisposed();
}
+ public void getMessageSystemLists(HttpCallback> callback) {
+ API.get().otoApi(mContext)
+ .getLists()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Consumer>>() {
+ @Override
+ public void accept(ResponseModel> model) throws Exception {
+ if (callback != null) {
+ callback.onSuccess(model.getData().getInfo());
+ }
+ }
+ }, new Consumer() {
+ @Override
+ public void accept(Throwable throwable) throws Exception {
+ Log.e(TAG, "accept: ", throwable);
+ if (callback != null) {
+ callback.onError(mContext.getString(com.yunbao.common.R.string.net_error));
+ }
+ }
+ }).isDisposed();
+ }
private MultipartBody.Part createUploadFile(File file) {
RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
diff --git a/OneToOne/src/main/java/com/shayu/onetoone/network/OneToOneApi.java b/OneToOne/src/main/java/com/shayu/onetoone/network/OneToOneApi.java
index fab8c220c..fa005f081 100644
--- a/OneToOne/src/main/java/com/shayu/onetoone/network/OneToOneApi.java
+++ b/OneToOne/src/main/java/com/shayu/onetoone/network/OneToOneApi.java
@@ -3,6 +3,7 @@ package com.shayu.onetoone.network;
import com.shayu.onetoone.bean.AvatarBean;
import com.shayu.onetoone.bean.GreetBean;
import com.shayu.onetoone.bean.JoinAnchorBean;
+import com.shayu.onetoone.bean.OfficialNoticeBean;
import com.shayu.onetoone.bean.UserBean;
import com.yunbao.common.bean.BaseModel;
import com.yunbao.common.bean.IMLoginModel;
@@ -82,10 +83,13 @@ public interface OneToOneApi {
Observable> getGreetConfigStatus();
@GET("/api/public/?service=Friendappinfos.setTextStatus")
Observable> setGreetConfigGreet( @Query("id")String id, @Query("status")String status);
-
- @POST("/api/public/?service=Friendappinfos.updateAvatar")
@Multipart
- Observable> updateFile(@Part MultipartBody.Part file);
+ @POST("/api/public/?service=Friendappinfos.updateAvatar")
+ Observable> updateFile(@Part MultipartBody.Part file,@Query("uid")String uid,@Query("token")String token);
+
+ @GET("/api/public/?service=Message.getLists")
+ Observable>> getLists();
+
}
diff --git a/OneToOne/src/main/java/com/shayu/onetoone/provider/CustomConversationProvider.java b/OneToOne/src/main/java/com/shayu/onetoone/provider/CustomConversationProvider.java
index d74a62b4f..2ce538a5f 100644
--- a/OneToOne/src/main/java/com/shayu/onetoone/provider/CustomConversationProvider.java
+++ b/OneToOne/src/main/java/com/shayu/onetoone/provider/CustomConversationProvider.java
@@ -1,6 +1,8 @@
package com.shayu.onetoone.provider;
import android.text.SpannableString;
+import android.view.View;
+import android.widget.TextView;
import com.alibaba.fastjson.JSONObject;
import com.shayu.onetoone.R;
@@ -25,12 +27,15 @@ public class CustomConversationProvider extends BaseConversationProvider {
public void bindViewHolder(ViewHolder holder, BaseUiConversation uiConversation, int position, List list, IViewProviderListener listener) {
String targetId = uiConversation.mCore.getTargetId();
UserInfo userInfo = RongUserInfoManager.getInstance().getUserInfo(targetId);
- if(userInfo!=null){
- JSONObject json=JSONObject.parseObject(userInfo.getExtra());
- if(json.getInteger("sex")==0){
- holder.setImageResource(R.id.sex,R.mipmap.ic_message_tab_woman);
- }else{
- holder.setImageResource(R.id.sex,R.mipmap.ic_message_tab_man);
+ if (userInfo != null) {
+ JSONObject json = JSONObject.parseObject(userInfo.getExtra());
+ holder.getView(R.id.sex).setVisibility(View.VISIBLE);
+ if (json.getInteger("sex") == -1) {
+ holder.getView(R.id.sex).setVisibility(View.GONE);
+ } else if (json.getInteger("sex") == 0) {
+ holder.setImageResource(R.id.sex, R.mipmap.ic_message_tab_woman);
+ } else {
+ holder.setImageResource(R.id.sex, R.mipmap.ic_message_tab_man);
}
}
super.bindViewHolder(holder, uiConversation, position, list, listener);
diff --git a/OneToOne/src/main/res/layout/activity_main.xml b/OneToOne/src/main/res/layout/activity_main.xml
index 1e5878084..d1c9f3c1c 100644
--- a/OneToOne/src/main/res/layout/activity_main.xml
+++ b/OneToOne/src/main/res/layout/activity_main.xml
@@ -24,6 +24,12 @@
android:background="@color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
+ app:tab_draw_badge="true"
+ app:tab_badge_offset_x="40dp"
+ app:tab_badge_offset_y="15dp"
+ app:tab_badge_text="2"
+ app:tab_badge_text_size="10sp"
+ app:tab_badge_gravity="right"
app:layout_constraintStart_toStartOf="parent"
app:tab_draw_indicator="false"
app:tab_item_is_equ_width="true">
@@ -46,7 +52,7 @@
android:layout_height="wrap_content"
android:textSize="10sp"
android:gravity="center"
- android:text="交友" />
+ android:text="@string/home_label_friends" />
+ android:text="@string/home_label_dynamic" />
+ android:text="@string/home_label_chat" />
+ android:text="@string/home_label_my" />
\ No newline at end of file
diff --git a/OneToOne/src/main/res/layout/activity_msg_config.xml b/OneToOne/src/main/res/layout/activity_msg_config.xml
index 27daaaf23..1c4ff3414 100644
--- a/OneToOne/src/main/res/layout/activity_msg_config.xml
+++ b/OneToOne/src/main/res/layout/activity_msg_config.xml
@@ -7,6 +7,7 @@
@@ -119,7 +120,7 @@
android:layout_height="42dp"
android:layout_marginEnd="14dp"
android:background="@drawable/bg_msg_greet_config_btn_cancel"
- android:text="清除设置"
+ android:text="@string/greet_clear_config"
android:textColor="#FFFFFF"
android:textSize="16sp" />
@@ -128,7 +129,7 @@
android:layout_width="118dp"
android:layout_height="42dp"
android:background="@drawable/bg_msg_greet_config_btn_apply"
- android:text="保存设置"
+ android:text="@string/greet_save_config"
android:textColor="#FFFFFF"
android:textSize="16sp" />
diff --git a/OneToOne/src/main/res/layout/dialog_msg_more.xml b/OneToOne/src/main/res/layout/dialog_msg_more.xml
index c14bb9668..6219e3100 100644
--- a/OneToOne/src/main/res/layout/dialog_msg_more.xml
+++ b/OneToOne/src/main/res/layout/dialog_msg_more.xml
@@ -1,18 +1,19 @@
+ android:layout_marginEnd="16dp"
+ android:layout_marginBottom="20dp"
+ android:background="#F7F7F7">
+
+
1v1
+ 选择活动
+ 【安全提示】為保障您的權益,慶提高警惕,不要輕易添加或提供第三方聯繫方式
+ 成功
+ 失败
+ 错误
+ 交友
+ 动态
+ 消息
+ 我的
+ 打招呼文案
+ 上传图片(非必選)
+ 清除设置
+ 保存设置
\ No newline at end of file
diff --git a/OneToOne/src/main/res/values-zh-rTW/strings.xml b/OneToOne/src/main/res/values-zh-rTW/strings.xml
index 6119a1562..3a986f997 100644
--- a/OneToOne/src/main/res/values-zh-rTW/strings.xml
+++ b/OneToOne/src/main/res/values-zh-rTW/strings.xml
@@ -1,4 +1,17 @@
1v1
+ 选择活动
+ 【安全提示】為保障您的權益,慶提高警惕,不要輕易添加或提供第三方聯繫方式
+ 成功
+ 失败
+ 错误
+ 交友
+ 动态
+ 消息
+ 我的
+ 打招呼文案
+ 上传图片(非必選)
+ 清除设置
+ 保存设置
\ No newline at end of file
diff --git a/OneToOne/src/main/res/values/dimens.xml b/OneToOne/src/main/res/values/dimens.xml
new file mode 100644
index 000000000..20354d674
--- /dev/null
+++ b/OneToOne/src/main/res/values/dimens.xml
@@ -0,0 +1,4 @@
+
+
+ 42dp
+
\ No newline at end of file
diff --git a/OneToOne/src/main/res/values/strings.xml b/OneToOne/src/main/res/values/strings.xml
index f0e03ec59..3fc246954 100644
--- a/OneToOne/src/main/res/values/strings.xml
+++ b/OneToOne/src/main/res/values/strings.xml
@@ -1,4 +1,17 @@
1v1
TagSelection_Activity
+ [Safety Tips]
+ success
+ failure
+ error
+ Friends
+ Dynamic
+ Message
+ My
+ Greeting copy
+ Upload a picture (not required)
+ Clear Settings
+ Save Settings
+
\ No newline at end of file
diff --git a/common/src/main/java/com/yunbao/common/http/base/PostRequestParams.java b/common/src/main/java/com/yunbao/common/http/base/PostRequestParams.java
index 4e49b9120..52efe4b2e 100644
--- a/common/src/main/java/com/yunbao/common/http/base/PostRequestParams.java
+++ b/common/src/main/java/com/yunbao/common/http/base/PostRequestParams.java
@@ -8,14 +8,14 @@ import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.utils.RouteUtil;
import okhttp3.FormBody;
+import okhttp3.MultipartBody;
import okhttp3.Request;
public class PostRequestParams implements IRequestParam {
@Override
- public Request getRequest(boolean isNeedUid,boolean isNeedToken, Request request, Context context) {
- if (request.body() instanceof FormBody) {
+ public Request getRequest(boolean isNeedUid, boolean isNeedToken, Request request, Context context) {
+ if (request.body() instanceof FormBody) {
FormBody.Builder bodyBuilder = new FormBody.Builder();
-
FormBody formBody = (FormBody) request.body();
for (int i = 0; i < formBody.size(); i++) {
@@ -32,7 +32,7 @@ public class PostRequestParams implements IRequestParam {
if (isNeedUid) {
bodyBuilder.addEncoded("uid", String.valueOf(model.getId()));
}
- if(isNeedToken) {
+ if (isNeedToken) {
bodyBuilder.addEncoded("token", model.getToken());
}
formBody = bodyBuilder.build();
diff --git a/common/src/main/java/com/yunbao/common/utils/ProcessImageUtil.java b/common/src/main/java/com/yunbao/common/utils/ProcessImageUtil.java
index bca1f33fa..4a0da62b1 100644
--- a/common/src/main/java/com/yunbao/common/utils/ProcessImageUtil.java
+++ b/common/src/main/java/com/yunbao/common/utils/ProcessImageUtil.java
@@ -101,7 +101,11 @@ public class ProcessImageUtil extends ProcessResultUtil {
mAlumbResultCallback = new ActivityResultCallback() {
@Override
public void onSuccess(Intent intent) {
- crop(intent.getData());
+ if(mNeedCrop) {
+ crop(intent.getData());
+ }else{
+ mResultCallback.onSuccess(new File(intent.getData().toString()));
+ }
}
@Override
@@ -143,6 +147,10 @@ public class ProcessImageUtil extends ProcessResultUtil {
* 相册获取图片
*/
public void getImageByAlumb() {
+ getImageByAlumb(true);
+ }
+ public void getImageByAlumb(boolean needCrop) {
+ mNeedCrop = needCrop;
requestPermissions(mAlumbPermissions, mAlumbPermissionCallback);
}