diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ColdStartView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ColdStartView.kt
index 4ccbe398d2..1f28ff91d8 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ColdStartView.kt
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ColdStartView.kt
@@ -2,7 +2,11 @@ package com.mogo.eagle.core.function.hmi.ui.widget
import android.animation.ObjectAnimator
import android.animation.ValueAnimator
+import android.content.BroadcastReceiver
import android.content.Context
+import android.content.Intent
+import android.content.IntentFilter
+import android.net.ConnectivityManager
import android.os.CountDownTimer
import android.text.TextUtils
import android.util.AttributeSet
@@ -32,20 +36,21 @@ import kotlinx.android.synthetic.main.view_cold_start.view.ivColdStartStatus
import kotlinx.android.synthetic.main.view_cold_start.view.ivIpcConnectStatus
import kotlinx.android.synthetic.main.view_cold_start.view.ivNodeListMask
import kotlinx.android.synthetic.main.view_cold_start.view.ivSsmConnectStatus
+import kotlinx.android.synthetic.main.view_cold_start.view.ivWifiConnectStatus
import kotlinx.android.synthetic.main.view_cold_start.view.rvNodeList
import kotlinx.android.synthetic.main.view_cold_start.view.tvColdStartContent
import kotlinx.android.synthetic.main.view_cold_start.view.tvColdStartNow
import kotlinx.android.synthetic.main.view_cold_start.view.tvIpcConnectContent
import kotlinx.android.synthetic.main.view_cold_start.view.tvSsmConnectContent
import kotlinx.android.synthetic.main.view_cold_start.view.tvSystemStartupTitle
-import kotlinx.android.synthetic.main.view_cold_start.view.viewColdStartDivider
-import kotlinx.android.synthetic.main.view_cold_start.view.viewSsmConnectDivider
+import kotlinx.android.synthetic.main.view_cold_start.view.tvWifiConnectContent
import system_master.SsmInfo
import system_master.SystemStatusInfo
import java.util.Locale
import java.util.regex.Matcher
import java.util.regex.Pattern
+
/**
* 冷启动呈现二期
* 前置展示冷启动过程和结果
@@ -63,12 +68,15 @@ class ColdStartView @JvmOverloads constructor(
const val COLD_START_WAITING_TIME = 600000L //冷启动超时等待时间
}
+ private var wifiConnectStatus = false //WIFI连接状态,默认是未连接
private var ipcConnectStatus = false //连接域控状态,默认是未连接
private var ssmConnectStatus = false //SSM连接状态,默认是未连接
private var coldStartStatus = false //冷启动状态,默认是未冷启动成功
private var currentColdStartSuccess = false //冷启动成功状态,也是成功后动画完成状态
+ private var wifiRotationAnim: ObjectAnimator?= null //WIFI连接状态动画
+
private var ipcRotationAnim: ObjectAnimator?= null //域控连接状态动画
private var ssmRotationAnim: ObjectAnimator?= null //SSM连接状态动画
@@ -117,6 +125,11 @@ class ColdStartView @JvmOverloads constructor(
override fun onAttachedToWindow() {
super.onAttachedToWindow()
+ // 注册广播接收器
+ val intentFilter = IntentFilter()
+ intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION)
+ context.applicationContext.registerReceiver(networkStateReceiver, intentFilter)
+ showWifiConnecting()
CallerAutoPilotStatusListenerManager.addListener(TAG, this)
CallerColdStartStateListenerManager.addListener(TAG,this)
}
@@ -125,24 +138,30 @@ class ColdStartView @JvmOverloads constructor(
super.onDetachedFromWindow()
CallerAutoPilotStatusListenerManager.removeListener(TAG)
CallerColdStartStateListenerManager.removeListener(TAG)
+ wifiRotationAnim?.cancel()
ipcRotationAnim?.cancel()
ssmRotationAnim?.cancel()
connectSSMTimer?.cancel()
coldStartRotationAnim?.cancel()
connectColdStartTimer?.cancel()
+ // 取消注册广播接收器
+ context.applicationContext.unregisterReceiver(networkStateReceiver)
}
override fun onAutopilotIpcConnectStatusChanged(
status: AdasConstants.IpcConnectionStatus,
reason: String?
){
+ ipcConnectStatus = status == AdasConstants.IpcConnectionStatus.CONNECTED
+ if(!wifiConnectStatus){
+ return
+ }
ThreadUtils.runOnUiThread {
- ipcConnectStatus = if(status == AdasConstants.IpcConnectionStatus.CONNECTED){
+ if(status == AdasConstants.IpcConnectionStatus.CONNECTED){
//域控连接成功
- if(!ipcConnectStatus){
+ if(ipcConnectStatus){
showIPCConnectSuccessView()
}
- true
}else{
//域控连接失败
when(status){
@@ -206,8 +225,6 @@ class ColdStartView @JvmOverloads constructor(
-
-
/**
* 状态查询应答
* @param status 数据
@@ -331,6 +348,28 @@ class ColdStartView @JvmOverloads constructor(
}
}
+ private val networkStateReceiver: BroadcastReceiver = object: BroadcastReceiver(){
+ override fun onReceive(context: Context?, intent: Intent?) {
+ if (intent!!.action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
+ val connectivityManager =
+ context!!.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+ val networkInfo = connectivityManager.activeNetworkInfo
+ ThreadUtils.runOnUiThread {
+ if (networkInfo != null && networkInfo.isConnected) {
+ // 网络连接可用
+ connectWifiSuccess()
+ } else {
+ // 网络连接不可用
+ showWifiConnecting()
+ }
+ }
+
+ }
+ }
+
+ }
+
+
/**
* 冷启动状态
*/
@@ -392,12 +431,12 @@ class ColdStartView @JvmOverloads constructor(
ipcRotationAnim?.cancel()
ivIpcConnectStatus.rotation = 0f
tvSystemStartupTitle.text = resources.getString(R.string.cold_start_title_ssm_wait)
+ tvSystemStartupTitle.setTextColor(ContextCompat.getColor(context, R.color.white))
ivIpcConnectStatus.setImageDrawable(ResourceUtils.getDrawable(R.drawable.icon_cold_start_success))
tvIpcConnectContent.text = resources.getString(R.string.ipc_connect_success)
//开启连接SSM倒计时
connectSSMProcess()
//域控连接成功后开始展示SSM连接状态
- viewSsmConnectDivider.visibility = View.VISIBLE
ivSsmConnectStatus.setImageDrawable(ResourceUtils.getDrawable(R.drawable.icon_cold_start_process))
//旋转动画
if(ssmRotationAnim == null){
@@ -411,13 +450,7 @@ class ColdStartView @JvmOverloads constructor(
//设置SSM连接文案为连接中
tvSsmConnectContent.text = resources.getString(R.string.ssm_connect_loading)
tvSsmConnectContent.setTextColor(ContextCompat.getColor(context, android.R.color.white))
- viewSsmConnectDivider.visibility = View.VISIBLE
- ivSsmConnectStatus.visibility = View.VISIBLE
- tvSsmConnectContent.visibility = View.VISIBLE
//隐藏冷启动相关视图
- viewColdStartDivider.visibility = View.GONE
- ivColdStartStatus.visibility = View.GONE
- tvColdStartContent.visibility = View.GONE
rvNodeList.visibility = View.GONE
ivNodeListMask.visibility = View.GONE
//域控连接成功埋点统计
@@ -434,6 +467,7 @@ class ColdStartView @JvmOverloads constructor(
*/
private fun showIPCConnectFailView(failReason: String?){
tvSystemStartupTitle.text = resources.getString(R.string.cold_start_title_tel_exception)
+ tvSystemStartupTitle.setTextColor(ContextCompat.getColor(context, R.color.cold_start_fail))
if(tvIpcConnectContent.text.isNotEmpty() && tvIpcConnectContent.text.equals(failReason)){
return
}
@@ -443,14 +477,7 @@ class ColdStartView @JvmOverloads constructor(
failReason?.let {
tvIpcConnectContent.text = it
}
- //隐藏SSM相关视图
- viewSsmConnectDivider.visibility = View.GONE
- ivSsmConnectStatus.visibility = View.GONE
- tvSsmConnectContent.visibility = View.GONE
//隐藏冷启动相关视图
- viewColdStartDivider.visibility = View.GONE
- ivColdStartStatus.visibility = View.GONE
- tvColdStartContent.visibility = View.GONE
rvNodeList.visibility = View.GONE
ivNodeListMask.visibility = View.GONE
//域控连接失败埋点统计
@@ -462,8 +489,75 @@ class ColdStartView @JvmOverloads constructor(
newColdStart = false
}
+ /**
+ * 等待网络连接
+ */
+ private fun showWifiConnecting(){
+ wifiConnectStatus = false
+ tvSystemStartupTitle.text = resources.getString(R.string.cold_start_title_wifi_wait)
+ tvSystemStartupTitle.setTextColor(ContextCompat.getColor(context, R.color.white))
+ ivWifiConnectStatus.setImageDrawable(ResourceUtils.getDrawable(R.drawable.icon_cold_start_process))
+ tvWifiConnectContent.text = resources.getString(R.string.wifi_connect_loading)
+ if(wifiRotationAnim == null){
+ wifiRotationAnim = ObjectAnimator.ofFloat(ivWifiConnectStatus, "rotation", 0f, 360f)
+ }
+ wifiRotationAnim?.repeatCount = ValueAnimator.INFINITE
+ wifiRotationAnim?.repeatMode = ValueAnimator.RESTART
+ wifiRotationAnim?.duration = 1500
+ wifiRotationAnim?.interpolator = LinearInterpolator()
+ wifiRotationAnim?.start()
+ //动画和计时器重置
+ ipcRotationAnim?.cancel()
+ ivIpcConnectStatus.rotation = 0f
+ ssmRotationAnim?.cancel()
+ ivSsmConnectStatus.rotation = 0f
+ connectSSMTimer?.cancel()
+ coldStartRotationAnim?.cancel()
+ ivColdStartStatus.rotation = 0f
+ connectColdStartTimer?.cancel()
+ //域控连接状态展示
+ ivIpcConnectStatus.setImageDrawable(ResourceUtils.getDrawable(R.drawable.icon_cold_start_wait))
+ tvIpcConnectContent.text = resources.getString(R.string.ipc_connect_wait)
+ //SSM连接状态展示
+ ivSsmConnectStatus.setImageDrawable(ResourceUtils.getDrawable(R.drawable.icon_cold_start_wait))
+ tvSsmConnectContent.text = resources.getString(R.string.ssm_connect_wait)
+ //冷启动节点状态展示
+ ivColdStartStatus.setImageDrawable(ResourceUtils.getDrawable(R.drawable.icon_cold_start_wait))
+ tvColdStartContent.text = resources.getString(R.string.cold_start_wait)
+ //隐藏Topic列表
+ rvNodeList.visibility = View.GONE
+ ivNodeListMask.visibility = View.GONE
+ ipcConnectStatus = false
+ }
+
+ private fun connectWifiSuccess(){
+ wifiConnectStatus = true
+ wifiRotationAnim?.cancel()
+ ivWifiConnectStatus.rotation = 0f
+ ivWifiConnectStatus.setImageDrawable(ResourceUtils.getDrawable(R.drawable.icon_cold_start_success))
+ tvWifiConnectContent.text = resources.getString(R.string.wifi_connect_success)
+ //开始连接域控
+ tvIpcConnectContent.text = resources.getString(R.string.ipc_connect_loading)
+ ivIpcConnectStatus.setImageDrawable(ResourceUtils.getDrawable(R.drawable.icon_cold_start_process))
+ if(ipcRotationAnim == null){
+ ipcRotationAnim = ObjectAnimator.ofFloat(ivIpcConnectStatus, "rotation", 0f, 360f)
+ }
+ ipcRotationAnim?.repeatCount = ValueAnimator.INFINITE
+ ipcRotationAnim?.repeatMode = ValueAnimator.RESTART
+ ipcRotationAnim?.duration = 1500
+ ipcRotationAnim?.interpolator = LinearInterpolator()
+ ipcRotationAnim?.start()
+ //隐藏冷启动相关视图
+ rvNodeList.visibility = View.GONE
+ ivNodeListMask.visibility = View.GONE
+ if(ipcConnectStatus){
+ showIPCConnectSuccessView()
+ }
+ }
+
private fun showIPCConnecting(){
tvSystemStartupTitle.text = resources.getString(R.string.cold_start_title_tel_wait)
+ tvSystemStartupTitle.setTextColor(ContextCompat.getColor(context, R.color.white))
ivIpcConnectStatus.setImageDrawable(ResourceUtils.getDrawable(R.drawable.icon_cold_start_process))
tvIpcConnectContent.text = "正在重连域控..."
if(ipcRotationAnim == null){
@@ -474,14 +568,7 @@ class ColdStartView @JvmOverloads constructor(
ipcRotationAnim?.duration = 1500
ipcRotationAnim?.interpolator = LinearInterpolator()
ipcRotationAnim?.start()
- //隐藏SSM相关视图
- viewSsmConnectDivider.visibility = View.GONE
- ivSsmConnectStatus.visibility = View.GONE
- tvSsmConnectContent.visibility = View.GONE
//隐藏冷启动相关视图
- viewColdStartDivider.visibility = View.GONE
- ivColdStartStatus.visibility = View.GONE
- tvColdStartContent.visibility = View.GONE
rvNodeList.visibility = View.GONE
ivNodeListMask.visibility = View.GONE
}
@@ -508,6 +595,7 @@ class ColdStartView @JvmOverloads constructor(
*/
private fun showSSMConnectSuccessView(){
tvSystemStartupTitle.text = resources.getString(R.string.cold_start_title_sys_wait)
+ tvSystemStartupTitle.setTextColor(ContextCompat.getColor(context, R.color.white))
//取消旋转动画
ssmRotationAnim?.cancel()
//取消连接SSM超时等待倒计时
@@ -518,9 +606,6 @@ class ColdStartView @JvmOverloads constructor(
tvSsmConnectContent.text = resources.getString(R.string.ssm_connect_success)
tvSsmConnectContent.setTextColor(ContextCompat.getColor(context, R.color.white))
//展示冷启动连接过程视图
- viewColdStartDivider.visibility = View.VISIBLE
- ivColdStartStatus.visibility = View.VISIBLE
- tvColdStartContent.visibility = View.VISIBLE
rvNodeList.visibility = View.VISIBLE
ivNodeListMask.visibility = View.VISIBLE
tvColdStartContent.text = "启动中…"
@@ -541,6 +626,7 @@ class ColdStartView @JvmOverloads constructor(
*/
private fun showSSMConnectFailView(){
tvSystemStartupTitle.text = resources.getString(R.string.cold_start_title_ssm_exception)
+ tvSystemStartupTitle.setTextColor(ContextCompat.getColor(context, R.color.cold_start_fail))
//取消旋转动画
ssmRotationAnim?.cancel()
ivSsmConnectStatus.rotation = 0f
@@ -606,6 +692,7 @@ class ColdStartView @JvmOverloads constructor(
*/
private fun showColdStartFailView(){
tvSystemStartupTitle.text = resources.getString(R.string.cold_start_title_sys_exception)
+ tvSystemStartupTitle.setTextColor(ContextCompat.getColor(context, R.color.cold_start_fail))
coldStartRotationAnim?.cancel()
ivColdStartStatus.rotation = 0f
ivColdStartStatus.setImageDrawable(ResourceUtils.getDrawable(R.drawable.icon_cold_start_fail))
@@ -619,6 +706,7 @@ class ColdStartView @JvmOverloads constructor(
private fun showColdStartSuccessView(){
if(coldStartStatus){
tvSystemStartupTitle.text = resources.getString(R.string.cold_start_title_sys_success)
+ tvSystemStartupTitle.setTextColor(ContextCompat.getColor(context, R.color.white))
coldStartRotationAnim?.cancel()
ivColdStartStatus.rotation = 0f
ivColdStartStatus.setImageDrawable(ResourceUtils.getDrawable(R.drawable.icon_cold_start_success))
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_cold_start_fail.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_cold_start_fail.png
index e469e824d2..f4191de57b 100644
Binary files a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_cold_start_fail.png and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_cold_start_fail.png differ
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_cold_start_wait.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_cold_start_wait.png
new file mode 100644
index 0000000000..e26a905ea3
Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_cold_start_wait.png differ
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_cold_start.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_cold_start.xml
index cdfd7a10f0..3eb4d5705b 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_cold_start.xml
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_cold_start.xml
@@ -20,15 +20,49 @@
/>
+
+
+
+
+
+
#131415
- #FFCD3D
+ #FF4E41
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml
index 7ed0580a39..8e9714dd69 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml
@@ -213,19 +213,27 @@
红绿灯信号来源
已发起上报
+ Wifi连接状态图标
域控连接状态图标
SSM连接状态图标
冷启动状态图标
+ 等待连接车辆WiFi…
+ 已连接车辆Wi-Fi
+ 待连接域控
+ 连接域控…
已连接域控
系统启动中…
系统启动成功
系统启动失败
+ 待连接SSM
正在等待SSM信息
与SSM通信正常
超时未收到SSM信息,建议重启车辆并上报问题
+ 待启动
系统启动成功,即将进入主页
系统启动异常,建议上报问题,可尝试重启车辆
+ 等待车辆上电
等待连接域控
连接域控异常,持续重试中
等待SSM信息