浏览代码

门口机增加显示分机呼叫信息功能

weizhengliang 2 年之前
父节点
当前提交
428ff9dc7a

+ 123 - 45
callingdoor/src/main/java/com/wdkl/app/ncs/callingdoor/activity/CallingdoorActivity.kt

@@ -20,6 +20,7 @@ import com.google.gson.Gson
 import com.wdkl.app.ncs.callingdoor.BuildConfig
 import com.wdkl.app.ncs.callingdoor.R
 import com.wdkl.app.ncs.callingdoor.agreement.CallingdoorAgreement
+import com.wdkl.app.ncs.callingdoor.bean.CallingItem
 import com.wdkl.app.ncs.callingdoor.bean.Trans433Data
 import com.wdkl.app.ncs.callingdoor.databinding.CallingdoorMainLayBinding
 import com.wdkl.app.ncs.callingdoor.fragment.*
@@ -45,6 +46,7 @@ import com.wdkl.ncs.android.middleware.model.vo.DeviceRoomInfoVO
 import com.wdkl.ncs.android.middleware.model.vo.FrameBedVO
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
 import com.wdkl.ncs.android.middleware.tcp.TcpClient
+import com.wdkl.ncs.android.middleware.tcp.channel.DeviceChannel
 import com.wdkl.ncs.android.middleware.tcp.channel.OtherUtil
 import com.wdkl.ncs.android.middleware.tcp.channel.VoiceUtil
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel
@@ -80,6 +82,7 @@ import serialporttest.utils.StringUtils
 import java.io.*
 import java.lang.Process
 import java.util.*
+import java.util.concurrent.Executors
 import java.util.concurrent.TimeUnit
 import kotlin.collections.ArrayList
 
@@ -127,7 +130,7 @@ class CallingdoorActivity :BaseActivity<CallingdoorActivityPresenter, Callingdoo
 
     private val handler by lazy { Handler(Looper.getMainLooper()) }
 
-    private var bedCalls = ArrayList<String>()
+    private var bedCalls = ArrayList<CallingItem>()
 
     private var trans433Data: Trans433Data? = null
 
@@ -246,6 +249,8 @@ class CallingdoorActivity :BaseActivity<CallingdoorActivityPresenter, Callingdoo
         //3288 15.6寸竖屏:width=1080, height=1920
         //3288 10.1寸竖屏:width=800,  height=1280
         Log.d(TAG, "device orientation: ${Constant.DEVICE_ORIENTATION}, width: ${dm.widthPixels}, height: ${dm.heightPixels}")
+
+        startScheduledExecutor()
     }
 
     //检查launch版本
@@ -396,6 +401,17 @@ class CallingdoorActivity :BaseActivity<CallingdoorActivityPresenter, Callingdoo
         }
     }
 
+    private fun startScheduledExecutor() {
+        val timerTask: TimerTask = object : TimerTask() {
+            override fun run() {
+                checkCalls()
+            }
+        }
+
+        val executor = Executors.newSingleThreadScheduledExecutor()
+        executor!!.scheduleAtFixedRate(timerTask, 100, 30, TimeUnit.SECONDS)
+    }
+
     private fun showMsgMain(msg: String) {
         runOnUiThread {
             showMessage(msg)
@@ -1228,6 +1244,8 @@ class CallingdoorActivity :BaseActivity<CallingdoorActivityPresenter, Callingdoo
                             val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
                             nursingInteId = interactionVO.id
                             SettingConfig.setNursingId(activity, nursingInteId)
+                        } else if (tcpModel.action == TcpAction.SideAction.SHOW || tcpModel.action == TcpAction.SideAction.CLEAR) {
+                            updateCallInfo(tcpModel)
                         } else {
                             /*if ("rk3128".equals(Build.MODEL) || "rk3368".equals(Build.MODEL)) {
                                 DoorLightHelper.handleDoorLight(tcpModel)
@@ -1295,14 +1313,14 @@ class CallingdoorActivity :BaseActivity<CallingdoorActivityPresenter, Callingdoo
         if (tcpModel.action == TcpAction.SideAction.CALL) {
             SerialPortHelper.setDoorLight(1, "200")
             //显示分机呼叫信息
-            val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
-            updateBedCall(interactionVO, true)
+            //val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
+            //updateBedCall(interactionVO, true)
         } else if (tcpModel.action == TcpAction.SideAction.SOS_CALL) {
             SerialPortHelper.setDoorLight(1, "200")
             Constant.sosOn = true
         } else if (tcpModel.action == TcpAction.SideAction.ACCEPT || tcpModel.action == TcpAction.SideAction.CANCEL) {
-            val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
-            updateBedCall(interactionVO, false)
+            //val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
+            //updateBedCall(interactionVO, false)
 
             //如果当前还有其他床位呼叫或者是紧急呼叫则不重置门灯
             if (bedCalls.size == 0 && !Constant.sosOn) {
@@ -1319,54 +1337,116 @@ class CallingdoorActivity :BaseActivity<CallingdoorActivityPresenter, Callingdoo
         }
     }
 
+    private fun updateCallInfo(tcpModel: TcpModel) {
+        val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
+        if (tcpModel.action == TcpAction.SideAction.SHOW) {
+            //显示呼叫信息
+            updateBedCall(interactionVO, true)
+        } else if (tcpModel.action == TcpAction.SideAction.CLEAR) {
+            //清除呼叫信息
+            updateBedCall(interactionVO, false)
+        }
+    }
+
     //更新呼叫信息显示
     private fun updateBedCall(interactionVO: InteractionVO, add: Boolean) {
-        val language = LocaleMangerUtils.getApplicationLocale().language
-        val name = CommonUtils.subStringAfter(interactionVO.fromFrameFullName, "-")
-        val frameName: String
-        if (Locale.CHINESE.getLanguage().equals(language)) {
-            frameName = Util.appendSpace(interactionVO.fromFrameFullName.replace("-", ","))
-        } else {
-            frameName = interactionVO.fromFrameFullName.replace("-", "")
-        }
-        val text = getString(R.string.voice_call_speech, frameName)
-        if (add) {
-            bedCalls.add(name)
-            if (Locale.CHINESE.getLanguage().equals(language)) {
-                if (Constant.TTS_STATUS == 2) {
-                    SpeechUtil.getInstance().addSpeech(text, false)
+        try {
+            val language = LocaleMangerUtils.getApplicationLocale().language
+            val bedName = CommonUtils.subStringAfter(interactionVO.fromFrameFullName, "-")
+            val roomName = CommonUtils.subStringBefore(interactionVO.fromFrameFullName, "-")
+            var showText = getString(R.string.voice_call_speech, bedName)
+            if (interactionVO.actionType == TcpType.SOS.name) {
+                //紧急呼叫
+                if (!TextUtils.isEmpty(interactionVO.data)) {
+                    showText = interactionVO.data
+                } else {
+                    showText = getString(R.string.sos_call_speech, roomName)
                 }
             }
-        } else {
-            bedCalls.remove(name)
-            if (Locale.CHINESE.getLanguage().equals(language)) {
-                if (Constant.TTS_STATUS == 2) {
-                    SpeechUtil.getInstance().removeSpeak(text)
+
+            val speechText: String
+            if (Locale.CHINESE.language.equals(language)) {
+                speechText = Util.appendSpace(showText.replace("-", ","))
+            } else {
+                speechText = showText.replace("-", " ")
+            }
+
+            if (add) {
+                val item = CallingItem(System.currentTimeMillis(), showText)
+                bedCalls.add(item)
+                /*if (Locale.CHINESE.language.equals(language)) {
+                    if (Constant.TTS_STATUS == 2) {
+                        SpeechUtil.getInstance().addSpeech(speechText, false)
+                    }
+                }*/
+            } else {
+                if (bedCalls.size > 0) {
+                    val iterator = bedCalls.iterator()
+                    while (iterator.hasNext()) {
+                        val it = iterator.next()
+                        if (it.text == showText) {
+                            iterator.remove()
+                        }
+                    }
                 }
+                /*if (Locale.CHINESE.language.equals(language)) {
+                    if (Constant.TTS_STATUS == 2) {
+                        SpeechUtil.getInstance().removeSpeak(speechText)
+                    }
+                }*/
             }
+
+            showCalls()
+        } catch (ex: Exception) {
+            ex.printStackTrace()
         }
+    }
 
-        if (bedCalls.size > 0) {
-            view_flipper.removeAllViews()
-            for ((index, e) in bedCalls.withIndex()) {
-                val textView = TextView(activity)
-                textView.text = e + " " + StringUtil.getResString(R.string.str_call)
-                textView.setSingleLine(true)
-                textView.setEllipsize(TextUtils.TruncateAt.END);
-                textView.setTextColor(Color.RED)
-                if ("rk3288".equals(Build.MODEL)) {
-                    textView.textSize = 48f
-                } else {
-                    textView.textSize = 32f
+    private fun showCalls() {
+        synchronized(Unit) {
+            if (bedCalls.size > 0) {
+                view_flipper.removeAllViews()
+                for ((index, e) in bedCalls.withIndex()) {
+                    val textView = TextView(activity)
+                    textView.text = e.text
+                    textView.setSingleLine(true)
+                    textView.setEllipsize(TextUtils.TruncateAt.END)
+                    textView.setTextColor(Color.RED)
+                    if ("rk3288".equals(Build.MODEL)) {
+                        textView.textSize = 48f
+                    } else {
+                        textView.textSize = 32f
+                    }
+                    textView.gravity = (Gravity.END or Gravity.CENTER)
+                    //textView.getPaint().setFlags(mFlags);//字体划线
+                    //textView.setTypeface(null, mTypeface);//字体样式
+
+                    view_flipper.addView(textView, index)
+                }
+            } else {
+                view_flipper.removeAllViews()
+            }
+        }
+    }
+
+    private fun checkCalls() {
+        //5分钟无人处理自动清除
+        try {
+            if (bedCalls.size > 0) {
+                val iterator = bedCalls.iterator()
+                while (iterator.hasNext()) {
+                    val it = iterator.next()
+                    if (System.currentTimeMillis() - it.time >= 5 * 60 * 1000) {
+                        iterator.remove()
+                    }
                 }
-                textView.gravity = (Gravity.END or Gravity.CENTER)
-                //textView.getPaint().setFlags(mFlags);//字体划线
-                //textView.setTypeface(null, mTypeface);//字体样式
 
-                view_flipper.addView(textView, index)
+                runOnUiThread {
+                    showCalls()
+                }
             }
-        } else {
-            view_flipper.removeAllViews()
+        } catch (ex: Exception) {
+            ex.printStackTrace()
         }
     }
 
@@ -1495,9 +1575,7 @@ class CallingdoorActivity :BaseActivity<CallingdoorActivityPresenter, Callingdoo
 
     inner class TimeReceiver: BroadcastReceiver() {
         override fun onReceive(context: Context, intent: Intent) {
-            if (intent.action == Intent.ACTION_TIME_TICK
-                    || intent.action == Intent.ACTION_TIME_CHANGED
-                    || intent.action == Intent.ACTION_TIMEZONE_CHANGED) {
+            if (intent.action == Intent.ACTION_TIME_TICK) {
                 updateNetState()
                 if (initialized) {
                     updateSettings(false)

+ 27 - 0
callingdoor/src/main/java/com/wdkl/app/ncs/callingdoor/bean/CallingItem.java

@@ -0,0 +1,27 @@
+package com.wdkl.app.ncs.callingdoor.bean;
+
+public class CallingItem {
+    private long time;
+    private String text;
+
+    public CallingItem(long time, String text) {
+        this.time = time;
+        this.text = text;
+    }
+
+    public long getTime() {
+        return time;
+    }
+
+    public void setTime(long time) {
+        this.time = time;
+    }
+
+    public String getText() {
+        return text;
+    }
+
+    public void setText(String text) {
+        this.text = text;
+    }
+}

+ 1 - 1
callingdoor/src/main/res/layout/callingdoor_main_lay.xml

@@ -33,7 +33,7 @@
                 android:id="@+id/view_flipper"
                 android:layout_width="0dp"
                 android:layout_height="match_parent"
-                android:layout_weight="1.5"
+                android:layout_weight="2"
                 android:paddingRight="10dp"
                 android:paddingLeft="10dp"
                 android:autoStart="true"

+ 1 - 1
callingdoor/src/main/res/layout/callingdoor_main_lay_rk3288.xml

@@ -35,7 +35,7 @@
                 android:id="@+id/view_flipper"
                 android:layout_width="0dp"
                 android:layout_height="match_parent"
-                android:layout_weight="1"
+                android:layout_weight="1.5"
                 android:paddingRight="10dp"
                 android:paddingLeft="10dp"
                 android:autoStart="true"

+ 2 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/enums/TcpAction.java

@@ -394,6 +394,8 @@ public interface TcpAction {
         SOS_CANCEL("取消"),
         NURSING("护理"),
         NURSING_END("护理结束"),
+        SHOW("显示"),
+        CLEAR("清除"),
         NO_MATCH("没有匹配");
 
         private final String description;

+ 1 - 0
resource/src/main/res/values-es/strings.xml

@@ -94,6 +94,7 @@
     <string name="str_call_handoff">Handoff</string>
     <string name="str_call_speaker">Speaker</string>
     <string name="voice_call_speech">%s llamando</string>
+    <string name="sos_call_speech">%s llamada de emergencia</string>
 
     <string name="indate">Fecha de entrada: </string>
     <string name="subtotal">Subtotal: </string>

+ 1 - 0
resource/src/main/res/values-ru/strings.xml

@@ -92,6 +92,7 @@
     <string name="str_call_handoff">Переключение</string>
     <string name="str_call_speaker">Динамик</string>
     <string name="voice_call_speech">%s вызов</string>
+    <string name="sos_call_speech">экстренный вызов %s</string>
     <string name="indate">Дата: </string>
     <string name="subtotal">Итого: </string>
     <string name="countdown_time">%ds</string>

+ 2 - 1
resource/src/main/res/values-zh/strings.xml

@@ -93,7 +93,8 @@
     <string name="str_call_mute">静音</string>
     <string name="str_call_handoff">挂断</string>
     <string name="str_call_speaker">免提</string>
-    <string name="voice_call_speech">%s呼叫</string>
+    <string name="voice_call_speech">%s 呼叫</string>
+    <string name="sos_call_speech">%s 紧急呼叫</string>
 
     <string name="indate">入住日期: </string>
     <string name="subtotal">小计: </string>

+ 1 - 0
resource/src/main/res/values/strings.xml

@@ -93,6 +93,7 @@
     <string name="str_call_handoff">Handoff</string>
     <string name="str_call_speaker">Speaker</string>
     <string name="voice_call_speech">%s Calling</string>
+    <string name="sos_call_speech">%s emergency call</string>
 
     <string name="indate">In date: </string>
     <string name="subtotal">Subtotal: </string>