Browse Source

呼叫转移优化,来电列表优化,交互记录显示优化

weizhengliang 1 year ago
parent
commit
3c4f308446

+ 16 - 16
android_mobile/src/main/yd_w_xiaomi_2_chile/code/com/wdkl/ncs/android/component/home/activity/NewCallListActivity.kt

@@ -98,7 +98,7 @@ class NewCallListActivity : BaseToolActivity(), NewCallItemAdapter.CallClickList
                 RingPlayHelper.stopRingTone()
                 cancelVibrator()
 
-                val interactionVO = Gson().fromJson(data.data.toString(), InteractionVO::class.java)
+                val interactionVO = Gson().fromJson(data.tcpModel.data.toString(), InteractionVO::class.java)
                 var roomId: String
                 if (interactionVO.fromDeviceType == DeviceTypeEnum.SIMULATE_BED_DEVICE.value()) {
                     //模拟分机呼叫,通话由手机端创建
@@ -120,7 +120,7 @@ class NewCallListActivity : BaseToolActivity(), NewCallItemAdapter.CallClickList
                 intent.putExtra(CallSingleActivity.EXTRA_ROOM_ID, roomId)
                 intent.putExtra(CallSingleActivity.EXTRA_MO, false)
                 intent.putExtra(CallSingleActivity.EXTRA_AUDIO_ONLY, true)
-                intent.putExtra(CallSingleActivity.EXTRA_TCPMODEL, data)
+                intent.putExtra(CallSingleActivity.EXTRA_TCPMODEL, data.tcpModel)
                 intent.putExtra(CallSingleActivity.EXTRA_RING, false)
                 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                 startActivity(intent)
@@ -132,8 +132,8 @@ class NewCallListActivity : BaseToolActivity(), NewCallItemAdapter.CallClickList
             adapter.setOnItemClickListener { data, position ->
                 SpeechUtil.getInstance().stopSpeak()
                 RingPlayHelper.stopRingTone()
-                val interactionVO = Gson().fromJson(data.data.toString(), InteractionVO::class.java)
-                val callTcp = VoiceUtil.voiceReject(data.tid, Constants.deviceId, interactionVO.fromDeviceId, interactionVO.id)
+                val interactionVO = Gson().fromJson(data.tcpModel.data.toString(), InteractionVO::class.java)
+                val callTcp = VoiceUtil.voiceReject(data.tcpModel.tid, Constants.deviceId, interactionVO.fromDeviceId, interactionVO.id)
                 TcpClient.getInstance().sendMsg(callTcp.toJson())
 
                 //移除该条呼叫
@@ -185,14 +185,14 @@ class NewCallListActivity : BaseToolActivity(), NewCallItemAdapter.CallClickList
     @SuppressLint("CheckResult")
     private fun startLoopTransfer() {
         Thread {
-            while (Constants.newCallList.size > 0) {
+            while (Constants.callList.size > 0) {
                 val curTime = System.currentTimeMillis()
                 var interactionVO: InteractionVO? = null
                 var removeCall = false
-                for (item in Constants.newCallList) {
-                    interactionVO = Gson().fromJson(item.data.toString(), InteractionVO::class.java)
-                    if (curTime - interactionVO.createDate*1000L >= transSeconds*1000L) {
-                        val voiceTransferTcpModel = VoiceUtil.voiceTransfer(item.tid, Constants.deviceId, interactionVO.fromDeviceId, interactionVO.id)
+                for (item in Constants.callList) {
+                    interactionVO = Gson().fromJson(item.tcpModel.data.toString(), InteractionVO::class.java)
+                    if (curTime - item.startTime >= transSeconds*1000L) {
+                        val voiceTransferTcpModel = VoiceUtil.voiceTransfer(item.tcpModel.tid, Constants.deviceId, interactionVO.fromDeviceId, interactionVO.id)
                         TcpClient.getInstance().sendMsg(voiceTransferTcpModel.toJson())
 
                         removeCall = true
@@ -230,7 +230,7 @@ class NewCallListActivity : BaseToolActivity(), NewCallItemAdapter.CallClickList
             EventBus.getDefault().unregister(this)
         }
         WdKeepAliveService.mNewCallListActive = false
-        Constants.newCallList.clear()
+        Constants.callList.clear()
         cancelVibrator()
     }
 
@@ -240,9 +240,9 @@ class NewCallListActivity : BaseToolActivity(), NewCallItemAdapter.CallClickList
 
     private fun updateCallList() {
         synchronized(this) {
-            if (Constants.newCallList.size > 0) {
+            if (Constants.callList.size > 0) {
                 adapter.data.clear()
-                adapter.data.addAll(Constants.newCallList)
+                adapter.data.addAll(Constants.callList)
                 adapter.notifyDataSetChanged()
             } else {
                 emptyView.visibility = View.VISIBLE
@@ -255,18 +255,18 @@ class NewCallListActivity : BaseToolActivity(), NewCallItemAdapter.CallClickList
 
     private fun removeCall(item: InteractionVO) {
         synchronized(this) {
-            val iterator = Constants.newCallList.iterator()
+            val iterator = Constants.callList.iterator()
             while (iterator.hasNext()) {
                 val it = iterator.next()
-                val interaction = Gson().fromJson(it.data.toString(), InteractionVO::class.java)
+                val interaction = Gson().fromJson(it.tcpModel.data.toString(), InteractionVO::class.java)
                 if (interaction.id.equals(item.id)) {
                     iterator.remove()
                 }
             }
 
-            if (Constants.newCallList.size > 0) {
+            if (Constants.callList.size > 0) {
                 adapter.data.clear()
-                adapter.data.addAll(Constants.newCallList)
+                adapter.data.addAll(Constants.callList)
                 adapter.notifyDataSetChanged()
             } else {
                 emptyView.visibility = View.VISIBLE

+ 36 - 0
android_mobile/src/main/yd_w_xiaomi_2_chile/code/com/wdkl/ncs/android/component/home/activity/NewEventListActivity.kt

@@ -4,6 +4,8 @@ import android.content.Context
 import android.os.Vibrator
 import android.util.Log
 import android.view.View
+import androidx.recyclerview.widget.ItemTouchHelper
+import androidx.recyclerview.widget.RecyclerView
 import com.alibaba.android.vlayout.DelegateAdapter
 import com.alibaba.android.vlayout.VirtualLayoutManager
 import com.enation.javashop.net.engine.model.NetState
@@ -75,6 +77,40 @@ class NewEventListActivity : BaseActivity<NewEventListPresenter, ActivityEventLi
         /**配置到RecycleView*/
         rv_event_list.layoutManager = virtualLayoutManager
         rv_event_list.adapter = delegateAdapter
+
+        val touchCallback: ItemTouchHelper.Callback =
+            object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT) {
+                override fun onMove(
+                    recyclerView: RecyclerView,
+                    viewHolder: RecyclerView.ViewHolder,
+                    target: RecyclerView.ViewHolder
+                ): Boolean {
+                    return false
+                }
+
+                override fun onSwiped(
+                    viewHolder: RecyclerView.ViewHolder,
+                    direction: Int
+                ) {
+                    val pos = viewHolder.adapterPosition
+                    if (!Constants.oldEvent) {
+                        if (Constants.eventList.size > pos) {
+                            val iterator = Constants.eventList.iterator()
+                            val removeInteractionVO = Constants.eventList[pos]
+                            while (iterator.hasNext()) {
+                                val it = iterator.next()
+                                if (it.id == removeInteractionVO.id) {
+                                    iterator.remove()
+                                }
+                            }
+
+                            renderData(Constants.eventList)
+                        }
+                    }
+                }
+            }
+        val itemTouchHelper = ItemTouchHelper(touchCallback)
+        itemTouchHelper.attachToRecyclerView(rv_event_list)
     }
 
     override fun onWindowFocusChanged(hasFocus: Boolean) {

+ 8 - 7
android_mobile/src/main/yd_w_xiaomi_2_chile/code/com/wdkl/ncs/android/component/home/adapter/NewCallItemAdapter.kt

@@ -9,10 +9,11 @@ import com.wdkl.ncs.android.component.home.R
 import com.wdkl.ncs.android.component.home.databinding.CallListItemBinding
 import com.wdkl.ncs.android.lib.adapter.BaseDelegateAdapter
 import com.wdkl.ncs.android.lib.utils.BaseRecyclerViewHolder
+import com.wdkl.ncs.android.middleware.entity.CallingItem
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel
 
-class NewCallItemAdapter(var data:ArrayList<TcpModel>, val activity: Activity) : BaseDelegateAdapter<BaseRecyclerViewHolder<CallListItemBinding>, TcpModel>() {
+class NewCallItemAdapter(var data:ArrayList<CallingItem>, val activity: Activity) : BaseDelegateAdapter<BaseRecyclerViewHolder<CallListItemBinding>, CallingItem>() {
 
     private var callListener: CallClickListener? = null
 
@@ -39,23 +40,23 @@ class NewCallItemAdapter(var data:ArrayList<TcpModel>, val activity: Activity) :
     override fun onBindViewHolder(p0: BaseRecyclerViewHolder<CallListItemBinding>, p1: Int) {
         p0.bind { binding ->
             val itemData = getItem(p1)
-            if (itemData.data != null) {
-                val interactionVO = Gson().fromJson(itemData.data.toString(), InteractionVO::class.java)
+            if (itemData.tcpModel.data != null) {
+                val interactionVO = Gson().fromJson(itemData.tcpModel.data.toString(), InteractionVO::class.java)
 
                 binding.tvCallName.text = interactionVO.fromFrameFullName
-                binding.btnCallAccept.setOnClickListener {
+                /*binding.btnCallAccept.setOnClickListener {
                     //来电接听
                     if (callListener != null) {
-                        callListener!!.callAccept(itemData)
+                        callListener!!.callAccept(itemData.tcpModel)
                     }
                 }
 
                 binding.btnCallReject.setOnClickListener {
                     //来电拒绝
                     if (callListener != null) {
-                        callListener!!.callReject(itemData)
+                        callListener!!.callReject(itemData.tcpModel)
                     }
-                }
+                }*/
             }
         }
 

+ 1 - 33
android_mobile/src/main/yd_w_xiaomi_2_chile/code/com/wdkl/ncs/android/component/home/adapter/NewEventItemAdapter.kt

@@ -137,16 +137,6 @@ class NewEventItemAdapter(var data:ArrayList<InteractionVO>, val activity: Activ
                                 }
                             }
                             TcpClient.getInstance().sendTcp(tcpModel, false, transaction)
-
-                            /*NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe {
-                                if (it) {
-                                    Log.d(TAG, "TCP.发送消息完成")
-                                } else {
-                                    Log.e(TAG, "TCP.发送消息失败")
-                                    HandleTcpConnect.instance.tcpReConnectWithMsgShow()
-                                }
-                                loadingDialog.dismiss()
-                            }*/
                         }
                     }
                 }
@@ -205,15 +195,6 @@ class NewEventItemAdapter(var data:ArrayList<InteractionVO>, val activity: Activ
                                     }
                                 }
                                 TcpClient.getInstance().sendTcp(tcpModel, false, transaction)
-
-                                /*NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe {
-                                    if (it) {
-                                        Log.d(TAG, "TCP.发送消息完成")
-                                    } else {
-                                        Log.e(TAG, "TCP.发送消息失败")
-                                        HandleTcpConnect.instance.tcpReConnectWithMsgShow()
-                                    }
-                                }*/
                             }
                         }
                     }
@@ -223,7 +204,7 @@ class NewEventItemAdapter(var data:ArrayList<InteractionVO>, val activity: Activ
                     binding.eliVoiceRecorder.visibility = View.GONE
                     binding.eliEventName.setTextColor(activity.resources.getColor(R.color.warn_orange))
                     binding.eliImRead.visibility = View.GONE
-                    binding.eliEventResponse.visibility = View.VISIBLE
+                    binding.eliEventResponse.visibility = View.INVISIBLE
                     binding.eliEventResponse.setImageResource(R.drawable.icon_switch_off)
                     binding.eliEventName.text = "SOS"
                     if (itemData.actionEnd!=null){
@@ -265,19 +246,6 @@ class NewEventItemAdapter(var data:ArrayList<InteractionVO>, val activity: Activ
                                 }
                             }
                             TcpClient.getInstance().sendTcp(tcpModel, false, transaction)
-
-                            /*NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe {
-                                if (it) {
-                                    Log.d(TAG, "TCP.发送消息完成")
-                                    tcpModel.data = Gson().toJson(itemData)
-                                    EventBus.getDefault().post(MessageEvent(tcpModel, 999))
-                                } else {
-                                    Log.e(TAG, "TCP.发送消息失败")
-
-                                    HandleTcpConnect.instance.tcpReConnectWithMsgShow()
-                                }
-                                loadingDialog.dismiss()
-                            }*/
                         }
                     }
                 }

+ 1 - 1
android_mobile/src/main/yd_w_xiaomi_2_chile/code/com/wdkl/ncs/android/component/home/adapter/WatchCallRecordsItemAdapter.kt

@@ -78,7 +78,7 @@ class WatchCallRecordsItemAdapter(val data: ArrayList<InteractionVO>) : BaseDele
             }
 
             if (!TextUtils.isEmpty(itemData.toMemberName)) {
-                binding.nameTv.text = "To: " + itemData.fromFrameFullName + " " + itemData.toMemberName
+                binding.nameTv.text = "To: " + itemData.toFrameFullName + " " + itemData.toMemberName
             } else {
                 binding.nameTv.text = "To: " + itemData.toFrameFullName
             }

+ 6 - 4
android_mobile/src/main/yd_w_xiaomi_2_chile/code/com/wdkl/ncs/android/component/home/service/WdKeepAliveService.kt

@@ -33,6 +33,7 @@ import com.wdkl.ncs.android.lib.utils.showMessage
 import com.wdkl.ncs.android.lib.vo.MessageEvent
 import com.wdkl.ncs.android.middleware.api.ApiManager
 import com.wdkl.ncs.android.middleware.common.Constants
+import com.wdkl.ncs.android.middleware.entity.CallingItem
 import com.wdkl.ncs.android.middleware.model.dos.ChannelImDO
 import com.wdkl.ncs.android.middleware.model.dos.PartSettingDO
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
@@ -357,7 +358,8 @@ class WdKeepAliveService : AbsWorkService() {
                     MediaPlayHelper.getInstance().stopMusic(true)
 
                     //加入呼叫列表
-                    Constants.newCallList.add(tcpModel)
+                    val callingItem = CallingItem(System.currentTimeMillis(), tcpModel)
+                    Constants.callList.add(callingItem)
 
                     if (!DeviceChannel.calling && !RecordHelper.getInstance().isRecording) {
                         if (mNewCallListActive) {
@@ -377,7 +379,7 @@ class WdKeepAliveService : AbsWorkService() {
                                 }
                                 waitingCall = false
 
-                                if (Constants.newCallList.size > 0) {
+                                if (Constants.callList.size > 0) {
                                     //更新界面
                                     if (mNewCallListActive) {
                                         EventBus.getDefault().post(MessageEvent(tcpModel, Constants.EVENT_UPDATE_CALL))
@@ -428,10 +430,10 @@ class WdKeepAliveService : AbsWorkService() {
                     if (tcpModel.getAction() === TcpAction.VoiceAction.CANCEL || tcpModel.action == TcpAction.VoiceAction.VOICE_OFF) {
                         //对方取消呼叫或者呼叫已被其他主机处理(接听或拒绝)
                         val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
-                        val iterator = Constants.newCallList.iterator()
+                        val iterator = Constants.callList.iterator()
                         while (iterator.hasNext()) {
                             val it = iterator.next()
-                            val interaction = Gson().fromJson(it.data.toString(), InteractionVO::class.java)
+                            val interaction = Gson().fromJson(it.tcpModel.data.toString(), InteractionVO::class.java)
                             if (interaction.id.equals(interactionVO.id)) {
                                 iterator.remove()
                             }

+ 6 - 4
android_mobile/src/main/yd_w_xiaomi_2_chile/res/layout/activity_call_list.xml

@@ -3,6 +3,8 @@
     xmlns:bind="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:paddingTop="4dp"
+    android:paddingBottom="4dp"
     android:orientation="vertical"
     android:background="#FFBDC3">
 
@@ -10,9 +12,9 @@
         android:id="@+id/srl_call_list"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:layout_marginLeft="3sp"
-        android:layout_marginRight="3sp"
-        bind:srlEnableLoadMore="true"
+        android:layout_marginLeft="4dp"
+        android:layout_marginRight="4dp"
+        bind:srlEnableLoadMore="false"
         bind:srlEnableRefresh="true">
         <androidx.recyclerview.widget.RecyclerView
             android:id="@+id/rv_call_list"
@@ -28,7 +30,7 @@
         android:gravity="center"
         android:textSize="24sp"
         android:textColor="@color/warn_orange"
-        android:text="没有呼叫"
+        android:text="Empty"
         android:background="@color/color_white"
         android:visibility="gone"/>
 </FrameLayout>

+ 1 - 2
android_mobile/src/main/yd_w_xiaomi_2_chile/res/layout/call_list_item.xml

@@ -20,8 +20,7 @@
         android:layout_width="48dp"
         android:layout_height="48dp"
         android:layout_weight="1"
-        android:src="@drawable/av_audio_answer_selector"
-        android:visibility="gone"/>
+        android:src="@drawable/event_undo" />
 
     <ImageView
         android:id="@+id/btn_call_reject"

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

@@ -1,5 +1,6 @@
 package com.wdkl.ncs.android.middleware.common
 
+import com.wdkl.ncs.android.middleware.entity.CallingItem
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel
 import com.wdkl.ncs.android.middleware.tcp.enums.CommunicationEnum
@@ -54,6 +55,7 @@ class Constants {
         var phoneWhiteList = ArrayList<String>()
         //来电呼叫列表
         var newCallList = ArrayList<TcpModel>()
+        var callList = ArrayList<CallingItem>()
 
         var smsCheck = false
 

+ 31 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/entity/CallingItem.java

@@ -0,0 +1,31 @@
+package com.wdkl.ncs.android.middleware.entity;
+
+import com.wdkl.ncs.android.middleware.model.vo.InteractionVO;
+import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel;
+import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction;
+
+public class CallingItem {
+    private long startTime;
+    private TcpModel tcpModel;
+
+    public CallingItem(long startTime, TcpModel tcpModel) {
+        this.startTime = startTime;
+        this.tcpModel = tcpModel;
+    }
+
+    public long getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(long startTime) {
+        this.startTime = startTime;
+    }
+
+    public TcpModel getTcpModel() {
+        return tcpModel;
+    }
+
+    public void setTcpModel(TcpModel tcpModel) {
+        this.tcpModel = tcpModel;
+    }
+}