diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/base/BaseActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/base/BaseActivity.kt
index eba4a5d..236921e 100644
--- a/app/src/main/java/com/yinuo/safetywatcher/watcher/base/BaseActivity.kt
+++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/base/BaseActivity.kt
@@ -75,6 +75,11 @@ abstract class BaseActivity : AppCompatActivity() {
loadingDialog!!.show(supportFragmentManager, "loading")
}
+ fun isLoadingShowing(): Boolean {
+ val fragment = supportFragmentManager.findFragmentByTag("loading")
+ return fragment?.isVisible ?: false
+ }
+
fun closeLoadingDialog() {
loadingDialog?.dismiss()
loadingDialog = null
diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/constant/Constants.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/constant/Constants.kt
index 8d8f9d2..3512490 100644
--- a/app/src/main/java/com/yinuo/safetywatcher/watcher/constant/Constants.kt
+++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/constant/Constants.kt
@@ -18,6 +18,9 @@ const val DELAY_TIME_OPEN_CAMERA = 10
//检测重连摄像头延时
const val DELAY_TIME_CHECK_CAMERA = 5
+//检测重连传感器延时
+const val DELAY_TIME_CHECK_SENSOR = 5
+
const val NAMESPACE_ANDROID = "http://schemas.android.com/apk/res/android"
// 云同步时,20条数据一上传
diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/GasUtils.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/GasUtils.kt
index c646f5a..0ca418d 100644
--- a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/GasUtils.kt
+++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/GasUtils.kt
@@ -4,6 +4,7 @@ import android.os.Handler
import android.os.Looper
import com.common.commonlib.db.DBUtils
import com.common.commonlib.db.entity.GasType
+import com.yinuo.library.vlc.TxtOverlay
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
@@ -35,6 +36,9 @@ object GasUtils {
val gasUnit = it[2]
val gasValue: Double = (it[4] * 256 + it[5]) / 100.00
setFlag(0, gasName, "/dev/tyyS0")
+
+ // TODO
+ TxtOverlay.setShowTip("")
}
}
}
diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HomeActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HomeActivity.kt
index b5bf738..19a9745 100644
--- a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HomeActivity.kt
+++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HomeActivity.kt
@@ -5,20 +5,26 @@ import android.os.Build
import android.os.Process
import android.view.View
import androidx.annotation.RequiresApi
+import androidx.lifecycle.lifecycleScope
import com.common.commonlib.utils.NetworkHelper
import com.yinuo.library.vlc.IFrameCallBack
import com.yinuo.library.vlc.RtspSurfaceRender2
+import com.yinuo.library.vlc.TxtOverlay
import com.yinuo.library.vlc.utils.LogUtils
import com.yinuo.safetywatcher.R
import com.yinuo.safetywatcher.databinding.ActivityHomeBinding
import com.yinuo.safetywatcher.watcher.base.NoOptionsActivity
import com.yinuo.safetywatcher.watcher.constant.CAMERA_URL
import com.yinuo.safetywatcher.watcher.constant.DELAY_TIME_CHECK_CAMERA
+import com.yinuo.safetywatcher.watcher.constant.DELAY_TIME_CHECK_SENSOR
import com.yinuo.safetywatcher.watcher.constant.DELAY_TIME_OPEN_CAMERA
+import com.yinuo.safetywatcher.watcher.port.GasUtils
import com.yinuo.safetywatcher.watcher.services.HeartbeatService
import com.yinuo.safetywatcher.watcher.utils.BatteryHelper
import com.yinuo.safetywatcher.watcher.utils.SimHelper
import com.yinuo.safetywatcher.watcher.utils.WifiHelper
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
class HomeActivity : NoOptionsActivity() {
@@ -28,6 +34,9 @@ class HomeActivity : NoOptionsActivity() {
private var mRender: RtspSurfaceRender2? = null
+ private var mHasCameraData = false
+ private var mHasSensorData = false
+
override val isHome: Boolean
get() = true
@@ -44,6 +53,7 @@ class HomeActivity : NoOptionsActivity() {
initTopbarHelper()
HeartbeatService.actionStart(this@HomeActivity)
setForCamera()
+ setForSensor()
mBinding.apply {
itemSetting.setOnClickListener {
startActivity(Intent(this@HomeActivity, SettingActivity::class.java))
@@ -70,36 +80,101 @@ class HomeActivity : NoOptionsActivity() {
}
}
+ /**
+ * 设置摄像头
+ */
private fun setForCamera() {
mRender = RtspSurfaceRender2(mBinding.surface)
mRender?.setRtspUrl(CAMERA_URL)
mRender?.setFrameCallBack(object : IFrameCallBack {
override fun onFrame() {
+ mHasCameraData = true
+ changeViewStatus()
closeLoadingDialog()
watchCamera(DELAY_TIME_CHECK_CAMERA)
}
})
// 第一次很慢,所以10秒
watchCamera(DELAY_TIME_OPEN_CAMERA)
- showLoadingDialog(R.string.connecting_camera, false)
+ showLoadingDialog(R.string.connecting_camera)
+ }
+
+ /**
+ * 改变View状态
+ */
+ private fun changeViewStatus() {
+ lifecycleScope.launch(Dispatchers.Main) {
+ //mHasSensorData = true
+ mBinding.errorView.visibility =
+ if (!mHasCameraData) View.VISIBLE else View.GONE
+ val errorRes = if (!mHasCameraData && !mHasSensorData) R.drawable.ic_nosingal else R.drawable.ic_icon
+ mBinding.errorView.setImageResource(errorRes)
+
+ // tipView
+ mBinding.tipView.visibility = if (!mHasCameraData && mHasSensorData) View.VISIBLE else View.GONE
+ mBinding.tipView.setImageBitmap(TxtOverlay.getOverlayBitmap())
+ }
}
+ /**
+ * 重启摄像头Runnable
+ */
private val reStartCamera: Runnable = Runnable {
+ LogUtils.w("reStartCamera Runnable start")
+ mHasCameraData = false
+ changeViewStatus()
if (NetworkHelper.isNetworkConnect(this@HomeActivity)) {
- LogUtils.w("reStartCamera Runnable start")
- showLoadingDialog(R.string.connecting_camera, false)
+ if (!isLoadingShowing() && !mHasSensorData) {
+ showLoadingDialog(R.string.connecting_camera)
+ }
mRender?.reStart()
watchCamera(DELAY_TIME_OPEN_CAMERA)
- }else{
+ } else {
watchCamera(DELAY_TIME_CHECK_CAMERA)
}
}
+ /**
+ * 监视摄像头
+ */
private fun watchCamera(time: Int) {
mBinding.root.removeCallbacks(reStartCamera)
mBinding.root.postDelayed(reStartCamera, (time * 1000).toLong())
}
+
+ // 设置传感器
+ private fun setForSensor() {
+ TxtOverlay.setTipChangeListener {
+ // 有传感器数据回调
+ mHasSensorData = true
+ closeLoadingDialog()
+ changeViewStatus()
+ watchSensor(DELAY_TIME_CHECK_SENSOR)
+ }
+ watchSensor(DELAY_TIME_CHECK_SENSOR)
+ GasUtils.initPort()
+ }
+
+ /**
+ * 监视传感器
+ */
+ private fun watchSensor(delayTime: Int) {
+ mBinding.root.removeCallbacks(watchSensorRunnable)
+ mBinding.root.postDelayed(watchSensorRunnable, (delayTime * 1000).toLong())
+ }
+
+ /**
+ * 监视传感器执行Runnable
+ */
+ private val watchSensorRunnable: Runnable = Runnable {
+ LogUtils.w("watchSensorRunnable start")
+ mHasSensorData = false
+ changeViewStatus()
+ GasUtils.initPort()
+ watchSensor(DELAY_TIME_CHECK_SENSOR)
+ }
+
private fun initTopbarHelper() {
BatteryHelper.init(this@HomeActivity)
WifiHelper.init(this@HomeActivity)
diff --git a/app/src/main/res/drawable-hdpi/ic_icon.png b/app/src/main/res/drawable-hdpi/ic_icon.png
new file mode 100644
index 0000000..442829c
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_icon.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_nosingal.png b/app/src/main/res/drawable-hdpi/ic_nosingal.png
new file mode 100644
index 0000000..f8afda3
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_nosingal.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_password.png b/app/src/main/res/drawable-hdpi/ic_password.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/ic_password.png
rename to app/src/main/res/drawable-hdpi/ic_password.png
diff --git a/app/src/main/res/drawable-xhdpi/ic_progress.png b/app/src/main/res/drawable-hdpi/ic_progress.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/ic_progress.png
rename to app/src/main/res/drawable-hdpi/ic_progress.png
diff --git a/app/src/main/res/drawable-xhdpi/ic_select_s.png b/app/src/main/res/drawable-hdpi/ic_select_s.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/ic_select_s.png
rename to app/src/main/res/drawable-hdpi/ic_select_s.png
diff --git a/app/src/main/res/drawable-xhdpi/new_forward_click.png b/app/src/main/res/drawable-hdpi/new_forward_click.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/new_forward_click.png
rename to app/src/main/res/drawable-hdpi/new_forward_click.png
diff --git a/app/src/main/res/drawable-xhdpi/new_forward_white.png b/app/src/main/res/drawable-hdpi/new_forward_white.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/new_forward_white.png
rename to app/src/main/res/drawable-hdpi/new_forward_white.png
diff --git a/app/src/main/res/drawable-xhdpi/new_moveback_click.png b/app/src/main/res/drawable-hdpi/new_moveback_click.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/new_moveback_click.png
rename to app/src/main/res/drawable-hdpi/new_moveback_click.png
diff --git a/app/src/main/res/drawable-xhdpi/new_moveback_white.png b/app/src/main/res/drawable-hdpi/new_moveback_white.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/new_moveback_white.png
rename to app/src/main/res/drawable-hdpi/new_moveback_white.png
diff --git a/app/src/main/res/drawable-xhdpi/new_play.png b/app/src/main/res/drawable-hdpi/new_play.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/new_play.png
rename to app/src/main/res/drawable-hdpi/new_play.png
diff --git a/app/src/main/res/drawable-xhdpi/new_play_white.png b/app/src/main/res/drawable-hdpi/new_play_white.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/new_play_white.png
rename to app/src/main/res/drawable-hdpi/new_play_white.png
diff --git a/app/src/main/res/drawable-xhdpi/new_stop.png b/app/src/main/res/drawable-hdpi/new_stop.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/new_stop.png
rename to app/src/main/res/drawable-hdpi/new_stop.png
diff --git a/app/src/main/res/drawable-xhdpi/new_stop_white.png b/app/src/main/res/drawable-hdpi/new_stop_white.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/new_stop_white.png
rename to app/src/main/res/drawable-hdpi/new_stop_white.png
diff --git a/app/src/main/res/drawable-xhdpi/new_thumb.png b/app/src/main/res/drawable-hdpi/new_thumb.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/new_thumb.png
rename to app/src/main/res/drawable-hdpi/new_thumb.png
diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml
index 1dc6023..6fe6725 100644
--- a/app/src/main/res/layout/activity_home.xml
+++ b/app/src/main/res/layout/activity_home.xml
@@ -8,6 +8,20 @@
android:layout_width="match_parent"
android:layout_height="match_parent" />
+
+
+
+
Unit)? = null;
+
// 上一次展示的提示文字
private var mLastShowTip = ""
@@ -20,6 +23,7 @@ object TxtOverlay {
fun setShowTip(string: String) {
mToDoShowTip = string
buildOverlayBitmap()
+ mTipChangeListener?.invoke()
}
// 上一次展示的时间
@@ -41,6 +45,8 @@ object TxtOverlay {
// 记录更新时间和上一次的文字
lastTipUpdateTime = currentTimeMillis
mLastShowTip = mToDoShowTip
+ // 回收内存
+ bmp?.recycle()
// 文字转bitmap
bmp = YUVUtils.generateBitmap(
dateFormat.format(lastTipUpdateTime) + "@" + mToDoShowTip, 40, Color.WHITE
@@ -54,4 +60,8 @@ object TxtOverlay {
fun getOverlayBitmap(): Bitmap? {
return bmp;
}
+
+ fun setTipChangeListener(onChange: () -> Unit) {
+ mTipChangeListener = onChange
+ }
}
\ No newline at end of file