Browse Source

<修改通话问题>

weizhengliang 4 years ago
parent
commit
cf234bd521

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

@@ -13,6 +13,21 @@ class Constants {
         var tcp_ip: String? =""//tcpip
         var tcp_port: String? =""//tcp端口
         var reader_idle_time: String? =""//tcp心跳
+        var call_type: Int = 0 //通话类型: 0-语音, 1-视频
+        //来电设备id
+        var fromId: Int? = -1
+
+        //Interaction ID
+        var interactionId: Int? = -1
+
+        /**
+         * TCP消息
+         */
+        val EVENT_TCP_MSG = 0x01
+        /**
+         * 通话状态
+         */
+        val EVENT_CALL_STATE = 0x02
     }
 
 

+ 26 - 18
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/channel/DeviceChannel.java

@@ -3,6 +3,7 @@ package com.wdkl.ncs.android.middleware.tcp.channel;
 import android.util.Log;
 
 import com.google.gson.Gson;
+import com.wdkl.ncs.android.component.nursehome.common.Constants;
 import com.wdkl.ncs.android.middleware.logic.contract.nursehome.CallRecordsFragmentContract;
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO;
 import com.wdkl.ncs.android.middleware.tcp.TcpClient;
@@ -25,15 +26,15 @@ public class DeviceChannel {
     public static TcpModel handleTcpReceived(TcpModel tcpModel){
         TcpModel responseTcpModel = null;
 
-        Log.e(TAG,"DeviceChannel "+tcpModel.getType());
+        Log.e(TAG,"DeviceChannel tcpType: "+tcpModel.getType() + ", calling: " + calling);
 
         switch (tcpModel.getType()){
             case CALLBACK:
                 if(tcpModel.getAction()== TcpAction.CallbackAction.SUCCESS){
                     //todo: 刷新呼叫记录列表
-                    EventBus.getDefault().post(new MessageEvent(tcpModel,0));
+                    EventBus.getDefault().post(new MessageEvent(tcpModel,Constants.Companion.getEVENT_TCP_MSG()));
                 }else if(tcpModel.getAction()== TcpAction.CallbackAction.FAILED){
-                    EventBus.getDefault().post(new MessageEvent(tcpModel,0));
+                    EventBus.getDefault().post(new MessageEvent(tcpModel,Constants.Companion.getEVENT_TCP_MSG()));
                 }
                 break;
             case VOICE:
@@ -48,31 +49,38 @@ public class DeviceChannel {
                     } else {
                         responseTcpModel = VoiceUtil.voiceSuccess(tcpModel.getToId(), tcpModel.getFromId(),interactionVO.getId());
                         //todo: 通话中界面展现,data中服务器传过来呼入名称;从接口重新获取左侧数据
-                        EventBus.getDefault().post(new MessageEvent(tcpModel,0));
+                        EventBus.getDefault().post(new MessageEvent(tcpModel, Constants.Companion.getEVENT_TCP_MSG()));
                         return responseTcpModel;
                     }
                 } else if (tcpModel.getAction()== TcpAction.VoiceAction.ACCEPT){ //我方呼出,对方接受
                     //todo: 通话中界面更新;建立数据通话
-                    EventBus.getDefault().post(new MessageEvent(tcpModel,0));
+                    EventBus.getDefault().post(new MessageEvent(tcpModel,Constants.Companion.getEVENT_TCP_MSG()));
+                    calling = true;
                 } else if (tcpModel.getAction()== TcpAction.VoiceAction.REJECT){ //我方呼出,对方拒绝
                     //todo: 清掉呼出的TcpModel,通话中界面更新 --- 显示对方拒绝并停留3秒,结束至正常界面;更新左侧
-                    EventBus.getDefault().post(new MessageEvent(tcpModel,0));
+                    EventBus.getDefault().post(new MessageEvent(tcpModel,Constants.Companion.getEVENT_TCP_MSG()));
+                    calling = false;
                 } else if (tcpModel.getAction()== TcpAction.VoiceAction.CALLING){ //我方呼出,对方通话中
                     //todo: 清掉呼出的TcpModel,通话中界面更新 --- 显示对方占线并停留3秒,结束至正常界面;更新左侧
-                    EventBus.getDefault().post(new MessageEvent(tcpModel,0));
+                    EventBus.getDefault().post(new MessageEvent(tcpModel,Constants.Companion.getEVENT_TCP_MSG()));
+                    calling = false;
                 } else if (tcpModel.getAction()== TcpAction.VoiceAction.FAILED){ //我方呼出,对方不在线,设备离线或其它错误
                     //todo: 清掉呼出的TcpModel,通话中界面更新 --- 显示对方离线并停留3秒,结束至正常界面;更新左侧
-                    EventBus.getDefault().post(new MessageEvent(tcpModel,0));
+                    EventBus.getDefault().post(new MessageEvent(tcpModel,Constants.Companion.getEVENT_TCP_MSG()));
+                    calling = false;
                 } else if (tcpModel.getAction()== TcpAction.VoiceAction.HANDOFF){ //对方挂断,不论我方呼出或呼入
                     //todo: 清掉呼出的TcpModel,通话中界面更新 --- 显示对方已挂断并停留3秒,结束至正常界面;更新左侧
-                    EventBus.getDefault().post(new MessageEvent(tcpModel,0));
+                    EventBus.getDefault().post(new MessageEvent(tcpModel,Constants.Companion.getEVENT_TCP_MSG()));
+                    calling = false;
                 }else if(tcpModel.getAction()== TcpAction.VoiceAction.CANCEL){
                     //todo: 清掉呼出的TcpModel,通话中界面更新 --- 显示对方已挂断并停留3秒,结束至正常界面;更新左侧
-                    EventBus.getDefault().post(new MessageEvent(tcpModel,0));
+                    EventBus.getDefault().post(new MessageEvent(tcpModel,Constants.Companion.getEVENT_TCP_MSG()));
+                    calling = false;
                 }else if(tcpModel.getAction()== TcpAction.VoiceAction.SUCCESS){
                     //todo 这个是自己点击了分机的呼叫 服务器返回给我数据 以供我 挂断时传输呼叫记录的id 因为分机
                     //在点击呼叫之前 是没有呼叫记录的
-                    EventBus.getDefault().post(new MessageEvent(tcpModel,0));
+                    EventBus.getDefault().post(new MessageEvent(tcpModel,Constants.Companion.getEVENT_TCP_MSG()));
+                    calling = true;
                 }
                 break;
             case VIDEO:
@@ -80,38 +88,38 @@ public class DeviceChannel {
             case IM:
                 if (tcpModel.getAction()== TcpAction.IMAction.MSG){
                     //todo: 从接口重新获取左侧数据;使用通话中界面,显示有语音留言,停留3秒,结束至正常界面
-                    EventBus.getDefault().post(new MessageEvent(tcpModel,0));
+                    EventBus.getDefault().post(new MessageEvent(tcpModel,Constants.Companion.getEVENT_TCP_MSG()));
                 } else if (tcpModel.getAction()== TcpAction.IMAction.MSG_READ){ //语音已读取
                     //todo: 从data得到语音id;更新左侧,注意这里不使用通话中界面提示已读
-                    EventBus.getDefault().post(new MessageEvent(tcpModel,0));
+                    EventBus.getDefault().post(new MessageEvent(tcpModel,Constants.Companion.getEVENT_TCP_MSG()));
                 }
                 break;
             case EVENT:
                 if (tcpModel.getAction()== TcpAction.EventAction.KEY_CLICK){ //有新事件过来
                     //todo: 服务端通过data给出具体的事件名称放置data。从接口重新获取左侧数据;使用通话中界面,显示事件名称,停留3秒,结束至正常界面
                     Log.e(TAG,"收到事件tcp");
-                    EventBus.getDefault().post(new MessageEvent(tcpModel,0));
+                    EventBus.getDefault().post(new MessageEvent(tcpModel,Constants.Companion.getEVENT_TCP_MSG()));
 
                 } else if (tcpModel.getAction()== TcpAction.EventAction.RESPONSE){ //事件已处理,仅分机用
                     //todo: 从data得到事件id,使用通话中界面,显示事件名称及已响应字样,停留3秒,结束至正常界面;更新左侧
                     Log.e(TAG,"");
-                    EventBus.getDefault().post(new MessageEvent(tcpModel,0));
+                    EventBus.getDefault().post(new MessageEvent(tcpModel,Constants.Companion.getEVENT_TCP_MSG()));
                     Log.e(TAG,"收到事件已处理tcp");
                 }
                 break;
             case DATA:
                 if (tcpModel.getAction()== TcpAction.DataAction.REFRESH){
                     //todo: 通过data判断刷新何种数据
-                    EventBus.getDefault().post(new MessageEvent(tcpModel,0));
+                    EventBus.getDefault().post(new MessageEvent(tcpModel,Constants.Companion.getEVENT_TCP_MSG()));
                 }else if(tcpModel.getAction()== TcpAction.DataAction.INTERACTION){
                     //todo: 刷新呼叫记录列表
-                    EventBus.getDefault().post(new MessageEvent(tcpModel,0));
+                    EventBus.getDefault().post(new MessageEvent(tcpModel,Constants.Companion.getEVENT_TCP_MSG()));
                 }
                 break;
             case DEVICE:
                 if (tcpModel.getAction()== TcpAction.DeviceAction.RESTART){
                     //todo:重启设备
-                    EventBus.getDefault().post(new MessageEvent(tcpModel,0));
+                    EventBus.getDefault().post(new MessageEvent(tcpModel,Constants.Companion.getEVENT_TCP_MSG()));
                 }
                 break;
         }

+ 35 - 1
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/channel/VoiceUtil.java

@@ -1,5 +1,6 @@
 package com.wdkl.ncs.android.middleware.tcp.channel;
 
+import com.wdkl.ncs.android.middleware.tcp.TcpClient;
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel;
 import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction;
 import com.wdkl.ncs.android.middleware.tcp.enums.TcpType;
@@ -44,7 +45,7 @@ public class VoiceUtil {
         return tcpModel;
     }
 
-    public static TcpModel voiceCancel(Integer fromId, Integer toId,Integer InteractionId){
+    public static TcpModel voiceCancel(Integer fromId, Integer toId){
         TcpModel tcpModel = new TcpModel();
         tcpModel.setType(TcpType.VOICE);
         tcpModel.setAction(TcpAction.VoiceAction.CANCEL);
@@ -92,4 +93,37 @@ public class VoiceUtil {
         tcpModel.setData(InteractionId);
         return tcpModel;
     }
+
+    /**************************************************************************
+     ************************* 发送呼叫相关TCP *********************************
+     ***************************************************************************/
+    //语音呼叫
+    public static void startAudioCall(Integer fromId, Integer toId) {
+        TcpModel tcpModel = VoiceUtil.voiceCall(fromId, toId);
+        TcpClient.getInstance().sendMsg(tcpModel.toJson());
+    }
+
+    //取消呼叫
+    public static void cancelAudioCall(Integer fromId, Integer toId) {
+        TcpModel tcpModel = VoiceUtil.voiceCancel(fromId, toId);
+        TcpClient.getInstance().sendMsg(tcpModel.toJson());
+    }
+
+    //接受通话
+    public static void acceptAudioCall(Integer fromId, Integer toId, Integer interactionId) {
+        TcpModel tcpModel = VoiceUtil.voiceAccept(fromId, toId, interactionId);
+        TcpClient.getInstance().sendMsg(tcpModel.toJson());
+    }
+
+    //挂断通话
+    public static void handoffAudioCall(Integer fromId, Integer toId, Integer interactionId) {
+        TcpModel tcpModel = VoiceUtil.voiceHandoff(fromId, toId, interactionId);
+        TcpClient.getInstance().sendMsg(tcpModel.toJson());
+    }
+
+    //拒绝通话
+    public static void rejectAudioCall(Integer fromId, Integer toId, Integer interactionId) {
+        TcpModel tcpModel = VoiceUtil.voiceReject(fromId, toId, interactionId);
+        TcpClient.getInstance().sendMsg(tcpModel.toJson());
+    }
 }

+ 86 - 5
nursehome/src/main/java/com/wdkl/ncs/android/component/nursehome/activity/NurseHomeActivity.kt

@@ -1,5 +1,6 @@
 package com.wdkl.ncs.android.component.nursehome.activity
 
+import android.app.Dialog
 import android.app.NotificationManager
 import android.content.BroadcastReceiver
 import android.content.Context
@@ -14,15 +15,21 @@ import android.support.v4.app.FragmentManager
 import android.support.v4.app.FragmentTransaction
 import android.text.TextUtils
 import android.util.Log
+import android.view.LayoutInflater
 import android.view.View
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
 import com.enation.javashop.android.jrouter.external.annotation.Router
 import com.enation.javashop.net.engine.model.NetState
+import com.google.gson.Gson
 import com.starrtc.demo.demo.MLOC
 import com.starrtc.demo.demo.voip.VoipActivity
 import com.starrtc.demo.demo.voip.VoipAudioActivity
 import com.wdkl.core.consts.Urls
 import com.wdkl.core.socket.IUserState
 import com.wdkl.core.socket.SocketManager
+import com.wdkl.core.voip.CallSingleActivity
 import com.wdkl.ncs.android.component.nursehome.R
 import com.wdkl.ncs.android.component.nursehome.SipUtil.SipCallBack
 import com.wdkl.ncs.android.component.nursehome.SipUtil.SipHelperUtil
@@ -31,6 +38,7 @@ import com.wdkl.ncs.android.component.nursehome.databinding.ActivityNurseHomeBin
 import com.wdkl.ncs.android.component.nursehome.fragment.*
 import com.wdkl.ncs.android.component.nursehome.launch.NurseHomeLaunch
 import com.wdkl.ncs.android.component.nursehome.settingconfig.SettingConfig
+import com.wdkl.ncs.android.component.nursehome.util.CallDialogHelper
 import com.wdkl.ncs.android.component.nursehome.util.ScreenManagerUtil
 import com.wdkl.ncs.android.component.nursehome.util.TimeTransition
 import com.wdkl.ncs.android.component.nursehome.util.VoiceManagerUtil
@@ -44,8 +52,13 @@ import com.wdkl.ncs.android.middleware.model.ChildCategoryShell
 import com.wdkl.ncs.android.middleware.model.bean.SettingConfiguration
 import com.wdkl.ncs.android.middleware.model.vo.CallingHistoryVO
 import com.wdkl.ncs.android.middleware.model.vo.FrameBedVO
+import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
 import com.wdkl.ncs.android.middleware.tcp.TcpClient
+import com.wdkl.ncs.android.middleware.tcp.channel.DeviceChannel
+import com.wdkl.ncs.android.middleware.tcp.channel.VoiceUtil
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel
+import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction
+import com.wdkl.ncs.android.middleware.tcp.enums.TcpType
 import com.wdkl.ncs.android.middleware.utils.MessageEvent
 import kotlinx.android.synthetic.main.activity_nurse_home.*
 import kotlinx.android.synthetic.main.right_list.*
@@ -70,6 +83,10 @@ class NurseHomeActivity  : BaseActivity<NurseHomeActivityPresenter, ActivityNurs
 
     var receiver :TimeReceiver? = null
 
+    //来电设备id
+    //private var fromId: Int = -1
+    //Interaction ID
+    //private var interactionId: Int = -1
 
     /**
      * 提供layoutID
@@ -518,12 +535,76 @@ fun call(tyte:Int){
 
     @Subscribe(threadMode = ThreadMode.MAIN)
     fun onMoonEvent(messageEvent: MessageEvent) {
-        Log.e(TAG,"收到tcp消息")
-        var messageEvent = messageEvent.getMessage() as TcpModel
+        when (messageEvent.type) {
+            Constants.EVENT_TCP_MSG -> {
+                var tcpModel = messageEvent.getMessage() as TcpModel
+                var interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
+                Log.e(TAG, "收到tcp消息" + tcpModel.getType() + " " + tcpModel.getAction())
+                if (tcpModel.getType() == TcpType.VOICE) {
+                    if (tcpModel.getAction() == TcpAction.VoiceAction.CALL) {//收到新的呼叫
+                        Constants.fromId = tcpModel.fromId
+                        Constants.interactionId = interactionVO.id
+
+                        CallDialogHelper.dismissCallDialog()
+                        CallDialogHelper.showCallDialog(this@NurseHomeActivity, 1, View.OnClickListener {
+                            //呼出取消
+                        }, View.OnClickListener {
+                            //来电接听
+                            DeviceChannel.calling = true
+                            VoiceUtil.acceptAudioCall(Integer.parseInt(Constants.ids), Constants.fromId, Constants.interactionId)
+                            CallDialogHelper.dismissCallDialog()
+                        }, View.OnClickListener {
+                            //来电拒接
+                            DeviceChannel.calling = false
+                            VoiceUtil.rejectAudioCall(Integer.parseInt(Constants.ids), Constants.fromId, Constants.interactionId)
+                            CallDialogHelper.dismissCallDialog()
+                        })
+                    } else if (tcpModel.getAction() == TcpAction.VoiceAction.ACCEPT) {//对方接受语音
+                        Log.e(TAG, "对方接受语音" + tcpModel.toJson())
+                        Constants.interactionId = interactionVO.id
+                        Constants.fromId = tcpModel.fromId
+                        CallDialogHelper.dismissCallDialog()
+
+                        DeviceChannel.calling = true
+                        if (Constants.call_type == 1) {
+                            CallSingleActivity.openActivity(activity, interactionVO.toSipId, true, interactionVO.toSipId, false, false)
+                        } else {
+                            CallSingleActivity.openActivity(activity, interactionVO.toSipId, true, interactionVO.toSipId, true, false)
+                        }
+                    } else if (tcpModel.getAction() == TcpAction.VoiceAction.REJECT) {//对方拒绝
+                        DeviceChannel.calling = false
+                        CallDialogHelper.dismissCallDialog()
+                    } else if (tcpModel.getAction() == TcpAction.VoiceAction.CANCEL) {//对方取消
+                        DeviceChannel.calling = false
+                        CallDialogHelper.dismissCallDialog()
+                    } else if (tcpModel.getAction() == TcpAction.VoiceAction.CALLING) {//对方通话中
+                        showMessage("对方忙线中")
+                        DeviceChannel.calling = false
+                        CallDialogHelper.dismissCallDialog()
+                    } else if (tcpModel.getAction() == TcpAction.VoiceAction.FAILED) {//对方不在线 呼叫失败
+                        showMessage("对方离线或不存在,呼叫失败")
+                        DeviceChannel.calling = false
+                        CallDialogHelper.dismissCallDialog()
+                    } else if (tcpModel.getAction() == TcpAction.VoiceAction.HANDOFF) {//对方挂断
+                        DeviceChannel.calling = false
+                        CallDialogHelper.dismissCallDialog()
+                    } else if (tcpModel.getAction() == TcpAction.VoiceAction.SUCCESS) {//服务器返回的呼叫成功tcp
+                        CallDialogHelper.dismissCallDialog()
+                        CallDialogHelper.showCallDialog(this@NurseHomeActivity, 0, View.OnClickListener {
+                            //呼出取消
+                            DeviceChannel.calling = false
+                            VoiceUtil.cancelAudioCall(Integer.parseInt(Constants.ids), interactionVO.toDeviceId)
+                            CallDialogHelper.dismissCallDialog()
+                        }, View.OnClickListener {
+                            //来电接听
+                        }, View.OnClickListener {
+                            //来电拒接
+                        })
+                    }
+                }
+            }
+        }
 
-//        if(messageEvent.getAction() === TcpAction.EventAction.KEY_CLICK){
-//            Log.e(TAG,"收到tcp消息")
-//        }
     }
 
 

+ 29 - 6
nursehome/src/main/java/com/wdkl/ncs/android/component/nursehome/fragment/FramePartFragment.kt

@@ -5,8 +5,11 @@ import android.view.View
 import com.alibaba.android.vlayout.DelegateAdapter
 import com.alibaba.android.vlayout.VirtualLayoutManager
 import com.enation.javashop.net.engine.model.NetState
+import com.google.gson.Gson
 import com.scwang.smartrefresh.layout.footer.ClassicsFooter
+import com.wdkl.core.voip.CallSingleActivity
 import com.wdkl.ncs.android.component.nursehome.R
+import com.wdkl.ncs.android.component.nursehome.activity.NurseHomeActivity
 import com.wdkl.ncs.android.component.nursehome.adapter.FrameBedVosAdapter
 import com.wdkl.ncs.android.component.nursehome.adapter.FrameBedVosConfinementAdapter
 import com.wdkl.ncs.android.component.nursehome.adapter.FramePartItemAdapter
@@ -15,6 +18,7 @@ import com.wdkl.ncs.android.component.nursehome.databinding.FragmentFramePartBin
 import com.wdkl.ncs.android.component.nursehome.launch.NurseHomeLaunch
 import com.wdkl.ncs.android.component.nursehome.util.TimeTransition
 import com.wdkl.ncs.android.lib.base.BaseFragment
+import com.wdkl.ncs.android.lib.utils.AppTool
 import com.wdkl.ncs.android.lib.utils.debugLog
 import com.wdkl.ncs.android.lib.utils.errorLog
 import com.wdkl.ncs.android.lib.utils.showMessage
@@ -24,7 +28,11 @@ import com.wdkl.ncs.android.middleware.logic.presenter.nursehome.FramePartPresen
 import com.wdkl.ncs.android.middleware.model.vo.FrameBedVO
 import com.wdkl.ncs.android.middleware.model.vo.FramePartVO
 import com.wdkl.ncs.android.middleware.model.vo.FrameRoomVO
+import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
+import com.wdkl.ncs.android.middleware.tcp.channel.VoiceUtil
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel
+import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction
+import com.wdkl.ncs.android.middleware.tcp.enums.TcpType
 import com.wdkl.ncs.android.middleware.utils.MessageEvent
 import kotlinx.android.synthetic.main.fragment_frame_part.*
 import kotlinx.android.synthetic.main.right_basic_information.*
@@ -147,6 +155,26 @@ class FramePartFragment: BaseFragment<FramePartPresenter, FragmentFramePartBindi
 
         }
 
+        call_the_voice_tv.setOnClickListener {
+            //语音呼叫
+            if (fragment.customerName != null) {
+                VoiceUtil.startAudioCall(Integer.parseInt(Constants.ids), fragment.bedDeviceId)
+                Constants.call_type = 0
+            } else {
+                showMessage("床位未入住,无法通话")
+            }
+        }
+
+        call_the_video_tv.setOnClickListener {
+            //视频呼叫
+            if (fragment.customerName != null) {
+                VoiceUtil.startAudioCall(Integer.parseInt(Constants.ids), fragment.bedDeviceId)
+                Constants.call_type = 1
+            } else {
+                showMessage("床位未入住,无法通话")
+            }
+        }
+
         configRefresh()
     }
 
@@ -263,11 +291,6 @@ class FramePartFragment: BaseFragment<FramePartPresenter, FragmentFramePartBindi
 
     @Subscribe(threadMode = ThreadMode.MAIN)
     fun onMoonEvent(messageEvent: MessageEvent) {
-//        Log.e(TAG,"收到tcp消息")
-        var messageEvent = messageEvent.getMessage() as TcpModel
-//        if(messageEvent.getAction() === TcpAction.EventAction.KEY_CLICK){
-//
-//            Log.e(TAG,"收到tcp消息"+messageEvent.toJson())
-//        }
+        //
     }
 }

+ 71 - 0
nursehome/src/main/java/com/wdkl/ncs/android/component/nursehome/util/CallDialogHelper.java

@@ -0,0 +1,71 @@
+package com.wdkl.ncs.android.component.nursehome.util;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+
+import com.wdkl.ncs.android.component.nursehome.R;
+
+
+public class CallDialogHelper {
+
+    private static AlertDialog callDialog;
+
+    public static void showCallDialog(Activity activity, int callType, View.OnClickListener hangupCall, View.OnClickListener acceptCall, View.OnClickListener rejectCall) {
+        View contentView = LayoutInflater.from(activity).inflate(R.layout.call_dialog_lay, null);
+        AlertDialog.Builder builder = new AlertDialog.Builder(activity);
+        builder.setView(contentView);
+
+        LinearLayout outCall = contentView.findViewById(R.id.ll_call_outgoing);
+        ImageView hangup = contentView.findViewById(R.id.iv_hangup_call);
+
+        RelativeLayout inCall = contentView.findViewById(R.id.rl_call_incoming);
+        ImageView accept = contentView.findViewById(R.id.iv_accept_call);
+        ImageView reject = contentView.findViewById(R.id.iv_reject_call);
+
+        if (callType == 0) {
+            //去电
+            outCall.setVisibility(View.VISIBLE);
+            inCall.setVisibility(View.GONE);
+        } else {
+            //来电
+            outCall.setVisibility(View.GONE);
+            inCall.setVisibility(View.VISIBLE);
+        }
+
+        hangup.setOnClickListener(hangupCall);
+        accept.setOnClickListener(acceptCall);
+        reject.setOnClickListener(rejectCall);
+
+        callDialog = builder.create();
+        callDialog.setCanceledOnTouchOutside(false);
+        callDialog.setCancelable(false);
+        callDialog.show();
+
+        //设置dialog宽高及位置
+        try {
+            Window window = callDialog.getWindow();
+            WindowManager.LayoutParams lp = window.getAttributes();
+            lp.width = 800;
+            lp.height = 400;
+            lp.gravity = Gravity.CENTER;
+            //lp.alpha = 0.8f;//设置透明度
+            window.setAttributes(lp);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void dismissCallDialog() {
+        if (callDialog != null && callDialog.isShowing()) {
+            callDialog.dismiss();
+        }
+    }
+}

BIN
nursehome/src/main/res/drawable/ic_answer_normal.png


BIN
nursehome/src/main/res/drawable/ic_answer_press.png


BIN
nursehome/src/main/res/drawable/ic_hangup_normal.png


BIN
nursehome/src/main/res/drawable/ic_hangup_press.png


+ 5 - 0
nursehome/src/main/res/drawable/selector_action_button_text_color.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:color="#e8e8e8" android:state_pressed="true"/>
+    <item android:color="#808080"/>
+</selector>

+ 5 - 0
nursehome/src/main/res/drawable/selector_call_answer.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/ic_answer_press" android:state_pressed="true"/>
+    <item android:drawable="@drawable/ic_answer_normal"/>
+</selector>

+ 5 - 0
nursehome/src/main/res/drawable/selector_call_end.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/ic_hangup_press" android:state_pressed="true"/>
+    <item android:drawable="@drawable/ic_hangup_normal"/>
+</selector>

+ 5 - 0
nursehome/src/main/res/drawable/selector_call_hangup.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/ic_hangup_press" android:state_pressed="true"/>
+    <item android:drawable="@drawable/ic_hangup_normal"/>
+</selector>

+ 46 - 0
nursehome/src/main/res/layout/call_dialog_lay.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <!--拨出按钮显示-->
+    <LinearLayout
+        android:id="@+id/ll_call_outgoing"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:gravity="center">
+
+        <ImageView
+            android:id="@+id/iv_hangup_call"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@drawable/selector_call_hangup" />
+    </LinearLayout>
+
+
+    <!--接听按钮显示-->
+    <RelativeLayout
+        android:id="@+id/rl_call_incoming"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:gravity="center"
+        android:visibility="gone">
+
+        <ImageView
+            android:id="@+id/iv_accept_call"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@drawable/selector_call_answer"
+            android:layout_alignParentLeft="true"
+            android:layout_marginLeft="120dp"/>
+
+        <ImageView
+            android:id="@+id/iv_reject_call"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@drawable/selector_call_end"
+            android:layout_alignParentRight="true"
+            android:layout_marginRight="120dp"/>
+    </RelativeLayout>
+
+</RelativeLayout>

+ 38 - 26
nursehome/src/main/res/layout/right_basic_information.xml

@@ -7,9 +7,46 @@
         android:background="#EAF2F9">
 
         <LinearLayout
+            android:id="@+id/call_the_voice_linlyout"
+            android:layout_width="match_parent"
+            android:layout_height="46px"
+            android:layout_alignParentBottom="true"
+            android:layout_marginLeft="10px"
+            android:layout_marginRight="10px"
+            android:gravity="center"
+            android:orientation="horizontal"
+            android:layout_marginBottom="6px"
+            android:background="#ffffff">
+
+            <TextView
+                android:id="@+id/call_the_voice_tv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center"
+                android:drawableLeft="@drawable/hu_jiao"
+                android:drawablePadding="6px"
+                android:textSize="16px"
+                android:text="语音"
+                android:textColor="@drawable/selector_action_button_text_color"/>
+
+            <TextView
+                android:id="@+id/call_the_video_tv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center"
+                android:drawableLeft="@drawable/hu_jiao"
+                android:drawablePadding="6px"
+                android:textSize="16px"
+                android:layout_marginLeft="48px"
+                android:text="视频"
+                android:textColor="@drawable/selector_action_button_text_color"/>
+        </LinearLayout>
+
+        <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:orientation="vertical">
+            android:orientation="vertical"
+            android:layout_above="@id/call_the_voice_linlyout">
 
             <RadioGroup
                 android:layout_width="match_parent"
@@ -211,30 +248,5 @@
 
         </LinearLayout>
 
-        <LinearLayout
-            android:id="@+id/call_the_voice_linlyout"
-            android:layout_width="match_parent"
-            android:layout_height="46px"
-            android:layout_alignParentBottom="true"
-            android:layout_marginLeft="10px"
-            android:layout_marginRight="10px"
-            android:gravity="center"
-            android:orientation="horizontal"
-            android:layout_marginBottom="6px"
-            android:background="#ffffff">
-
-            <ImageView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:src="@drawable/hu_jiao" />
-
-            <TextView
-                android:id="@+id/call_the_voice_tv"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:textSize="16px"
-                android:layout_marginLeft="8px"
-                android:text="呼叫" />
-        </LinearLayout>
     </RelativeLayout>
 </layout>

+ 1 - 1
settings.gradle

@@ -1 +1 @@
-include ':app', ':common', ':welcome', ':home', ':resource', ':middleware', ':shop', ':setting', ':extra', ':hello', ':nursehome', ':starRTC', ':AmDemo_R'
+include ':app', ':common', ':welcome', ':home', ':resource', ':middleware', ':shop', ':setting', ':extra', ':hello', ':nursehome', ':starRTC', ':AmDemo_R', 'webrtc', 'rtc-chat'

+ 2 - 0
webrtc/build.gradle

@@ -79,4 +79,6 @@ dependencies {
 
     //通知提示弹出库
     api 'com.tapadoo.android:alerter:6.2.1'
+
+    compile project(':middleware')
 }

+ 2 - 0
webrtc/src/main/java/com/wdkl/core/socket/SocketManager.java

@@ -13,6 +13,8 @@ import com.wdkl.skywebrtc.CallSession;
 import com.wdkl.skywebrtc.EnumType;
 import com.wdkl.skywebrtc.SkyEngineKit;
 
+import org.greenrobot.eventbus.EventBus;
+
 import java.lang.ref.WeakReference;
 import java.net.URI;
 import java.net.URISyntaxException;

+ 13 - 1
webrtc/src/main/java/com/wdkl/core/voip/CallSingleActivity.java

@@ -19,6 +19,9 @@ import android.widget.Toast;
 
 
 import com.wdkl.core.base.BaseActivity;
+import com.wdkl.ncs.android.component.nursehome.common.Constants;
+import com.wdkl.ncs.android.middleware.tcp.channel.DeviceChannel;
+import com.wdkl.ncs.android.middleware.tcp.channel.VoiceUtil;
 import com.wdkl.permission.Permissions;
 import com.wdkl.skywebrtc.CallSession;
 import com.wdkl.skywebrtc.EnumType;
@@ -180,6 +183,13 @@ public class CallSingleActivity extends BaseActivity implements CallSession.Call
                     fragment.didChangeMode(true);
                 }*/
                 session.setSessionCallback(this);
+
+                //之前已经通过tcp接受了,此时sip通话建立,直接接通
+                if (session.getState() == EnumType.CallState.Incoming) {
+                    session.joinHome(session.getRoomId());
+                } else {
+                    session.sendRefuse();
+                }
             }
         }
 
@@ -262,7 +272,7 @@ public class CallSingleActivity extends BaseActivity implements CallSession.Call
 
     // 切换到语音通话
     public void switchAudio() {
-        init(targetId, isOutgoing, true, true);
+        //init(targetId, isOutgoing, true, true);
     }
 
     public String getRoomId() {
@@ -376,5 +386,7 @@ public class CallSingleActivity extends BaseActivity implements CallSession.Call
     @Override
     protected void onDestroy() {
         super.onDestroy();
+        DeviceChannel.calling = false;
+        VoiceUtil.handoffAudioCall(Integer.parseInt(Constants.Companion.getIds()), Constants.Companion.getFromId(), Constants.Companion.getInteractionId());
     }
 }