diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/v2x/TrafficLightDispatcher.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/v2x/TrafficLightDispatcher.kt index 1ece0a932b..e94e6bd1f9 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/v2x/TrafficLightDispatcher.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/v2x/TrafficLightDispatcher.kt @@ -194,6 +194,8 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight hide("倒计时结束隐藏", DataSourceType.TELEMATIC_UNION_V2N) lightCountDownTimer?.cancel() lightCountDownTimer = null + hasFusionLightStatus = false + isPrompted = false } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/traffic/TrafficLightPromptView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/traffic/TrafficLightPromptView.kt index 2e9696dc27..a09fa4070b 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/traffic/TrafficLightPromptView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/traffic/TrafficLightPromptView.kt @@ -1,6 +1,8 @@ package com.mogo.eagle.core.function.hmi.ui.notice.traffic import android.content.Context +import android.os.Handler +import android.os.Message import android.util.AttributeSet import android.view.LayoutInflater import android.view.View @@ -12,8 +14,10 @@ import com.mogo.eagle.core.function.api.datacenter.union.IMoGoTrafficLightListen import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.function.hmi.ui.widget.TypefaceTextView +import com.mogo.eagle.core.utilcode.mogo.thread.WorkThreadHandler import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import java.util.concurrent.TimeUnit /** * 融合红绿灯变灯提示 @@ -34,6 +38,8 @@ class TrafficLightPromptView @JvmOverloads constructor( private var tvPromptContent: TextView ?= null private var tvTrafficNum: TypefaceTextView ?= null private var tvTrafficNumDecimal: TypefaceTextView ?= null + private val LIGHT_CHECK = 6501 + private var startTime: Long = 0L init { val typedArray = context.obtainStyledAttributes(attrs, R.styleable.TrafficLightPromptView) @@ -41,6 +47,31 @@ class TrafficLightPromptView @JvmOverloads constructor( typedArray.recycle() } + // 维护一个线程定时轮询数据进行地图绘制 + private val mLightHandler: Handler = + object : Handler(WorkThreadHandler.newInstance("TrafficLightPromptView").looper){ + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + when(msg.what){ + LIGHT_CHECK->{ + if(startTime == 0L){ + sendEmptyMessageDelayed(LIGHT_CHECK, 1000L) + return + } + val endTime = System.nanoTime() + val internal = TimeUnit.NANOSECONDS.toMillis(endTime - startTime) + if(internal>1500){ + UiThreadHandler.post{ + this@TrafficLightPromptView.visibility = GONE + } + return + } + sendEmptyMessageDelayed(LIGHT_CHECK, 1000L) + } + } + } + } + override fun onAttachedToWindow() { super.onAttachedToWindow() if(user == 0){ @@ -80,7 +111,10 @@ class TrafficLightPromptView @JvmOverloads constructor( ThreadUtils.runOnUiThread { when(currentState){ TrafficLightEnum.GREEN->{ - this@TrafficLightPromptView.visibility = View.VISIBLE + if(this@TrafficLightPromptView.visibility == View.GONE){ + mLightHandler.sendEmptyMessageDelayed(LIGHT_CHECK, 1000L) + this@TrafficLightPromptView.visibility = View.VISIBLE + } if(user == 0){ tvTrafficNum?.setTextColor(ContextCompat.getColor(context,R.color.light_prompt_green)) tvTrafficNumDecimal?.setTextColor(ContextCompat.getColor(context,R.color.light_prompt_green)) @@ -90,7 +124,10 @@ class TrafficLightPromptView @JvmOverloads constructor( } } TrafficLightEnum.RED->{ - this@TrafficLightPromptView.visibility = View.VISIBLE + if(this@TrafficLightPromptView.visibility == View.GONE){ + mLightHandler.sendEmptyMessageDelayed(LIGHT_CHECK, 1000L) + this@TrafficLightPromptView.visibility = View.VISIBLE + } if(user == 0){ tvTrafficNum?.setTextColor(ContextCompat.getColor(context,R.color.light_prompt_red)) tvTrafficNumDecimal?.setTextColor(ContextCompat.getColor(context,R.color.light_prompt_red)) @@ -100,7 +137,10 @@ class TrafficLightPromptView @JvmOverloads constructor( } } TrafficLightEnum.YELLOW->{ - this@TrafficLightPromptView.visibility = View.VISIBLE + if(this@TrafficLightPromptView.visibility == View.GONE){ + mLightHandler.sendEmptyMessageDelayed(LIGHT_CHECK, 1000L) + this@TrafficLightPromptView.visibility = View.VISIBLE + } if(user == 0){ tvTrafficNum?.setTextColor(ContextCompat.getColor(context,R.color.light_prompt_yellow)) tvTrafficNumDecimal?.setTextColor(ContextCompat.getColor(context,R.color.light_prompt_yellow)) @@ -113,6 +153,7 @@ class TrafficLightPromptView @JvmOverloads constructor( this@TrafficLightPromptView.visibility = View.GONE } } + startTime = System.nanoTime() if(currentDuration>0 && currentDuration<5){ tvTrafficNum?.text = "${currentDuration.toInt()}." tvTrafficNumDecimal?.text = (currentDuration*100 - currentDuration.toInt()*100).toInt().toString()