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