|
|
@@ -0,0 +1,149 @@
|
|
|
+package com.adealink.weparty.im
|
|
|
+
|
|
|
+import android.content.BroadcastReceiver
|
|
|
+import android.content.Context
|
|
|
+import android.content.Intent
|
|
|
+import android.content.IntentFilter
|
|
|
+import android.view.View
|
|
|
+import androidx.fragment.app.viewModels
|
|
|
+import androidx.localbroadcastmanager.content.LocalBroadcastManager
|
|
|
+import androidx.recyclerview.widget.LinearLayoutManager
|
|
|
+import androidx.recyclerview.widget.RecyclerView
|
|
|
+import com.adealink.frame.base.fastLazy
|
|
|
+import com.adealink.frame.mvvm.view.viewBinding
|
|
|
+import com.adealink.frame.router.annotation.RouterUri
|
|
|
+import com.adealink.frame.util.AppUtil
|
|
|
+import com.adealink.weparty.commonui.BaseFragment
|
|
|
+import com.adealink.weparty.im.comp.SessionPermissionComp
|
|
|
+import com.adealink.weparty.im.databinding.FragmentSessionListBinding
|
|
|
+import com.adealink.weparty.im.viewmodel.IMViewModelFactory
|
|
|
+import com.adealink.weparty.im.viewmodel.SessionListViewModel
|
|
|
+import com.adealink.weparty.module.im.IM
|
|
|
+import com.tencent.qcloud.tuicore.TUIConstants
|
|
|
+import com.tencent.qcloud.tuikit.timcommon.component.swipe.Attributes
|
|
|
+import com.tencent.qcloud.tuikit.tuiconversation.bean.ConversationInfo
|
|
|
+import com.tencent.qcloud.tuikit.tuiconversation.interfaces.IConversationListAdapter
|
|
|
+import com.tencent.qcloud.tuikit.tuiconversation.minimalistui.interfaces.OnConversationAdapterListener
|
|
|
+import com.tencent.qcloud.tuikit.tuiconversation.minimalistui.util.TUIConversationUtils
|
|
|
+import com.tencent.qcloud.tuikit.tuiconversation.minimalistui.widget.ConversationListAdapter
|
|
|
+import com.tencent.qcloud.tuikit.tuiconversation.presenter.ConversationPresenter
|
|
|
+
|
|
|
+
|
|
|
+@RouterUri(
|
|
|
+ path = [IM.SessionList.PATH],
|
|
|
+ desc = "IM会话列表"
|
|
|
+)
|
|
|
+class SessionListFragment : BaseFragment(R.layout.fragment_session_list) {
|
|
|
+
|
|
|
+ private val binding by viewBinding(FragmentSessionListBinding::bind)
|
|
|
+
|
|
|
+ private val viewModel by viewModels<SessionListViewModel> { IMViewModelFactory() }
|
|
|
+ private val presenter: ConversationPresenter by fastLazy { ConversationPresenter() }
|
|
|
+ private val sessionAdapter: IConversationListAdapter by fastLazy { ConversationListAdapter().apply {
|
|
|
+ mode = Attributes.Mode.Single
|
|
|
+ } }
|
|
|
+ private lateinit var unreadCountReceiver: BroadcastReceiver
|
|
|
+
|
|
|
+ override fun initViews() {
|
|
|
+ super.initViews()
|
|
|
+ initSessionList()
|
|
|
+ initUnreadCountReceiver()
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun initComponents() {
|
|
|
+ super.initComponents()
|
|
|
+ SessionPermissionComp(this, binding.vOpenNotification).attach()
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun initSessionList() {
|
|
|
+ binding.conversationLayout.layoutManager =
|
|
|
+ LinearLayoutManager(context, RecyclerView.VERTICAL, false)
|
|
|
+
|
|
|
+ presenter.setAdapter(sessionAdapter)
|
|
|
+ presenter.setConversationListener()
|
|
|
+ presenter.setShowType(ConversationPresenter.SHOW_TYPE_CONVERSATION_LIST_WITH_FOLD)
|
|
|
+ binding.conversationLayout.setAdapter(sessionAdapter)
|
|
|
+ binding.conversationLayout.setPresenter(presenter)
|
|
|
+
|
|
|
+ binding.conversationLayout.setOnConversationAdapterListener(object :
|
|
|
+ OnConversationAdapterListener {
|
|
|
+ override fun onItemClick(
|
|
|
+ view: View?,
|
|
|
+ viewType: Int,
|
|
|
+ conversationInfo: ConversationInfo?
|
|
|
+ ) {
|
|
|
+ TUIConversationUtils.startChatActivity(conversationInfo)
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onItemLongClick(
|
|
|
+ view: View?,
|
|
|
+ conversationInfo: ConversationInfo?
|
|
|
+ ) {
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onConversationChanged(dataSource: List<ConversationInfo?>?) {
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onMarkConversationUnread(
|
|
|
+ view: View?,
|
|
|
+ conversationInfo: ConversationInfo?,
|
|
|
+ markUnread: Boolean
|
|
|
+ ) {
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onMarkConversationHidden(
|
|
|
+ view: View?,
|
|
|
+ conversationInfo: ConversationInfo?
|
|
|
+ ) {
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onClickMoreView(
|
|
|
+ view: View?,
|
|
|
+ conversationInfo: ConversationInfo?
|
|
|
+ ) {
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onSwipeConversationChanged(conversationInfo: ConversationInfo?) {
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun initUnreadCountReceiver() {
|
|
|
+ unreadCountReceiver = object : BroadcastReceiver() {
|
|
|
+ override fun onReceive(context: Context?, intent: Intent) {
|
|
|
+ val unreadCount = intent.getLongExtra(TUIConstants.UNREAD_COUNT_EXTRA, 0)
|
|
|
+ if (unreadCount > 0) {
|
|
|
+ // TODO: 更新未读数
|
|
|
+// isShowReadAllButton = true
|
|
|
+ } else {
|
|
|
+// isShowReadAllButton = false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ val unreadCountFilter = IntentFilter()
|
|
|
+ unreadCountFilter.addAction(TUIConstants.CONVERSATION_UNREAD_COUNT_ACTION)
|
|
|
+ LocalBroadcastManager.getInstance(AppUtil.appContext)
|
|
|
+ .registerReceiver(unreadCountReceiver, unreadCountFilter)
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun loadData() {
|
|
|
+ super.loadData()
|
|
|
+// binding.conversationLayout.loadConversation()
|
|
|
+// binding.conversationLayout.loadMarkedConversation()
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onResume() {
|
|
|
+ super.onResume()
|
|
|
+ binding.conversationLayout.loadConversation()
|
|
|
+ binding.conversationLayout.loadMarkedConversation()
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onDestroyView() {
|
|
|
+ super.onDestroyView()
|
|
|
+ unreadCountReceiver?.let { receiver ->
|
|
|
+ LocalBroadcastManager.getInstance(AppUtil.appContext).unregisterReceiver(receiver)
|
|
|
+ }
|
|
|
+ presenter.destroy()
|
|
|
+ }
|
|
|
+
|
|
|
+}
|