Bladeren bron

#ADD 修改探视功能

weizhengliang 4 jaren geleden
bovenliggende
commit
3ee729e855

+ 0 - 1
WebRTC/src/main/AndroidManifest.xml

@@ -42,7 +42,6 @@
 
         <activity
             android:name="com.wdkl.core.voip.CallMultiActivity"
-            android:screenOrientation="landscape"
             android:showOnLockScreen="true"
             android:theme="@style/AppTheme.NoActionBar" />
 

+ 4 - 1
WebRTC/src/main/java/com/wdkl/core/socket/SocketManager.java

@@ -56,7 +56,10 @@ public class SocketManager implements IEvent {
     }
 
     public boolean getConnectFlag() {
-        return webSocket.isConnectFlag();
+        if (webSocket != null) {
+            return webSocket.isConnectFlag();
+        }
+        return false;
     }
 
     public void connect(String url, String userId, int device) {

+ 4 - 0
WebRTC/src/main/java/com/wdkl/core/voip/AsyncPlayer.java

@@ -138,6 +138,10 @@ public class AsyncPlayer {
         }
     }
 
+    public boolean isPlay() {
+        return mState == PLAY;
+    }
+
     private void enqueueLocked(Command cmd) {
         mCmdQueue.add(cmd);
         if (mThread == null) {

+ 47 - 7
WebRTC/src/main/java/com/wdkl/core/voip/CallMultiActivity.java

@@ -10,11 +10,20 @@ import android.os.Handler;
 import android.os.Looper;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentManager;
+import android.util.Log;
 import android.view.View;
 import android.view.WindowManager;
 import android.widget.ImageView;
+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.VideoUtil;
+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 com.wdkl.permission.Permissions;
 import com.wdkl.skywebrtc.CallSession;
 import com.wdkl.skywebrtc.EnumType;
@@ -22,6 +31,10 @@ import com.wdkl.skywebrtc.SkyEngineKit;
 import com.wdkl.skywebrtc.except.NotInitializedException;
 import com.wdkl.webrtc.R;
 
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
+
 import java.util.UUID;
 
 /**
@@ -36,6 +49,7 @@ public class CallMultiActivity extends BaseActivity implements CallSession.CallS
     public static final String EXTRA_MO = "isOutGoing";
     private boolean isOutgoing;
 
+    private boolean leave;
 
     public static void openActivity(Activity activity, String room, boolean isOutgoing) {
         Intent intent = new Intent(activity, CallMultiActivity.class);
@@ -52,6 +66,11 @@ public class CallMultiActivity extends BaseActivity implements CallSession.CallS
                 WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                 WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
         getWindow().getDecorView().setSystemUiVisibility(getSystemUiVisibility());
+
+        if (!EventBus.getDefault().isRegistered(this)) {
+            EventBus.getDefault().register(this);
+        }
+
         setContentView(R.layout.activity_multi_call);
         initView();
         initListener();
@@ -100,8 +119,7 @@ public class CallMultiActivity extends BaseActivity implements CallSession.CallS
         SkyEngineKit.init(new VoipEvent());
         if (isOutgoing) {
             // 创建一个房间并进入
-            gEngineKit.createAndJoinRoom(this,
-                    "room-" + UUID.randomUUID().toString().substring(0, 16));
+            gEngineKit.createAndJoinRoom(this, room);
         } else {
             // 加入房间
             gEngineKit.joinRoom(this, room);
@@ -113,12 +131,18 @@ public class CallMultiActivity extends BaseActivity implements CallSession.CallS
             this.finish();
         } else {
             session.setSessionCallback(this);
-
+            session.toggleSpeaker(true);
         }
-
-
     }
 
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        DeviceChannel.calling = false;
+        if (EventBus.getDefault().isRegistered(this)) {
+            EventBus.getDefault().unregister(this);
+        }
+    }
 
     public SkyEngineKit getEngineKit() {
         return gEngineKit;
@@ -163,7 +187,8 @@ public class CallMultiActivity extends BaseActivity implements CallSession.CallS
 
     @Override
     public void didUserLeave(String userId) {
-        handler.post(() -> currentFragment.didUserLeave(userId));
+        //handler.post(() -> currentFragment.didUserLeave(userId));
+        finish();
     }
 
     @Override
@@ -192,7 +217,22 @@ public class CallMultiActivity extends BaseActivity implements CallSession.CallS
 
     // 处理挂断事件
     private void handleHangup() {
+        leave = true;
+        VideoUtil.handoffVideoCall(Constants.Companion.getDeviceId(), Constants.Companion.getFromId(), Constants.Companion.getInteractionId());
         SkyEngineKit.Instance().leaveRoom();
-        this.finish();
+    }
+
+
+    @Subscribe(threadMode = ThreadMode.MAIN)
+    public void onMoonEvent(MessageEvent messageEvent) {
+        if (messageEvent.getType() == Constants.VIDEO_MSG){
+            if (messageEvent.getMessage() instanceof TcpModel) {
+                TcpModel tcpModel = (TcpModel) messageEvent.getMessage();
+                if (tcpModel.getAction() == TcpAction.VideoAction.HANDOFF && !leave) {
+                    DeviceChannel.calling = false;
+                    SkyEngineKit.Instance().leaveRoom();
+                }
+            }
+        }
     }
 }

+ 1 - 1
WebRTC/src/main/java/com/wdkl/core/voip/FragmentMeeting.java

@@ -101,7 +101,7 @@ public class FragmentMeeting extends Fragment implements CallSession.CallSession
 
     @Override
     public void didUserLeave(String userId) {
-        grid_view.removeView(userId);
+        //grid_view.removeView(userId);
     }
 
     @Override

+ 2 - 2
WebRTC/src/main/res/layout/activity_multi_call.xml

@@ -10,12 +10,12 @@
         android:id="@+id/meeting_container"
         android:layout_width="match_parent"
         android:layout_height="0dp"
-        android:layout_weight="3"
+        android:layout_weight="4"
         android:background="@color/av_bg_call_black" />
 
     <include
         layout="@layout/av_p2p_meeting_action"
         android:layout_width="match_parent"
         android:layout_height="0dp"
-        android:layout_weight="2" />
+        android:layout_weight="1" />
 </LinearLayout>

+ 2 - 1
WebRTC/src/main/res/layout/av_p2p_meeting_action.xml

@@ -10,7 +10,8 @@
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:orientation="horizontal">
+        android:orientation="horizontal"
+        android:visibility="gone">
 
 
         <LinearLayout

+ 7 - 0
common/src/main/code/com/wdkl/ncs/android/lib/base/BaseActivity.kt

@@ -6,6 +6,8 @@ import android.databinding.DataBindingUtil
 import android.databinding.ViewDataBinding
 import android.os.Bundle
 import android.view.View
+import android.view.Window
+import android.view.WindowManager
 import android.view.inputmethod.InputMethodManager
 import com.enation.javashop.android.jrouter.JRouter
 import com.wdkl.ncs.android.lib.R
@@ -70,6 +72,11 @@ abstract class BaseActivity<PresenterType : BaseContract.BasePresenter, DataBind
         }
         /**父类初始化*/
         super.onCreate(savedInstanceState)
+        requestWindowFeature(Window.FEATURE_NO_TITLE)
+        window.setFlags(
+            WindowManager.LayoutParams.FLAG_FULLSCREEN,
+            WindowManager.LayoutParams.FLAG_FULLSCREEN)
+
         /**执行生命周期监听*/
         lifeCycleDo(LIFE_CYCLE_CREATE)
         /**创建根视图*/

BIN
gradle/wrapper/gradle-wrapper.jar


+ 1 - 3
gradle/wrapper/gradle-wrapper.properties

@@ -1,7 +1,5 @@
-
-#Mon Mar 08 20:44:19 CST 2021
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.8.1-bin.zip
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip

+ 66 - 8
home/src/main/code/com/wdkl/ncs/android/component/home/activity/HomeActivity.kt

@@ -19,9 +19,11 @@ import com.enation.javashop.net.engine.model.NetState
 import com.enation.javashop.net.engine.plugin.permission.RxPermissions
 import com.enation.javashop.utils.base.tool.CommonTool
 import com.enation.javashop.utils.base.widget.LoadingDialog
+import com.google.gson.Gson
 import com.wdkl.core.consts.Urls
 import com.wdkl.core.socket.IUserState
 import com.wdkl.core.socket.SocketManager
+import com.wdkl.core.voip.CallMultiActivity
 import com.wdkl.ncs.android.component.home.BuildConfig
 import com.wdkl.ncs.android.component.home.R
 import com.wdkl.ncs.android.component.home.broadcast.BatteryBroadcastReceiver
@@ -30,6 +32,7 @@ import com.wdkl.ncs.android.component.home.launch.HomeLaunch
 import com.wdkl.ncs.android.component.home.service.TcpHandleService
 import com.wdkl.ncs.android.component.home.service.TcpHandleService.instance.updateLastTime
 import com.wdkl.ncs.android.component.home.service.WdKeepAliveService
+import com.wdkl.ncs.android.component.home.util.CallDialogHelper
 import com.wdkl.ncs.android.component.home.util.NetHelper
 import com.wdkl.ncs.android.component.home.util.SpeechUtil
 import com.wdkl.ncs.android.component.home.util.Util
@@ -43,8 +46,11 @@ import com.wdkl.ncs.android.middleware.logic.presenter.home.HomeActivityPresente
 import com.wdkl.ncs.android.middleware.model.dos.PartSettingDO
 import com.wdkl.ncs.android.middleware.model.dto.TcpSeverDTO
 import com.wdkl.ncs.android.middleware.model.vo.DeviceVO
+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.VideoUtil
+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.utils.MessageEvent
@@ -90,12 +96,12 @@ class HomeActivity : BaseActivity<HomeActivityPresenter, ActivityHomeBinding>(),
         loadingDialog = CommonTool.createLoadingDialog(this, R.layout.custom_loading,R.id.loadding_image)
 
         //保活守护进程
-        DaemonEnv.init(this);
+        //DaemonEnv.init(this);
         //請求用戶忽略电池优化
 //        val reason = "轨迹跟踪服务的持续运行"
 //        DaemonEnv.whiteListMatters(this, reason)
         //启动work服务
-        DaemonEnv.startServiceSafelyWithData(this, WdKeepAliveService::class.java)
+        //DaemonEnv.startServiceSafelyWithData(this, WdKeepAliveService::class.java)
 
         //系统设置按钮
         btn_system_setting0.setOnClickListener {
@@ -251,9 +257,10 @@ class HomeActivity : BaseActivity<HomeActivityPresenter, ActivityHomeBinding>(),
 
         //问询事件
         btn_callout.setOnClickListener {
-            loadingDialog.show()
-            val tcpModel = VideoUtil.videoOutCall(Constants.deviceId)
-            TcpClient.getInstance().sendMsg(tcpModel.toJson())
+            //loadingDialog.show()
+            //val tcpModel = VideoUtil.videoOutCall(Constants.deviceId)
+            //TcpClient.getInstance().sendMsg(tcpModel.toJson())
+            VideoUtil.startVideoOutCall(Constants.deviceId)
         }
     }
 
@@ -275,7 +282,7 @@ class HomeActivity : BaseActivity<HomeActivityPresenter, ActivityHomeBinding>(),
         runOnUiThread(Runnable {
             tv_rtc_status.setBackgroundColor(Color.RED)
         })
-        if (SocketManager.getInstance().connectFlag) {
+        if (!SocketManager.getInstance().connectFlag) {
             reConnectRTC()
         }
     }
@@ -304,7 +311,7 @@ class HomeActivity : BaseActivity<HomeActivityPresenter, ActivityHomeBinding>(),
     }
 
     override fun destory() {
-        SpeechUtil.getInstance().release()
+        //SpeechUtil.getInstance().release()
         //注销webRTC
         SocketManager.getInstance().unConnect()
 
@@ -326,16 +333,67 @@ class HomeActivity : BaseActivity<HomeActivityPresenter, ActivityHomeBinding>(),
     @Subscribe(threadMode = ThreadMode.MAIN)
     fun onMoonEvent(messageEvent: MessageEvent) {
         if (messageEvent.tag == Constants.VIDEO_MSG){
-            loadingDialog.dismiss()
+            //loadingDialog.dismiss()
             val tcpModel = messageEvent.getMessage() as TcpModel
+            var interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
 
             when (tcpModel.action){
                 TcpAction.VideoAction.CALLING->{
+                    DeviceChannel.calling = false
+                    CallDialogHelper.dismissCallDialog()
                     showMessage("对方忙线中")
                 }
+
                 TcpAction.VideoAction.FAILED->{
+                    DeviceChannel.calling = false
                     showMessage("呼叫失败,请稍候重试")
                 }
+
+                TcpAction.VideoAction.SUCCESS->{
+                    DeviceChannel.calling = true
+                    Constants.fromId = tcpModel.fromId
+                    Constants.interactionId = interactionVO.id
+                    Util.wakeUpAndUnlock(this)
+
+                    CallDialogHelper.dismissCallDialog()
+                    CallDialogHelper.showCallDialog(this@HomeActivity, 0, "探视请求已发送,请等待...", View.OnClickListener {
+                        //呼出取消
+                        DeviceChannel.calling = false
+                        VideoUtil.cancelVideoCall(Constants.deviceId, Constants.fromId, Constants.interactionId)
+                        CallDialogHelper.dismissCallDialog()
+                    }, View.OnClickListener {
+                        //来电接听
+                    }, View.OnClickListener {
+                        //来电拒接
+                    })
+                }
+
+                TcpAction.VideoAction.ACCEPT-> {
+                    /*Constants.fromId = tcpModel.fromId
+                    DeviceChannel.calling = true
+                    CallDialogHelper.dismissCallDialog()
+                    Constants.interactionId = interactionVO.id
+                    // 加入房间
+                    val roomId = "visit-room-" + Constants.interactionId
+                    CallMultiActivity.openActivity(activity, roomId, false)*/
+                }
+
+                TcpAction.VideoAction.VIDEO_IN_CALL-> {
+                    Constants.fromId = tcpModel.fromId
+                    DeviceChannel.calling = true
+                    Constants.interactionId = interactionVO.id
+                    CallDialogHelper.dismissCallDialog()
+
+                    // 加入房间
+                    val roomId = "visit-room-" + Constants.interactionId
+                    CallMultiActivity.openActivity(activity, roomId, false)
+                }
+
+                TcpAction.VideoAction.REJECT->{
+                    showMessage("对方拒绝")
+                    DeviceChannel.calling = false
+                    CallDialogHelper.dismissCallDialog()
+                }
             }
         }
     }

+ 2 - 2
home/src/main/code/com/wdkl/ncs/android/component/home/activity/VideoActivity.kt

@@ -76,12 +76,12 @@ class VideoActivity:Activity(){
 
         //挂断按钮
         iv_handoff.setOnClickListener {
-            val tcpModel = VideoUtil.handOff(interactionVOId)
+            /*val tcpModel = VideoUtil.handOff(interactionVOId)
             TcpClient.getInstance().sendMsg(tcpModel.toJson())
             Handler().postDelayed({
                 DeviceChannel.calling = false
                 finish()
-            },1000)
+            },1000)*/
         }
 
         //小窗切换

+ 2 - 2
home/src/main/code/com/wdkl/ncs/android/component/home/service/TcpHandleService.kt

@@ -87,7 +87,7 @@ class TcpHandleService : Service(){
                     }
                 }
             }
-            Constants.VIDEO_MSG->{
+            /*Constants.VIDEO_MSG->{
                 Util.wakeUpAndUnlock(this)
                 var tcpModel = messageEvent.getMessage() as TcpModel
 
@@ -100,7 +100,7 @@ class TcpHandleService : Service(){
                     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                     startActivity(intent)
                 }
-            }
+            }*/
             //APP升级
             Constants.EVENT_APP_UPDATE->{
                 while (DeviceChannel.calling) {    //通话中不处理,一直等待至结束

+ 89 - 0
home/src/main/code/com/wdkl/ncs/android/component/home/util/CallDialogHelper.java

@@ -0,0 +1,89 @@
+package com.wdkl.ncs.android.component.home.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 android.widget.TextView;
+
+import com.wdkl.ncs.android.component.home.R;
+
+
+public class CallDialogHelper {
+
+    private static AlertDialog callDialog;
+
+    public static void showCallDialog(Activity activity, int callType, String callText, 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);
+        TextView inText = contentView.findViewById(R.id.tv_incoming_call_text);
+        TextView outText = contentView.findViewById(R.id.tv_out_call_text);
+
+        if (callType == 0) {
+            //去电
+            outCall.setVisibility(View.VISIBLE);
+            inCall.setVisibility(View.GONE);
+            outText.setText(callText);
+            RingPlayHelper.playRingTone(activity, R.raw.wr_ringback, true);
+        } else {
+            //来电
+            outCall.setVisibility(View.GONE);
+            inCall.setVisibility(View.VISIBLE);
+            inText.setText(callText);
+            RingPlayHelper.playRingTone(activity, R.raw.incoming_call, false);
+
+        }
+
+        hangup.setOnClickListener(hangupCall);
+        accept.setOnClickListener(acceptCall);
+        reject.setOnClickListener(rejectCall);
+
+        callDialog = builder.create();
+        callDialog.setCanceledOnTouchOutside(false);
+        callDialog.setCancelable(false);
+
+        //设置dialog宽高及位置
+        try {
+            Window window = callDialog.getWindow();
+            window.setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
+            callDialog.show();
+            WindowManager.LayoutParams lp = window.getAttributes();
+            lp.width = 800;
+            lp.height = 600;
+            lp.gravity = Gravity.CENTER;
+            //lp.alpha = 0.8f;//设置透明度
+            window.setAttributes(lp);
+
+            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
+                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
+                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
+                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
+                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+                    | View.SYSTEM_UI_FLAG_FULLSCREEN);
+            window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void dismissCallDialog() {
+        if (callDialog != null && callDialog.isShowing()) {
+            callDialog.dismiss();
+            RingPlayHelper.stopRingTone();
+        }
+    }
+}

+ 27 - 0
home/src/main/code/com/wdkl/ncs/android/component/home/util/RingPlayHelper.java

@@ -0,0 +1,27 @@
+package com.wdkl.ncs.android.component.home.util;
+
+import android.content.Context;
+import android.media.AudioManager;
+
+import com.wdkl.core.voip.AsyncPlayer;
+
+public class RingPlayHelper {
+
+    private static AsyncPlayer ringPlayer;
+
+    public static void playRingTone(Context context, int res, boolean loop) {
+        if (ringPlayer == null) {
+            ringPlayer = new AsyncPlayer(null);
+        }
+
+        if (!ringPlayer.isPlay()) {
+            ringPlayer.play(context, res, loop, AudioManager.STREAM_MUSIC);
+        }
+    }
+
+    public static void stopRingTone() {
+        if (ringPlayer != null) {
+            ringPlayer.stop();
+        }
+    }
+}

+ 68 - 0
home/src/main/res/layout/call_dialog_lay.xml

@@ -0,0 +1,68 @@
+<?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"
+        android:orientation="vertical">
+
+        <TextView
+            android:id="@+id/tv_out_call_text"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:text="正在呼叫,等待接听中..."
+            android:textSize="18sp"/>
+
+        <ImageView
+            android:id="@+id/iv_hangup_call"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="20dp"
+            android:src="@drawable/yu_yin_gua_duan" />
+    </LinearLayout>
+
+
+    <!--接听按钮显示-->
+    <RelativeLayout
+        android:id="@+id/rl_call_incoming"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:gravity="center"
+        android:visibility="gone">
+
+        <TextView
+            android:id="@+id/tv_incoming_call_text"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:text="有新的来电..."
+            android:textSize="28sp"/>
+
+        <ImageView
+            android:id="@+id/iv_accept_call"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@id/tv_incoming_call_text"
+            android:layout_alignParentLeft="true"
+            android:layout_marginLeft="160dp"
+            android:layout_marginTop="60dp"
+            android:src="@drawable/yu_yin_jie_ting"/>
+
+        <ImageView
+            android:id="@+id/iv_reject_call"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@id/tv_incoming_call_text"
+            android:layout_alignParentRight="true"
+            android:layout_marginRight="160dp"
+            android:layout_marginTop="60dp"
+            android:src="@drawable/yu_yin_gua_duan"/>
+    </RelativeLayout>
+
+</RelativeLayout>

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

@@ -19,6 +19,10 @@ class Constants {
         var heartBeat: Int = 9    //tcp心跳
         var ttsState: Int = 0
 
+
+        var fromId: Int? = -1
+        var interactionId: Int? = -1
+
         const val EVENT_BATTERY_PERCENT = 0x07 //电量
         var EVENT_BATTERY_ALARM = true
 

+ 100 - 2
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/channel/VideoUtil.java

@@ -1,10 +1,15 @@
 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;
 
+import java.util.HashMap;
+import java.util.Map;
+
 public class VideoUtil {
+
     public static TcpModel videoOutCall(Integer fromId){
         TcpModel tcpModel = new TcpModel();
         tcpModel.setType(TcpType.VIDEO);
@@ -13,11 +18,104 @@ public class VideoUtil {
         return tcpModel;
     }
 
-    public static TcpModel handOff(Integer iaId){
+    public static TcpModel videoCalling(Integer fromId, Integer toId, Integer interactionId){
+        TcpModel tcpModel = new TcpModel();
+        tcpModel.setType(TcpType.VIDEO);
+        tcpModel.setAction(TcpAction.VideoAction.CALLING);
+        tcpModel.setFromId(fromId);
+        tcpModel.setToId(toId);
+        tcpModel.setData(interactionId);
+        return tcpModel;
+    }
+
+    public static TcpModel videoCancelCall(Integer fromId, Integer toId, Integer interactionId){
+        TcpModel tcpModel = new TcpModel();
+        tcpModel.setType(TcpType.VIDEO);
+        tcpModel.setAction(TcpAction.VideoAction.CANCEL);
+        tcpModel.setFromId(fromId);
+        tcpModel.setToId(toId);
+        tcpModel.setData(interactionId);
+        return tcpModel;
+    }
+
+    public static TcpModel videoReject(Integer fromId, Integer toId,Integer interactionId){
+        TcpModel tcpModel = new TcpModel();
+        tcpModel.setType(TcpType.VIDEO);
+        tcpModel.setAction(TcpAction.VideoAction.REJECT);
+        tcpModel.setFromId(fromId);
+        tcpModel.setToId(toId);
+        tcpModel.setData(interactionId);
+        return tcpModel;
+    }
+
+    public static TcpModel videoAccept(Integer fromId, Integer toId,Integer interactionId){
+        TcpModel tcpModel = new TcpModel();
+        tcpModel.setType(TcpType.VIDEO);
+        tcpModel.setAction(TcpAction.VideoAction.ACCEPT);
+        tcpModel.setFromId(fromId);
+        tcpModel.setToId(toId);
+        tcpModel.setData(interactionId);
+        return tcpModel;
+    }
+
+    public static TcpModel videoInvite(Integer fromId, Integer toId, Integer interactionId, String roomId) {
+        TcpModel tcpModel = new TcpModel();
+        tcpModel.setType(TcpType.VIDEO);
+        tcpModel.setAction(TcpAction.VideoAction.VIDEO_INVITE_JOIN);
+        tcpModel.setFromId(fromId);
+        tcpModel.setToId(toId);
+        Map map = new HashMap();
+        map.put("interactionId", interactionId);
+        map.put("roomId", roomId);
+        tcpModel.setData(map);
+        return tcpModel;
+    }
+
+    public static TcpModel videoHandoff(Integer fromId, Integer toId, Integer interactionId){
         TcpModel tcpModel = new TcpModel();
         tcpModel.setType(TcpType.VIDEO);
         tcpModel.setAction(TcpAction.VideoAction.HANDOFF);
-        tcpModel.setData(iaId);
+        tcpModel.setFromId(fromId);
+        tcpModel.setToId(toId);
+        tcpModel.setData(interactionId);
         return tcpModel;
     }
+
+
+
+    //请求视频通话
+    public static void startVideoOutCall(Integer fromId) {
+        TcpModel tcpModel = videoOutCall(fromId);
+        TcpClient.getInstance().sendMsg(tcpModel.toJson());
+    }
+
+    //拒绝视频
+    public static void rejectVideoCall(Integer fromId, Integer toId, Integer interactionId) {
+        TcpModel tcpModel = videoReject(fromId, toId, interactionId);
+        TcpClient.getInstance().sendMsg(tcpModel.toJson());
+    }
+
+    //取消视频
+    public static void cancelVideoCall(Integer fromId, Integer toId, Integer interactionId) {
+        TcpModel tcpModel = videoCancelCall(fromId, toId, interactionId);
+        TcpClient.getInstance().sendMsg(tcpModel.toJson());
+    }
+
+    //接受视频
+    public static void acceptVideoCall(Integer fromId, Integer toId, Integer interactionId) {
+        TcpModel tcpModel = videoAccept(fromId, toId, interactionId);
+        TcpClient.getInstance().sendMsg(tcpModel.toJson());
+    }
+
+    //发送视频探视邀请
+    public static void sendInviteVideoCall(Integer fromId, Integer toId, Integer interactionId, String roomId) {
+        TcpModel tcpModel = videoInvite(fromId, toId, interactionId, roomId);
+        TcpClient.getInstance().sendMsg(tcpModel.toJson());
+    }
+
+    //挂断视频
+    public static void handoffVideoCall(Integer fromId, Integer toId, Integer interactionId) {
+        TcpModel tcpModel = videoHandoff(fromId, toId, interactionId);
+        TcpClient.getInstance().sendMsg(tcpModel.toJson());
+    }
 }

+ 1 - 5
rtc-chat/src/main/java/com/wdkl/skywebrtc/SkyEngineKit.java

@@ -146,10 +146,6 @@ public class SkyEngineKit {
 
     // 加入房间
     public void joinRoom(Context context, String room) {
-        joinRoom(context, room, false);
-    }
-
-    public void joinRoom(Context context, String room, Boolean audioOnly){
         if (avEngineKit == null) {
             Log.e(TAG, "joinRoom error,init is not set");
             return;
@@ -159,7 +155,7 @@ public class SkyEngineKit {
             Log.e(TAG, "joinRoom error,currentCallSession is exist");
             return;
         }
-        mCurrentCallSession = new CallSession(context, room, audioOnly, mEvent);
+        mCurrentCallSession = new CallSession(context, room, false, mEvent);
         mCurrentCallSession.setIsComing(true);
         mCurrentCallSession.joinHome(room);
     }