|
@@ -0,0 +1,181 @@
|
|
|
+package com.wdkl.ncs.android.component.home.activity
|
|
|
+
|
|
|
+import android.content.Intent
|
|
|
+import android.os.Bundle
|
|
|
+import android.support.v7.widget.RecyclerView
|
|
|
+import android.util.Log
|
|
|
+import android.view.View
|
|
|
+import android.widget.TextView
|
|
|
+import com.alibaba.android.vlayout.DelegateAdapter
|
|
|
+import com.alibaba.android.vlayout.VirtualLayoutManager
|
|
|
+import com.alibaba.fastjson.JSON
|
|
|
+import com.enation.javashop.utils.base.tool.BaseToolActivity
|
|
|
+import com.google.gson.Gson
|
|
|
+import com.scwang.smartrefresh.layout.SmartRefreshLayout
|
|
|
+import com.wdkl.ncs.android.component.home.R
|
|
|
+import com.wdkl.ncs.android.component.home.adapter.NewCallItemAdapter
|
|
|
+import com.wdkl.ncs.android.component.home.service.WdKeepAliveService
|
|
|
+import com.wdkl.ncs.android.component.home.ui.CallSingleActivity
|
|
|
+import com.wdkl.ncs.android.component.home.util.RingPlayHelper
|
|
|
+import com.wdkl.ncs.android.component.home.util.SpeechUtil
|
|
|
+import com.wdkl.ncs.android.lib.utils.AppTool
|
|
|
+import com.wdkl.ncs.android.lib.utils.showMessage
|
|
|
+import com.wdkl.ncs.android.lib.vo.MessageEvent
|
|
|
+import com.wdkl.ncs.android.middleware.common.Constants
|
|
|
+import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
|
|
|
+import com.wdkl.ncs.android.middleware.tcp.channel.DeviceChannel
|
|
|
+import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel
|
|
|
+import com.wdkl.ncs.android.middleware.tcp.enums.DeviceTypeEnum
|
|
|
+import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction
|
|
|
+import org.greenrobot.eventbus.EventBus
|
|
|
+import org.greenrobot.eventbus.Subscribe
|
|
|
+import org.greenrobot.eventbus.ThreadMode
|
|
|
+
|
|
|
+class NewCallListActivity : BaseToolActivity(), NewCallItemAdapter.CallClickListener {
|
|
|
+ var TAG = WatchContactsActivity::class.java.getSimpleName()
|
|
|
+
|
|
|
+ private val adapter = NewCallItemAdapter(ArrayList(),this)
|
|
|
+ private lateinit var virtualLayoutManager: VirtualLayoutManager
|
|
|
+ private lateinit var delegateAdapter: DelegateAdapter
|
|
|
+
|
|
|
+ private lateinit var recyclerView: RecyclerView
|
|
|
+ private lateinit var refreshView: SmartRefreshLayout
|
|
|
+ private lateinit var emptyView: TextView
|
|
|
+
|
|
|
+ override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
+ super.onCreate(savedInstanceState)
|
|
|
+
|
|
|
+ setContentView(R.layout.activity_call_list)
|
|
|
+
|
|
|
+ if(!EventBus.getDefault().isRegistered(this)){
|
|
|
+ EventBus.getDefault().register(this)
|
|
|
+ }
|
|
|
+
|
|
|
+ recyclerView = findViewById(R.id.rv_call_list)
|
|
|
+ refreshView = findViewById(R.id.srl_call_list)
|
|
|
+ emptyView = findViewById(R.id.tv_empty_call)
|
|
|
+
|
|
|
+ /**初始化LayoutMannager*/
|
|
|
+ virtualLayoutManager = VirtualLayoutManager(this.activity)
|
|
|
+
|
|
|
+ /**初始化适配器*/
|
|
|
+ delegateAdapter = DelegateAdapter(virtualLayoutManager)
|
|
|
+ delegateAdapter.addAdapter(adapter)
|
|
|
+ recyclerView.layoutManager = virtualLayoutManager
|
|
|
+ recyclerView.adapter = delegateAdapter
|
|
|
+
|
|
|
+ adapter.setCallClick(this)
|
|
|
+ adapter.setOnItemClickListener { data, position ->
|
|
|
+ SpeechUtil.getInstance().stopSpeak()
|
|
|
+
|
|
|
+ val interactionVO = Gson().fromJson(data.data.toString(), InteractionVO::class.java)
|
|
|
+ var roomId: String
|
|
|
+ if (interactionVO.fromDeviceType == DeviceTypeEnum.SIMULATE_BED_DEVICE.value()) {
|
|
|
+ //模拟分机呼叫,通话由手机端创建
|
|
|
+ DeviceChannel.callId = interactionVO.fromDeviceId
|
|
|
+ roomId = Constants.sipId!!
|
|
|
+ } else {
|
|
|
+ if (interactionVO.fromDeviceId.equals(Constants.deviceId)) {
|
|
|
+ DeviceChannel.callId = interactionVO.toDeviceId
|
|
|
+ roomId = interactionVO.toSipId
|
|
|
+ } else {
|
|
|
+ DeviceChannel.callId = interactionVO.fromDeviceId
|
|
|
+ roomId = interactionVO.fromSipId
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Log.i(TAG, "来电:" + JSON.toJSONString(data))
|
|
|
+
|
|
|
+ //启动 activity
|
|
|
+ val intent = Intent(this, CallSingleActivity::class.java)
|
|
|
+ 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_RING, false)
|
|
|
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
|
|
+ startActivity(intent)
|
|
|
+
|
|
|
+ //移除该条呼叫
|
|
|
+ removeCall(interactionVO)
|
|
|
+ }
|
|
|
+
|
|
|
+ refreshView.setOnRefreshListener {
|
|
|
+ AppTool.Time.delay(800) {
|
|
|
+ updateCallList()
|
|
|
+ refreshView.finishRefresh()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ WdKeepAliveService.mNewCallListActive = true
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onResume() {
|
|
|
+ super.onResume()
|
|
|
+ updateCallList()
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onDestroy() {
|
|
|
+ super.onDestroy()
|
|
|
+ RingPlayHelper.stopRingTone()
|
|
|
+ if (EventBus.getDefault().isRegistered(this)) {
|
|
|
+ EventBus.getDefault().unregister(this)
|
|
|
+ }
|
|
|
+ WdKeepAliveService.mNewCallListActive = false
|
|
|
+ Constants.newCallList.clear()
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onBackPressed() {
|
|
|
+ showMessage("您还有呼叫未处理")
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun updateCallList() {
|
|
|
+ synchronized(this) {
|
|
|
+ if (Constants.newCallList.size > 0) {
|
|
|
+ adapter.data.clear()
|
|
|
+ adapter.data.addAll(Constants.newCallList)
|
|
|
+ adapter.notifyDataSetChanged()
|
|
|
+ } else {
|
|
|
+ emptyView.visibility = View.VISIBLE
|
|
|
+ AppTool.Time.delay(500) {
|
|
|
+ finish()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun removeCall(item: InteractionVO) {
|
|
|
+ synchronized(this) {
|
|
|
+ val iterator = Constants.newCallList.iterator()
|
|
|
+ while (iterator.hasNext()) {
|
|
|
+ val it = iterator.next()
|
|
|
+ val interaction = Gson().fromJson(it.data.toString(), InteractionVO::class.java)
|
|
|
+ if (interaction.id.equals(item.id)) {
|
|
|
+ iterator.remove()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ updateCallList()
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun callAccept(model: TcpModel) {
|
|
|
+ //接听电话,进入通话界面,并刷新呼叫列表
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun callReject(model: TcpModel) {
|
|
|
+ //拒绝电话,刷新列表
|
|
|
+ }
|
|
|
+
|
|
|
+ @Subscribe(threadMode = ThreadMode.MAIN)
|
|
|
+ fun onMoonEvent(messageEvent: MessageEvent) {
|
|
|
+ if (messageEvent.tag == Constants.EVENT_NEW_CALL) { //新呼叫
|
|
|
+ updateCallList()
|
|
|
+ } else if (messageEvent.tag == Constants.EVENT_NEW_TCP) {
|
|
|
+ val tcpModel = messageEvent.getMessage() as TcpModel
|
|
|
+ if (tcpModel.getAction() === TcpAction.VoiceAction.CANCEL) {
|
|
|
+ //对方取消呼叫
|
|
|
+ val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
|
|
|
+ removeCall(interactionVO)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|