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); }