|
@@ -1,15 +1,18 @@
|
|
|
package com.wdkl.lcd_board.activity
|
|
|
|
|
|
+import android.app.NotificationManager
|
|
|
import android.content.BroadcastReceiver
|
|
|
import android.content.Context
|
|
|
import android.content.Intent
|
|
|
import android.content.IntentFilter
|
|
|
import android.graphics.Color
|
|
|
import android.net.ConnectivityManager
|
|
|
+import android.net.Uri
|
|
|
import android.os.Build
|
|
|
import android.os.Handler
|
|
|
import android.os.Looper
|
|
|
import android.os.Message
|
|
|
+import android.provider.Settings
|
|
|
import android.text.TextUtils
|
|
|
import android.util.Log
|
|
|
import android.view.View
|
|
@@ -24,10 +27,9 @@ import com.wdkl.lcd_board.BuildConfig
|
|
|
import com.wdkl.lcd_board.R
|
|
|
import com.wdkl.lcd_board.databinding.ActivityMainLayoutBinding
|
|
|
import com.wdkl.lcd_board.entity.Program
|
|
|
-import com.wdkl.lcd_board.helper.AppUpdateHelper
|
|
|
-import com.wdkl.lcd_board.helper.NetHelper
|
|
|
-import com.wdkl.lcd_board.helper.ServerConfigDialogHelper
|
|
|
+import com.wdkl.lcd_board.helper.*
|
|
|
import com.wdkl.lcd_board.launch.MainLaunch
|
|
|
+import com.wdkl.lcd_board.settings.SettingConfig
|
|
|
import com.wdkl.ncs.android.lib.base.BaseActivity
|
|
|
import com.wdkl.ncs.android.lib.base.BaseApplication
|
|
|
import com.wdkl.ncs.android.lib.utils.*
|
|
@@ -45,6 +47,7 @@ import com.wdkl.ncs.android.middleware.model.dto.TcpSeverDTO
|
|
|
import com.wdkl.ncs.android.middleware.model.vo.DeviceNurseInfoVO
|
|
|
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.dto.TcpModel
|
|
|
import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction
|
|
|
import com.wdkl.ncs.android.middleware.tcp.enums.TcpType
|
|
@@ -60,6 +63,7 @@ import org.greenrobot.eventbus.Subscribe
|
|
|
import org.greenrobot.eventbus.ThreadMode
|
|
|
import java.lang.ref.WeakReference
|
|
|
import java.util.*
|
|
|
+import java.util.concurrent.Executors
|
|
|
import java.util.concurrent.TimeUnit
|
|
|
|
|
|
|
|
@@ -163,6 +167,27 @@ class MainActivity :BaseActivity<MainActivityPresenter, ActivityMainLayoutBindin
|
|
|
|
|
|
animationIn = AnimationUtils.loadAnimation(this@MainActivity, R.anim.slide_in)
|
|
|
|
|
|
+ if (Constant.VOICE_ON) {
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
|
+ if (!Settings.System.canWrite(BaseApplication.appContext)) {
|
|
|
+ val intent = Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS)
|
|
|
+ intent.data = Uri.parse("package:" + BaseApplication.appContext.packageName)
|
|
|
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
|
|
+ startActivity(intent)
|
|
|
+ } else {
|
|
|
+ updateTime(true)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ startScheduledExecutor()
|
|
|
+
|
|
|
+ if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
|
|
|
+ SpeechUtil.getInstance().init(activity) {
|
|
|
+ //
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
//test
|
|
|
/*handler.postDelayed({
|
|
|
val program1 = Program()
|
|
@@ -300,6 +325,7 @@ class MainActivity :BaseActivity<MainActivityPresenter, ActivityMainLayoutBindin
|
|
|
unRegReceiver()
|
|
|
EventBus.getDefault().unregister(this)
|
|
|
Constant.CALL_STATE = Constant.CALL_STANDBY
|
|
|
+ SpeechUtil.getInstance().release()
|
|
|
|
|
|
handler.removeCallbacksAndMessages(null)
|
|
|
callHandler.removeCallbacksAndMessages(null)
|
|
@@ -307,7 +333,6 @@ class MainActivity :BaseActivity<MainActivityPresenter, ActivityMainLayoutBindin
|
|
|
|
|
|
//数据加载错误
|
|
|
override fun onError(message: String, type: Int) {
|
|
|
- //errorLog("error",message)
|
|
|
showMessage("数据加载错误")
|
|
|
}
|
|
|
|
|
@@ -353,18 +378,17 @@ class MainActivity :BaseActivity<MainActivityPresenter, ActivityMainLayoutBindin
|
|
|
startTcp()
|
|
|
showMessage("tcp开始连接...host: " + Constant.TCP_SERVER_URL + ", port: " + Constant.TCP_PORT)
|
|
|
|
|
|
- Thread(Runnable {
|
|
|
+ Thread {
|
|
|
while (!initialized) {
|
|
|
- runOnUiThread(Runnable {
|
|
|
- initDevice()
|
|
|
- })
|
|
|
+ initDevice()
|
|
|
+
|
|
|
try {
|
|
|
- Thread.sleep(20000)
|
|
|
+ Thread.sleep(30000)
|
|
|
} catch (e: Exception) {
|
|
|
//
|
|
|
}
|
|
|
}
|
|
|
- }).start()
|
|
|
+ }.start()
|
|
|
}
|
|
|
|
|
|
//显示设备信息
|
|
@@ -414,7 +438,20 @@ class MainActivity :BaseActivity<MainActivityPresenter, ActivityMainLayoutBindin
|
|
|
|
|
|
|
|
|
override fun setPartSettings(partSetting: PartSettingDO) {
|
|
|
- //
|
|
|
+ Log.e(TAG,"收到返回的设置配置信息 ")
|
|
|
+
|
|
|
+ try {
|
|
|
+ //白天夜晚音量
|
|
|
+ SettingConfig.setHostDaytimeVolume(this.activity, partSetting.dayVol)
|
|
|
+ SettingConfig.setHostNightVolume(this.activity, partSetting.nightVol)
|
|
|
+
|
|
|
+ //响铃次数
|
|
|
+ SettingConfig.setCallNumber(this, partSetting.dayRingTimes)
|
|
|
+ } catch (e: Exception) {
|
|
|
+ Log.i(TAG,"解析科室设置数据异常" + e.message)
|
|
|
+ }
|
|
|
+
|
|
|
+ updateTime(true)
|
|
|
}
|
|
|
|
|
|
override fun loadAppVersion(appInfo: AppVersionDO) {
|
|
@@ -435,22 +472,19 @@ class MainActivity :BaseActivity<MainActivityPresenter, ActivityMainLayoutBindin
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- fun startTcp() {
|
|
|
+ private fun startTcp() {
|
|
|
if (!TextUtils.isEmpty(Constant.TCP_SERVER_URL) && !tcpConnect) {
|
|
|
tcpConnect = true
|
|
|
- Thread(Runnable {
|
|
|
+ Thread {
|
|
|
TcpClient.getInstance().init(Constant.TCP_SERVER_URL, Constant.TCP_PORT, Constant.TCP_HEART_BEAT)
|
|
|
- TcpClient.getInstance().setTcpCallback {
|
|
|
- //updateSendTcpInfo(it)
|
|
|
- }
|
|
|
- }).start()
|
|
|
+ }.start()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private fun regReceiver() {
|
|
|
receiver = TimeReceiver()
|
|
|
- var intentFilter = IntentFilter()
|
|
|
- intentFilter.addAction(Intent.ACTION_TIME_TICK)
|
|
|
+ val intentFilter = IntentFilter()
|
|
|
+ //intentFilter.addAction(Intent.ACTION_TIME_TICK)
|
|
|
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION)
|
|
|
registerReceiver(receiver, intentFilter)
|
|
|
}
|
|
@@ -484,6 +518,14 @@ class MainActivity :BaseActivity<MainActivityPresenter, ActivityMainLayoutBindin
|
|
|
if (tcpModel.action == TcpAction.VoiceAction.CALL) {
|
|
|
val callInteractionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
|
|
|
val bedCall: String = callInteractionVO.fromFrameFullName + BED_CALL
|
|
|
+ //语音播报
|
|
|
+ if (Constant.VOICE_ON) {
|
|
|
+ if (!TextUtils.isEmpty(callInteractionVO.fromFrameFullName)) {
|
|
|
+ val speakText = Util.appendSpace(callInteractionVO.fromFrameFullName.replace("-", ",")) + "," + BED_CALL
|
|
|
+ SpeechUtil.getInstance().addSpeech(speakText, false)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
for (program in programs) {
|
|
|
if (bedCall == program.text) {
|
|
|
programs.remove(program)
|
|
@@ -502,6 +544,14 @@ class MainActivity :BaseActivity<MainActivityPresenter, ActivityMainLayoutBindin
|
|
|
val callInteractionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
|
|
|
val bedCall: String = callInteractionVO.fromFrameFullName + BED_CALL
|
|
|
|
|
|
+ //移除语音播报
|
|
|
+ if (Constant.VOICE_ON) {
|
|
|
+ if (!TextUtils.isEmpty(callInteractionVO.fromFrameFullName)) {
|
|
|
+ val speakText = Util.appendSpace(callInteractionVO.fromFrameFullName.replace("-", ",")) + "," + BED_CALL
|
|
|
+ SpeechUtil.getInstance().removeSpeak(speakText)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
deleteCall(bedCall)
|
|
|
}
|
|
|
} else if (tcpModel.type == TcpType.SOS) {
|
|
@@ -520,6 +570,12 @@ class MainActivity :BaseActivity<MainActivityPresenter, ActivityMainLayoutBindin
|
|
|
sosCall = sosInteractionVO.fromFrameFullName + SOS_CALL
|
|
|
}
|
|
|
|
|
|
+ //语音播报
|
|
|
+ if (Constant.VOICE_ON) {
|
|
|
+ val speakText = Util.appendSpace(sosCall.replace("-", ","))
|
|
|
+ SpeechUtil.getInstance().addSpeech(speakText,true)
|
|
|
+ }
|
|
|
+
|
|
|
for (program in programs) {
|
|
|
if (sosCall == program.text) {
|
|
|
programs.remove(program)
|
|
@@ -539,6 +595,12 @@ class MainActivity :BaseActivity<MainActivityPresenter, ActivityMainLayoutBindin
|
|
|
sosCall = sosInteractionVO.fromFrameFullName + SOS_CALL
|
|
|
}
|
|
|
|
|
|
+ //移除语音播报
|
|
|
+ if (Constant.VOICE_ON) {
|
|
|
+ val speakText = Util.appendSpace(sosCall.replace("-", ","))
|
|
|
+ SpeechUtil.getInstance().removeSpeak(speakText)
|
|
|
+ }
|
|
|
+
|
|
|
deleteCall(sosCall)
|
|
|
} else if (tcpModel.action == TcpAction.SOSAction.RECEIVED
|
|
|
|| tcpModel.action == TcpAction.SOSAction.NO_MATCH) {
|
|
@@ -555,6 +617,12 @@ class MainActivity :BaseActivity<MainActivityPresenter, ActivityMainLayoutBindin
|
|
|
sosCall = sosInteractionVO.fromFrameFullName + SOS_CALL
|
|
|
}
|
|
|
|
|
|
+ //语音播报
|
|
|
+ if (Constant.VOICE_ON) {
|
|
|
+ val speakText = Util.appendSpace(sosCall.replace("-", ","))
|
|
|
+ SpeechUtil.getInstance().addSpeech(speakText,true)
|
|
|
+ }
|
|
|
+
|
|
|
for (program in programs) {
|
|
|
if (sosCall == program.text) {
|
|
|
programs.remove(program)
|
|
@@ -693,16 +761,82 @@ class MainActivity :BaseActivity<MainActivityPresenter, ActivityMainLayoutBindin
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private fun updateTime(forceSet: Boolean) {
|
|
|
+ if (!Constant.VOICE_ON) {
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
- inner class TimeReceiver: BroadcastReceiver() {
|
|
|
- override fun onReceive(context: Context, intent: Intent) {
|
|
|
- if (intent.action == Intent.ACTION_TIME_TICK) {
|
|
|
- updateNetState()
|
|
|
- if (initialized) {
|
|
|
+ val currentTimestamp = System.currentTimeMillis()
|
|
|
+ val date = TimeTransition.getDateTime("yyyy-MM-dd")
|
|
|
+ //白天起始时间戳
|
|
|
+ val dayStartTimeStamp = TimeTransition.dateToStamp(date + " " + SettingConfig.getInitialDayTime(activity) + ":00")
|
|
|
+ //白天结束时间戳
|
|
|
+ val endOfDayTimeStamp = TimeTransition.dateToStamp(date + " " + SettingConfig.getEndOfDay(activity) + ":00")
|
|
|
+ Log.e(TAG, "dayStartTimeStamp: " + dayStartTimeStamp + "----endOfDayTimeStamp: " + endOfDayTimeStamp)
|
|
|
+
|
|
|
+ val curInday = dayStartTimeStamp < currentTimestamp && currentTimestamp < endOfDayTimeStamp
|
|
|
+ if (curInday) {
|
|
|
+ //当前是白天并且原来不是白天
|
|
|
+ if (Constant.day_state != 0 || forceSet) {
|
|
|
+ //设置白天系统音量和响铃音
|
|
|
+ setTheSystemVolume(SettingConfig.getHostDaytimeVolume(activity))
|
|
|
+ }
|
|
|
+ Constant.day_state = 0
|
|
|
+ } else {
|
|
|
+ //当前是夜晚并且原来不是夜晚
|
|
|
+ if (Constant.day_state != 1 || forceSet) {
|
|
|
+ //设置晚上系统音量和响铃音
|
|
|
+ setTheSystemVolume(SettingConfig.getHostNightVolume(activity))
|
|
|
+ }
|
|
|
+ Constant.day_state = 1
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置系统音量
|
|
|
+ */
|
|
|
+ private fun setTheSystemVolume(value:Int) {
|
|
|
+ try {
|
|
|
+ if (value <= 15) {
|
|
|
+ val nm =
|
|
|
+ this.activity.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !nm.isNotificationPolicyAccessGranted) {
|
|
|
+ val intent = Intent(Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS)
|
|
|
+ startActivity(intent)
|
|
|
+ } else {
|
|
|
+ VoiceManagerUtil.setSystemVoice(this.activity, value)
|
|
|
+ VoiceManagerUtil.setMusicVoice(this.activity, value)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ VoiceManagerUtil.setSystemVoice(this.activity, value)
|
|
|
+ VoiceManagerUtil.setMusicVoice(this.activity, value)
|
|
|
+ }
|
|
|
+ } catch (e: Exception) {
|
|
|
+ e.printStackTrace()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun startScheduledExecutor() {
|
|
|
+ val timerTask: TimerTask = object : TimerTask() {
|
|
|
+ override fun run() {
|
|
|
+ try {
|
|
|
updateNetState()
|
|
|
- resetPrograms()
|
|
|
+ if (initialized) {
|
|
|
+ resetPrograms()
|
|
|
+ updateTime(false)
|
|
|
+ }
|
|
|
+ } catch (e: Exception) {
|
|
|
+ //
|
|
|
}
|
|
|
- } else if (intent.action == ConnectivityManager.CONNECTIVITY_ACTION) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ val executor = Executors.newSingleThreadScheduledExecutor()
|
|
|
+ executor.scheduleAtFixedRate(timerTask, 100, 60, TimeUnit.SECONDS)
|
|
|
+ }
|
|
|
+
|
|
|
+ inner class TimeReceiver: BroadcastReceiver() {
|
|
|
+ override fun onReceive(context: Context, intent: Intent) {
|
|
|
+ if (intent.action == ConnectivityManager.CONNECTIVITY_ACTION) {
|
|
|
updateNetState()
|
|
|
}
|
|
|
}
|
|
@@ -753,6 +887,11 @@ class MainActivity :BaseActivity<MainActivityPresenter, ActivityMainLayoutBindin
|
|
|
handlerMemoryActivity.tv_call_info.setTextColor(Color.WHITE)
|
|
|
handlerMemoryActivity.tv_call_info.setText("祝 您 安 康")
|
|
|
handlerMemoryActivity.tv_call_info.startAnimation(handlerMemoryActivity.animationIn)
|
|
|
+
|
|
|
+ if (Constant.VOICE_ON) {
|
|
|
+ //停止语音播报
|
|
|
+ SpeechUtil.getInstance().stopSpeak(true)
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|