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)