Browse Source

优化群留言历史记录播放及显示

weizhengliang 3 years ago
parent
commit
5eac4729bc

+ 27 - 6
home/src/main/code/com/wdkl/ncs/android/component/home/activity/ChannelImActivity.kt

@@ -33,12 +33,13 @@ import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
 import java.io.File
 
-class ChannelImActivity : BaseActivity<ChannelImPresenter, ActivityChannelImListBinding>(), ChannelImContract.View {
+class ChannelImActivity : BaseActivity<ChannelImPresenter, ActivityChannelImListBinding>(), ChannelImContract.View, ChannelImItemAdapter.CallBack {
 
     private lateinit var adapter: ChannelImItemAdapter
     private lateinit var virtualLayoutManager: VirtualLayoutManager
     private lateinit var delegateAdapter: DelegateAdapter
     private var page: Int = 1
+    private val page_size: Int = 10
 
     var downTime : Long = 0
     var upTime : Long = 0
@@ -73,9 +74,11 @@ class ChannelImActivity : BaseActivity<ChannelImPresenter, ActivityChannelImList
         rv_channel_im_list.layoutManager = virtualLayoutManager
         rv_channel_im_list.adapter = delegateAdapter
 
+        adapter.setCallBack(this)
+
         Constants.allowVoiceMsg = false
 
-        presenter.getChannelIm(page, 10, memberId!!, channelId)
+        presenter.getChannelIm(page, page_size, memberId!!, channelId)
 
         if (RecordHelper.getInstance().isRecording()) {
             IMDialogHelper.showIMDialog(activity)
@@ -85,11 +88,11 @@ class ChannelImActivity : BaseActivity<ChannelImPresenter, ActivityChannelImList
     override fun bindEvent() {
         srl_channel_im_list.setOnLoadMoreListener {
             page += 1
-            presenter.getChannelIm(page, 10, memberId!!, channelId)
+            presenter.getChannelIm(page, page_size, memberId!!, channelId)
         }
         srl_channel_im_list.setOnRefreshListener {
             page = 1
-            presenter.getChannelIm(page, 10, memberId!!, channelId)
+            presenter.getChannelIm(page, page_size, memberId!!, channelId)
         }
 
 
@@ -160,7 +163,7 @@ class ChannelImActivity : BaseActivity<ChannelImPresenter, ActivityChannelImList
                 showMessage("留言发送成功!")
                 //刷新列表
                 page = 1
-                presenter.getChannelIm(page, 10, memberId!!, channelId)
+                presenter.getChannelIm(page, page_size, memberId!!, channelId)
             } else {
                 showMessage("留言发送失败!")
             }
@@ -207,6 +210,24 @@ class ChannelImActivity : BaseActivity<ChannelImPresenter, ActivityChannelImList
         }
     }
 
+    override fun onChannelImRead(item: ChannelIMVO, pos: Int) {
+        //该条留言已读,刷新状态
+        var update = false
+        for (e in adapter.data) {
+            if (e.id == item.id) {
+                e.readed = true
+                update = true
+                break
+            }
+        }
+
+        if (update && pos < adapter.data.size) {
+            runOnUiThread {
+                adapter.notifyItemChanged(pos)
+            }
+        }
+    }
+
     override fun onError(message: String, type: Int) {
         srl_channel_im_list.finishRefresh()
     }
@@ -228,7 +249,7 @@ class ChannelImActivity : BaseActivity<ChannelImPresenter, ActivityChannelImList
         if (messageEvent.tag == 3 || messageEvent.tag == Constants.EVENT_CHANNEL_IM_UPDATE) {
             //刷新列表
             page = 1
-            presenter.getChannelIm(page, 10, memberId!!, channelId)
+            presenter.getChannelIm(page, page_size, memberId!!, channelId)
         }
     }
 }

+ 13 - 1
home/src/main/code/com/wdkl/ncs/android/component/home/adapter/ChannelImItemAdapter.kt

@@ -30,6 +30,7 @@ import org.greenrobot.eventbus.EventBus
  */
 class ChannelImItemAdapter(val data: ArrayList<ChannelIMVO>, val imActivity: Activity) : BaseDelegateAdapter<BaseRecyclerViewHolder<AdapterChannelImRecordsItemBinding>, ChannelIMVO>() {
     var TAG = ChannelImItemAdapter::class.java.getSimpleName()
+    var imCallBack: CallBack? = null
 
     /**
      * 数据提供者
@@ -90,6 +91,7 @@ class ChannelImItemAdapter(val data: ArrayList<ChannelIMVO>, val imActivity: Act
 
             binding.imPlayTv.setOnClickListener {
                 showMessage("播放:" + itemData.audioPath)
+                EventBus.getDefault().post(MessageEvent(false, Constants.EVENT_CLEAR_IM))
                 MediaPlayHelper.getInstance().stopMusic(false)
                 MediaPlayHelper.getInstance().playUrlMusic(ApiManager.urlManager.device_url + itemData.audioPath, 1f, false)
                 ImPlayDialogHelper.showImPlayDialog(imActivity, itemData.senderMemberName, TimeTransition().stampToTime(itemData.sendTime*1000))
@@ -100,7 +102,10 @@ class ChannelImItemAdapter(val data: ArrayList<ChannelIMVO>, val imActivity: Act
                     NettyClient.instance.sendMsg(imTcpModel.toJson()).subscribe {
                         if (it) {
                             Log.d(TAG, "TCP.发送消息完成")
-                            EventBus.getDefault().post(MessageEvent("im_update", Constants.EVENT_CHANNEL_IM_UPDATE))
+                            //EventBus.getDefault().post(MessageEvent("im_update", Constants.EVENT_CHANNEL_IM_UPDATE))
+                            if (imCallBack != null) {
+                                imCallBack!!.onChannelImRead(itemData, position)
+                            }
                         } else {
                             Log.e(TAG, "TCP.发送消息失败")
                             HandleTcpConnect.instance.tcpReConnectWithMsgShow()
@@ -111,4 +116,11 @@ class ChannelImItemAdapter(val data: ArrayList<ChannelIMVO>, val imActivity: Act
         }
     }
 
+    fun setCallBack(callback: CallBack) {
+        imCallBack = callback
+    }
+
+    interface CallBack {
+        fun onChannelImRead(item: ChannelIMVO, pos: Int)
+    }
 }

+ 2 - 2
home/src/main/code/com/wdkl/ncs/android/component/home/service/PhoneStateReceiver.java

@@ -68,7 +68,7 @@ public class PhoneStateReceiver extends BroadcastReceiver {
                             Constants.Companion.setPhoneState(Constants.PHONE_INCOMING);
                             //来电时取消留言
                             RecordHelper.getInstance().stopCancelRecordByOther(true);
-                            EventBus.getDefault().post(new MessageEvent("phone_call", Constants.EVENT_PHONE_CALL));
+                            EventBus.getDefault().post(new MessageEvent(true, Constants.EVENT_CLEAR_IM));
                             return;
                         }
                     }
@@ -83,7 +83,7 @@ public class PhoneStateReceiver extends BroadcastReceiver {
                 //Log.d(TAG, "PhoneStateReceiver in call: " + extraIncomingNumber);
                 DeviceChannel.calling = true;
                 RecordHelper.getInstance().stopCancelRecordByOther(true);
-                EventBus.getDefault().post(new MessageEvent("phone_call", Constants.EVENT_PHONE_CALL));
+                EventBus.getDefault().post(new MessageEvent(true, Constants.EVENT_CLEAR_IM));
                 if (Constants.Companion.getPhoneState() == Constants.PHONE_INCOMING) {
                     //发送tcp
                     if (Constants.Companion.getPhoneDataVO() != null) {

+ 5 - 12
home/src/main/code/com/wdkl/ncs/android/component/home/service/WdKeepAliveService.kt

@@ -304,16 +304,6 @@ class WdKeepAliveService : AbsWorkService() {
                     if (!DeviceChannel.calling && !RecordHelper.getInstance().isRecording) {
                         //群留言
                         playChannelVoiceMsg(channelData)
-
-                        val imTcpModel = ChannelImUtil.channelImRead(Constants.deviceId, channelData)
-                        NettyClient.instance.sendMsg(imTcpModel.toJson()).subscribe {
-                            if (it) {
-                                Log.d(TAG, "TCP.发送消息完成")
-                            } else {
-                                Log.e(TAG, "TCP.发送消息失败")
-                                HandleTcpConnect.instance.tcpReConnectWithMsgShow()
-                            }
-                        }
                     } else {
                         //通话中或正在留言时有新的群留言进来则将其加入群留言队列中,待留言结束后自动播放
                         channelImList.add(channelData)
@@ -634,9 +624,12 @@ class WdKeepAliveService : AbsWorkService() {
             }
 
             //电话时停止播放留言并清除群留言列表
-            Constants.EVENT_PHONE_CALL -> {
+            Constants.EVENT_CLEAR_IM -> {
+                val stop = messageEvent.getMessage() as Boolean
                 channelImList.clear()
-                MediaPlayHelper.getInstance().stopMusic(true)
+                if (stop) {
+                    MediaPlayHelper.getInstance().stopMusic(true)
+                }
                 imPlayState = 0
             }
         }

+ 3 - 3
home/src/main/code/com/wdkl/ncs/android/component/home/util/HandleTcpConnect.kt

@@ -47,17 +47,17 @@ class HandleTcpConnect {
     @SuppressLint("CheckResult")
     fun tcpReConnectWithMsgShow(){
         Log.d(TAG, "TCP.开始重新连接")
-        showMessage("服务连接失败,正在重连")
+        //showMessage("服务连接失败,正在重连")
         NettyClient.instance.reConnect().doOnError {
             it.message?.let { it1 -> Log.e(TAG, it1) }
         }.subscribe{
             if (it){
                 Log.d(TAG, "服务重连成功")
                 //EventBus.getDefault().post(MessageEvent("tcp connected", Constants.EVENT_TCP_CONNECTED))
-                showMessage("重连成功")
+                //showMessage("重连成功")
             } else {
                 Log.d(TAG, "服务重连失败")
-                showMessage("重连失败,请尝试重启APP")
+                //showMessage("重连失败,请尝试重启APP")
             }
         }
     }

+ 1 - 1
middleware/src/main/code/com/wdkl/ncs/android/middleware/common/Constants.kt

@@ -78,6 +78,6 @@ class Constants {
         const val EVENT_CHANNEL_IM_UPDATE = 0x47
         const val EVENT_NEW_TCP = 0x48
         const val EVENT_HEADSET_HOOK = 0x49
-        const val EVENT_PHONE_CALL = 0x50
+        const val EVENT_CLEAR_IM = 0x50
     }
 }