diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/AbsOTOActivity.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/AbsOTOActivity.java index d8d36378e..1745acace 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/AbsOTOActivity.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/AbsOTOActivity.java @@ -40,6 +40,7 @@ public abstract class AbsOTOActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + onCreate(); setStatusBar(); setContentView(getLayoutId()); mContext = this; @@ -64,6 +65,8 @@ public abstract class AbsOTOActivity extends AppCompatActivity { protected abstract void main(Bundle savedInstanceState); + protected void onCreate(){} + /** * 设置标题 */ diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/MainActivity.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/MainActivity.java index c74f5422d..bf7419f34 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/MainActivity.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/MainActivity.java @@ -150,13 +150,8 @@ public class MainActivity extends AbsOTOActivity { } private void updateUnreadCount(int count) { - if(count==0){ - dslTabLayout.setDrawBadge(false); - }else { - dslTabLayout.setDrawBadge(true); - } + dslTabLayout.setDrawBadge(count > 0); dslTabLayout.updateTabBadge(2, count + ""); - } @Override diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/home/HotFragment.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/home/HotFragment.java index 04862d311..b84dd9694 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/home/HotFragment.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/home/HotFragment.java @@ -10,7 +10,12 @@ import androidx.annotation.NonNull; import com.shayu.onetoone.R; import com.shayu.onetoone.activity.fragments.BaseFragment; import com.shayu.onetoone.adapter.HomeHotListAdapter; +import com.shayu.onetoone.bean.HomeItemBean; +import com.shayu.onetoone.manager.OTONetManager; import com.yanzhenjie.recyclerview.SwipeRecyclerView; +import com.yunbao.common.http.base.HttpCallback; + +import java.util.List; import io.rong.imkit.widget.refresh.SmartRefreshLayout; import io.rong.imkit.widget.refresh.api.RefreshLayout; @@ -48,6 +53,20 @@ public class HotFragment extends BaseFragment { private void onConversationListRefresh(RefreshLayout refreshLayout) { + } + private void initData(){ + OTONetManager.getInstance(mContext) + .getHomeHot(new HttpCallback>() { + @Override + public void onSuccess(List data) { + + } + + @Override + public void onError(String error) { + + } + }); } @Override public View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 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 733905fb1..1595a82ec 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 @@ -10,7 +10,12 @@ import androidx.annotation.NonNull; 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.manager.OTONetManager; import com.yanzhenjie.recyclerview.SwipeRecyclerView; +import com.yunbao.common.http.base.HttpCallback; + +import java.util.List; import io.rong.imkit.widget.refresh.SmartRefreshLayout; import io.rong.imkit.widget.refresh.api.RefreshLayout; @@ -47,13 +52,30 @@ public class RecommendFragment extends BaseFragment { top.setOnClickListener(view -> { recyclerView.scrollToPosition(0); }); + initData(); } private void onConversationListLoadMore() { + mRefreshLayout.finishLoadMore(); } private void onConversationListRefresh(RefreshLayout refreshLayout) { - + initData(); + } + private void initData(){ + OTONetManager.getInstance(mContext) + .getHomeRecommend(new HttpCallback>() { + @Override + public void onSuccess(List data) { + adapter.setList(data); + mRefreshLayout.finishRefresh(); + } + + @Override + public void onError(String error) { + mRefreshLayout.finishRefresh(); + } + }); } @Override 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 c7f42c79f..0b54d1cf8 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 @@ -1,17 +1,28 @@ package com.shayu.onetoone.activity.fragments.message; +import android.annotation.SuppressLint; import android.net.Uri; import android.os.Bundle; +import android.util.Log; +import android.view.MotionEvent; import android.view.View; +import android.view.WindowInsets; import android.widget.Button; +import android.widget.EditText; import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; import com.shayu.onetoone.R; import com.shayu.onetoone.bean.MessageChatTipsContent; +import com.shayu.onetoone.bean.UserBean; +import com.shayu.onetoone.manager.OTONetManager; import com.yunbao.common.CommonAppConfig; +import com.yunbao.common.http.base.HttpCallback; import com.yunbao.common.interfaces.ImageResultCallback; import com.yunbao.common.utils.ProcessImageUtil; import com.yunbao.common.utils.ToastUtil; @@ -23,6 +34,10 @@ import java.util.Date; import io.rong.imkit.IMCenter; import io.rong.imkit.conversation.ConversationFragment; +import io.rong.imkit.manager.AudioPlayManager; +import io.rong.imkit.manager.AudioRecordManager; +import io.rong.imkit.utils.PermissionCheckUtil; +import io.rong.imkit.utils.RongOperationPermissionUtils; import io.rong.imlib.IRongCallback; import io.rong.imlib.RongIMClient; import io.rong.imlib.model.Conversation; @@ -38,7 +53,13 @@ public class ChatMessageFragment extends ConversationFragment { ImageView img, call, video, gift; ProcessImageUtil cameraUtil; String targetId; - Conversation.ConversationType conversationType= Conversation.ConversationType.PRIVATE; + Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE; + View audioLayout; + ImageView btnAudio; + ImageView btnText; + ImageView btnClose; + private float mLastTouchY; + private boolean mUpDirection; @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { @@ -51,7 +72,7 @@ public class ChatMessageFragment extends ConversationFragment { initCamera(); call.setOnClickListener(v -> { - MessageChatTipsContent bean= MessageChatTipsContent.obtain(WordUtil.getString(R.string.message_chat_tip1)); + 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) { @@ -61,11 +82,12 @@ public class ChatMessageFragment extends ConversationFragment { @Override public void onError(RongIMClient.ErrorCode e) { ToastUtil.show(R.string.system_tip_failure); - System.out.println("失败:"+e.getMessage()); + System.out.println("失败:" + e.getMessage()); } }); }); + updateMyInfo(); } private void initCamera() { @@ -87,6 +109,7 @@ public class ChatMessageFragment extends ConversationFragment { }); } + @SuppressLint("ClickableViewAccessibility") private void initBtn() { try { Field field = mRongExtension.getInputPanel().getClass().getDeclaredField("mInputPanel"); @@ -94,15 +117,83 @@ public class ChatMessageFragment extends ConversationFragment { mInputPanel = (View) field.get(mRongExtension.getInputPanel()); assert mInputPanel != null; mSendBtn = mInputPanel.findViewById(R.id.send_btn); + ImageView mVoiceToggleBtn = (ImageView) mInputPanel.findViewById(R.id.input_panel_voice_toggle); + assert mVoiceToggleBtn != null; + + mVoiceToggleBtn.setOnClickListener(v -> { + changeAudioLayout(); + }); img = mInputPanel.findViewById(R.id.input_panel_image_btn); video = mInputPanel.findViewById(R.id.input_panel_video_btn); call = mInputPanel.findViewById(R.id.input_panel_call_btn); gift = mInputPanel.findViewById(R.id.input_panel_gift_btn); + audioLayout = mInputPanel.findViewById(R.id.audio_layout); + btnAudio = mInputPanel.findViewById(R.id.audio_btn); + btnText = mInputPanel.findViewById(R.id.text_btn); + btnClose = mInputPanel.findViewById(R.id.close_btn); + + btnText.setOnClickListener(v -> changeAudioLayout()); + btnClose.setOnClickListener(v -> changeAudioLayout()); + + btnAudio.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + float mOffsetLimit = 70.0F * v.getContext().getResources().getDisplayMetrics().density; + String[] permissions = new String[]{"android.permission.RECORD_AUDIO"}; + if (!PermissionCheckUtil.checkPermissions(v.getContext(), permissions) && event.getAction() == 0) { + PermissionCheckUtil.requestPermissions(ChatMessageFragment.this, permissions, 100); + return true; + } else { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + if (AudioPlayManager.getInstance().isPlaying()) { + AudioPlayManager.getInstance().stopPlay(); + } + + if (RongOperationPermissionUtils.isOnRequestHardwareResource()) { + Toast.makeText(v.getContext(), v.getContext().getResources().getString(io.rong.imkit.R.string.rc_voip_occupying), Toast.LENGTH_SHORT).show(); + return true; + } + ChatMessageFragment.this.mLastTouchY = event.getY(); + ChatMessageFragment.this.mUpDirection = false; + AudioRecordManager.getInstance().startRecord(v.getRootView(), mRongExtension.getConversationIdentifier()); + } else if (event.getAction() == MotionEvent.ACTION_MOVE) { + if (ChatMessageFragment.this.mLastTouchY - event.getY() > mOffsetLimit && !ChatMessageFragment.this.mUpDirection) { + AudioRecordManager.getInstance().willCancelRecord(); + ChatMessageFragment.this.mUpDirection = true; + } else if (event.getY() - ChatMessageFragment.this.mLastTouchY > -mOffsetLimit && ChatMessageFragment.this.mUpDirection) { + AudioRecordManager.getInstance().continueRecord(); + ChatMessageFragment.this.mUpDirection = false; + } + + + } else if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) { + + AudioRecordManager.getInstance().stopRecord(); + } + + if (mRongExtension.getConversationIdentifier().getType().equals(Conversation.ConversationType.PRIVATE)) { + RongIMClient.getInstance().sendTypingStatus(mRongExtension.getConversationIdentifier().getType(), + mRongExtension.getConversationIdentifier().getTargetId(), "RC:VcMsg"); + } + } + return true; + } + }); + } catch (Exception e) { + e.printStackTrace(); throw new RuntimeException(e); } } + private void changeAudioLayout() { + if (audioLayout.getVisibility() == View.VISIBLE) { + audioLayout.setVisibility(View.GONE); + } else { + audioLayout.setVisibility(View.VISIBLE); + } + } + private void sendText() { try { Field field = mRongExtension.getInputPanel().getClass().getDeclaredField("mSendBtn"); @@ -116,7 +207,7 @@ public class ChatMessageFragment extends ConversationFragment { } private void sendImage(File file) { - ImageMessage imageMessage = ImageMessage.obtain(Uri.parse("file://"+file.getAbsolutePath()),true); + ImageMessage imageMessage = ImageMessage.obtain(Uri.parse("file://" + file.getAbsolutePath()), true); Message message = Message.obtain(targetId, conversationType, imageMessage); message.setSenderUserId(CommonAppConfig.getInstance().getUid()); message.setObjectName("RC:ImgMsg"); @@ -152,4 +243,19 @@ public class ChatMessageFragment extends ConversationFragment { }); } + + private void updateMyInfo() { + OTONetManager.getInstance(getActivity()) + .getBaseInfos(false, new HttpCallback() { + @Override + public void onSuccess(UserBean data) { + + } + + @Override + public void onError(String error) { + + } + }); + } } 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 5f0374e80..6c3daddbe 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,7 @@ package com.shayu.onetoone.activity.fragments.message; import android.content.Context; +import android.content.Intent; import android.graphics.Color; import android.net.Uri; import android.os.Bundle; @@ -20,6 +21,7 @@ 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.bean.TargetUserInfoBean; import com.shayu.onetoone.event.MessageMsgBusEvent; import com.shayu.onetoone.manager.OTONetManager; import com.yanzhenjie.recyclerview.OnItemMenuClickListener; @@ -34,6 +36,7 @@ import com.yunbao.common.http.base.HttpCallback; import com.yunbao.common.utils.Bus; import com.yunbao.common.utils.DpUtil; import com.yunbao.common.utils.RandomUtil; +import com.yunbao.common.utils.SpUtil; import com.yunbao.common.utils.ToastUtil; import org.greenrobot.eventbus.Subscribe; @@ -48,6 +51,7 @@ 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; @@ -75,6 +79,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.ConversationIdentifier; import io.rong.imlib.model.Message; import io.rong.imlib.model.UserInfo; @@ -151,8 +156,8 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt } }); initSystemNotice(); - initUserInfo(0); initRongConfig(); + updateUserInfo(); } private void initRongConfig() { @@ -165,36 +170,6 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt }); } - private void initUserInfo(long timer) { - RongIMClient.getInstance().getConversationListByPage(new RongIMClient.ResultCallback>() { - @Override - public void onSuccess(List conversations) { - long destructTime = 0; - for (Conversation conversation : conversations) { - String targetId = conversation.getTargetId(); - Log.i(TAG, "targetId = " + targetId); - UserInfo info = new UserInfo(targetId, "用户名" + targetId, Uri.parse("https://downs.yaoulive.com/avatar/12.jpg")); - JSONObject json = new JSONObject(); - json.put("sex", RandomUtil.nextInt(20) % 2); - json.put("age", RandomUtil.nextInt(40)); - info.setExtra(json.toJSONString()); - RongUserInfoManager.getInstance().refreshUserInfoCache(info); - if (conversations.size() < 10) { - destructTime = conversation.getSentTime(); - } - } - if (destructTime > 0) { - initUserInfo(destructTime); - } - } - - @Override - public void onError(RongIMClient.ErrorCode e) { - - } - }, timer, 10, Conversation.ConversationType.PRIVATE); - } - private void initSystemNotice() { @@ -205,9 +180,17 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt public void onSuccess(List data) { for (OfficialNoticeBean datum : data) { if (datum.getType() == 3) { + SpUtil.setStringValue("customerService", JSONObject.toJSONString(datum)); continue; } - mAdapter.add(setTopData(datum.getTitle(), datum.getContent(), datum.getAddtime()*1000, datum.getNew_image(), datum.getNum(), datum.getType()), datum.getType()); + mAdapter.add(setTopData(datum.getTitle(), + datum.getContent(), + datum.getAddtime() * 1000, + datum.getNew_image(), + datum.getNum(), + datum.getType(), + JSONObject.toJSONString(datum) + ), datum.getType()); } onConversationListRefresh(mRefreshLayout); mAdapter.notifyDataSetChanged(); @@ -223,7 +206,7 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt } - private SingleConversation setTopData(String title, String content, long time, String avatar, int num, int id) { + private SingleConversation setTopData(String title, String content, long time, String avatar, int num, int id, String exp) { SingleConversation conversation = new SingleConversation(getContext(), new Conversation()); conversation.mCore.setConversationType(Conversation.ConversationType.PRIVATE); conversation.mCore.setSenderUserName(title); @@ -233,6 +216,7 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt conversation.mConversationContent = new SpannableString(content); conversation.mCore.setUnreadMessageCount(num); conversation.mCore.setTargetId(id + ""); + conversation.mCore.setLatestMessageExtra(exp); UserInfo info = new UserInfo(id + "", title, Uri.parse(avatar)); JSONObject json = new JSONObject(); json.put("sex", -1); @@ -376,6 +360,7 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt this.mRefreshLayout.setOnRefreshListener(new OnRefreshListener() { public void onRefresh(@NonNull RefreshLayout refreshLayout) { MsgMessageFragment.this.onConversationListRefresh(refreshLayout); + updateUserInfo(); } }); this.mRefreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { @@ -467,12 +452,13 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt BaseUiConversation baseUiConversation = (BaseUiConversation) this.mAdapter.getItem(position); String targetId = baseUiConversation.mCore.getTargetId(); try { - long type=Integer.parseInt(targetId); - if(type<100){ + int type = Integer.parseInt(targetId); + if (type < 100) { ToastUtil.showDebug("还没做"); + startSystem(JSONObject.parseObject(mAdapter.getSystemItem(type).mCore.getLatestMessageExtra(), OfficialNoticeBean.class), baseUiConversation.getConversationIdentifier()); return; } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } ConversationListBehaviorListener listBehaviorListener = RongConfigCenter.conversationListConfig().getListener(); @@ -493,53 +479,18 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt } } + private void startSystem(OfficialNoticeBean noticeBean, ConversationIdentifier conversationIdentifier) { + if (noticeBean.getType() != 3) { + Bundle bundle = new Bundle(); + bundle.putInt("model", noticeBean.getType()); + bundle.putString("data", JSONObject.toJSONString(noticeBean)); + RouteUtils.routeToConversationActivity(getContext(), conversationIdentifier, bundle); + } + } + @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; } @@ -564,11 +515,42 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt return creator; } + private void updateUserInfo() { + List ids = new ArrayList<>(); + for (BaseUiConversation datum : mAdapter.getData()) { + String targetId = datum.mCore.getTargetId(); + try { + int id = Integer.parseInt(targetId); + if (id > 100) { + ids.add(id); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + OTONetManager.getInstance(mContext) + .getTargetUserInfoList(ids, new HttpCallback>() { + @Override + public void onSuccess(List data) { + for (TargetUserInfoBean item : data) { + UserInfo info = new UserInfo(item.getId() + "", item.getUser_nicename(), Uri.parse(item.getAvatar())); + info.setExtra(JSONObject.toJSONString(item)); + RongUserInfoManager.getInstance().refreshUserInfoCache(info); + } + } + + @Override + public void onError(String error) { + + } + }); + } + @Subscribe(threadMode = ThreadMode.MAIN) public void busEvent(MessageMsgBusEvent event) { if (event.getType() == MessageMsgBusEvent.TYPE_ALL_READ) { allRead(); - }else if(event.getType()==MessageMsgBusEvent.TYPE_UPDATE_SYSTEM){ + } else if (event.getType() == MessageMsgBusEvent.TYPE_UPDATE_SYSTEM) { initSystemNotice(); } } diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/SystemMessageFragment.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/SystemMessageFragment.java new file mode 100644 index 000000000..0769e13ce --- /dev/null +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/SystemMessageFragment.java @@ -0,0 +1,74 @@ +package com.shayu.onetoone.activity.fragments.message; + +import android.os.Bundle; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.shayu.onetoone.bean.SystemMessageBean; +import com.shayu.onetoone.manager.OTONetManager; +import com.yunbao.common.http.base.HttpCallback; + +import java.lang.reflect.Field; +import java.util.List; + +import io.rong.imkit.IMCenter; +import io.rong.imkit.conversation.ConversationFragment; +import io.rong.imkit.conversation.MessageListAdapter; +import io.rong.imkit.model.UiMessage; +import io.rong.imlib.RongIMClient; +import io.rong.imlib.model.Conversation; +import io.rong.imlib.model.Message; +import io.rong.message.TextMessage; + +public class SystemMessageFragment extends ConversationFragment { + View mInputPanel; + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + init(); + initData(); + } + + private void init() { + try { + Field field = mRongExtension.getInputPanel().getClass().getDeclaredField("mInputPanel"); + field.setAccessible(true); + mInputPanel = (View) field.get(mRongExtension.getInputPanel()); + assert mInputPanel != null; + mInputPanel.setVisibility(View.GONE); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } + + private void initData() { + OTONetManager.getInstance(getContext()) + .getSystemMessageList(SystemMessageBean.TYPE_SYSTEM, new HttpCallback>() { + @Override + public void onSuccess(List data) { + for (SystemMessageBean item : data) { + sendMessage(item); + } + mAdapter.notifyDataSetChanged(); + + } + + @Override + public void onError(String error) { + + } + + private void sendMessage(SystemMessageBean item) { + TextMessage content = TextMessage.obtain(item.getContent()); + UiMessage message = new UiMessage(Message.obtain("4", Conversation.ConversationType.PRIVATE, content)); + message.setSentStatus(Message.SentStatus.SENT); + message.setTargetId("4"); + mAdapter.add(message); + } + }); + } +} diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/message/ChatActivity.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/message/ChatActivity.java index b42d38eff..dfbc36c31 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/message/ChatActivity.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/message/ChatActivity.java @@ -1,15 +1,31 @@ package com.shayu.onetoone.activity.message; import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.TextView; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import com.alibaba.android.arouter.facade.annotation.Route; +import com.alibaba.fastjson.JSONObject; +import com.makeramen.roundedimageview.RoundedImageView; import com.shayu.onetoone.R; import com.shayu.onetoone.activity.AbsOTOActivity; import com.shayu.onetoone.activity.fragments.message.ChatMessageFragment; +import com.shayu.onetoone.activity.fragments.message.SystemMessageFragment; +import com.shayu.onetoone.bean.OfficialNoticeBean; +import com.shayu.onetoone.bean.SystemMessageBean; +import com.shayu.onetoone.bean.UserBean; +import com.shayu.onetoone.manager.OTONetManager; import com.shayu.onetoone.manager.RouteManager; +import com.yunbao.common.glide.ImgLoader; +import com.yunbao.common.http.base.HttpCallback; +import com.yunbao.common.utils.RouteUtil; +import com.yunbao.common.utils.SpUtil; +import com.yunbao.common.utils.StringUtil; import io.rong.imkit.conversation.ConversationFragment; @@ -18,17 +34,120 @@ import io.rong.imkit.conversation.ConversationFragment; */ @Route(path = RouteManager.ACTIVITY_MSG_CHAT) public class ChatActivity extends AbsOTOActivity { + String targetId; + RoundedImageView avatar; + TextView uname; + TextView sign; + TextView home; + ImageView sex; + ImageView status; + Button follow; + OfficialNoticeBean noticeBean; + + View titleBar; + int model; + Button callService; + + @Override + protected void onCreate() { + super.onCreate(); + model = getIntent().getIntExtra("model", 0); + String data = getIntent().getStringExtra("data"); + if (!StringUtil.isEmpty(data)) { + noticeBean = JSONObject.parseObject(data, OfficialNoticeBean.class); + } + } + @Override protected int getLayoutId() { + switch (model) { + case SystemMessageBean.TYPE_SYSTEM: + return R.layout.activity_msg_message; + } return R.layout.activity_msg_chat; } @Override protected void main(Bundle savedInstanceState) { - ConversationFragment conversationFragment = new ChatMessageFragment(); + + + ConversationFragment conversationFragment; + switch (model) { + case SystemMessageBean.TYPE_SYSTEM: + conversationFragment = new SystemMessageFragment(); + initSystemMessage(); + break; + default: + conversationFragment = new ChatMessageFragment(); + initChat(); + } + FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.container, conversationFragment); transaction.commit(); + + } + + private void initSystemMessage() { + titleBar = findViewById(R.id.include); + callService=findViewById(R.id.call_service); + titleBar.setVisibility(View.VISIBLE); + setTitle(noticeBean.getTitle()); + callService.setOnClickListener(v -> { + String value = SpUtil.getStringValue("customerService"); + if(!StringUtil.isEmpty(value)) { + OfficialNoticeBean service=JSONObject.parseObject(value, OfficialNoticeBean.class); + RouteUtil.forwardZhuangBanActivity(service.getTitle(),service.getLink()); + } + }); + } + + private void initChat() { + avatar = findViewById(R.id.avatar); + uname = findViewById(R.id.user_name); + sign = findViewById(R.id.signature); + sex = findViewById(R.id.sex); + status = findViewById(R.id.status); + home = findViewById(R.id.home); + follow = findViewById(R.id.follow); + targetId = getIntent().getStringExtra("targetId"); + updateUserInfo(); + follow.setOnClickListener(v -> { + + }); + } + + private void updateUserInfo() { + OTONetManager.getInstance(mContext) + .getTargetUserInfo(Integer.parseInt(targetId), new HttpCallback() { + @Override + public void onSuccess(UserBean data) { + ImgLoader.display(mContext, data.getUser().getAvatar(), avatar); + uname.setText(data.getUser().getUserNicename()); + sign.setText(data.getUser().getSignature()); + if (data.getUser().getSex() == 1) { + sex.setImageResource(R.mipmap.ic_message_tab_man); + } else { + sex.setImageResource(R.mipmap.ic_message_tab_woman); + } + + switch (Integer.parseInt(data.getUser().getOnline())) { + case 0: + status.setImageResource(R.mipmap.ic_message_msg_status_online); + break; + case 2: + status.setImageResource(R.mipmap.ic_message_msg_status_busy); + break; + default: + status.setImageResource(R.mipmap.ic_message_msg_status_offline); + } + } + + @Override + public void onError(String error) { + + } + }); } } diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/message/MsgMoreGreetConfigActivity.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/message/MsgMoreGreetConfigActivity.java index 5038af1e4..72eebd674 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/message/MsgMoreGreetConfigActivity.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/message/MsgMoreGreetConfigActivity.java @@ -104,6 +104,8 @@ public class MsgMoreGreetConfigActivity extends AbsOTOActivity { @Override public void onSuccess(File file) { + System.out.println("file = " + file.getAbsolutePath()); + System.out.println("file.exists() = " + file.exists()); OTONetManager.getInstance(mContext) .updateFile(file, new HttpCallback() { @Override @@ -188,7 +190,15 @@ public class MsgMoreGreetConfigActivity extends AbsOTOActivity { .getMessageMoreGreetConfig(new HttpCallback>() { @Override public void onSuccess(List data) { - adapter.setList(data); + List list=new ArrayList<>(); + for (GreetBean item : data) { + if(item.getType()==0){ + list.add(item); + }else if(item.getType()==2){ + ImgLoader.display(mContext,item.getContent(), (ImageView) findViewById(R.id.imageView5)); + } + } + adapter.setList(list); } @Override diff --git a/OneToOne/src/main/java/com/shayu/onetoone/adapter/HomeHotListAdapter.java b/OneToOne/src/main/java/com/shayu/onetoone/adapter/HomeHotListAdapter.java index 81ddce790..12b359f6e 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/adapter/HomeHotListAdapter.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/adapter/HomeHotListAdapter.java @@ -4,23 +4,38 @@ import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; +import com.makeramen.roundedimageview.RoundedImageView; import com.shayu.onetoone.R; +import com.shayu.onetoone.bean.HomeItemBean; -public class HomeHotListAdapter extends RecyclerView.Adapter{ - private Context mContext; +import java.util.ArrayList; +import java.util.List; + +public class HomeHotListAdapter extends RecyclerView.Adapter { + private Context mContext; + private List list; public HomeHotListAdapter(Context mContext) { this.mContext = mContext; + list = new ArrayList<>(); + + } + + public void setList(List list) { + this.list = list; + notifyDataSetChanged(); } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_home_hot,parent,false)); + return new ViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_home_hot, parent, false)); } @Override @@ -30,14 +45,31 @@ public class HomeHotListAdapter extends RecyclerView.Adapter{ - private Context mContext; +import java.util.ArrayList; +import java.util.List; + +public class HomeRecommendListAdapter extends RecyclerView.Adapter { + private Context mContext; + private List list; public HomeRecommendListAdapter(Context mContext) { this.mContext = mContext; + list = new ArrayList<>(); } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_home_recommend,parent,false)); + return new ViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_home_recommend, parent, false)); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { - + holder.setData(list.get(position), position); } @Override public int getItemCount() { - return 10; + return list.size(); } - public class ViewHolder extends RecyclerView.ViewHolder{ + public void setList(List data) { + this.list = data; + notifyDataSetChanged(); + } + public class ViewHolder extends RecyclerView.ViewHolder { + private RoundedImageView avatar; + private ImageView chat; + private TextView userName; + private ImageView sex; + private TextView star; + private TextView sign; + private LinearLayout tagLayout; public ViewHolder(@NonNull View itemView) { super(itemView); + star = itemView.findViewById(R.id.star_up); + sex = itemView.findViewById(R.id.sex); + chat = itemView.findViewById(R.id.btn_chat_up); + userName = itemView.findViewById(R.id.user_name); + avatar = itemView.findViewById(R.id.avatar); + tagLayout = itemView.findViewById(R.id.user_tag_layout); + sign = itemView.findViewById(R.id.user_sign); + } + + private void setData(HomeItemBean bean, int position) { + star.setText(bean.getStar() + "·" + bean.getStar_name()); + sign.setText(bean.getSignature()); + userName.setText(bean.getUser_nicename()); + if (WordUtil.isNewZh()) { + addTag(bean.getCn_label()); + } else { + addTag(bean.getEn_label()); + } + if (bean.getSex() == 1) { + sex.setImageResource(R.mipmap.ic_message_tab_man); + } else { + sex.setImageResource(R.mipmap.ic_message_tab_woman); + } + ImgLoader.display(mContext, bean.getAvatar(), avatar); + chat.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ConversationUtils.startConversation(mContext, bean.getId() + ""); + } + }); + } + + private void addTag(List tags) { + for (String tag : tags) { + if (StringUtil.isEmpty(tag)) { + continue; + } + TextView tagView = (TextView) LayoutInflater.from(mContext).inflate(R.layout.item_home_recommend_tag, (ViewGroup) itemView.getRootView(), false); + tagView.setText(tag); + tagLayout.addView(tagView); + } } } } 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 8c168dc5f..71ebf28eb 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/adapter/MsgMessageRecyclerViewAdapter.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/adapter/MsgMessageRecyclerViewAdapter.java @@ -26,7 +26,7 @@ import io.rong.imlib.model.Conversation; */ public class MsgMessageRecyclerViewAdapter extends ConversationListAdapter { List conversationList = null; - Map map = new HashMap<>(); + Map map = new HashMap<>(); SwipeRecyclerView mList; @@ -38,9 +38,9 @@ public class MsgMessageRecyclerViewAdapter extends ConversationListAdapter { public void onBindViewHolder(@NonNull ViewHolder holder, int position) { String targetId = getData().get(position).mCore.getTargetId(); try { - int type=Integer.parseInt(targetId); + int type = Integer.parseInt(targetId); mList.setSwipeItemMenuEnabled(position, type > 100); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } super.onBindViewHolder(holder, position); @@ -52,6 +52,14 @@ public class MsgMessageRecyclerViewAdapter extends ConversationListAdapter { List top = new ArrayList<>(); List data2 = new ArrayList<>(); for (BaseUiConversation datum : data) { + try { + int parseInt = Integer.parseInt(datum.mCore.getTargetId()); + if (parseInt < 100) { + continue; + } + } catch (Exception e) { + e.printStackTrace(); + } if (datum.mCore.getConversationType() == Conversation.ConversationType.PRIVATE || datum.mCore.getConversationType() == Conversation.ConversationType.SYSTEM) { if (datum.mCore.isTop()) { top.add(datum); @@ -62,7 +70,7 @@ public class MsgMessageRecyclerViewAdapter extends ConversationListAdapter { } List list = new ArrayList<>(top); data2.addAll(map.values()); - Collections.sort(data2,new ListComparator()); + Collections.sort(data2, new ListComparator()); list.addAll(data2); super.setDataCollection(list); @@ -70,21 +78,25 @@ public class MsgMessageRecyclerViewAdapter extends ConversationListAdapter { public void add(SingleConversation item, int position) { - map.put(position,item); + map.put(position, item); } - public void clearSystemNotification(){ + public void clearSystemNotification() { for (BaseUiConversation conversation : map.values()) { conversation.mCore.setUnreadMessageCount(0); } } + public SingleConversation getSystemItem(int position) { + return map.get(position); + } + 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()); + 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/HomeItemBean.java b/OneToOne/src/main/java/com/shayu/onetoone/bean/HomeItemBean.java new file mode 100644 index 000000000..927ad93c3 --- /dev/null +++ b/OneToOne/src/main/java/com/shayu/onetoone/bean/HomeItemBean.java @@ -0,0 +1,299 @@ +package com.shayu.onetoone.bean; + +import com.yunbao.common.bean.BaseModel; + +import java.util.List; + +public class HomeItemBean extends BaseModel { + private int id; + private String label_id; + private List cn_label; + private List en_label; + private int first_mate; + private long create_time; + private long update_time; + private int sex; + private int b_y; + private int b_ym; + private int b_ymd; + private int name_auth; + private long name_auth_time; + private String auth_front; + private String auth_back; + private String auth_remark; + private int sage_auth; + private long sage_auth_time; + private int is_hot; + private String vodie_price; + private String price; + private int star; + private String area; + private int is_hello; + private int online; + private String user_nicename; + private String avatar; + private String avatar_thumb; + private String birthday; + private String signature; + private String star_name; + private int age; + + public HomeItemBean() { + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getLabel_id() { + return label_id; + } + + public void setLabel_id(String label_id) { + this.label_id = label_id; + } + + public List getCn_label() { + return cn_label; + } + + public void setCn_label(List cn_label) { + this.cn_label = cn_label; + } + + public List getEn_label() { + return en_label; + } + + public void setEn_label(List en_label) { + this.en_label = en_label; + } + + public int getFirst_mate() { + return first_mate; + } + + public void setFirst_mate(int first_mate) { + this.first_mate = first_mate; + } + + public long getCreate_time() { + return create_time; + } + + public void setCreate_time(long create_time) { + this.create_time = create_time; + } + + public long getUpdate_time() { + return update_time; + } + + public void setUpdate_time(long update_time) { + this.update_time = update_time; + } + + public int getSex() { + return sex; + } + + public void setSex(int sex) { + this.sex = sex; + } + + public int getB_y() { + return b_y; + } + + public void setB_y(int b_y) { + this.b_y = b_y; + } + + public int getB_ym() { + return b_ym; + } + + public void setB_ym(int b_ym) { + this.b_ym = b_ym; + } + + public int getB_ymd() { + return b_ymd; + } + + public void setB_ymd(int b_ymd) { + this.b_ymd = b_ymd; + } + + public int getName_auth() { + return name_auth; + } + + public void setName_auth(int name_auth) { + this.name_auth = name_auth; + } + + public long getName_auth_time() { + return name_auth_time; + } + + public void setName_auth_time(long name_auth_time) { + this.name_auth_time = name_auth_time; + } + + public String getAuth_front() { + return auth_front; + } + + public void setAuth_front(String auth_front) { + this.auth_front = auth_front; + } + + public String getAuth_back() { + return auth_back; + } + + public void setAuth_back(String auth_back) { + this.auth_back = auth_back; + } + + public String getAuth_remark() { + return auth_remark; + } + + public void setAuth_remark(String auth_remark) { + this.auth_remark = auth_remark; + } + + public int getSage_auth() { + return sage_auth; + } + + public void setSage_auth(int sage_auth) { + this.sage_auth = sage_auth; + } + + public long getSage_auth_time() { + return sage_auth_time; + } + + public void setSage_auth_time(long sage_auth_time) { + this.sage_auth_time = sage_auth_time; + } + + public int getIs_hot() { + return is_hot; + } + + public void setIs_hot(int is_hot) { + this.is_hot = is_hot; + } + + public String getVodie_price() { + return vodie_price; + } + + public void setVodie_price(String vodie_price) { + this.vodie_price = vodie_price; + } + + public String getPrice() { + return price; + } + + public void setPrice(String price) { + this.price = price; + } + + public int getStar() { + return star; + } + + public void setStar(int star) { + this.star = star; + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public int getIs_hello() { + return is_hello; + } + + public void setIs_hello(int is_hello) { + this.is_hello = is_hello; + } + + public int getOnline() { + return online; + } + + public void setOnline(int online) { + this.online = online; + } + + public String getUser_nicename() { + return user_nicename; + } + + public void setUser_nicename(String user_nicename) { + this.user_nicename = user_nicename; + } + + public String getAvatar() { + return avatar; + } + + public void setAvatar(String avatar) { + this.avatar = avatar; + } + + public String getAvatar_thumb() { + return avatar_thumb; + } + + public void setAvatar_thumb(String avatar_thumb) { + this.avatar_thumb = avatar_thumb; + } + + public String getBirthday() { + return birthday; + } + + public void setBirthday(String birthday) { + this.birthday = birthday; + } + + public String getSignature() { + return signature; + } + + public void setSignature(String signature) { + this.signature = signature; + } + + public String getStar_name() { + return star_name; + } + + public void setStar_name(String star_name) { + this.star_name = star_name; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } +} diff --git a/OneToOne/src/main/java/com/shayu/onetoone/bean/OfficialNoticeBean.java b/OneToOne/src/main/java/com/shayu/onetoone/bean/OfficialNoticeBean.java index 1d3ded00b..c865ec575 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/bean/OfficialNoticeBean.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/bean/OfficialNoticeBean.java @@ -12,6 +12,7 @@ public class OfficialNoticeBean extends BaseModel { String link; int type; + public OfficialNoticeBean() { } diff --git a/OneToOne/src/main/java/com/shayu/onetoone/bean/SystemMessageBean.java b/OneToOne/src/main/java/com/shayu/onetoone/bean/SystemMessageBean.java new file mode 100644 index 000000000..604aeafdb --- /dev/null +++ b/OneToOne/src/main/java/com/shayu/onetoone/bean/SystemMessageBean.java @@ -0,0 +1,130 @@ +package com.shayu.onetoone.bean; + +import com.yunbao.common.bean.BaseModel; + +public class SystemMessageBean extends BaseModel { + public static final int TYPE_ACTIVITY=1; + public static final int TYPE_INTERACTION=2; + public static final int TYPE_SYSTEM=4; + + private int id; + private String title; + private String banner; + private String link; + private String user_nicename; + private String avatar; + private String avatar_thumb; + private int uid; + private int dynamic_id; + private String to_comment_id; + private String content; + private int type; + private long addtime; + + public SystemMessageBean() { + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getBanner() { + return banner; + } + + public void setBanner(String banner) { + this.banner = banner; + } + + public String getLink() { + return link; + } + + public void setLink(String link) { + this.link = link; + } + + public String getUser_nicename() { + return user_nicename; + } + + public void setUser_nicename(String user_nicename) { + this.user_nicename = user_nicename; + } + + public String getAvatar() { + return avatar; + } + + public void setAvatar(String avatar) { + this.avatar = avatar; + } + + public String getAvatar_thumb() { + return avatar_thumb; + } + + public void setAvatar_thumb(String avatar_thumb) { + this.avatar_thumb = avatar_thumb; + } + + public int getUid() { + return uid; + } + + public void setUid(int uid) { + this.uid = uid; + } + + public int getDynamic_id() { + return dynamic_id; + } + + public void setDynamic_id(int dynamic_id) { + this.dynamic_id = dynamic_id; + } + + public String getTo_comment_id() { + return to_comment_id; + } + + public void setTo_comment_id(String to_comment_id) { + this.to_comment_id = to_comment_id; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public long getAddtime() { + return addtime; + } + + public void setAddtime(long addtime) { + this.addtime = addtime; + } +} diff --git a/OneToOne/src/main/java/com/shayu/onetoone/bean/TargetUserInfoBean.java b/OneToOne/src/main/java/com/shayu/onetoone/bean/TargetUserInfoBean.java new file mode 100644 index 000000000..830e1bb3b --- /dev/null +++ b/OneToOne/src/main/java/com/shayu/onetoone/bean/TargetUserInfoBean.java @@ -0,0 +1,61 @@ +package com.shayu.onetoone.bean; + +public class TargetUserInfoBean { + private String user_nicename; + private String avatar; + private String avatar_thumb; + private int sex; + private String signature; + private int id; + + public TargetUserInfoBean() { + } + + public String getUser_nicename() { + return user_nicename; + } + + public void setUser_nicename(String user_nicename) { + this.user_nicename = user_nicename; + } + + public String getAvatar() { + return avatar; + } + + public void setAvatar(String avatar) { + this.avatar = avatar; + } + + public String getAvatar_thumb() { + return avatar_thumb; + } + + public void setAvatar_thumb(String avatar_thumb) { + this.avatar_thumb = avatar_thumb; + } + + public int getSex() { + return sex; + } + + public void setSex(int sex) { + this.sex = sex; + } + + public String getSignature() { + return signature; + } + + public void setSignature(String signature) { + this.signature = signature; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } +} 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 7c1abfce4..3ed2216b2 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/manager/OTONetManager.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/manager/OTONetManager.java @@ -4,10 +4,14 @@ import android.content.Context; import android.net.Uri; import android.util.Log; +import com.alibaba.fastjson.JSONObject; import com.shayu.onetoone.bean.AvatarBean; import com.shayu.onetoone.bean.GreetBean; +import com.shayu.onetoone.bean.HomeItemBean; import com.shayu.onetoone.bean.JoinAnchorBean; import com.shayu.onetoone.bean.OfficialNoticeBean; +import com.shayu.onetoone.bean.SystemMessageBean; +import com.shayu.onetoone.bean.TargetUserInfoBean; import com.shayu.onetoone.bean.UserBean; import com.shayu.onetoone.network.API; import com.yunbao.common.CommonAppConfig; @@ -20,6 +24,8 @@ import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.utils.MD5Util; import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -87,6 +93,7 @@ public class OTONetManager { if (callback != null) { IMLoginModel userInfo = liveGiftBeanResponseModel.getData().getInfo().getUser(); UserInfo info = new UserInfo(userInfo.getId() + "", userInfo.getUserNicename(), Uri.parse(userInfo.getAvatar())); + info.setExtra(JSONObject.toJSONString(userInfo)); RongUserInfoManager.getInstance().refreshUserInfoCache(info); callback.onSuccess(liveGiftBeanResponseModel.getData().getInfo()); } @@ -399,6 +406,127 @@ public class OTONetManager { }).isDisposed(); } + public void getTargetUserInfoList(List ids,HttpCallback> callback) { + StringBuilder sb=new StringBuilder(); + for (Integer id : ids) { + sb.append(id).append(","); + } + API.get().otoApi(mContext) + .getTargetUserInfoList(sb.toString()) + .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(); + } + public void getTargetUserInfo(int toUid,HttpCallback callback) { + + API.get().otoApi(mContext) + .getTargetUserInfo(toUid) + .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(); + } + + public void getHomeHot(HttpCallback> callback) { + + API.get().otoApi(mContext) + .getHomeHot() + .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(); + } + + public void getHomeRecommend(HttpCallback> callback) { + + API.get().otoApi(mContext) + .getHomeRecommend() + .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(); + } + public void getSystemMessageList(int type,HttpCallback> callback) { + + API.get().otoApi(mContext) + .getSystemMessageList(type) + .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); return MultipartBody.Part.createFormData("file", file.getName(), requestBody); 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 fa005f081..8f235b327 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/network/OneToOneApi.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/network/OneToOneApi.java @@ -2,8 +2,11 @@ package com.shayu.onetoone.network; import com.shayu.onetoone.bean.AvatarBean; import com.shayu.onetoone.bean.GreetBean; +import com.shayu.onetoone.bean.HomeItemBean; import com.shayu.onetoone.bean.JoinAnchorBean; import com.shayu.onetoone.bean.OfficialNoticeBean; +import com.shayu.onetoone.bean.SystemMessageBean; +import com.shayu.onetoone.bean.TargetUserInfoBean; import com.shayu.onetoone.bean.UserBean; import com.yunbao.common.bean.BaseModel; import com.yunbao.common.bean.IMLoginModel; @@ -90,6 +93,16 @@ public interface OneToOneApi { @GET("/api/public/?service=Message.getLists") Observable>> getLists(); + @GET("/api/public/?service=Friendappinfos.getOtherInfo") + Observable> getTargetUserInfo(@Query("tuid")int id); + @GET("/api/public/?service=Friendappinfos.getOtherList") + Observable>> getTargetUserInfoList(@Query("ids")String ids); + @GET("/api/public/?service=Friendappuser.hot") + Observable>> getHomeHot(); + @GET("/api/public/?service=Friendappuser.recommend") + Observable>> getHomeRecommend(); + @GET("/api/public/?service=Message.getListInfo") + Observable>> getSystemMessageList(@Query("type")int type); } 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 2ce538a5f..67be22a27 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/provider/CustomConversationProvider.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/provider/CustomConversationProvider.java @@ -30,13 +30,19 @@ public class CustomConversationProvider extends BaseConversationProvider { if (userInfo != null) { JSONObject json = JSONObject.parseObject(userInfo.getExtra()); holder.getView(R.id.sex).setVisibility(View.VISIBLE); - if (json.getInteger("sex") == -1) { + try { + if (json.getInteger("sex") == -1) { + holder.getView(R.id.sex).setVisibility(View.GONE); + } else if (json.getInteger("sex") == 2) { + holder.setImageResource(R.id.sex, R.mipmap.ic_message_tab_woman); + } else { + holder.setImageResource(R.id.sex, R.mipmap.ic_message_tab_man); + } + } catch (Exception e) { + e.printStackTrace(); 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/java/com/shayu/onetoone/utils/ConversationUtils.java b/OneToOne/src/main/java/com/shayu/onetoone/utils/ConversationUtils.java new file mode 100644 index 000000000..463290a9d --- /dev/null +++ b/OneToOne/src/main/java/com/shayu/onetoone/utils/ConversationUtils.java @@ -0,0 +1,15 @@ +package com.shayu.onetoone.utils; + +import android.content.Context; +import android.os.Bundle; + +import io.rong.imkit.utils.RouteUtils; +import io.rong.imlib.model.Conversation; +import io.rong.imlib.model.ConversationIdentifier; + +public class ConversationUtils { + public static void startConversation(Context mContext,String targetId){ + ConversationIdentifier conversationIdentifier = new ConversationIdentifier(Conversation.ConversationType.PRIVATE, targetId); + RouteUtils.routeToConversationActivity(mContext, conversationIdentifier, false, new Bundle()); + } +} diff --git a/OneToOne/src/main/res/layout/activity_msg_chat.xml b/OneToOne/src/main/res/layout/activity_msg_chat.xml index 6fdb9437d..7b347c00d 100644 --- a/OneToOne/src/main/res/layout/activity_msg_chat.xml +++ b/OneToOne/src/main/res/layout/activity_msg_chat.xml @@ -2,8 +2,8 @@ + android:layout_height="match_parent" + android:layout_marginTop="26dp"> + + + + + + + + + +