diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4b90daf42..af5b64781 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1061,7 +1061,6 @@
-
+
diff --git a/app/src/main/java/com/mango/moshen/MainActivity.java b/app/src/main/java/com/mango/moshen/MainActivity.java
index 9c13bb84f..20c184319 100644
--- a/app/src/main/java/com/mango/moshen/MainActivity.java
+++ b/app/src/main/java/com/mango/moshen/MainActivity.java
@@ -26,6 +26,7 @@ import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.ViewModelProvider;
import com.mango.moshen.home.fragment.PmModeFragment;
+import com.mango.moshen.ui.im.recent.RecentListFragment;
import com.mango.moshen.ui.patriarch.PmModeChangeEvent;
import com.mango.moshen.utils.UserUtils;
import com.netease.nim.uikit.StatusBarUtil;
@@ -59,7 +60,6 @@ import com.mango.moshen.family.view.activity.FamilyHomeActivity;
import com.mango.moshen.home.HomeViewModel;
import com.mango.moshen.home.dialog.NewUserHelloDialog;
import com.mango.moshen.home.dialog.ProtocolUpdateDialog;
-import com.mango.moshen.home.fragment.ContactsListFragment;
import com.mango.moshen.home.fragment.HomeFragment;
import com.mango.moshen.home.fragment.MeFragment;
import com.mango.moshen.home.presenter.MainPresenter;
@@ -178,7 +178,7 @@ public class MainActivity extends BaseMvpActivity
{
fragmentArray.put(MainTabType.TAB_TYPE_HOME, new HomeFragment());
- fragmentArray.put(MainTabType.TAB_TYPE_MSG, new ContactsListFragment());
+ fragmentArray.put(MainTabType.TAB_TYPE_MSG, new RecentListFragment());
fragmentArray.put(MainTabType.TAB_TYPE_SQUARE, new SquareFragment());
fragmentArray.put(MainTabType.TAB_TYPE_ME, new MeFragment());
}
diff --git a/app/src/main/java/com/mango/moshen/home/activity/RelationListActivity.java b/app/src/main/java/com/mango/moshen/home/activity/RelationListActivity.java
new file mode 100644
index 000000000..4a8f68ee9
--- /dev/null
+++ b/app/src/main/java/com/mango/moshen/home/activity/RelationListActivity.java
@@ -0,0 +1,99 @@
+package com.mango.moshen.home.activity;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.LinearLayout;
+
+import androidx.fragment.app.Fragment;
+import androidx.viewpager.widget.ViewPager;
+
+import com.mango.core.Constants;
+import com.mango.moshen.R;
+import com.mango.moshen.base.BaseActivity;
+import com.mango.moshen.friend.action.AbstractSelectFriendAction;
+import com.mango.moshen.home.adapter.ContactsIndicatorAdapter;
+import com.mango.moshen.home.adapter.FragmentViewPagerAdapter;
+import com.mango.moshen.home.fragment.AttentionFragment;
+import com.mango.moshen.relation.cp.activity.CpInviteRecordFragment;
+import com.mango.moshen.ui.im.friend.FriendListFragment;
+import com.mango.moshen.ui.relation.FansListFragment;
+import com.mango.moshen.ui.widget.magicindicator.MagicIndicator;
+import com.mango.moshen.ui.widget.magicindicator.ViewPagerHelper;
+import com.mango.moshen.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator;
+import com.netease.nim.uikit.StatusBarUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author jack
+ * @Description
+ * @Date 2018/11/1
+ */
+public class RelationListActivity extends BaseActivity implements ContactsIndicatorAdapter.OnItemSelectListener {
+ public static final String TAG = "ContactsListFragment";
+ private MagicIndicator indicator;
+ private ViewPager viewpager;
+
+ public static void start(Context context) {
+ Intent starter = new Intent(context, RelationListActivity.class);
+ context.startActivity(starter);
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_relation_list);
+ indicator = findViewById(R.id.indicator);
+ viewpager = findViewById(R.id.viewpager);
+ initCommonNavigator();
+ findViewById(R.id.iv_back).setOnClickListener(v -> finish());
+ }
+
+ private void initCommonNavigator() {
+ List tabInfoList = new ArrayList<>();
+ tabInfoList.add(getString(R.string.friend));
+ tabInfoList.add(getString(R.string.attention));
+ tabInfoList.add(getString(R.string.fan));
+ tabInfoList.add("关系申请");
+ List mTabs = new ArrayList<>();
+ mTabs.add(new FriendListFragment());
+ mTabs.add(AttentionFragment.newInstance(AbstractSelectFriendAction.TYPE_NORMAL));
+ mTabs.add(FansListFragment.newInstance(Constants.FAN_MAIN_PAGE_TYPE));
+ mTabs.add(CpInviteRecordFragment.Companion.newInstance(true));
+ ContactsIndicatorAdapter mMsgIndicatorAdapter = new ContactsIndicatorAdapter(this, tabInfoList, 0);
+ mMsgIndicatorAdapter.setOnItemSelectListener(this);
+ CommonNavigator commonNavigator = new CommonNavigator(this);
+ commonNavigator.setAdjustMode(true);
+ commonNavigator.setAdapter(mMsgIndicatorAdapter);
+ indicator.setNavigator(commonNavigator);
+ // must after setNavigator
+ LinearLayout titleContainer = commonNavigator.getTitleContainer();
+ titleContainer.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
+
+ viewpager.setAdapter(new FragmentViewPagerAdapter(getSupportFragmentManager(), mTabs));
+ viewpager.setOffscreenPageLimit(4);
+ ViewPagerHelper.bind(indicator, viewpager);
+
+ }
+
+ @Override
+ public void onItemSelect(int position) {
+ viewpager.setCurrentItem(position);
+ }
+
+ @Override
+ protected boolean needSteepStateBar() {
+ return true;
+ }
+
+ @Override
+ protected void setStatusBar() {
+ super.setStatusBar();
+ StatusBarUtil.transparencyBar(this);
+ StatusBarUtil.StatusBarLightMode(this);
+ }
+
+}
diff --git a/app/src/main/java/com/mango/moshen/home/fragment/ContactsListFragment.kt b/app/src/main/java/com/mango/moshen/home/fragment/ContactsListFragment.kt
deleted file mode 100644
index ed390024e..000000000
--- a/app/src/main/java/com/mango/moshen/home/fragment/ContactsListFragment.kt
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.mango.moshen.home.fragment
-
-import androidx.fragment.app.Fragment
-import com.netease.nimlib.sdk.NIMClient
-import com.netease.nimlib.sdk.msg.MsgService
-import com.mango.moshen.R
-import com.mango.moshen.base.BaseViewBindingFragment
-import com.mango.moshen.common.widget.dialog.DialogManager.AbsOkDialogListener
-import com.mango.moshen.databinding.FragmentContactListBinding
-import com.mango.moshen.home.event.ContactTrashEvent
-import com.mango.moshen.relation.cp.activity.CpInviteRecordActivity
-import com.mango.moshen.ui.im.recent.RecentListFragment
-import com.mango.moshen.ui.relation.AttentionListActivity
-import com.mango.moshen.ui.relation.FansListActivity
-import org.greenrobot.eventbus.EventBus
-
-/**
- * @author jack
- * @Description
- * @Date 2018/11/1
- */
-class ContactsListFragment : BaseViewBindingFragment() {
-
- companion object {
- const val TAG = "ContactsListFragment"
-
- @JvmStatic
- fun newInstance(): Fragment {
- return ContactsListFragment()
- }
- }
-
- override fun init() {
- childFragmentManager.beginTransaction()
- .add(R.id.fcv, RecentListFragment.newInstance(false))
- .commitAllowingStateLoss()
- //标记已读消息
- binding.ivContactTrash.setOnClickListener {
- if (NIMClient.getService(MsgService::class.java).totalUnreadCount > 0) {
- dialogManager.showOkCancelDialog(
- getString(R.string.tips_clear_unread_count),
- getString(R.string.tips_ok_label_clear),
- getString(R.string.text_canle),
- object : AbsOkDialogListener() {
- override fun onOk() {
- EventBus.getDefault().post(ContactTrashEvent())
- }
-
- override fun onCancel() {
-
- }
- })
- } else {
- toast("暂无未读消息需要清理")
- }
- }
-
- binding.tvFans.setOnClickListener {
- FansListActivity.start(requireContext(), FansListActivity.TYPE_FANS)
- }
- binding.tvAttention.setOnClickListener {
- AttentionListActivity.start(requireContext())
- }
- binding.tvFriend.setOnClickListener {
- FansListActivity.start(requireContext(), FansListActivity.TYPE_FRIEND)
- }
- binding.tvRelation.setOnClickListener {
- CpInviteRecordActivity.start(requireContext(), false)
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/mango/moshen/relation/cp/activity/CpInviteRecordActivity.kt b/app/src/main/java/com/mango/moshen/relation/cp/activity/CpInviteRecordActivity.kt
index 40221fc71..2ce45ccc4 100644
--- a/app/src/main/java/com/mango/moshen/relation/cp/activity/CpInviteRecordActivity.kt
+++ b/app/src/main/java/com/mango/moshen/relation/cp/activity/CpInviteRecordActivity.kt
@@ -2,98 +2,21 @@ package com.mango.moshen.relation.cp.activity
import android.content.Context
import android.content.Intent
-import android.graphics.Color
-import androidx.activity.viewModels
-import androidx.recyclerview.widget.LinearLayoutManager
-import com.netease.nim.uikit.StatusBarUtil
+import android.os.Bundle
import com.mango.moshen.R
-import com.mango.moshen.base.BaseBindingActivity
-import com.mango.moshen.common.EmptyViewHelper
-import com.mango.moshen.databinding.ActivityCpInviteRecordBinding
-import com.mango.moshen.relation.cp.CpDataManager
-import com.mango.moshen.relation.cp.CpViewHelper
-import com.mango.moshen.relation.cp.adapter.InviteRecordAdapter
-import com.mango.moshen.relation.cp.dialog.CpInviteReplyConfirmDialog
-import com.mango.moshen.relation.cp.dialog.CpInviteReplyDialog
-import com.mango.moshen.relation.cp.viewmodel.CpViewModel
-import com.mango.moshen.ui.widget.dialog.CommonTipDialog
-import com.mango.core.relation.cp.CpBindUnbindEvent
-import com.mango.core.relation.cp.CpInviteDetailEntity
-import com.mango.core.relation.cp.UserCpListEntity
-import com.mango.xchat_android_library.annatation.ActLayoutRes
-import org.greenrobot.eventbus.EventBus
-import org.greenrobot.eventbus.Subscribe
-import org.greenrobot.eventbus.ThreadMode
+import com.mango.moshen.base.BaseActivity
+import com.netease.nim.uikit.StatusBarUtil
-@ActLayoutRes(R.layout.activity_cp_invite_record)
-class CpInviteRecordActivity : BaseBindingActivity() {
- private val vm: CpViewModel by viewModels()
- private lateinit var adapter: InviteRecordAdapter
- private val type = 1// 1-别人给我发的邀请,2-我给别人发的邀请
+class CpInviteRecordActivity : BaseActivity() {
- override fun init() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_cp_invite_record)
initTitleBar("关系申请")
- initRecyclerView()
- initObserver()
- queryRecord(type)
- }
-
- private fun initObserver() {
- EventBus.getDefault().register(this)
- vm.userCpListData.observe(this) {
- adapter.setNewData(it)
- }
-
- vm.loadingLiveData.observe(this) {
- if (it) dialogManager.showProgressDialog(this)
- else dialogManager.dismissDialog()
- if (mBinding.swipeRefresh.isRefreshing) {
- mBinding.swipeRefresh.isRefreshing = false
- }
- }
- vm.cpInviteDetailData.observe(this) {
- showReplyDialog(it)
- }
- }
-
- private fun showReplyDialog(item: CpInviteDetailEntity) {
- CpInviteReplyDialog(context).apply {
- cpInviteData = item
- listener = object : CpInviteReplyDialog.ReplyListener {
- override fun onAgree() {
- showConfirmDialog(item, true)
- }
-
- override fun onRefuse() {
- showConfirmDialog(item, false)
- }
-
- override fun onTimeOut() {
- queryRecord(type)
- }
- }
- openDialog()
- }
- }
-
- private fun initRecyclerView() {
- adapter = InviteRecordAdapter(this)
- adapter.onVisitClickListener = object : InviteRecordAdapter.OnVisitClickListener {
- override fun onVisitClick(item: UserCpListEntity) {
- vm.getCpInviteDetail(item.cpId)
- }
- }
- val layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
- mBinding.recyclerView.layoutManager = layoutManager
- adapter.emptyView = EmptyViewHelper.createEmptyView(this, "暂无数据")
- adapter.bindToRecyclerView(mBinding.recyclerView)
- mBinding.swipeRefresh.setOnRefreshListener {
- queryRecord(type)
- }
- }
-
- private fun queryRecord(type: Int) {
- vm.getUserCpListData(type)
+ supportFragmentManager
+ .beginTransaction()
+ .replace(R.id.fcv, CpInviteRecordFragment.newInstance(intent.getBooleanExtra("needAlert", false)))
+ .commitAllowingStateLoss()
}
companion object {
@@ -104,42 +27,8 @@ class CpInviteRecordActivity : BaseBindingActivity() {
+ private val vm: CpViewModel by viewModels()
+ private lateinit var adapter: InviteRecordAdapter
+ private val type = 1// 1-别人给我发的邀请,2-我给别人发的邀请
+
+ override fun init() {
+ initRecyclerView()
+ initObserver()
+ queryRecord(type)
+ }
+
+ private fun initObserver() {
+ EventBus.getDefault().register(this)
+ vm.userCpListData.observe(this) {
+ adapter.setNewData(it)
+ }
+
+ vm.loadingLiveData.observe(this) {
+ if (it) dialogManager.showProgressDialog(mContext)
+ else dialogManager.dismissDialog()
+ if (binding.swipeRefresh.isRefreshing) {
+ binding.swipeRefresh.isRefreshing = false
+ }
+ }
+ vm.cpInviteDetailData.observe(this) {
+ showReplyDialog(it)
+ }
+ }
+
+ private fun showReplyDialog(item: CpInviteDetailEntity) {
+ CpInviteReplyDialog(mContext).apply {
+ cpInviteData = item
+ listener = object : CpInviteReplyDialog.ReplyListener {
+ override fun onAgree() {
+ showConfirmDialog(item, true)
+ }
+
+ override fun onRefuse() {
+ showConfirmDialog(item, false)
+ }
+
+ override fun onTimeOut() {
+ queryRecord(type)
+ }
+ }
+ openDialog()
+ }
+ }
+
+ private fun initRecyclerView() {
+ adapter = InviteRecordAdapter(mContext)
+ adapter.onVisitClickListener = object : InviteRecordAdapter.OnVisitClickListener {
+ override fun onVisitClick(item: UserCpListEntity) {
+ vm.getCpInviteDetail(item.cpId)
+ }
+ }
+ val layoutManager = LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false)
+ binding.recyclerView.layoutManager = layoutManager
+ adapter.emptyView = EmptyViewHelper.createEmptyView(mContext, "暂无数据")
+ adapter.bindToRecyclerView(binding.recyclerView)
+ binding.swipeRefresh.setOnRefreshListener {
+ queryRecord(type)
+ }
+ }
+
+ private fun queryRecord(type: Int) {
+ vm.getUserCpListData(type)
+ }
+
+ companion object {
+ fun newInstance(needAlert: Boolean): CpInviteRecordFragment {
+ val args = Bundle()
+ args.putBoolean("needAlert", needAlert)
+ val fragment = CpInviteRecordFragment()
+ fragment.arguments = args
+ return fragment
+ }
+
+ }
+
+ private fun showConfirmDialog(item: CpInviteDetailEntity, isAgree: Boolean) {
+ val shb = CpViewHelper.getColorSpan(
+ "是否${if (isAgree) "同意" else "拒绝"}与${item.inviteNick}成为CP?\n",
+ Color.parseColor("#4C5AF1"),
+ 5, 5 + item.inviteNick.length
+ )
+ if (isAgree) {
+ val str = "(同意将自动拒绝其他邀请)"
+ val append = CpViewHelper.getSizeSpan(str, 12f, 0, str.length)
+ shb.append(append)
+ }
+
+ CpInviteReplyConfirmDialog(mContext).apply {
+ setDialogTitle(shb)
+ okCancelListener = object : CommonTipDialog.OnActionListener {
+ override fun onOk() {
+ vm.replyInvite(item.cpId, if (isAgree) 2 else 3)
+ }
+ }
+ openDialog()
+ }
+ }
+
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ fun onBindUnbindEvent(event: CpBindUnbindEvent) {
+ queryRecord(type)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ EventBus.getDefault().unregister(this)
+ CpDataManager.get().clearCpInviteInfo()
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/mango/moshen/ui/im/friend/ActFriendList.java b/app/src/main/java/com/mango/moshen/ui/im/friend/ActFriendList.java
deleted file mode 100644
index e919c4252..000000000
--- a/app/src/main/java/com/mango/moshen/ui/im/friend/ActFriendList.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.mango.moshen.ui.im.friend;
-
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentManager;
-
-import com.mango.moshen.R;
-import com.mango.moshen.base.BaseMvpActivity;
-import com.mango.moshen.base.BaseMvpPresenter;
-import com.mango.moshen.home.fragment.ContactsListFragment;
-import com.mango.xchat_android_library.base.IMvpBaseView;
-import com.mango.xchat_android_library.base.factory.CreatePresenter;
-
-@CreatePresenter(BaseMvpPresenter.class)
-public class ActFriendList extends BaseMvpActivity> implements IMvpBaseView{
-
- public static void start(Context context) {
- Intent starter = new Intent(context, ActFriendList.class);
- context.startActivity(starter);
- }
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- setContentView(R.layout.act_friend_list);
- initTitleBar(getString(R.string.message_contact));
- Fragment fragment = ContactsListFragment.newInstance();
- FragmentManager manager = getSupportFragmentManager();
- manager.beginTransaction().add(R.id.fl_friend_list, fragment).commit();
-
- }
-}
diff --git a/app/src/main/java/com/mango/moshen/ui/im/recent/RecentListFragment.kt b/app/src/main/java/com/mango/moshen/ui/im/recent/RecentListFragment.kt
index d2c2a98a2..6472814fc 100644
--- a/app/src/main/java/com/mango/moshen/ui/im/recent/RecentListFragment.kt
+++ b/app/src/main/java/com/mango/moshen/ui/im/recent/RecentListFragment.kt
@@ -1,43 +1,38 @@
-package com.mango.moshen.ui.im.recent;
+package com.mango.moshen.ui.im.recent
-import android.annotation.SuppressLint;
-import android.os.Bundle;
-import android.view.View;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-
-import androidx.annotation.Nullable;
-import androidx.fragment.app.FragmentManager;
-import androidx.fragment.app.FragmentTransaction;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.mango.core.auth.AuthModel;
-import com.mango.core.auth.event.LoginEvent;
-import com.mango.core.initial.InitialModel;
-import com.mango.core.level.UserLevelVo;
-import com.mango.core.statistic.StatisticManager;
-import com.mango.core.statistic.protocol.StatisticsProtocol;
-import com.mango.core.user.AttentionModel;
-import com.mango.core.user.UserModel;
-import com.mango.core.user.bean.AttentionInfo;
-import com.mango.core.user.event.LoadLoginUserInfoEvent;
-import com.mango.core.utils.SharedPreferenceUtils;
-import com.mango.moshen.R;
-import com.mango.moshen.avroom.activity.AVRoomActivity;
-import com.mango.moshen.base.BaseFragment;
-import com.mango.moshen.room_chat.activity.NimRoomP2PMessageActivity;
-import com.mango.moshen.room_chat.activity.RoomNewbieActivity;
-import com.mango.moshen.ui.im.avtivity.NimP2PMessageActivity;
-import com.mango.moshen.ui.im.recent.adapter.AttentionInRoomAdapter;
-import com.mango.xchat_android_library.utils.CommonUtils;
-import com.netease.nim.uikit.business.recent.RecentContactsCallback;
-import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum;
-import com.netease.nimlib.sdk.msg.model.RecentContact;
-
-import org.greenrobot.eventbus.EventBus;
-import org.greenrobot.eventbus.Subscribe;
-import org.greenrobot.eventbus.ThreadMode;
+import android.annotation.SuppressLint
+import android.view.View
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.mango.core.auth.AuthModel
+import com.mango.core.auth.event.LoginEvent
+import com.mango.core.initial.InitialModel
+import com.mango.core.statistic.StatisticManager
+import com.mango.core.statistic.protocol.StatisticsProtocol
+import com.mango.core.user.AttentionModel
+import com.mango.core.user.UserModel
+import com.mango.core.user.bean.AttentionInfo
+import com.mango.core.user.bean.UserInfo
+import com.mango.core.user.event.LoadLoginUserInfoEvent
+import com.mango.core.utils.SharedPreferenceUtils
+import com.mango.moshen.R
+import com.mango.moshen.avroom.activity.AVRoomActivity
+import com.mango.moshen.base.BaseViewBindingFragment
+import com.mango.moshen.common.widget.dialog.DialogManager.AbsOkDialogListener
+import com.mango.moshen.databinding.FragmentRecentListBinding
+import com.mango.moshen.home.activity.RelationListActivity
+import com.mango.moshen.home.event.ContactTrashEvent
+import com.mango.moshen.room_chat.activity.RoomNewbieActivity
+import com.mango.moshen.ui.im.avtivity.NimP2PMessageActivity
+import com.mango.moshen.ui.im.recent.adapter.AttentionInRoomAdapter
+import com.mango.xchat_android_library.utils.CommonUtils
+import com.netease.nim.uikit.business.recent.RecentContactsCallback
+import com.netease.nimlib.sdk.NIMClient
+import com.netease.nimlib.sdk.msg.MsgService
+import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum
+import com.netease.nimlib.sdk.msg.model.RecentContact
+import org.greenrobot.eventbus.EventBus
+import org.greenrobot.eventbus.Subscribe
+import org.greenrobot.eventbus.ThreadMode
/**
* 最近聊天列表
@@ -45,172 +40,140 @@ import org.greenrobot.eventbus.ThreadMode;
* @author chenran
* @date 2017/9/18
*/
-public class RecentListFragment extends BaseFragment {
+class RecentListFragment : BaseViewBindingFragment() {
+ private val share_pref_is_newbie_clicked = "share_pref_is_newbie_clicked"
+ private lateinit var recentContactsFragment: RecentContactsFragment
+ private lateinit var mAttentionInRoomAdapter: AttentionInRoomAdapter
+ private var lastClickTime: Long = 0
- private static final String TAG = "RecentListFragment";
-
- private final String share_pref_is_newbie_clicked = "share_pref_is_newbie_clicked";
-
- private RecentContactsFragment recentContactsFragment;
- private boolean isInRoom;
-
- private RecyclerView rvAttentionOnline;
- private AttentionInRoomAdapter mAttentionInRoomAdapter;
- private FrameLayout flNewbie;
- private ImageView ivRedPoint;
- private long lastClickTime;
-
- public static RecentListFragment newInstance(boolean isInRoom) {
-
- Bundle args = new Bundle();
- args.putBoolean("isInRoom", isInRoom);
- RecentListFragment fragment = new RecentListFragment();
- fragment.setArguments(args);
- return fragment;
- }
-
- @Override
- public int getRootLayoutId() {
- return R.layout.fragment_recent_list;
- }
-
- @Override
- public void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- EventBus.getDefault().register(this);
- if (getArguments() != null) {
- isInRoom = getArguments().getBoolean("isInRoom", false);
- }
+ override fun init() {
+ EventBus.getDefault().register(this)
+ recentContactsFragment.setCallback(object : RecentContactsCallback {
+ override fun onRecentContactsLoaded() {}
+ override fun onUnreadCountChange(unreadCount: Int) {}
+ override fun onItemClick(recent: RecentContact) {
+ if (CommonUtils.isFastDoubleClick(800)) return
+ if (recent.sessionType == SessionTypeEnum.P2P) {
+ NimP2PMessageActivity.start(mContext, recent.contactId)
+ }
+ }
+ })
+ loadAttentionList()
}
@SuppressLint("CheckResult")
- @Override
- public void onFindViews() {
+ override fun onFindViews() {
// 一起玩、关注用户在房间内列表
- rvAttentionOnline = mView.findViewById(R.id.rv_attention_online);
- mAttentionInRoomAdapter = new AttentionInRoomAdapter();
- rvAttentionOnline.setAdapter(mAttentionInRoomAdapter);
- rvAttentionOnline.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false));
- mAttentionInRoomAdapter.setOnItemClickListener((adapter, view, position) -> {
- AttentionInfo attentionInfo = mAttentionInRoomAdapter.getItem(position);
- if (attentionInfo != null && attentionInfo.getUserInRoom() != null && mContext != null) {
+ mAttentionInRoomAdapter = AttentionInRoomAdapter()
+ binding.rvAttentionOnline.adapter = mAttentionInRoomAdapter
+ binding.rvAttentionOnline.layoutManager = LinearLayoutManager(
+ mContext,
+ LinearLayoutManager.HORIZONTAL,
+ false
+ )
+ mAttentionInRoomAdapter.setOnItemClickListener { _, _, position ->
+ val attentionInfo = mAttentionInRoomAdapter.getItem(position)
+ if (attentionInfo != null && attentionInfo.userInRoom != null && mContext != null) {
AVRoomActivity.startForFromType(
- mContext,
- attentionInfo.getUserInRoom().getUid(),
- AVRoomActivity.FROM_TYPE_USER,
- attentionInfo.getNick(),
- String.valueOf(attentionInfo.getUid()));
+ mContext,
+ attentionInfo.userInRoom.uid,
+ AVRoomActivity.FROM_TYPE_USER,
+ attentionInfo.getNick(), attentionInfo.getUid().toString()
+ )
}
- });
-
- recentContactsFragment = RecentContactsFragment.newInstance(isInRoom);
- FragmentManager fragmentManager = getChildFragmentManager();
- FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
- fragmentTransaction.replace(R.id.recent_container, recentContactsFragment).commitAllowingStateLoss();
- boolean isClicked = (boolean) SharedPreferenceUtils.get(share_pref_is_newbie_clicked, false);
- flNewbie = mView.findViewById(R.id.fl_newbie);
- ivRedPoint = mView.findViewById(R.id.iv_red_point);
- ivRedPoint.setVisibility(isClicked ? View.GONE : View.VISIBLE);
+ }
+ recentContactsFragment = RecentContactsFragment.newInstance(false)
+ childFragmentManager
+ .beginTransaction()
+ .replace(R.id.recent_container, recentContactsFragment)
+ .commitAllowingStateLoss()
+ val isClicked = SharedPreferenceUtils.get(share_pref_is_newbie_clicked, false) as Boolean
+ binding.tvRedPointFindNew.visibility = if (isClicked) View.GONE else View.VISIBLE
// 等级限制
- setFindNewbieView();
+ setFindNewbieView()
}
@SuppressLint("CheckResult")
- private void setFindNewbieView() {
+ private fun setFindNewbieView() {
// 等级限制
- UserModel.get().getCurrentUserInfo()
- .subscribe(userInfo -> {
- if (userInfo != null) {
- UserLevelVo userLevelVo = userInfo.getUserLevelVo();
- if (userLevelVo != null) {
- flNewbie.setVisibility(userLevelVo.charmLevelSeq >= InitialModel.get().getFindNewbieCharmLevel() ? View.VISIBLE : View.GONE);
- }
- }
- });
- }
-
- @Override
- public void onSetListener() {
- flNewbie.setOnClickListener(v -> {
- //防双击
- long currTime = System.currentTimeMillis();
- if (currTime - lastClickTime < 1000) {
- return;
- }
- lastClickTime = currTime;
- SharedPreferenceUtils.put(share_pref_is_newbie_clicked, true);// 是否第一次点击发现萌新
- ivRedPoint.setVisibility(View.GONE);
- RoomNewbieActivity.start(getActivity(), false);
- StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_ROOM_MESSAGE_FINDNEW_CLICK, "消息页_发现萌新");
- });
- }
-
- @Override
- public void initiate() {
- recentContactsFragment.setCallback(new RecentContactsCallback() {
- @Override
- public void onRecentContactsLoaded() {
-
- }
-
- @Override
- public void onUnreadCountChange(int unreadCount) {
-
- }
-
- @Override
- public void onItemClick(RecentContact recent) {
- if (CommonUtils.isFastDoubleClick(800)) return;
- if (recent.getSessionType() == SessionTypeEnum.P2P) {
- if (isInRoom) {
- NimRoomP2PMessageActivity.start(mContext, recent.getContactId());
- } else {
- NimP2PMessageActivity.start(mContext, recent.getContactId());
+ UserModel.get().currentUserInfo
+ .subscribe { userInfo: UserInfo? ->
+ if (userInfo != null) {
+ val userLevelVo = userInfo.userLevelVo
+ if (userLevelVo != null) {
+ binding.llFindNew.visibility =
+ if (userLevelVo.charmLevelSeq >= InitialModel.get().findNewbieCharmLevel) View.VISIBLE else View.GONE
}
}
}
- });
- loadAttentionList();
+ }
+
+ override fun onSetListener() {
+ binding.llFindNew.setOnClickListener {
+ //防双击
+ val currTime = System.currentTimeMillis()
+ if (currTime - lastClickTime < 1000) {
+ return@setOnClickListener
+ }
+ lastClickTime = currTime
+ SharedPreferenceUtils.put(share_pref_is_newbie_clicked, true) // 是否第一次点击发现萌新
+ binding.tvRedPointFindNew.visibility = View.GONE
+ RoomNewbieActivity.start(activity, false)
+ StatisticManager.Instance()
+ .onEvent(StatisticsProtocol.EVENT_ROOM_MESSAGE_FINDNEW_CLICK, "消息页_发现萌新")
+ }
+ binding.ivContactTrash.setOnClickListener {
+ if (NIMClient.getService(MsgService::class.java).totalUnreadCount > 0) {
+ dialogManager.showOkCancelDialog(
+ getString(R.string.tips_clear_unread_count),
+ getString(R.string.tips_ok_label_clear),
+ getString(R.string.text_canle),
+ object : AbsOkDialogListener() {
+ override fun onOk() {
+ EventBus.getDefault().post(ContactTrashEvent())
+ }
+ })
+ } else {
+ toast("暂无未读消息需要清理")
+ }
+ }
+ binding.ivRelation.setOnClickListener {
+ RelationListActivity.start(mContext)
+ }
}
@Subscribe(threadMode = ThreadMode.MAIN)
- public void onLoginUserInfoUpdateEvent(LoadLoginUserInfoEvent event) {
- recentContactsFragment.requestMessages(true);
+ fun onLoginUserInfoUpdateEvent(event: LoadLoginUserInfoEvent?) {
+ recentContactsFragment.requestMessages(true)
}
@SuppressLint("CheckResult")
- private void loadAttentionList() {
+ private fun loadAttentionList() {
AttentionModel.get().getAttentionList(
- AuthModel.get().getCurrentUid(),
- 1,
- 200)
- .compose(bindToLifecycle())
- .subscribe((attentionInfos, throwable) -> {
-
- if (attentionInfos != null && attentionInfos.size() > 0) {
- if (rvAttentionOnline != null) {
- rvAttentionOnline.setVisibility(View.VISIBLE);
- }
- if (mAttentionInRoomAdapter != null) {
- mAttentionInRoomAdapter.setNewData(attentionInfos);
- }
- } else {
- if (rvAttentionOnline != null) {
- rvAttentionOnline.setVisibility(View.GONE);
- }
- }
- });
+ AuthModel.get().currentUid,
+ 1,
+ 200
+ )
+ .compose>(bindToLifecycle())
+ .subscribe { attentionInfos, _ ->
+ if (attentionInfos != null && attentionInfos.isNotEmpty()) {
+ binding.rvAttentionOnline.visibility = View.VISIBLE
+ mAttentionInRoomAdapter.setNewData(attentionInfos)
+ } else {
+ binding.rvAttentionOnline.visibility = View.GONE
+ }
+ }
}
@Subscribe(threadMode = ThreadMode.MAIN)
- public void onLoginEvent(LoginEvent event) {
+ fun onLoginEvent(event: LoginEvent?) {
//登录成功刷新消息页萌新
- setFindNewbieView();
+ setFindNewbieView()
}
- @Override
- public void onDestroy() {
- super.onDestroy();
- EventBus.getDefault().unregister(this);
+ override fun onDestroyView() {
+ super.onDestroyView()
+ EventBus.getDefault().unregister(this)
}
-}
+
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable-xhdpi/ic_msg_attention.png b/app/src/main/res/drawable-xhdpi/ic_msg_attention.png
deleted file mode 100644
index 9cef8268a..000000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_msg_attention.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_msg_communique.png b/app/src/main/res/drawable-xhdpi/ic_msg_communique.png
new file mode 100644
index 000000000..8737c242d
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_msg_communique.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_msg_contact_trash.png b/app/src/main/res/drawable-xhdpi/ic_msg_contact_trash.png
new file mode 100644
index 000000000..627b659e7
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_msg_contact_trash.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_msg_fans.png b/app/src/main/res/drawable-xhdpi/ic_msg_fans.png
deleted file mode 100644
index 99a36a461..000000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_msg_fans.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_msg_find_new.png b/app/src/main/res/drawable-xhdpi/ic_msg_find_new.png
new file mode 100644
index 000000000..c783e9564
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_msg_find_new.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_msg_friend.png b/app/src/main/res/drawable-xhdpi/ic_msg_friend.png
deleted file mode 100644
index e81686971..000000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_msg_friend.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_msg_notice.png b/app/src/main/res/drawable-xhdpi/ic_msg_notice.png
new file mode 100644
index 000000000..78d886354
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_msg_notice.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_msg_party.png b/app/src/main/res/drawable-xhdpi/ic_msg_party.png
new file mode 100644
index 000000000..1905ac4fa
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_msg_party.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_msg_relation.png b/app/src/main/res/drawable-xhdpi/ic_msg_relation.png
index 32e29726c..ee099756b 100644
Binary files a/app/src/main/res/drawable-xhdpi/ic_msg_relation.png and b/app/src/main/res/drawable-xhdpi/ic_msg_relation.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_msg_tips.png b/app/src/main/res/drawable-xhdpi/ic_msg_tips.png
new file mode 100644
index 000000000..286bd4a21
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_msg_tips.png differ
diff --git a/app/src/main/res/drawable/shap_red_point.xml b/app/src/main/res/drawable/shap_red_point.xml
index 66880bca4..24c8cc9da 100644
--- a/app/src/main/res/drawable/shap_red_point.xml
+++ b/app/src/main/res/drawable/shap_red_point.xml
@@ -1,6 +1,9 @@
-
-
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_5fcce4_corner_8dp.xml b/app/src/main/res/drawable/shape_5fcce4_corner_8dp.xml
new file mode 100644
index 000000000..c120d675a
--- /dev/null
+++ b/app/src/main/res/drawable/shape_5fcce4_corner_8dp.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/act_friend_list.xml b/app/src/main/res/layout/act_friend_list.xml
deleted file mode 100644
index 03f1327ce..000000000
--- a/app/src/main/res/layout/act_friend_list.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_cp_invite_record.xml b/app/src/main/res/layout/activity_cp_invite_record.xml
index f90888a6d..30cc2ecf6 100644
--- a/app/src/main/res/layout/activity_cp_invite_record.xml
+++ b/app/src/main/res/layout/activity_cp_invite_record.xml
@@ -8,26 +8,18 @@
-
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/title_bar" />
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_relation_list.xml b/app/src/main/res/layout/activity_relation_list.xml
new file mode 100644
index 000000000..dc6d7adb6
--- /dev/null
+++ b/app/src/main/res/layout/activity_relation_list.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_contact_list.xml b/app/src/main/res/layout/fragment_contact_list.xml
deleted file mode 100644
index da4f70388..000000000
--- a/app/src/main/res/layout/fragment_contact_list.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_cp_invite_record.xml b/app/src/main/res/layout/fragment_cp_invite_record.xml
new file mode 100644
index 000000000..7c6898073
--- /dev/null
+++ b/app/src/main/res/layout/fragment_cp_invite_record.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_recent_list.xml b/app/src/main/res/layout/fragment_recent_list.xml
index 9c32e51b8..611b7434f 100644
--- a/app/src/main/res/layout/fragment_recent_list.xml
+++ b/app/src/main/res/layout/fragment_recent_list.xml
@@ -2,73 +2,220 @@
-
-
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+ android:layout_height="wrap_content"
+ android:layout_marginTop="35dp">
-
+ android:layout_gravity="center_horizontal"
+ android:text="消息"
+ android:textColor="@color/text_title_white"
+ android:textSize="20sp" />
-
+
+
+
+
+
+
+
+
+
+
+
+ android:layout_height="18dp"
+ android:layout_marginStart="-16dp"
+ android:background="@drawable/shap_red_point"
+ android:gravity="center"
+ android:minWidth="18dp"
+ android:paddingStart="4dp"
+ android:paddingEnd="4dp"
+ android:textColor="#ffffffff"
+ android:textSize="10sp"
+ android:visibility="invisible"
+ tools:text="88" />
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tools:visibility="visible" />
+ android:layout_width="105dp"
+ android:layout_height="29dp"
+ android:layout_marginStart="21dp"
+ android:src="@drawable/ic_msg_party" />
+ android:layout_height="match_parent"
+ android:layout_marginTop="15dp" />
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_recent_list_room.xml b/app/src/main/res/layout/fragment_recent_list_room.xml
new file mode 100644
index 000000000..7d10305c8
--- /dev/null
+++ b/app/src/main/res/layout/fragment_recent_list_room.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/module_room_chat/java/com/mango/moshen/room_chat/fragment/RoomMsgRecentListFragment.java b/app/src/module_room_chat/java/com/mango/moshen/room_chat/fragment/RoomMsgRecentListFragment.java
index 1e642ad5a..1bf20cdf4 100644
--- a/app/src/module_room_chat/java/com/mango/moshen/room_chat/fragment/RoomMsgRecentListFragment.java
+++ b/app/src/module_room_chat/java/com/mango/moshen/room_chat/fragment/RoomMsgRecentListFragment.java
@@ -165,7 +165,7 @@ public class RoomMsgRecentListFragment extends BaseFragment {
@Override
public int getRootLayoutId() {
- return R.layout.fragment_recent_list;
+ return R.layout.fragment_recent_list_room;
}
@Subscribe(threadMode = ThreadMode.MAIN)