Forráskód Böngészése

手机之间通话OK

allen 3 éve
szülő
commit
e6000c1107
68 módosított fájl, 311 hozzáadás és 907 törlés
  1. 0 3
      app/src/main/code/com/wdkl/app/ncs/application/Application.kt
  2. 2 2
      build.gradle
  3. 1 0
      common/build.gradle
  4. 3 1
      home/build.gradle
  5. 10 0
      home/src/main/AndroidManifest.xml
  6. 1 1
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchCallRecordsActivity.kt
  7. 0 569
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/WebRTCVoipAudioActivity.kt
  8. 6 9
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/WebRTCVoipAudioRingingActivity.kt
  9. 0 3
      home/src/main/code/com/wdkl/ncs/android/component/home/adapter/NewEventItemAdapter.kt
  10. 0 2
      home/src/main/code/com/wdkl/ncs/android/component/home/helper/AppUpdateHelper.java
  11. 44 23
      home/src/main/code/com/wdkl/ncs/android/component/home/service/WdKeepAliveService.kt
  12. 30 7
      janus/src/main/java/com/wdkl/rtc/ui/CallSingleActivity.java
  13. 14 4
      janus/src/main/java/com/wdkl/rtc/ui/FragmentAudio.java
  14. 2 2
      janus/src/main/java/com/wdkl/rtc/ui/FragmentVideo.java
  15. 160 6
      janus/src/main/java/com/wdkl/rtc/ui/SingleCallFragment.java
  16. 1 1
      home/src/main/code/com/wdkl/ncs/android/component/home/util/MediaPlayHelper.java
  17. 0 0
      home/src/main/res/drawable/av_audio_answer.png
  18. 0 0
      home/src/main/res/drawable/av_audio_answer_hover.png
  19. 0 0
      home/src/main/res/drawable/av_audio_answer_selector.xml
  20. 0 0
      home/src/main/res/drawable/av_camera.png
  21. 0 0
      home/src/main/res/drawable/av_camera_hover.png
  22. 0 0
      home/src/main/res/drawable/av_default_header.png
  23. 0 0
      home/src/main/res/drawable/av_float_audio.png
  24. 0 0
      home/src/main/res/drawable/av_float_bg.xml
  25. 0 0
      home/src/main/res/drawable/av_handfree.png
  26. 0 0
      home/src/main/res/drawable/av_handfree_hover.png
  27. 0 0
      home/src/main/res/drawable/av_hang_up.png
  28. 0 0
      home/src/main/res/drawable/av_hang_up_hover.png
  29. 0 0
      home/src/main/res/drawable/av_hangup_selector.xml
  30. 0 0
      home/src/main/res/drawable/av_minimize.png
  31. 0 0
      home/src/main/res/drawable/av_mute.png
  32. 0 0
      home/src/main/res/drawable/av_mute_hover.png
  33. 0 0
      home/src/main/res/drawable/av_mute_selector.xml
  34. 0 0
      home/src/main/res/drawable/av_phone.png
  35. 0 0
      home/src/main/res/drawable/av_speaker_selector.xml
  36. 0 0
      home/src/main/res/drawable/av_switch_camera_selector.xml
  37. 0 0
      home/src/main/res/drawable/av_trans_audio.png
  38. 0 0
      home/src/main/res/drawable/av_video_answer.png
  39. 0 0
      home/src/main/res/drawable/av_video_answer_hover.png
  40. 0 0
      home/src/main/res/drawable/av_video_answer_selector.xml
  41. 0 0
      home/src/main/res/drawable/ic_dashboard_black_24dp.xml
  42. 0 0
      home/src/main/res/drawable/ic_home_black_24dp.xml
  43. 0 0
      home/src/main/res/drawable/ic_launcher_background.xml
  44. 0 0
      home/src/main/res/drawable/ic_launcher_foreground.xml
  45. 0 0
      home/src/main/res/drawable/ic_notifications_black_24dp.xml
  46. 1 1
      janus/src/main/res/layout/activity_single_call.xml
  47. 6 6
      janus/src/main/res/layout/av_p2p_audio_incoming.xml
  48. 0 0
      home/src/main/res/layout/av_p2p_audio_outgoing.xml
  49. 0 0
      home/src/main/res/layout/av_p2p_video_connected_action.xml
  50. 0 0
      home/src/main/res/layout/av_p2p_video_incoming_action.xml
  51. 0 0
      home/src/main/res/layout/av_p2p_video_outgoing_action.xml
  52. 0 0
      home/src/main/res/layout/fragment_audio.xml
  53. 0 0
      home/src/main/res/layout/fragment_video.xml
  54. 0 0
      home/src/main/res/layout/videoroom_item.xml
  55. 1 1
      home/src/main/res/layout/watch_activity_event_detail.xml
  56. 22 20
      janus/build.gradle
  57. 0 26
      janus/src/androidTest/java/com/wdkl/rtc/ExampleInstrumentedTest.java
  58. 2 23
      janus/src/main/AndroidManifest.xml
  59. 0 92
      janus/src/main/java/com/wdkl/rtc/MainActivity.java
  60. 2 7
      janus/src/main/java/com/wdkl/rtc/janus/VideoRoomCallback.java
  61. 0 23
      janus/src/main/res/layout/activity_echotest.xml
  62. 0 15
      janus/src/main/res/layout/activity_video_room.xml
  63. 0 17
      janus/src/test/java/com/wdkl/rtc/ExampleUnitTest.java
  64. 1 8
      keepalive/build.gradle
  65. 0 17
      keepalive/src/androidTest/java/com/wdkl/ncs/ExampleInstrumentedTest.java
  66. 0 17
      keepalive/src/test/java/com/wdkl/ncs/ExampleUnitTest.java
  67. 1 0
      middleware/build.gradle
  68. 1 1
      middleware/src/main/code/com/wdkl/ncs/android/middleware/config/WdklNcsConfigCenter.kt

+ 0 - 3
app/src/main/code/com/wdkl/app/ncs/application/Application.kt

@@ -4,10 +4,7 @@ import com.enation.javashop.android.jrouter.JRouter
 import com.enation.javashop.net.engine.config.NetEngineConfig
 import com.enation.javashop.net.engine.plugin.exception.RestfulExceptionInterceptor
 import com.enation.javashop.utils.base.config.BaseConfig
-import com.wdkl.core.socket.SocketManager
-import com.wdkl.core.voip.VoipEvent
 import com.wdkl.ncs.android.lib.base.BaseApplication
-import com.wdkl.skywebrtc.SkyEngineKit
 
 /**
  * @author LDD

+ 2 - 2
build.gradle

@@ -47,12 +47,12 @@ buildscript {
     /**
      * APP版本码
      */
-    ext.app_version_code = 82
+    ext.app_version_code = 83
 
     /**
      * APP版本号
      */
-    ext.app_version = "1.2.2"
+    ext.app_version = "1.3.0"
 
     /**
      * 项目依赖库

+ 1 - 0
common/build.gradle

@@ -111,6 +111,7 @@ dependencies {
     /**
      *   Android基础依赖库
      */
+    //noinspection GradleCompatible
     compile "com.android.support:design:$support_library_version"
     compile "com.android.support:support-v4:$support_library_version"
     compile "com.android.support:cardview-v7:$support_library_version"

+ 3 - 1
home/build.gradle

@@ -122,7 +122,9 @@ dependencies {
     implementation 'com.android.support.constraint:constraint-layout:1.1.0-beta5'
     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
     //web rtc
-    compile project(':keepalive')
+    implementation project(':keepalive')
+    implementation project(':janus')
+    implementation 'org.webrtc:google-webrtc:1.0.32006'
 }
 
 /**

+ 10 - 0
home/src/main/AndroidManifest.xml

@@ -31,6 +31,16 @@
         <activity android:screenOrientation="portrait" android:name=".activity.AppUpdateActivity" />
         <activity android:screenOrientation="portrait" android:name=".activity.NewEventListActivity"/>
 
+        <activity
+            android:name=".ui.CallSingleActivity"
+            android:showOnLockScreen="true"
+            android:showWhenLocked="true">
+            <intent-filter>
+                <action android:name="${applicationId}.kit.voip.single" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
         <service android:name="com.wdkl.ncs.android.component.home.service.WdKeepAliveService">
             <intent-filter>
                 <action android:name="com.wdkl.app.ncs.service.WdKeepAliveService"/>

+ 1 - 1
home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchCallRecordsActivity.kt

@@ -99,7 +99,7 @@ class WatchCallRecordsActivity : BaseActivity<WatchCallRecordsFragmentPresenter,
 
         receivedData = intent.getSerializableExtra("data") as WatchContactsVO?
         action = intent.getStringExtra("action")
-        customerId = intent.getStringExtra("customer_id")
+        customerId = intent.getStringExtra("customer_id").toString()
 
         when(action){
             all->{

+ 0 - 569
home/src/main/code/com/wdkl/ncs/android/component/home/activity/WebRTCVoipAudioActivity.kt

@@ -1,569 +0,0 @@
-package com.wdkl.ncs.android.component.home.activity
-
-import android.app.Activity
-import android.bluetooth.BluetoothAdapter
-import android.bluetooth.BluetoothHeadset
-import android.os.Bundle
-import android.os.CountDownTimer
-import android.os.Handler
-import android.os.SystemClock
-import android.util.Log
-import android.view.KeyEvent
-import android.view.View
-import com.google.gson.Gson
-import com.wdkl.core.socket.SocketManager
-import com.wdkl.core.voip.VoipEvent
-import com.wdkl.ncs.android.component.home.R
-import com.wdkl.ncs.android.component.home.util.HandleTcpConnect
-import com.wdkl.ncs.android.component.home.util.MediaPlayHelper
-import com.wdkl.ncs.android.component.nursehome.common.Constants
-import com.wdkl.ncs.android.lib.utils.AppTool
-import com.wdkl.ncs.android.lib.utils.showMessage
-import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
-import com.wdkl.ncs.android.middleware.tcp.NettyClient
-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 com.wdkl.skywebrtc.CallSession
-import com.wdkl.skywebrtc.CallSession.CallSessionCallback
-import com.wdkl.skywebrtc.EnumType
-import com.wdkl.skywebrtc.EnumType.CallEndReason
-import com.wdkl.skywebrtc.SkyEngineKit
-import com.wdkl.skywebrtc.except.NotInitializedException
-import kotlinx.android.synthetic.main.activity_sip_voip_audio.bao_mother_name_tv
-import kotlinx.android.synthetic.main.activity_sip_voip_audio.call_duration_tv
-import kotlinx.android.synthetic.main.activity_sip_voip_audio.hang_up_imagev
-import kotlinx.android.synthetic.main.activity_sip_voip_audio.room_number_tv
-import kotlinx.android.synthetic.main.activity_web_rtc_voip_audio.*
-import org.greenrobot.eventbus.EventBus
-import org.greenrobot.eventbus.Subscribe
-import org.greenrobot.eventbus.ThreadMode
-import java.util.*
-
-class WebRTCVoipAudioActivity : Activity(), View.OnClickListener, CallSessionCallback {
-    var TAG = WebRTCVoipAudioActivity::class.java.simpleName
-
-    var ACTION = "ACTION"
-    var RING = "RING"
-    var CALLING = "CALLING"
-    var CALL = "CALL"
-    private var action: String? = null
-    private var targetId: String? = null
-    var tcpModel = TcpModel()
-
-    private var gEngineKit: SkyEngineKit? = null
-    private var handsFree:Boolean = true  //免提状态
-
-    private var CALL_TIMEOUT = 2 //多久可以再次点击
-    //呼叫倒计时
-    lateinit var countDownTimer: CountDownTimer
-    private var isClick = true //是否可点击
-    private var createEnabled = true
-    private var tcpHandOff = false
-
-    override fun onCreate(savedInstanceState: Bundle?) {
-        super.onCreate(savedInstanceState)
-//        window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
-//                WindowManager.LayoutParams.FLAG_FULLSCREEN)
-        setContentView(R.layout.activity_web_rtc_voip_audio)
-        if (!EventBus.getDefault().isRegistered(this)) {
-            EventBus.getDefault().register(this)
-        }
-        MediaPlayHelper.getInstance().stopMusic()
-        initCountDownTimer()
-        countDownTimer.start()
-
-        //设置为通话状态 有其他用户输入时 DeviceChannel设置返回通话中
-        DeviceChannel.calling = true
-        init()
-
-        targetId = intent.getStringExtra("targetId")
-        Log.i(TAG, "SIP账号$targetId")
-        tcpModel = intent.getSerializableExtra("TcpModel") as TcpModel
-        action = intent.getStringExtra(ACTION)
-
-        Log.i(TAG, "tcpModel  " + tcpModel.toJson())
-
-        if (tcpModel.type == TcpType.VOICE) {
-            if (tcpModel.action === TcpAction.VoiceAction.CALL) {
-                val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
-                room_number_tv.text = interactionVO.fromFrameFullName
-                bao_mother_name_tv.setText(interactionVO.fromMemberName)
-
-                DeviceChannel.callId = if (interactionVO.fromDeviceId.equals(Constants.deviceId)) interactionVO.toDeviceId else interactionVO.fromDeviceId
-            } else if (tcpModel.action === TcpAction.VoiceAction.SUCCESS) {
-                val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
-                room_number_tv.text = interactionVO.toFrameFullName
-                bao_mother_name_tv.setText(interactionVO.toMemberName)
-
-                DeviceChannel.callId = if (interactionVO.fromDeviceId.equals(Constants.deviceId)) interactionVO.toDeviceId else interactionVO.fromDeviceId
-            }
-        }
-
-        if (action == CALLING) {
-            AppTool.Time.delay(500) {
-                createCallout()
-            }
-
-            call_duration_tv.visibility = View.VISIBLE
-            call_duration_tv.text = "连接中...."
-
-        } else if (action == RING) {
-            Log.i(TAG, "接电话。。。")
-        } else if (action == CALL) { //主动拨出,服务端回复success时
-            call_duration_tv.text = "等待接听"
-            MediaPlayHelper.getInstance().playResMusic(R.raw.outgoing_call, 0.6f, true)
-        }
-    }
-
-    fun init() {
-        hang_up_imagev.setOnClickListener(this)
-        hands_free_image.setOnClickListener(this)
-
-        try {
-            gEngineKit = SkyEngineKit.Instance()
-        } catch (e: NotInitializedException) {
-            SkyEngineKit.init(VoipEvent()) //重新初始化
-            try {
-                gEngineKit = SkyEngineKit.Instance()
-            } catch (ex: NotInitializedException) {
-                finish()
-            }
-        }
-    }
-
-    fun createCallout(){
-        Handler().postDelayed({
-            call_duration_tv.base = SystemClock.elapsedRealtime()
-            call_duration_tv.start()
-        }, 2900)
-
-        val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
-        if ((interactionVO.fromClerkId!=null && interactionVO.fromClerkId>=0) && interactionVO.fromDeviceId!=Constants.deviceId){
-            //6秒后仍然未连接,则断开
-//            Handler().postDelayed({
-//                Log.i(TAG,"session state:"+gEngineKit?.currentSession?.state+",userState:"+ SocketManager.getInstance().userState)
-//                if (gEngineKit?.currentSession?.state != EnumType.CallState.Connected){
-//                    showMessage("连接失败,请重试")
-//                    finish()
-//                }
-//            },6000)
-        } else {
-            if (createEnabled) {
-                var room = UUID.randomUUID().toString() + System.currentTimeMillis()
-                Log.d(TAG, "生成的房间号room " + room + "sipid targetId" + targetId)
-                //gEngineKit?.currentSession?.setCallState(EnumType.CallState.Idle)
-                val outCallResult = gEngineKit?.startOutCall(applicationContext, room, targetId, true)
-                val session = gEngineKit?.currentSession
-                if (session == null) {
-                    showMessage("通话失败,请重试1")
-                    AppTool.Time.delay(800) {
-                        finish()
-                    }
-                } else {
-                    session.setSessionCallback(this)
-                    Log.d(TAG + "_peer", " 呼出状态: myId = ${session?.mMyId} , targetId = ${session?.mTargetId}, roomId = ${session?.roomId}, state = ${session?.state}, outCallResult = $outCallResult")
-                    if (outCallResult!!||session.state == EnumType.CallState.Connected || session.state == EnumType.CallState.Connecting) {
-                        setAudioDeviceOut(session)
-
-                        Thread(Runnable {
-                            Thread.sleep(6000)
-                            Log.i(TAG,"session state:"+gEngineKit?.currentSession?.state+",userState:"+ SocketManager.getInstance().userState)
-                            if (gEngineKit?.currentSession?.state != EnumType.CallState.Connected && !tcpHandOff){
-                                runOnUiThread {
-                                    showMessage("连接失败,请重试")
-                                }
-
-                                gEngineKit?.endCall()
-                                val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
-                                var toId = if (interactionVO.fromDeviceId.equals(Constants.deviceId)) interactionVO.toDeviceId else interactionVO.fromDeviceId
-                                val voiceUtilTcpModel = VoiceUtil.voiceHandoff(Constants.deviceId, toId, interactionVO.id)
-                                NettyClient.instance.sendMsg(voiceUtilTcpModel.toJson()).subscribe {
-                                    if (it) {
-                                        Log.d(TAG, "TCP.发送消息完成")
-                                    } else {
-                                        Log.e(TAG, "TCP.发送消息失败")
-
-                                        HandleTcpConnect.instance.tcpReConnectWithMsgShow()
-                                    }
-                                    finish()
-                                }
-                            }
-                        }).start()
-
-                    } else {
-                        if (session.state != EnumType.CallState.Idle) {
-                            showMessage("对方忙线中2")
-                        } else {
-                            showMessage("通话失败,请重试")
-                        }
-                        AppTool.Time.delay(800) {
-                            finish()
-                        }
-                    }
-                }
-            } else {
-                AppTool.Time.delay(200) {
-                    finish()
-                }
-            }
-        }
-    }
-
-    fun setAudioDeviceOut(session:CallSession){
-        val bluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
-        val isBluetoothHeadsetConnected = (bluetoothAdapter != null && bluetoothAdapter.isEnabled
-                && bluetoothAdapter.getProfileConnectionState(BluetoothHeadset.HEADSET) == BluetoothHeadset.STATE_CONNECTED)
-        if (session.isHeadphonesPlugged){
-            session.toggleHeadset(true)
-        } else if (isBluetoothHeadsetConnected){
-            session.toggleBluetooth()
-        } else {
-            Handler().postDelayed({
-                //防止建立连接的时候 不能成功切换外音
-                session.toggleSpeaker(true)
-            }, 2400)
-        }
-    }
-
-    override fun onClick(p0: View?) {
-        when (p0?.id) {
-            R.id.hang_up_imagev -> {
-                countDownTimer.start()
-                handOffCall()
-            }
-            R.id.hands_free_image -> {
-                Log.i(TAG,"声音切换点击")
-                if (!handsFree) {
-                    hands_free_image.setImageResource(R.drawable.av_handfree_hover)
-                    val session = gEngineKit?.currentSession
-                    session?.toggleSpeaker(true)
-                    handsFree = true
-                } else {
-                    hands_free_image.setImageResource(R.drawable.av_handfree)
-                    val session = gEngineKit?.currentSession
-                    session?.toggleSpeaker(false)
-                    handsFree = false
-                }
-            }
-        }
-    }
-
-    fun handOffCall(){
-        if(!isClick) {
-            showMessage("勿频繁点击,2秒后可用")
-            return
-        }
-        hang_up_imagev.isEnabled = false
-        isClick = false
-
-        var interactionVO: InteractionVO? = null
-        if (tcpModel.data.javaClass.name == String::class.java.name) {
-            interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
-        } else {
-            interactionVO = tcpModel.data as InteractionVO
-        }
-        Log.i(TAG, "tcpModel" + interactionVO!!.id!!)
-        Log.i(TAG, "tcpModel" + tcpModel.toJson())
-
-        //给服务器发送挂断 tcp
-        if (tcpModel.type == TcpType.VOICE) {
-            if (tcpModel.action === TcpAction.VoiceAction.SUCCESS) {
-                var toId = if (interactionVO.fromDeviceId.equals(Constants.deviceId)) interactionVO.toDeviceId else interactionVO.fromDeviceId
-                val voiceUtilTcpModel = VoiceUtil.voiceHandoff(Constants.deviceId, toId, interactionVO.id)
-                NettyClient.instance.sendMsg(voiceUtilTcpModel.toJson()).subscribe {
-                    if (it) {
-                        Log.d(TAG, "TCP.发送消息完成")
-                    } else {
-                        Log.e(TAG, "TCP.发送消息失败")
-                        HandleTcpConnect.instance.tcpReConnectWithMsgShow()
-                    }
-                }
-            } else if (tcpModel.action === TcpAction.VoiceAction.CALL) {
-                var toId = if (interactionVO.fromDeviceId.equals(Constants.deviceId)) interactionVO.toDeviceId else interactionVO.fromDeviceId
-                val voiceUtilTcpModel = VoiceUtil.voiceHandoff(Constants.deviceId, toId, interactionVO.id)
-                NettyClient.instance.sendMsg(voiceUtilTcpModel.toJson()).subscribe {
-                    if (it) {
-                        Log.d(TAG, "TCP.发送消息完成")
-                    } else {
-                        Log.e(TAG, "TCP.发送消息失败")
-                        HandleTcpConnect.instance.tcpReConnectWithMsgShow()
-                    }
-                }
-            }
-        }
-        tcpHandOff = true
-        gEngineKit?.endCall()
-        finish()
-    }
-
-    fun initCountDownTimer() {
-        countDownTimer = object : CountDownTimer(CALL_TIMEOUT * 1000L, 1000) {
-            override fun onTick(millisUntilFinished: Long) {
-            }
-            override fun onFinish() {
-                hang_up_imagev.isEnabled = true
-                isClick = true
-            }
-        }
-    }
-
-    @Subscribe(threadMode = ThreadMode.MAIN)
-    fun onMoonEvent(messageEvent: MessageEvent) {
-        if (messageEvent.tag == 2) {
-
-            val tcpModel = messageEvent.getMessage() as TcpModel
-            Log.i(TAG, "收到数据 " + tcpModel.toJson())
-            if (tcpModel.action === TcpAction.VoiceAction.ACCEPT) {
-                MediaPlayHelper.getInstance().stopMusic()
-                Log.i(TAG, "对方接听电话啦")
-                call_duration_tv.visibility = View.VISIBLE
-                call_duration_tv.text = "连接中...."
-                AppTool.Time.delay(600) {
-                    createCallout()
-                }
-            } else if (tcpModel.action == TcpAction.VoiceAction.HANDOFF) { //对方挂断
-
-                var interactionVO: InteractionVO? = null
-                if (tcpModel.data.javaClass.name == String::class.java.name) {
-                    interactionVO = Gson().fromJson(this.tcpModel.data.toString(), InteractionVO::class.java)
-                } else {
-                    interactionVO = this.tcpModel.data as InteractionVO
-                }
-                val currentTnVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
-                if (interactionVO!!.id == currentTnVO.id){
-
-                    if (tcpModel.fromId != Constants.deviceId) {
-                        showMessage("对方挂断")
-                        call_duration_tv.stop()
-                        createEnabled = false
-                        tcpHandOff = true
-                        gEngineKit?.endCall()
-                        finish()
-                    }
-                }
-            } else if (tcpModel.action === TcpAction.VoiceAction.REJECT) {
-                var interactionVO: InteractionVO? = null
-                if (tcpModel.data.javaClass.name == String::class.java.name) {
-                    interactionVO = Gson().fromJson(this.tcpModel.data.toString(), InteractionVO::class.java)
-                } else {
-                    interactionVO = this.tcpModel.data as InteractionVO
-                }
-                val currentTnVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
-                if (interactionVO!!.id == currentTnVO.id){
-                    showMessage("对方拒绝接听")
-                    createEnabled = false
-                    tcpHandOff = true
-                    gEngineKit?.endCall()
-                    finish()
-                }
-
-            } else if (tcpModel.action === TcpAction.VoiceAction.CALLING) {
-                createEnabled = false
-                tcpHandOff = true
-                //gEngineKit?.endCall()
-                //showMessage("对方正在通话")
-                AppTool.Time.delay(800) {
-                    finish()
-                }
-            } else if (tcpModel.action === TcpAction.VoiceAction.FAILED) {
-                gEngineKit?.endCall()
-                //voiceStatus.setText("对方拒绝");
-                showMessage("呼叫失败,对方可能不在线")
-                createEnabled = false
-                tcpHandOff = true
-                AppTool.Time.delay(800) {
-                    finish()
-                }
-            } else if (tcpModel.action === TcpAction.VoiceAction.CANCEL) {
-                showMessage("对方取消")
-                createEnabled = false
-                tcpHandOff = true
-                gEngineKit?.endCall()
-                AppTool.Time.delay(400) {
-                    finish()
-                }
-            }
-        }else if(messageEvent.tag==Constants.INCOME_CALL_READY){ //已准备好接听电话,加入房间
-
-            val session = gEngineKit?.currentSession
-            if (session != null) {
-                session.setSessionCallback(this)
-                Log.d(TAG, "session = " + session + "; session.getState() = " + session.state)
-                if (session.state == EnumType.CallState.Incoming || session.state == EnumType.CallState.Connected || session.state == EnumType.CallState.Connecting){
-                    session.joinHome(session.roomId)
-                    setAudioDeviceOut(session)
-                } else {
-                    showMessage("对方忙线中")
-                    AppTool.Time.delay(800) {
-                        finish()
-                    }
-                }
-            } else {
-                showMessage("对方已挂断")
-                AppTool.Time.delay(800) {
-                    finish()
-                }
-            }
-
-        }
-    }
-
-    override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
-        Log.i(TAG, "keyup keyCode " + keyCode)
-        if (keyCode == KeyEvent.KEYCODE_HEADSETHOOK){
-            handOffCall()
-        } else if (keyCode == KeyEvent.KEYCODE_BACK) {
-//            Toast.makeText(this, "按下了back键   onKeyDown()", Toast.LENGTH_SHORT).show()
-            return false
-        }
-        return super.onKeyDown(keyCode, event)
-    }
-
-    override fun onDestroy() {
-        super.onDestroy()
-        DeviceChannel.calling = false
-        DeviceChannel.callId = 0
-        if(countDownTimer != null){
-            countDownTimer.cancel()
-        }
-        MediaPlayHelper.getInstance().stopMusic()
-        EventBus.getDefault().unregister(this)
-
-    }
-
-    override fun finish() {
-        Log.i("_sfinish","gEngineKit?.currentSession?.state="+gEngineKit?.currentSession?.state)
-
-        //val session = gEngineKit?.getCurrentSession()
-
-        //Log.e("结束通话",""+session?.roomId)
-//        if (session != null) {
-//            session?.setCallState(EnumType.CallState.Idle)
-//            gEngineKit?.endCall()
-//        }
-
-        super.finish()
-    }
-
-    override fun onResume() {
-        super.onResume()
-    }
-
-    override fun didChangeState(var1: EnumType.CallState?) {
-        Log.d(TAG + "_peer","didChangeState EnumType.CallState=" + var1?.name)
-    }
-
-    override fun didDisconnected(userId: String?) {
-        //val session = gEngineKit?.currentSession
-        //Log.i(TAG+"_peer","userId : $userId <> myId = ${session?.mMyId} , targetId = ${session?.mTargetId}, roomId = ${session?.roomId}, state = ${session?.state}")
-        Log.d(TAG + "_peer","didDisconnected userId=" + userId)
-        gEngineKit?.endCall()
-        runOnUiThread(Runnable {
-            //showMessage("对方挂断")
-            AppTool.Time.delay(200) {
-                finish()
-            }
-        })
-    }
-
-    override fun didCreateLocalVideoTrack() {
-    }
-
-    override fun didError(error: String?) {
-        Log.d(TAG + "_peer","didError error=" + error)
-        gEngineKit?.endCall()
-        if (error != null) {
-            Log.e(TAG, error)
-            runOnUiThread(Runnable {
-                showMessage(error)
-                AppTool.Time.delay(800) {
-                    finish()
-                }
-            })
-        }
-    }
-
-    override fun didReceiveRemoteVideoTrack(userId: String?) {
-
-    }
-
-    override fun didCallEndWithReason(var1: EnumType.CallEndReason?) {
-        Log.d(TAG + "_peer","didCallEndWithReason EnumType.CallEndReason=" + var1?.name)
-
-        runOnUiThread(Runnable {
-            when (var1) {
-                CallEndReason.Busy -> {
-                    handOffCall()
-                }
-                CallEndReason.AcceptByOtherClient -> {
-                    showMessage("通话中")
-                    gEngineKit?.endCall()
-                    AppTool.Time.delay(200) {
-                        finish()
-                    }
-                }
-                CallEndReason.Hangup -> {
-                    //showMessage("挂断")
-                }
-                CallEndReason.MediaError -> {
-                    showMessage("媒体错误")
-                    gEngineKit?.endCall()
-                    AppTool.Time.delay(200) {
-                        finish()
-                    }
-                }
-                CallEndReason.OpenCameraFailure -> {
-                    showMessage("打开摄像头错误")
-                    gEngineKit?.endCall()
-                    AppTool.Time.delay(200) {
-                        finish()
-                    }
-                }
-                CallEndReason.RemoteHangup -> {
-//                    showMessage("对方挂断")
-//                    gEngineKit?.endCall()
-//                    AppTool.Time.delay(200) {
-//                        finish()
-//                    }
-                }
-                CallEndReason.RemoteSignalError -> {
-                    showMessage("对方网络断开")
-                    gEngineKit?.endCall()
-                    AppTool.Time.delay(200) {
-                        finish()
-                    }
-                }
-                CallEndReason.SignalError -> {
-                    showMessage("连接断开")
-                    gEngineKit?.endCall()
-                    AppTool.Time.delay(200) {
-                        finish()
-                    }
-                }
-                CallEndReason.Timeout -> {
-                    showMessage("对方未接听")
-                    gEngineKit?.endCall()
-                    AppTool.Time.delay(200) {
-                        finish()
-                    }
-                }
-            }
-        })
-    }
-
-    override fun didChangeMode(isAudioOnly: Boolean) {
-    }
-
-    override fun didUserLeave(userId: String?) {
-        Log.d(TAG + "_peer","didUserLeave userId=" + userId)
-        gEngineKit?.endCall()
-        runOnUiThread {
-            showMessage("用户 $userId 离开")
-            finish()
-        }
-    }
-}

+ 6 - 9
home/src/main/code/com/wdkl/ncs/android/component/home/activity/WebRTCVoipAudioRingingActivity.kt

@@ -16,9 +16,6 @@ import android.util.Log
 import android.view.KeyEvent
 import android.view.View
 import com.google.gson.Gson
-import com.wdkl.core.socket.SocketManager
-import com.wdkl.core.util.ActivityStackManager
-import com.wdkl.core.voip.AsyncPlayer
 import com.wdkl.ncs.android.component.home.R
 import com.wdkl.ncs.android.component.home.broadcast.MyMediaButtonReceiver
 import com.wdkl.ncs.android.component.home.settingconfig.SettingConfig
@@ -183,13 +180,13 @@ class WebRTCVoipAudioRingingActivity : Activity(), View.OnClickListener {
             }
         }
         mVibrator.cancel()
-        val intent = Intent(this, WebRTCVoipAudioActivity::class.java)
-        intent.putExtra("targetId", targetId)
-        intent.putExtra("TcpModel", tcpModel)
-        intent.putExtra(WebRTCVoipAudioActivity().ACTION, WebRTCVoipAudioActivity().CALLING)
+//        val intent = Intent(this, WebRTCVoipAudioActivity::class.java)
+//        intent.putExtra("targetId", targetId)
+//        intent.putExtra("TcpModel", tcpModel)
+//        intent.putExtra(WebRTCVoipAudioActivity().ACTION, WebRTCVoipAudioActivity().CALLING)
         //intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
-        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
-        startActivity(intent)
+//        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+//        startActivity(intent)
         finish()
     }
 

+ 0 - 3
home/src/main/code/com/wdkl/ncs/android/component/home/adapter/NewEventItemAdapter.kt

@@ -11,9 +11,6 @@ import com.alibaba.android.vlayout.layout.LinearLayoutHelper
 import com.enation.javashop.utils.base.tool.CommonTool
 import com.enation.javashop.utils.base.widget.LoadingDialog
 import com.google.gson.Gson
-import com.umeng.socialize.a.b.d.l
-import com.umeng.weixin.handler.r
-import com.wdkl.core.socket.SocketManager
 import com.wdkl.ncs.android.component.home.R
 import com.wdkl.ncs.android.component.home.databinding.EventListItemBinding
 import com.wdkl.ncs.android.component.home.util.HandleTcpConnect

+ 0 - 2
home/src/main/code/com/wdkl/ncs/android/component/home/helper/AppUpdateHelper.java

@@ -19,8 +19,6 @@ import java.io.PrintWriter;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
 
-import static com.blankj.utilcode.util.ActivityUtils.startActivity;
-
 public class AppUpdateHelper {
     private final static String TAG = "AppUpdate";
 

+ 44 - 23
home/src/main/code/com/wdkl/ncs/android/component/home/service/WdKeepAliveService.kt

@@ -10,7 +10,9 @@ import com.alibaba.fastjson.JSON
 import com.google.gson.FieldNamingPolicy
 import com.google.gson.Gson
 import com.google.gson.GsonBuilder
-import com.wdkl.ncs.android.component.home.activity.*
+import com.wdkl.ncs.android.component.home.activity.AppUpdateActivity
+import com.wdkl.ncs.android.component.home.activity.NewEventListActivity
+import com.wdkl.ncs.android.component.home.activity.SOSEmergencyCallActivity
 import com.wdkl.ncs.android.component.home.settingconfig.SettingConfig
 import com.wdkl.ncs.android.component.home.util.*
 import com.wdkl.ncs.android.component.nursehome.common.Constants
@@ -25,9 +27,11 @@ 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.ncs.keepbackground.work.AbsWorkService
+import com.wdkl.ncs.android.component.home.ui.CallSingleActivity
 import org.greenrobot.eventbus.EventBus
 import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
+import java.math.BigInteger
 import java.util.*
 import java.util.concurrent.ConcurrentLinkedQueue
 
@@ -93,27 +97,37 @@ class WdKeepAliveService : AbsWorkService() {
                 if (tcpModel.type == TcpType.VOICE) {
 //                var gson = GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create()
                     val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
-                    val intent = Intent()
 
                     if (tcpModel.action == TcpAction.VoiceAction.SUCCESS) {  //拨出成功
                         Log.i(TAG, "拨出成功 ${interactionVO.fromMemberName} ${interactionVO.id}")
 
                         DeviceChannel.calling = true
-                        intent.setClass(this, WebRTCVoipAudioActivity::class.java)
-                        intent.putExtra("targetId", interactionVO?.toSipId)
-                        intent.putExtra("TcpModel", tcpModel)
-                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
-                        intent.putExtra(WebRTCVoipAudioActivity().ACTION, WebRTCVoipAudioActivity().CALL)
+
+                        val intent = Intent(this, CallSingleActivity::class.java)
+                        intent.putExtra(CallSingleActivity.EXTRA_ROOM_ID, interactionVO.fromSipId)
+                        intent.putExtra(CallSingleActivity.EXTRA_MO, true)
+                        intent.putExtra(CallSingleActivity.EXTRA_AUDIO_ONLY, true)
+                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                         startActivity(intent)
 
                     } else if (tcpModel.action == TcpAction.VoiceAction.CALL) {  //有来电
                         DeviceChannel.calling = true
-                        DeviceChannel.callId = if (interactionVO.fromDeviceId.equals(Constants.deviceId)) interactionVO.toDeviceId else interactionVO.fromDeviceId
+                        var roomId:String
+                        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(interactionVO))
-                        intent.setClass(this, WebRTCVoipAudioRingingActivity::class.java)
-                        intent.putExtra("targetId", interactionVO?.fromSipId)
-                        intent.putExtra("TcpModel", tcpModel)
-                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+
+                        //启动 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.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                         startActivity(intent)
                     }
                 }
@@ -123,20 +137,27 @@ class WdKeepAliveService : AbsWorkService() {
                 SpeechUtil.getInstance().stopSpeak()
                 val tcpModel = messageEvent.getMessage() as TcpModel
                 if (tcpModel.type == TcpType.VOICE && tcpModel.action == TcpAction.VoiceAction.CALL){
-                    DeviceChannel.calling = true
+
                     val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
-                    DeviceChannel.callId = if (interactionVO.fromDeviceId.equals(Constants.deviceId)) interactionVO.toDeviceId else interactionVO.fromDeviceId
-                    val intent = Intent()
+
+                    DeviceChannel.calling = true
+                    var roomId:String
+                    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(interactionVO))
-                    intent.setClass(this, WebRTCVoipAudioRingingActivity::class.java)
-                    intent.putExtra("targetId", interactionVO?.fromSipId)
-                    intent.putExtra("TcpModel", tcpModel)
-                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
 
-                    Thread(Runnable {
-                        Thread.sleep(400)
-                        startActivity(intent)
-                    }).start()
+                    //启动 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.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                    startActivity(intent)
 
                 }
             }

+ 30 - 7
janus/src/main/java/com/wdkl/rtc/ui/CallSingleActivity.java

@@ -1,4 +1,4 @@
-package com.wdkl.rtc.ui;
+package com.wdkl.ncs.android.component.home.ui;
 
 import android.Manifest;
 import android.annotation.TargetApi;
@@ -8,14 +8,18 @@ import android.content.Intent;
 import android.graphics.Color;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
 import android.support.v4.app.FragmentManager;
 import android.support.v7.app.AppCompatActivity;
 import android.view.View;
 import android.view.Window;
 import android.view.WindowManager;
 
+import com.wdkl.ncs.android.component.home.R;
+import com.wdkl.ncs.android.component.home.util.MediaPlayHelper;
+import com.wdkl.ncs.android.middleware.tcp.channel.DeviceChannel;
 import com.wdkl.rtc.util.Constant;
-import com.wdkl.rtc.R;
 import com.wdkl.rtc.entity.Room;
 import com.wdkl.rtc.janus.JanusClient;
 import com.wdkl.rtc.janus.VideoRoomCallback;
@@ -47,8 +51,10 @@ public class CallSingleActivity extends AppCompatActivity {
     VideoRoomCallback videoRoomCallback;
 
     private SingleCallFragment currentFragment;
+    //振动
+    Vibrator mVibrator;
 
-    public static Intent getCallIntent(Context context, int roomId, boolean isOutgoing,
+    public static Intent getCallIntent(Context context, BigInteger roomId, boolean isOutgoing,
                                        boolean isAudioOnly, boolean isClearTop) {
         Intent voip = new Intent(context, CallSingleActivity.class);
         voip.putExtra(CallSingleActivity.EXTRA_MO, isOutgoing);
@@ -61,7 +67,7 @@ public class CallSingleActivity extends AppCompatActivity {
     }
 
 
-    public static void openActivity(Context context, int roomId, boolean isOutgoing,                                     boolean isAudioOnly, boolean isClearTop) {
+    public static void openActivity(Context context, BigInteger roomId, boolean isOutgoing,                                     boolean isAudioOnly, boolean isClearTop) {
         Intent intent = getCallIntent(context, roomId, isOutgoing, isAudioOnly, isClearTop);
         //if (context instanceof Activity) {
         //    context.startActivity(intent);
@@ -77,8 +83,10 @@ public class CallSingleActivity extends AppCompatActivity {
         setStatusBarOrScreenStatus(this);
         setContentView(R.layout.activity_single_call);
 
+        mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
+
         final Intent intent = getIntent();
-        roomId = BigInteger.valueOf(intent.getIntExtra(EXTRA_ROOM_ID, 0));
+        roomId = new BigInteger(intent.getStringExtra(EXTRA_ROOM_ID));
         isOutgoing = intent.getBooleanExtra(EXTRA_MO, false);
         isAudioOnly = intent.getBooleanExtra(EXTRA_AUDIO_ONLY,true);
 
@@ -116,6 +124,10 @@ public class CallSingleActivity extends AppCompatActivity {
         return currentFragment;
     }
 
+    public Vibrator getmVibrator() {
+        return mVibrator;
+    }
+
     private void init(BigInteger roomId, boolean audioOnly) {
         SingleCallFragment fragment;
         if (audioOnly) {
@@ -136,7 +148,7 @@ public class CallSingleActivity extends AppCompatActivity {
         janusClient = new JanusClient(Constant.JANUS_URL, localUserId);
 
         //================ 信令
-        videoRoomCallback = new VideoRoomCallback(janusClient,room, localUserId,currentFragment);
+        videoRoomCallback = new VideoRoomCallback(janusClient,room, localUserId);
         janusClient.setJanusCallback(videoRoomCallback);
         // 1,连接,监听 onOpen, createSession,createSession 成功时设置janusClient sessionId,回调videoRoomCallback.onCreateSession
         // 2,在 videoRoomCallback.onCreateSession 中使用 janusClient.attachPlugin("janus.plugin.videoroom") 获得插件 handleId,回调 videoRoomCallback.onAttached
@@ -144,11 +156,19 @@ public class CallSingleActivity extends AppCompatActivity {
         // 4,发送 joinRoom 后,经过janusClient onMeesage处理后,由 videoRoomCallback.onMessage 处理 plugindata.data
         // 5,处理 janus:event,plugindata.data.videoroom:joined,在 peerConnection上createOffer,设置本地 sdp,回调 offerCallback.onCreateOfferSuccess,发布 publisher
         if (isOutgoing) {
+            MediaPlayHelper.getInstance().playResMusic(R.raw.outgoing_call, 0.6f, true);
             janusClient.setCallState(EnumType.CallState.Outgoing);
+            janusClient.connect();
         } else {
             janusClient.setCallState(EnumType.CallState.Incoming);
+            MediaPlayHelper.getInstance().playResMusic(R.raw.incoming_call, 1.0f, true);
+            long[] pattern = new long[]{100L, 2000L, 1000L, 2000L, 1000L, 2000L};
+            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
+                mVibrator.vibrate(VibrationEffect.createWaveform(pattern, 0));
+            } else {
+                mVibrator.vibrate(pattern, 0);
+            }
         }
-        janusClient.connect();
 
         // 6,处理 publishers,每个publisher 包含 id (feedId) 和 display,attach 到发布者的 handler 上,准备接收视频流,每个发布者都要 attach 一遍,然后协商 sdp, SFU,subscribeAttach 到发布者的 handle 上 [janusClient.subscribeAttach(feedId)]。将publisher 放到Room对象中的publishers, 在 janusClient.subscribeAttach(feedId) 中回调 videoRoomCallback.onSubscribeAttached
         // 7,在 videoRoomCallback.onSubscribeAttached 中订阅发布者,如果有 publisher 的话
@@ -213,6 +233,9 @@ public class CallSingleActivity extends AppCompatActivity {
         }
         janusClient.disConnect();
         WebRTCEngine.getInstance().release();
+        mVibrator.cancel();
+        MediaPlayHelper.getInstance().stopMusic();
+        DeviceChannel.calling = false;
         super.finish();
     }
 

+ 14 - 4
janus/src/main/java/com/wdkl/rtc/ui/FragmentAudio.java

@@ -1,4 +1,4 @@
-package com.wdkl.rtc.ui;
+package com.wdkl.ncs.android.component.home.ui;
 
 import android.os.Build;
 import android.util.Log;
@@ -7,7 +7,8 @@ import android.widget.ImageView;
 import android.widget.RelativeLayout;
 
 import com.blankj.utilcode.util.BarUtils;
-import com.wdkl.rtc.R;
+import com.wdkl.ncs.android.component.home.R;
+import com.wdkl.ncs.android.component.home.util.MediaPlayHelper;
 import com.wdkl.rtc.entity.Publisher;
 import com.wdkl.rtc.entity.Room;
 import com.wdkl.rtc.rtc.WebRTCEngine;
@@ -86,6 +87,8 @@ public class FragmentAudio extends SingleCallFragment implements View.OnClickLis
         currentState = state;
         runOnUiThread(() -> {
             if (state == EnumType.CallState.Connected) {
+                MediaPlayHelper.getInstance().stopMusic();
+
                 incomingActionContainer.setVisibility(View.GONE);
                 outgoingActionContainer.setVisibility(View.VISIBLE);
                 //minimizeImageView.setVisibility(View.VISIBLE);
@@ -115,11 +118,18 @@ public class FragmentAudio extends SingleCallFragment implements View.OnClickLis
         int id = v.getId();
         // 接听
         if (id == R.id.acceptImageView) {
-
+            if (callSingleActivity!=null){
+                callSingleActivity.janusClient.connect();
+                callSingleActivity.mVibrator.cancel();
+                MediaPlayHelper.getInstance().stopMusic();
+            }
         }
         // 挂断电话
         if (id == R.id.incomingHangupImageView || id == R.id.outgoingHangupImageView) {
-            if (callSingleActivity != null) callSingleActivity.finish();
+
+            if (callSingleActivity != null) {
+                callSingleActivity.finish();
+            }
         }
         // 静音
         if (id == R.id.muteImageView) {

+ 2 - 2
janus/src/main/java/com/wdkl/rtc/ui/FragmentVideo.java

@@ -1,4 +1,4 @@
-package com.wdkl.rtc.ui;
+package com.wdkl.ncs.android.component.home.ui;
 
 import android.content.Context;
 import android.os.Build;
@@ -12,7 +12,7 @@ import android.widget.LinearLayout;
 import android.widget.RelativeLayout;
 
 import com.blankj.utilcode.util.BarUtils;
-import com.wdkl.rtc.R;
+import com.wdkl.ncs.android.component.home.R;
 import com.wdkl.rtc.rtc.WebRTCEngine;
 import com.wdkl.rtc.util.EnumType;
 import com.wdkl.rtc.util.OSUtils;

+ 160 - 6
janus/src/main/java/com/wdkl/rtc/ui/SingleCallFragment.java

@@ -1,4 +1,4 @@
-package com.wdkl.rtc.ui;
+package com.wdkl.ncs.android.component.home.ui;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -9,8 +9,9 @@ import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
 import android.os.SystemClock;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
 import android.support.v4.app.Fragment;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -20,7 +21,7 @@ import android.widget.TextView;
 import android.widget.Toast;
 
 import com.wdkl.rtc.util.EnumType;
-import com.wdkl.rtc.R;
+import com.wdkl.ncs.android.component.home.R;
 import com.wdkl.rtc.entity.MsgEvent;
 import com.wdkl.rtc.rtc.WebRTCEngine;
 
@@ -30,9 +31,6 @@ import org.greenrobot.eventbus.ThreadMode;
 
 import java.math.BigInteger;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
 public abstract class SingleCallFragment extends Fragment {
     private static final String TAG = "SingleCallFragment";
     ImageView minimizeImageView;
@@ -137,6 +135,8 @@ public abstract class SingleCallFragment extends Fragment {
                     }
                 }
             });
+        } else if (code==100){
+            didChangeState(EnumType.CallState.Connected);
         }
     }
 
@@ -296,4 +296,158 @@ public abstract class SingleCallFragment extends Fragment {
             }
         }
     }
+
+    /*
+    @Subscribe(threadMode = ThreadMode.MAIN)
+    fun onMoonEvent(messageEvent: MessageEvent) {
+        if (messageEvent.tag == 2) {
+
+            val tcpModel = messageEvent.getMessage() as TcpModel
+            Log.i(TAG, "收到数据 " + tcpModel.toJson())
+            if (tcpModel.action === TcpAction.VoiceAction.ACCEPT) {
+                MediaPlayHelper.getInstance().stopMusic()
+                Log.i(TAG, "对方接听电话啦")
+                call_duration_tv.visibility = View.VISIBLE
+                call_duration_tv.text = "连接中...."
+                AppTool.Time.delay(600) {
+                    createCallout()
+                }
+            } else if (tcpModel.action == TcpAction.VoiceAction.HANDOFF) { //对方挂断
+
+                var interactionVO: InteractionVO? = null
+                if (tcpModel.data.javaClass.name == String::class.java.name) {
+                    interactionVO = Gson().fromJson(this.tcpModel.data.toString(), InteractionVO::class.java)
+                } else {
+                    interactionVO = this.tcpModel.data as InteractionVO
+                }
+                val currentTnVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
+                if (interactionVO!!.id == currentTnVO.id){
+
+                    if (tcpModel.fromId != Constants.deviceId) {
+                        showMessage("对方挂断")
+                        call_duration_tv.stop()
+                        createEnabled = false
+                        tcpHandOff = true
+                        gEngineKit?.endCall()
+                        finish()
+                    }
+                }
+            } else if (tcpModel.action === TcpAction.VoiceAction.REJECT) {
+                var interactionVO: InteractionVO? = null
+                if (tcpModel.data.javaClass.name == String::class.java.name) {
+                    interactionVO = Gson().fromJson(this.tcpModel.data.toString(), InteractionVO::class.java)
+                } else {
+                    interactionVO = this.tcpModel.data as InteractionVO
+                }
+                val currentTnVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
+                if (interactionVO!!.id == currentTnVO.id){
+                    showMessage("对方拒绝接听")
+                    createEnabled = false
+                    tcpHandOff = true
+                    gEngineKit?.endCall()
+                    finish()
+                }
+
+            } else if (tcpModel.action === TcpAction.VoiceAction.CALLING) {
+                createEnabled = false
+                tcpHandOff = true
+                //gEngineKit?.endCall()
+                //showMessage("对方正在通话")
+                AppTool.Time.delay(800) {
+                    finish()
+                }
+            } else if (tcpModel.action === TcpAction.VoiceAction.FAILED) {
+                gEngineKit?.endCall()
+                //voiceStatus.setText("对方拒绝");
+                showMessage("呼叫失败,对方可能不在线")
+                createEnabled = false
+                tcpHandOff = true
+                AppTool.Time.delay(800) {
+                    finish()
+                }
+            } else if (tcpModel.action === TcpAction.VoiceAction.CANCEL) {
+                showMessage("对方取消")
+                createEnabled = false
+                tcpHandOff = true
+                gEngineKit?.endCall()
+                AppTool.Time.delay(400) {
+                    finish()
+                }
+            }
+        }else if(messageEvent.tag==Constants.INCOME_CALL_READY){ //已准备好接听电话,加入房间
+
+            val session = gEngineKit?.currentSession
+            if (session != null) {
+                session.setSessionCallback(this)
+                Log.d(TAG, "session = " + session + "; session.getState() = " + session.state)
+                if (session.state == EnumType.CallState.Incoming || session.state == EnumType.CallState.Connected || session.state == EnumType.CallState.Connecting){
+                    session.joinHome(session.roomId)
+                    setAudioDeviceOut(session)
+                } else {
+                    showMessage("对方忙线中")
+                    AppTool.Time.delay(800) {
+                        finish()
+                    }
+                }
+            } else {
+                showMessage("对方已挂断")
+                AppTool.Time.delay(800) {
+                    finish()
+                }
+            }
+
+        }
+    }
+
+    fun handOffCall(){
+        if(!isClick) {
+            showMessage("勿频繁点击,2秒后可用")
+            return
+        }
+        hang_up_imagev.isEnabled = false
+        isClick = false
+
+        var interactionVO: InteractionVO? = null
+        if (tcpModel.data.javaClass.name == String::class.java.name) {
+            interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
+        } else {
+            interactionVO = tcpModel.data as InteractionVO
+        }
+        Log.i(TAG, "tcpModel" + interactionVO!!.id!!)
+        Log.i(TAG, "tcpModel" + tcpModel.toJson())
+
+        //给服务器发送挂断 tcp
+        if (tcpModel.type == TcpType.VOICE) {
+            if (tcpModel.action === TcpAction.VoiceAction.SUCCESS) {
+                var toId = if (interactionVO.fromDeviceId.equals(Constants.deviceId)) interactionVO.toDeviceId else interactionVO.fromDeviceId
+                val voiceUtilTcpModel = VoiceUtil.voiceHandoff(Constants.deviceId, toId, interactionVO.id)
+                NettyClient.instance.sendMsg(voiceUtilTcpModel.toJson()).subscribe {
+                    if (it) {
+                        Log.d(TAG, "TCP.发送消息完成")
+                    } else {
+                        Log.e(TAG, "TCP.发送消息失败")
+                        HandleTcpConnect.instance.tcpReConnectWithMsgShow()
+                    }
+                }
+            } else if (tcpModel.action === TcpAction.VoiceAction.CALL) {
+                var toId = if (interactionVO.fromDeviceId.equals(Constants.deviceId)) interactionVO.toDeviceId else interactionVO.fromDeviceId
+                val voiceUtilTcpModel = VoiceUtil.voiceHandoff(Constants.deviceId, toId, interactionVO.id)
+                NettyClient.instance.sendMsg(voiceUtilTcpModel.toJson()).subscribe {
+                    if (it) {
+                        Log.d(TAG, "TCP.发送消息完成")
+                    } else {
+                        Log.e(TAG, "TCP.发送消息失败")
+                        HandleTcpConnect.instance.tcpReConnectWithMsgShow()
+                    }
+                }
+            }
+        }
+        tcpHandOff = true
+        gEngineKit?.endCall()
+        finish()
+    }
+
+    MediaPlayHelper.getInstance().playResMusic(R.raw.outgoing_call, 0.6f, true)
+    MediaPlayHelper.getInstance().stopMusic()
+     */
 }

+ 1 - 1
home/src/main/code/com/wdkl/ncs/android/component/home/util/MediaPlayHelper.java

@@ -14,7 +14,7 @@ import android.view.KeyEvent;
 import com.wdkl.ncs.android.component.nursehome.common.Constants;
 import com.wdkl.ncs.android.lib.base.BaseApplication;
 import com.wdkl.ncs.android.middleware.utils.MessageEvent;
-import com.wdkl.skywebrtc.engine.AudioFocusManager;
+import com.wdkl.rtc.rtc.AudioFocusManager;
 
 import org.greenrobot.eventbus.EventBus;
 

janus/src/main/res/drawable-v24/av_audio_answer.png → home/src/main/res/drawable/av_audio_answer.png


janus/src/main/res/drawable-v24/av_audio_answer_hover.png → home/src/main/res/drawable/av_audio_answer_hover.png


janus/src/main/res/drawable/av_audio_answer_selector.xml → home/src/main/res/drawable/av_audio_answer_selector.xml


janus/src/main/res/drawable-v24/av_camera.png → home/src/main/res/drawable/av_camera.png


janus/src/main/res/drawable-v24/av_camera_hover.png → home/src/main/res/drawable/av_camera_hover.png


janus/src/main/res/drawable-v24/av_default_header.png → home/src/main/res/drawable/av_default_header.png


janus/src/main/res/drawable-v24/av_float_audio.png → home/src/main/res/drawable/av_float_audio.png


janus/src/main/res/drawable/av_float_bg.xml → home/src/main/res/drawable/av_float_bg.xml


janus/src/main/res/drawable-v24/av_handfree.png → home/src/main/res/drawable/av_handfree.png


janus/src/main/res/drawable-v24/av_handfree_hover.png → home/src/main/res/drawable/av_handfree_hover.png


janus/src/main/res/drawable-v24/av_hang_up.png → home/src/main/res/drawable/av_hang_up.png


janus/src/main/res/drawable-v24/av_hang_up_hover.png → home/src/main/res/drawable/av_hang_up_hover.png


janus/src/main/res/drawable/av_hangup_selector.xml → home/src/main/res/drawable/av_hangup_selector.xml


janus/src/main/res/drawable-v24/av_minimize.png → home/src/main/res/drawable/av_minimize.png


janus/src/main/res/drawable-v24/av_mute.png → home/src/main/res/drawable/av_mute.png


janus/src/main/res/drawable-v24/av_mute_hover.png → home/src/main/res/drawable/av_mute_hover.png


janus/src/main/res/drawable/av_mute_selector.xml → home/src/main/res/drawable/av_mute_selector.xml


janus/src/main/res/drawable-v24/av_phone.png → home/src/main/res/drawable/av_phone.png


janus/src/main/res/drawable/av_speaker_selector.xml → home/src/main/res/drawable/av_speaker_selector.xml


janus/src/main/res/drawable/av_switch_camera_selector.xml → home/src/main/res/drawable/av_switch_camera_selector.xml


janus/src/main/res/drawable-v24/av_trans_audio.png → home/src/main/res/drawable/av_trans_audio.png


janus/src/main/res/drawable-v24/av_video_answer.png → home/src/main/res/drawable/av_video_answer.png


janus/src/main/res/drawable-v24/av_video_answer_hover.png → home/src/main/res/drawable/av_video_answer_hover.png


janus/src/main/res/drawable/av_video_answer_selector.xml → home/src/main/res/drawable/av_video_answer_selector.xml


janus/src/main/res/drawable/ic_dashboard_black_24dp.xml → home/src/main/res/drawable/ic_dashboard_black_24dp.xml


janus/src/main/res/drawable/ic_home_black_24dp.xml → home/src/main/res/drawable/ic_home_black_24dp.xml


janus/src/main/res/drawable/ic_launcher_background.xml → home/src/main/res/drawable/ic_launcher_background.xml


janus/src/main/res/drawable-v24/ic_launcher_foreground.xml → home/src/main/res/drawable/ic_launcher_foreground.xml


janus/src/main/res/drawable/ic_notifications_black_24dp.xml → home/src/main/res/drawable/ic_notifications_black_24dp.xml


+ 1 - 1
janus/src/main/res/layout/activity_single_call.xml

@@ -4,7 +4,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context=".ui.CallSingleActivity">
+    tools:context="com.wdkl.ncs.android.component.home.ui.CallSingleActivity">
 
     <FrameLayout android:layout_width="match_parent"
         android:layout_height="match_parent"

+ 6 - 6
janus/src/main/res/layout/av_p2p_audio_incoming.xml

@@ -4,8 +4,8 @@
     android:layout_height="wrap_content"
     android:gravity="center_horizontal"
     android:orientation="vertical"
-    android:paddingLeft="30dp"
-    android:paddingRight="30dp"
+    android:paddingLeft="5dp"
+    android:paddingRight="5dp"
     android:paddingBottom="20dp">
 
     <RelativeLayout
@@ -24,8 +24,8 @@
 
             <ImageView
                 android:id="@+id/incomingHangupImageView"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
+                android:layout_width="80dp"
+                android:layout_height="80dp"
                 android:src="@drawable/av_hangup_selector" />
 
             <TextView
@@ -47,8 +47,8 @@
 
             <ImageView
                 android:id="@+id/acceptImageView"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
+                android:layout_width="80dp"
+                android:layout_height="80dp"
                 android:src="@drawable/av_audio_answer_selector" />
 
             <TextView

janus/src/main/res/layout/av_p2p_audio_outgoing.xml → home/src/main/res/layout/av_p2p_audio_outgoing.xml


janus/src/main/res/layout/av_p2p_video_connected_action.xml → home/src/main/res/layout/av_p2p_video_connected_action.xml


janus/src/main/res/layout/av_p2p_video_incoming_action.xml → home/src/main/res/layout/av_p2p_video_incoming_action.xml


janus/src/main/res/layout/av_p2p_video_outgoing_action.xml → home/src/main/res/layout/av_p2p_video_outgoing_action.xml


janus/src/main/res/layout/fragment_audio.xml → home/src/main/res/layout/fragment_audio.xml


janus/src/main/res/layout/fragment_video.xml → home/src/main/res/layout/fragment_video.xml


janus/src/main/res/layout/videoroom_item.xml → home/src/main/res/layout/videoroom_item.xml


+ 1 - 1
home/src/main/res/layout/watch_activity_event_detail.xml

@@ -72,7 +72,7 @@
                             android:layout_gravity="center_horizontal"
                             android:layout_marginTop="2dp"
                             android:text="--"
-                            android:textColor="@color/alerter_default_success_background"
+                            android:textColor="#FFFFFF"
                             android:textSize="22sp" />
                     </LinearLayout>
                 </LinearLayout>

+ 22 - 20
janus/build.gradle

@@ -1,16 +1,17 @@
 apply plugin: 'com.android.library'
 
 android {
-    compileSdkVersion 30
+    compileSdkVersion target_sdk_version
+    buildToolsVersion build_tools_version
 
     defaultConfig {
-        applicationId "com.wdkl.rtc"
-        minSdkVersion 23
-        targetSdkVersion 29
-        versionCode 1
-        versionName "1.0"
+        //applicationId "com.wdkl.rtc"
+        minSdkVersion min_sdk_version
+        targetSdkVersion target_sdk_version
+        versionCode app_version_code
+        versionName app_version
 
-        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+        multiDexEnabled true
     }
 
     buildTypes {
@@ -27,22 +28,23 @@ android {
 }
 
 dependencies {
-    implementation fileTree(dir: "libs", include: ["*.jar"])
-    implementation 'com.google.android.material:material:1.2.1'
-    implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
-    testImplementation 'junit:junit:4.12'
-    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
-    androidTestImplementation 'android.test.espresso:espresso-core:2.2.2'
-
-    api 'com.android.support:support-annotations:26.1.0'
+    //implementation fileTree(dir: "libs", include: ["*.jar"])
+    //implementation 'com.google.android.material:material:1.2.1'
+
+//    api 'com.android.support:support-annotations:26.1.0'
     //noinspection GradleCompatible
-    api 'com.android.support:appcompat-v7:26.1.0'
+//    api 'com.android.support:appcompat-v7:26.1.0'
 
     implementation 'org.webrtc:google-webrtc:1.0.32006'
 
-    implementation 'com.squareup.okhttp3:okhttp:3.8.0'
+//    implementation 'com.squareup.okhttp3:okhttp:3.8.0'
+//
+//    compile 'pub.devrel:easypermissions:3.0.0'
+//    api 'org.greenrobot:eventbus:3.0.0'
 
-    compile 'pub.devrel:easypermissions:3.0.0'
-    api 'org.greenrobot:eventbus:3.0.0'
-    api 'com.blankj:utilcodex:1.30.5'
+    implementation project(':common')
+    compile('com.blankj:utilcodex:1.30.5'){
+        exclude group: 'org.jetbrains.kotlin', module: 'kotlin-android-extensions-runtime'
+        exclude group: 'com.google.code.gson',module:'gson'
+    }
 }

+ 0 - 26
janus/src/androidTest/java/com/wdkl/rtc/ExampleInstrumentedTest.java

@@ -1,26 +0,0 @@
-package com.wdkl.rtc;
-
-import android.content.Context;
-
-import androidx.test.platform.app.InstrumentationRegistry;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.junit.Assert.*;
-
-/**
- * Instrumented test, which will execute on an Android device.
- *
- * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
- */
-@RunWith(AndroidJUnit4.class)
-public class ExampleInstrumentedTest {
-    @Test
-    public void useAppContext() {
-        // Context of the app under test.
-        Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
-        assertEquals("com.lesliefang.janusdemo2", appContext.getPackageName());
-    }
-}

+ 2 - 23
janus/src/main/AndroidManifest.xml

@@ -9,29 +9,8 @@
     <uses-permission android:name="android.permission.RECORD_AUDIO" />
     <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
 
-    <application
-        android:allowBackup="true"
-        android:icon="@mipmap/ic_launcher"
-        android:label="@string/app_name"
-        android:roundIcon="@mipmap/ic_launcher_round"
-        android:networkSecurityConfig="@xml/network_security_config"
-        android:theme="@style/AppTheme">
-        <activity android:name="com.wdkl.rtc.MainActivity">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-        <activity
-            android:name=".ui.CallSingleActivity"
-            android:showOnLockScreen="true"
-            android:showWhenLocked="true">
-            <intent-filter>
-                <action android:name="${applicationId}.kit.voip.single" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-        </activity>
+    <!--android:networkSecurityConfig="@xml/network_security_config"-->
+    <application>
     </application>
 
 </manifest>

+ 0 - 92
janus/src/main/java/com/wdkl/rtc/MainActivity.java

@@ -1,92 +0,0 @@
-package com.wdkl.rtc;
-
-import android.Manifest;
-import android.content.Intent;
-import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.v7.app.AppCompatActivity;
-import android.view.View;
-import android.widget.Button;
-import android.widget.CheckBox;
-import android.widget.EditText;
-import android.widget.Toast;
-
-import com.wdkl.rtc.rtc.WebRTCEngine;
-import com.wdkl.rtc.ui.CallSingleActivity;
-
-import java.math.BigInteger;
-
-import pub.devrel.easypermissions.EasyPermissions;
-
-public class MainActivity extends AppCompatActivity {
-    String[] perms = {Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO};
-    EditText etUserName;
-    Button btnStart;
-    Button btnJoin;
-    CheckBox cbAudioOnly;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_main2);
-        etUserName = findViewById(R.id.et_room_id);
-        btnStart = findViewById(R.id.btn_start);
-        btnJoin = findViewById(R.id.btn_join);
-        cbAudioOnly = findViewById(R.id.cb_audio_only);
-
-        etUserName.setText("12345678");
-
-        btnStart.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                int roomId = Integer.parseInt(etUserName.getText().toString().trim());
-                if (etUserName.getText().toString().trim().isEmpty()) {
-                    Toast.makeText(MainActivity.this, "房间号", Toast.LENGTH_SHORT).show();
-                    return;
-                }
-                if (!EasyPermissions.hasPermissions(MainActivity.this, perms)) {
-                    EasyPermissions.requestPermissions(MainActivity.this, "需要相机和录音权限",
-                            100, perms);
-                } else {
-//                    //启动 activity
-                    Intent intent = new Intent(MainActivity.this, CallSingleActivity.class);
-                    intent.putExtra(CallSingleActivity.EXTRA_ROOM_ID,roomId);
-                    intent.putExtra(CallSingleActivity.EXTRA_MO,true);
-                    intent.putExtra(CallSingleActivity.EXTRA_AUDIO_ONLY,cbAudioOnly.isChecked());
-                    //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-                    startActivity(intent);
-//                    CallSingleActivity.openActivity(MainActivity.this,roomId,true,false,false);
-                }
-            }
-        });
-
-        btnJoin.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                int roomId = Integer.parseInt(etUserName.getText().toString().trim());
-                if (etUserName.getText().toString().trim().isEmpty()) {
-                    Toast.makeText(MainActivity.this, "房间号", Toast.LENGTH_SHORT).show();
-                    return;
-                }
-
-                if (!EasyPermissions.hasPermissions(MainActivity.this, perms)) {
-                    EasyPermissions.requestPermissions(MainActivity.this, "需要相机和录音权限",
-                            100, perms);
-                } else {
-                    //启动 activity
-                    Intent intent = new Intent(MainActivity.this, CallSingleActivity.class);
-                    intent.putExtra(CallSingleActivity.EXTRA_ROOM_ID,roomId);
-                    intent.putExtra(CallSingleActivity.EXTRA_MO,false);
-                    intent.putExtra(CallSingleActivity.EXTRA_AUDIO_ONLY,cbAudioOnly.isChecked());
-                    startActivity(intent);
-                }
-            }
-        });
-    }
-
-    @Override
-    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
-        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
-        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
-    }
-}

+ 2 - 7
janus/src/main/java/com/wdkl/rtc/janus/VideoRoomCallback.java

@@ -1,7 +1,5 @@
 package com.wdkl.rtc.janus;
 
-import android.os.Handler;
-import android.os.Looper;
 import android.util.Log;
 
 import com.wdkl.rtc.entity.MsgEvent;
@@ -12,7 +10,6 @@ import com.wdkl.rtc.rtc.observer.CreateOfferCallback;
 import com.wdkl.rtc.rtc.observer.CreatePeerConnectionCallback;
 import com.wdkl.rtc.rtc.Peer;
 import com.wdkl.rtc.rtc.WebRTCEngine;
-import com.wdkl.rtc.ui.SingleCallFragment;
 import com.wdkl.rtc.util.EnumType;
 
 import org.greenrobot.eventbus.EventBus;
@@ -34,13 +31,11 @@ public class VideoRoomCallback implements JanusClient.JanusCallback {
     private BigInteger videoRoomHandlerId;
     private Room room;
     private BigInteger userId;
-    private SingleCallFragment currentFragment;
 
-    public VideoRoomCallback(JanusClient janusClient, Room room, BigInteger userId, SingleCallFragment currentFragment){
+    public VideoRoomCallback(JanusClient janusClient, Room room, BigInteger userId){
         this.janusClient = janusClient;
         this.room = room;
         this.userId = userId;
-        this.currentFragment = currentFragment;
     }
 
     @Override
@@ -162,7 +157,7 @@ public class VideoRoomCallback implements JanusClient.JanusCallback {
                 } else if (data.has("started") && data.getString("started").equals("ok")) {
                     // 订阅 start 成功
                     Log.d(TAG, "subscription started ok");
-                    currentFragment.didChangeState(EnumType.CallState.Connected);
+                    EventBus.getDefault().post(new MsgEvent<BigInteger>(100));
                 }
             } else if ("attached".equals(type) && jsep != null) {
                 // attach 到了一个Publisher 上,会收到网关转发来的sdp offer

+ 0 - 23
janus/src/main/res/layout/activity_echotest.xml

@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical"
-    tools:context=".EchoTestActivity">
-
-    <org.webrtc.SurfaceViewRenderer
-        android:id="@+id/surfaceviewrender_local"
-        android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_weight="1.0" />
-
-    <org.webrtc.SurfaceViewRenderer
-        android:id="@+id/surfaceviewrender_remote"
-        android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_marginTop="20dp"
-        android:layout_weight="1.0" />
-
-</LinearLayout>

+ 0 - 15
janus/src/main/res/layout/activity_video_room.xml

@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical"
-    tools:context=".VideoRoomActivity">
-
-    <androidx.recyclerview.widget.RecyclerView
-        android:id="@+id/recyclerview"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent" />
-
-</LinearLayout>

+ 0 - 17
janus/src/test/java/com/wdkl/rtc/ExampleUnitTest.java

@@ -1,17 +0,0 @@
-package com.wdkl.rtc;
-
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-/**
- * Example local unit test, which will execute on the development machine (host).
- *
- * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
- */
-public class ExampleUnitTest {
-    @Test
-    public void addition_isCorrect() {
-        assertEquals(4, 2 + 2);
-    }
-}

+ 1 - 8
keepalive/build.gradle

@@ -20,8 +20,6 @@ android {
         versionCode 2
         versionName "1.1"
 
-        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
-
     }
 
     buildTypes {
@@ -50,13 +48,8 @@ android {
 //    }
 //    againMakeJar.dependsOn(build)
 }
-ext.rxJavaVersion = '2.1.2'
-ext.rxAndroidVersion = '2.0.1'
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
-    testImplementation 'junit:junit:4.12'
+    //noinspection GradleCompatible
     implementation "com.android.support:appcompat-v7:$support_library_version"
-
-//    implementation "io.reactivex.rxjava2:rxjava:${rxJavaVersion}"
-//    implementation "io.reactivex.rxjava2:rxandroid:${rxAndroidVersion}"
 }

+ 0 - 17
keepalive/src/androidTest/java/com/wdkl/ncs/ExampleInstrumentedTest.java

@@ -1,17 +0,0 @@
-package com.wdkl.ncs;
-
-///**
-// * Instrumented test, which will execute on an Android device.
-// *
-// * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
-// */
-//@RunWith(AndroidJUnit4.class)
-public class ExampleInstrumentedTest {
-//    @Test
-//    public void useAppContext() {
-//        // Context of the app under test.
-//        Context appContext = InstrumentationRegistry.getTargetContext();
-//
-//        assertEquals("com.sdk.keepbackground.test", appContext.getPackageName());
-//    }
-}

+ 0 - 17
keepalive/src/test/java/com/wdkl/ncs/ExampleUnitTest.java

@@ -1,17 +0,0 @@
-package com.wdkl.ncs;
-
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-/**
- * Example local unit test, which will execute on the development machine (host).
- *
- * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
- */
-public class ExampleUnitTest {
-    @Test
-    public void addition_isCorrect() {
-        assertEquals(4, 2 + 2);
-    }
-}

+ 1 - 0
middleware/build.gradle

@@ -80,4 +80,5 @@ dependencies {
     compile 'com.fasterxml.jackson.core:jackson-databind:2.9.5'
     compile 'io.swagger:swagger-annotations:1.5.14'
     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+    implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
 }

+ 1 - 1
middleware/src/main/code/com/wdkl/ncs/android/middleware/config/WdklNcsConfigCenter.kt

@@ -22,7 +22,7 @@ class WdklNcsConfigCenter {
     /**
      *  是否处于开发模式
      */
-    val APP_DEV = false
+    val APP_DEV = true
 
     /**
      * 基础URL