|  |  | @ -5,20 +5,26 @@ import android.os.Build | 
			
		
	
		
		
			
				
					
					|  |  |  | import android.os.Process |  |  |  | import android.os.Process | 
			
		
	
		
		
			
				
					
					|  |  |  | import android.view.View |  |  |  | import android.view.View | 
			
		
	
		
		
			
				
					
					|  |  |  | import androidx.annotation.RequiresApi |  |  |  | import androidx.annotation.RequiresApi | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | import androidx.lifecycle.lifecycleScope | 
			
		
	
		
		
			
				
					
					|  |  |  | import com.common.commonlib.utils.NetworkHelper |  |  |  | import com.common.commonlib.utils.NetworkHelper | 
			
		
	
		
		
			
				
					
					|  |  |  | import com.yinuo.library.vlc.IFrameCallBack |  |  |  | import com.yinuo.library.vlc.IFrameCallBack | 
			
		
	
		
		
			
				
					
					|  |  |  | import com.yinuo.library.vlc.RtspSurfaceRender2 |  |  |  | import com.yinuo.library.vlc.RtspSurfaceRender2 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | import com.yinuo.library.vlc.TxtOverlay | 
			
		
	
		
		
			
				
					
					|  |  |  | import com.yinuo.library.vlc.utils.LogUtils |  |  |  | import com.yinuo.library.vlc.utils.LogUtils | 
			
		
	
		
		
			
				
					
					|  |  |  | import com.yinuo.safetywatcher.R |  |  |  | import com.yinuo.safetywatcher.R | 
			
		
	
		
		
			
				
					
					|  |  |  | import com.yinuo.safetywatcher.databinding.ActivityHomeBinding |  |  |  | import com.yinuo.safetywatcher.databinding.ActivityHomeBinding | 
			
		
	
		
		
			
				
					
					|  |  |  | import com.yinuo.safetywatcher.watcher.base.NoOptionsActivity |  |  |  | import com.yinuo.safetywatcher.watcher.base.NoOptionsActivity | 
			
		
	
		
		
			
				
					
					|  |  |  | import com.yinuo.safetywatcher.watcher.constant.CAMERA_URL |  |  |  | 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_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.constant.DELAY_TIME_OPEN_CAMERA | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | import com.yinuo.safetywatcher.watcher.port.GasUtils | 
			
		
	
		
		
			
				
					
					|  |  |  | import com.yinuo.safetywatcher.watcher.services.HeartbeatService |  |  |  | import com.yinuo.safetywatcher.watcher.services.HeartbeatService | 
			
		
	
		
		
			
				
					
					|  |  |  | import com.yinuo.safetywatcher.watcher.utils.BatteryHelper |  |  |  | import com.yinuo.safetywatcher.watcher.utils.BatteryHelper | 
			
		
	
		
		
			
				
					
					|  |  |  | import com.yinuo.safetywatcher.watcher.utils.SimHelper |  |  |  | import com.yinuo.safetywatcher.watcher.utils.SimHelper | 
			
		
	
		
		
			
				
					
					|  |  |  | import com.yinuo.safetywatcher.watcher.utils.WifiHelper |  |  |  | import com.yinuo.safetywatcher.watcher.utils.WifiHelper | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | import kotlinx.coroutines.Dispatchers | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | import kotlinx.coroutines.launch | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | class HomeActivity : NoOptionsActivity() { |  |  |  | class HomeActivity : NoOptionsActivity() { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -28,6 +34,9 @@ class HomeActivity : NoOptionsActivity() { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     private var mRender: RtspSurfaceRender2? = null |  |  |  |     private var mRender: RtspSurfaceRender2? = null | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     private var mHasCameraData = false | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     private var mHasSensorData = false | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     override val isHome: Boolean |  |  |  |     override val isHome: Boolean | 
			
		
	
		
		
			
				
					
					|  |  |  |         get() = true |  |  |  |         get() = true | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -44,6 +53,7 @@ class HomeActivity : NoOptionsActivity() { | 
			
		
	
		
		
			
				
					
					|  |  |  |         initTopbarHelper() |  |  |  |         initTopbarHelper() | 
			
		
	
		
		
			
				
					
					|  |  |  |         HeartbeatService.actionStart(this@HomeActivity) |  |  |  |         HeartbeatService.actionStart(this@HomeActivity) | 
			
		
	
		
		
			
				
					
					|  |  |  |         setForCamera() |  |  |  |         setForCamera() | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         setForSensor() | 
			
		
	
		
		
			
				
					
					|  |  |  |         mBinding.apply { |  |  |  |         mBinding.apply { | 
			
		
	
		
		
			
				
					
					|  |  |  |             itemSetting.setOnClickListener { |  |  |  |             itemSetting.setOnClickListener { | 
			
		
	
		
		
			
				
					
					|  |  |  |                 startActivity(Intent(this@HomeActivity, SettingActivity::class.java)) |  |  |  |                 startActivity(Intent(this@HomeActivity, SettingActivity::class.java)) | 
			
		
	
	
		
		
			
				
					|  |  | @ -70,36 +80,101 @@ class HomeActivity : NoOptionsActivity() { | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 设置摄像头 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     private fun setForCamera() { |  |  |  |     private fun setForCamera() { | 
			
		
	
		
		
			
				
					
					|  |  |  |         mRender = RtspSurfaceRender2(mBinding.surface) |  |  |  |         mRender = RtspSurfaceRender2(mBinding.surface) | 
			
		
	
		
		
			
				
					
					|  |  |  |         mRender?.setRtspUrl(CAMERA_URL) |  |  |  |         mRender?.setRtspUrl(CAMERA_URL) | 
			
		
	
		
		
			
				
					
					|  |  |  |         mRender?.setFrameCallBack(object : IFrameCallBack { |  |  |  |         mRender?.setFrameCallBack(object : IFrameCallBack { | 
			
		
	
		
		
			
				
					
					|  |  |  |             override fun onFrame() { |  |  |  |             override fun onFrame() { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 mHasCameraData = true | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 changeViewStatus() | 
			
		
	
		
		
			
				
					
					|  |  |  |                 closeLoadingDialog() |  |  |  |                 closeLoadingDialog() | 
			
		
	
		
		
			
				
					
					|  |  |  |                 watchCamera(DELAY_TIME_CHECK_CAMERA) |  |  |  |                 watchCamera(DELAY_TIME_CHECK_CAMERA) | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |         }) |  |  |  |         }) | 
			
		
	
		
		
			
				
					
					|  |  |  |         // 第一次很慢,所以10秒 |  |  |  |         // 第一次很慢,所以10秒 | 
			
		
	
		
		
			
				
					
					|  |  |  |         watchCamera(DELAY_TIME_OPEN_CAMERA) |  |  |  |         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 { |  |  |  |     private val reStartCamera: Runnable = Runnable { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         LogUtils.w("reStartCamera Runnable start") | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         mHasCameraData = false | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         changeViewStatus() | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (NetworkHelper.isNetworkConnect(this@HomeActivity)) { |  |  |  |         if (NetworkHelper.isNetworkConnect(this@HomeActivity)) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             LogUtils.w("reStartCamera Runnable start") |  |  |  |             if (!isLoadingShowing() && !mHasSensorData) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |             showLoadingDialog(R.string.connecting_camera, false) |  |  |  |                 showLoadingDialog(R.string.connecting_camera) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |             mRender?.reStart() |  |  |  |             mRender?.reStart() | 
			
		
	
		
		
			
				
					
					|  |  |  |             watchCamera(DELAY_TIME_OPEN_CAMERA) |  |  |  |             watchCamera(DELAY_TIME_OPEN_CAMERA) | 
			
		
	
		
		
			
				
					
					|  |  |  |         }else{ |  |  |  |         } else { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |             watchCamera(DELAY_TIME_CHECK_CAMERA) |  |  |  |             watchCamera(DELAY_TIME_CHECK_CAMERA) | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /** | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      * 监视摄像头 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |      */ | 
			
		
	
		
		
			
				
					
					|  |  |  |     private fun watchCamera(time: Int) { |  |  |  |     private fun watchCamera(time: Int) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         mBinding.root.removeCallbacks(reStartCamera) |  |  |  |         mBinding.root.removeCallbacks(reStartCamera) | 
			
		
	
		
		
			
				
					
					|  |  |  |         mBinding.root.postDelayed(reStartCamera, (time * 1000).toLong()) |  |  |  |         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() { |  |  |  |     private fun initTopbarHelper() { | 
			
		
	
		
		
			
				
					
					|  |  |  |         BatteryHelper.init(this@HomeActivity) |  |  |  |         BatteryHelper.init(this@HomeActivity) | 
			
		
	
		
		
			
				
					
					|  |  |  |         WifiHelper.init(this@HomeActivity) |  |  |  |         WifiHelper.init(this@HomeActivity) | 
			
		
	
	
		
		
			
				
					|  |  | 
 |