ソースを参照

事件获得与响应OK

allen 4 年 前
コミット
34b96836ec

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

@@ -15,11 +15,18 @@
         <activity android:name="com.wdkl.ncs.android.component.home.activity.RTCVoipAudioRingingActivity" />
         <activity android:name="com.wdkl.ncs.android.component.home.activity.RTCVoipAudioActivity" />
         <activity android:name=".activity.EventActivity" />
+        <activity android:name=".activity.WatchEventDetailActivity"/>
         <service android:name="com.starrtc.demo.demo.service.KeepLiveService">
             <intent-filter>
                 <action android:name="com.starrtc.demo.service.KeepLiveService" />
             </intent-filter>
         </service>
+
+        <service android:name=".service.TcpHandleService">
+            <intent-filter>
+                <action android:name="com.wdkl.ncs.android.component.home.service.TcpHandleService" />
+            </intent-filter>
+        </service>
     </application>
 
 </manifest>

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

@@ -0,0 +1,143 @@
+package com.wdkl.ncs.android.component.home.activity
+
+import android.util.Log
+import android.widget.Toast
+import com.enation.javashop.android.jrouter.external.annotation.Autowired
+import com.enation.javashop.android.jrouter.external.annotation.Router
+import com.enation.javashop.net.engine.model.NetState
+import com.enation.javashop.utils.base.tool.CommonTool
+import com.google.gson.FieldNamingPolicy
+import com.google.gson.Gson
+import com.google.gson.GsonBuilder
+import com.wdkl.ncs.android.component.home.R
+import com.wdkl.ncs.android.component.home.databinding.WatchActivityEventDetailBinding
+import com.wdkl.ncs.android.component.home.launch.HomeLaunch
+import com.wdkl.ncs.android.component.nursehome.common.Constants
+import com.wdkl.ncs.android.component.nursehome.util.TimeTransition
+import com.wdkl.ncs.android.lib.base.BaseActivity
+import com.wdkl.ncs.android.lib.base.BaseContract
+import com.wdkl.ncs.android.lib.utils.push
+import com.wdkl.ncs.android.middleware.logic.contract.home.WatchHomeActivityContract
+import com.wdkl.ncs.android.middleware.logic.presenter.home.WatchHomeActivityPresenter
+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.EventUtil
+import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel
+import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction
+import com.wdkl.ncs.android.middleware.tcp.enums.TcpType
+import com.wdkl.ncs.android.middleware.utils.MessageEvent
+import kotlinx.android.synthetic.main.watch_activity_event.*
+import kotlinx.android.synthetic.main.watch_activity_event_detail.*
+import org.greenrobot.eventbus.Subscribe
+import org.greenrobot.eventbus.ThreadMode
+
+@Router(path = "/event/detail")
+class WatchEventDetailActivity: BaseActivity<WatchHomeActivityPresenter, WatchActivityEventDetailBinding>(), WatchHomeActivityContract.View{
+    override fun render() {
+    }
+
+    override fun onError(message: String, type: Int) {
+    }
+
+    override fun complete(message: String, type: Int) {
+    }
+
+    override fun start() {
+    }
+
+    override fun networkMonitor(state: NetState) {
+    }
+
+    var TAG = WatchEventDetailActivity::class.java.getSimpleName()
+
+    override fun bindDagger() {
+        HomeLaunch.component.inject(this)
+    }
+
+    override fun bindEvent() {
+        back.setOnClickListener {
+            push("/watch/callrecords", { postcard ->
+                postcard.withString("action","ALL")
+                postcard.withString("customer_id","")
+            })
+        }
+        event_status_img.setOnClickListener {
+            event_status_img.isEnabled = false
+            if (tcpModel?.type == TcpType.EVENT) {
+                var tcpModel = EventUtil.eventResponse(Integer.parseInt(Constants.ids), interactionVO!!.fromDeviceId, interactionVO!!.id)
+                TcpClient.getInstance().sendMsg(tcpModel.toJson())
+            } else if (tcpModel?.type == TcpType.IM) {
+                //todo: 语音播放
+                Log.i(TAG, "语音播放")
+            }
+        }
+    }
+
+    override fun destory() {
+    }
+
+    //参数自动注入
+    @Autowired(name= "tcpModelStr",required = true)
+    @JvmField var tcpModelStr: String = ""
+
+    var interactionVO:InteractionVO? = null
+    var tcpModel:TcpModel? = null
+
+    override fun init() {
+        Log.i(TAG, "参数 tcpModelStr : " + tcpModelStr)
+        tcpModel = TcpModel.getModelByJson(tcpModelStr)
+        //var gson = GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create()
+        interactionVO = Gson().fromJson(tcpModel?.data.toString(), InteractionVO::class.java)
+
+        if (interactionVO!=null) {
+            baby_mother_name.setText(interactionVO?.fromMemberName)
+
+            if (tcpModel?.type == TcpType.IM){
+                event_text.setText("语音留言")
+                if (interactionVO?.actionEnd != null) {
+                    event_end_text.setText(TimeTransition().stampToDate(interactionVO!!.actionEnd*1000))
+                    event_status_img.isEnabled = false
+                    event_status_img.setImageResource(com.starrtc.demo.R.drawable.icon_hd_live_item)
+                } else {
+                    event_status_img.setImageResource(com.starrtc.demo.R.drawable.icon_hd_live)
+                }
+            } else if (tcpModel?.type == TcpType.EVENT){
+                event_text.setText(interactionVO?.data)
+
+                if (interactionVO?.actionEnd != null) {
+                    event_end_text.setText(TimeTransition().stampToDate(interactionVO!!.actionEnd*1000))
+                    event_status_img.isEnabled = false
+                    event_status_img.setImageResource(com.starrtc.demo.R.drawable.icon_switch_on)
+                }
+            }
+        }
+    }
+
+    override fun getLayId(): Int {
+        return R.layout.watch_activity_event_detail
+    }
+
+    @Subscribe(threadMode = ThreadMode.MAIN)
+    fun onMoonEvent(messageEvent: MessageEvent){
+        if (messageEvent.tag==0){
+            var resTcpModel = messageEvent.getMessage() as TcpModel
+            if (resTcpModel.type == TcpType.DATA && resTcpModel.action == TcpAction.DataAction.INTERACTION){
+                if (resTcpModel.data!=null) {
+
+                    val responseInteractionVO = Gson().fromJson<InteractionVO>(resTcpModel.getData().toString(), InteractionVO::class.java)
+
+                    if (tcpModel?.type == TcpType.IM){
+                        event_status_img.setImageResource(com.starrtc.demo.R.drawable.icon_hd_live_item)
+                        Toast.makeText(this, "已播放", Toast.LENGTH_SHORT)
+                    } else if (tcpModel?.type == TcpType.EVENT){
+                        event_status_img.setImageResource(com.starrtc.demo.R.drawable.icon_switch_on)
+                        Toast.makeText(this, "已响应", Toast.LENGTH_SHORT)
+                    }
+
+                    event_end_text.setText(TimeTransition().stampToDate(responseInteractionVO.actionEnd * 1000))
+                }
+            }
+        }
+    }
+}

+ 43 - 46
home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchHomeActivity.kt

@@ -52,8 +52,6 @@ class WatchHomeActivity : BaseActivity<WatchHomeActivityPresenter, WatchActivity
 //                TcpClient.getInstance().init("47.106.200.55", 5080, 9)
             }
         }).start()
-
-
     }
 
     override fun bindEvent() {
@@ -114,56 +112,55 @@ class WatchHomeActivity : BaseActivity<WatchHomeActivityPresenter, WatchActivity
 
     @Subscribe(threadMode = ThreadMode.MAIN)
     fun onMoonEvent(messageEvent: MessageEvent) {
-        if (messageEvent.tag == 1) {
-            return
-        }
+        if (messageEvent.tag == 0) {
 
-        var tcpModel = messageEvent.getMessage() as TcpModel
-        var responseTcpModel :TcpModel
+            var tcpModel = messageEvent.getMessage() as TcpModel
+            var responseTcpModel: TcpModel
 
-        when (tcpModel.getType()) {
-            TcpType.CALLBACK -> if (tcpModel.getAction() === TcpAction.CallbackAction.SUCCESS) {
-                //todo: 刷新呼叫记录列表
+            when (tcpModel.getType()) {
+                TcpType.CALLBACK -> if (tcpModel.getAction() === TcpAction.CallbackAction.SUCCESS) {
+                    //todo: 刷新呼叫记录列表
 
-            } else if (tcpModel.getAction() === TcpAction.CallbackAction.FAILED) {
-                //呼叫失败
-            }
-            TcpType.VOICE -> if (tcpModel.getAction() === TcpAction.VoiceAction.CALL) { //语音呼入
-                val interactionVO = Gson().fromJson<InteractionVO>(tcpModel.getData().toString(), InteractionVO::class.java)
-                //判断当前是否通话
-                // 通话中
-                if (calling) {
-                    responseTcpModel = VoiceUtil.voiceCalling(tcpModel.getToId(), tcpModel.getFromId(), interactionVO.getId())
-                    //给服务器发送正在通话中 tcp
-                    TcpClient.getInstance().sendMsg(responseTcpModel.toJson())
-                } else {
-                    responseTcpModel = VoiceUtil.voiceSuccess(tcpModel.getToId(), tcpModel.getFromId(), interactionVO.getId())
-                    TcpClient.getInstance().sendMsg(responseTcpModel.toJson())
-
-                    //界面呈现
-                    AppTool.Time.delay(300){
-                        var intent = Intent()
-                        intent.setClass(this,RTCVoipAudioRingingActivity::class.java)
-                        intent.putExtra("targetId", interactionVO.fromSipId)
-                        intent.putExtra("TcpModel",tcpModel)
-                        startActivity(intent)
-                    }
+                } else if (tcpModel.getAction() === TcpAction.CallbackAction.FAILED) {
+                    //呼叫失败
                 }
-            } else if (tcpModel.getAction() === TcpAction.VoiceAction.HANDOFF) { //对方挂断,不论我方呼出或呼入
-                //todo: 清掉呼出的TcpModel,通话中界面更新 --- 显示对方已挂断并停留3秒,结束至正常界面;更新左侧
+                TcpType.VOICE -> if (tcpModel.getAction() === TcpAction.VoiceAction.CALL) { //语音呼入
+                    val interactionVO = Gson().fromJson<InteractionVO>(tcpModel.getData().toString(), InteractionVO::class.java)
+                    //判断当前是否通话
+                    // 通话中
+                    if (calling) {
+                        responseTcpModel = VoiceUtil.voiceCalling(tcpModel.getToId(), tcpModel.getFromId(), interactionVO.getId())
+                        //给服务器发送正在通话中 tcp
+                        TcpClient.getInstance().sendMsg(responseTcpModel.toJson())
+                    } else {
+                        responseTcpModel = VoiceUtil.voiceSuccess(tcpModel.getToId(), tcpModel.getFromId(), interactionVO.getId())
+                        TcpClient.getInstance().sendMsg(responseTcpModel.toJson())
+
+                        //界面呈现
+                        AppTool.Time.delay(300) {
+                            var intent = Intent()
+                            intent.setClass(this, RTCVoipAudioRingingActivity::class.java)
+                            intent.putExtra("targetId", interactionVO.fromSipId)
+                            intent.putExtra("TcpModel", tcpModel)
+                            startActivity(intent)
+                        }
+                    }
+                } else if (tcpModel.getAction() === TcpAction.VoiceAction.HANDOFF) { //对方挂断,不论我方呼出或呼入
+                    //todo: 清掉呼出的TcpModel,通话中界面更新 --- 显示对方已挂断并停留3秒,结束至正常界面;更新左侧
 
-            } else if (tcpModel.getAction() === TcpAction.VoiceAction.SUCCESS) {
-                //todo 更新呼出的TcpModel,data放置vo
-            }
-            TcpType.VIDEO -> {
-            }
-            TcpType.IM -> if (tcpModel.getAction() === TcpAction.IMAction.MSG) {
-                //todo: 使用通话中界面,显示有语音留言,停留3秒,结束至正常界面
+                } else if (tcpModel.getAction() === TcpAction.VoiceAction.SUCCESS) {
+                    //todo 更新呼出的TcpModel,data放置vo
+                }
+                TcpType.VIDEO -> {
+                }
+                TcpType.IM -> if (tcpModel.getAction() === TcpAction.IMAction.MSG) {
+                    //todo: 使用通话中界面,显示有语音留言,停留3秒,结束至正常界面
 
-            }
-            TcpType.EVENT -> if (tcpModel.getAction() === TcpAction.EventAction.KEY_CLICK) { //有新事件过来
-                //todo: 服务端通过data给出具体的事件名称放置data。使用通话中界面,显示事件名称,停留3秒,结束至正常界面
-                Log.e(TAG, "收到事件tcp")
+                }
+                TcpType.EVENT -> if (tcpModel.getAction() === TcpAction.EventAction.KEY_CLICK) { //有新事件过来
+                    //todo: 服务端通过data给出具体的事件名称放置data。使用通话中界面,显示事件名称,停留3秒,结束至正常界面
+                    Log.e(TAG, "收到事件tcp")
+                }
             }
         }
     }

+ 1 - 0
home/src/main/code/com/wdkl/ncs/android/component/home/di/HomeComponent.kt

@@ -32,4 +32,5 @@ interface HomeComponent {
 
     fun inject(activity: EventActivity)
 
+    fun inject(activity: WatchEventDetailActivity)
 }

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

@@ -7,6 +7,8 @@ import android.util.Log
 import com.google.gson.FieldNamingPolicy
 import com.google.gson.GsonBuilder
 import com.wdkl.ncs.android.component.home.activity.RTCVoipAudioRingingActivity
+import com.wdkl.ncs.android.component.home.activity.WatchEventDetailActivity
+import com.wdkl.ncs.android.lib.utils.push
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel
 import com.wdkl.ncs.android.middleware.utils.MessageEvent
@@ -38,12 +40,13 @@ class TcpHandleService : Service(){
             Log.i("TcpHandleService", "TcpModel : " + tcpModel.fromId)
 
             //data 是 InteractionVO
-            var gson = GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create()
-            var interactionVO = gson.fromJson(tcpModel.data.toString(), InteractionVO::class.java)
+            //var gson = GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create()
+            //var interactionVO = gson.fromJson(tcpModel.data.toString(), InteractionVO::class.java)
 
             var intent = Intent()
-            intent.setClass(this, RTCVoipAudioRingingActivity::class.java)
-            intent.putExtra("TcpModel",tcpModel)
+            intent.setClass(this, WatchEventDetailActivity::class.java)
+            //todo: 不优雅的传输,应该直接传递对象
+            intent.putExtra("tcpModelStr",tcpModel.toJson())
             startActivity(intent)
         }
     }

+ 92 - 0
home/src/main/res/layout/watch_activity_event_detail.xml

@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="#FFE6E8">
+
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_centerHorizontal="true"
+        android:layout_marginTop="11px"
+        android:orientation="vertical">
+
+        <ImageView
+            android:id="@+id/bao_mother_image_imagev"
+            android:layout_width="280dp"
+            android:layout_height="280dp"
+            android:src="@drawable/bao_ma_tou_xiang" />
+
+        <TextView
+            android:id="@+id/baby_mother_name"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal"
+            android:layout_marginTop="8px"
+            android:text=""
+            android:textSize="40dp" />
+
+        <TextView
+            android:id="@+id/event_text"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal"
+            android:layout_marginTop="18px"
+            android:text=""
+            android:textSize="50dp" />
+
+    </LinearLayout>
+
+
+    <TextView
+        android:id="@+id/call_duration_tv"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_above="@+id/call_out_linlyout"
+        android:layout_centerHorizontal="true"
+        android:text=""
+        android:textSize="40dp"
+        android:visibility="gone"/>
+
+    <LinearLayout
+        android:id="@+id/call_out_linlyout"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentBottom="true"
+        android:layout_centerHorizontal="true"
+        android:layout_marginTop="13px"
+        android:layout_marginBottom="11px"
+        android:orientation="horizontal">
+
+        <ImageView
+            android:id="@+id/back"
+            android:layout_width="100dp"
+            android:layout_height="200dp"
+            android:src="@drawable/btn_back" />
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            android:gravity="right">
+            <TextView
+                android:id="@+id/event_end_text"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginRight="5dp"
+                android:text=""/>
+            <ImageView
+                android:id="@+id/event_status_img"
+                android:layout_width="200dp"
+                android:layout_height="200dp"
+                android:layout_marginLeft="20px"
+                android:layout_marginRight="0dp"
+                android:src="@drawable/icon_switch_off" />
+        </LinearLayout>
+
+    </LinearLayout>
+
+
+</RelativeLayout>
+</layout>

+ 3 - 1
middleware/src/main/code/com/wdkl/ncs/android/middleware/model/vo/InteractionVO.java

@@ -4,6 +4,8 @@ package com.wdkl.ncs.android.middleware.model.vo;
 import com.wdkl.ncs.android.middleware.model.annotation.Column;
 import com.wdkl.ncs.android.middleware.model.dos.InteractionDO;
 
+import java.io.Serializable;
+
 import io.swagger.annotations.ApiModelProperty;
 
 /**
@@ -13,7 +15,7 @@ import io.swagger.annotations.ApiModelProperty;
  * @create: 2021/04/02 15:27
  */
 
-public class InteractionVO extends InteractionDO {
+public class InteractionVO extends InteractionDO implements Serializable {
 
     /** 用户 **/
     @Column(name = "from_customer_id")