Przeglądaj źródła

呼叫取消优化

weizhengliang 9 miesięcy temu
rodzic
commit
c6436198e0

+ 59 - 17
conversion_box/src/main/java/com/wdkl/app/ncs/conversion_box/activity/MainActivity.kt

@@ -967,6 +967,8 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                         if (!TextUtils.isEmpty(doorAddr)) {
                             SerialPortHelper.closeDoorLight(doorAddr)
                         }
+
+                        removeCall(addr)
                     }
 
                     "C" -> {
@@ -1078,7 +1080,7 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                             if (addr.equals(curDeviceUart, true)) {
                                 handoffCall()
                             } else {
-                                cancelOutCall(addr, false)
+                                cancelOutCall2(addr, false)
                             }
                         } else if (Constant.CALL_STATE == Constant.CALL_INCOMING) {
                             if (addr.equals(curDeviceUart, true)) {
@@ -1086,17 +1088,15 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                                 SerialPortHelper.closeSoundChannel(addr)
                                 RingPlayHelper.stopRingTone()
                             } else {
-                                cancelOutCall(addr, false)
+                                cancelOutCall2(addr, false)
                             }
                         } else {
-                            cancelOutCall(addr, true)
+                            cancelOutCall2(addr, true)
                         }
 
-                        //关闭门灯
-                        val doorAddr = getDoorLightAddr(addr)
-                        if (!TextUtils.isEmpty(doorAddr)) {
-                            SerialPortHelper.closeDoorLight(doorAddr)
-                        }
+                        SerialPortHelper.closeSoundChannel(addr)
+
+                        removeCall(addr)
                     }
 
                     "R" -> {
@@ -1361,6 +1361,20 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
         }
     }
 
+    private fun removeCall(uart: String) {
+        synchronized(Unit) {
+            if (callingList.size > 0) {
+                val iterator = callingList.iterator()
+                while (iterator.hasNext()) {
+                    val it = iterator.next()
+                    if (uart.equals(it.uart, true)) {
+                        iterator.remove()
+                    }
+                }
+            }
+        }
+    }
+
     private fun cancelOutCall(uart: String, resetCall: Boolean) {
         if (FrameHelper.frameDeviceList.size > 0) {
             for (frameDevice in FrameHelper.frameDeviceList) {
@@ -1395,6 +1409,35 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
         }
     }
 
+    private fun cancelOutCall2(uart: String, resetCall: Boolean) {
+        if (FrameHelper.frameDeviceList.size > 0) {
+            for (frameDevice in FrameHelper.frameDeviceList) {
+                if (frameDevice.device != null && uart.equals(frameDevice.device.ethMac, true)) {
+                    updateCallText(getString(R.string.call_standby))
+
+                    for (item in callingList) {
+                        if (item.deviceId == frameDevice.device.id) {
+                            val callTcp = VoiceUtil.voiceCancel(item.tid, frameDevice.device.id, item.interactionId)
+                            TcpClient.getInstance().sendMsg(callTcp.toJson())
+
+                            SerialPortHelper.closeSoundChannel(uart)
+                            //关闭门灯
+                            val doorAddr = getDoorLightAddr(uart.toUpperCase(Locale.ROOT))
+                            if (!TextUtils.isEmpty(doorAddr)) {
+                                SerialPortHelper.closeDoorLight(doorAddr)
+                            }
+                        }
+                    }
+
+                    if (resetCall) {
+                        Constant.CALL_STATE = Constant.CALL_STANDBY
+                    }
+                    break
+                }
+            }
+        }
+    }
+
     private fun rejectCall() {
         updateCallText(getString(R.string.call_standby))
         VoiceUtil.rejectAudioCall(tid, curDeviceId, fromId, curInteractionVO!!.id)
@@ -1809,15 +1852,6 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                                 cancelOutCall(interactionVO.fromEthIp, false)
                             }*/
 
-                            /*if (callingList.size > 0) {
-                                for ((index, e) in callingList.withIndex()) {
-                                    if (e.uart.equals(interactionVO.fromEthIp, true)) {
-                                        var item = CallingItem(tcpModel.tid, interactionVO.fromDeviceId, interactionVO.fromEthIp, System.currentTimeMillis(), interactionVO.id)
-                                        callingList.set(index, item)
-                                    }
-                                }
-                            }*/
-
                             if (callingList.size > 0) {
                                 val iterator = callingList.iterator()
                                 while (iterator.hasNext()) {
@@ -1853,6 +1887,8 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                                 if (!TextUtils.isEmpty(doorAddr)) {
                                     SerialPortHelper.closeDoorLight(doorAddr)
                                 }
+
+                                removeCall(interactionVO.fromEthIp)
                             //}
                         } else if (tcpModel.getAction() == TcpAction.VoiceAction.CALLING) {
                             //我方呼出,对方通话中
@@ -1869,6 +1905,8 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                             if (!TextUtils.isEmpty(doorAddr)) {
                                 SerialPortHelper.closeDoorLight(doorAddr)
                             }
+
+                            removeCall(interactionVO.fromEthIp)
                         } else if (tcpModel.getAction() == TcpAction.VoiceAction.FAILED) {
                             //我方呼出,对方不在线,设备离线或其它错误
                             if (tcpModel.data != null) {
@@ -1882,6 +1920,8 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                                 if (!TextUtils.isEmpty(doorAddr)) {
                                     SerialPortHelper.closeDoorLight(doorAddr)
                                 }
+
+                                removeCall(interactionVO.fromEthIp)
                             }
                         } else if (tcpModel.getAction() == TcpAction.VoiceAction.HANDOFF) {
                             //对方挂断,不论我方呼出或呼入
@@ -1899,6 +1939,8 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                                         if (!TextUtils.isEmpty(doorAddr)) {
                                             SerialPortHelper.closeDoorLight(doorAddr)
                                         }
+
+                                        removeCall(interactionVO.fromEthIp)
                                     }
                                 } else {
                                     if (!TextUtils.isEmpty(interactionVO.toEthIp)) {