diff --git a/core/function-impl/mogo-core-function-hmi/src/main/AndroidManifest.xml b/core/function-impl/mogo-core-function-hmi/src/main/AndroidManifest.xml index ec0776154c..90ee278539 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/AndroidManifest.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/AndroidManifest.xml @@ -3,7 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" package="com.mogo.eagle.core.function.hmi"> - + diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ConnectStatusView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ConnectStatusView.kt new file mode 100644 index 0000000000..b899aade12 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ConnectStatusView.kt @@ -0,0 +1,205 @@ +package com.mogo.eagle.core.function.hmi.ui.widget + +import android.content.Context +import android.graphics.Color +import android.util.AttributeSet +import android.view.LayoutInflater +import android.widget.RelativeLayout +import com.mogo.commons.utils.MogoAnalyticUtils +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.utilcode.util.NetworkUtils +import com.mogo.eagle.core.utilcode.util.NetworkUtils.OnNetworkStatusChangedListener +import com.mogo.eagle.core.utilcode.util.SpanUtils +import kotlinx.android.synthetic.main.view_connect_status.view.tvADASStatus +import kotlinx.android.synthetic.main.view_connect_status.view.tvNetStatus + +/** + * 当前APP的各种连接状态展示 + * 网络连接、ADAS、外网 + */ +class ConnectStatusView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : RelativeLayout(context, attrs, defStyleAttr), IMoGoAutopilotStatusListener { + + companion object { + private const val TAG = "ConnectStatusView" + } + + private var onNetworkStatusChangedListener: OnNetworkStatusChangedListener + + // 断开网络的次数 + private var disconnectNetCount = 0 + private var disconnectNetTime = 0L + + // 断开ADAS的次数 + private var disconnectADASCount = 0 + private var disconnectADASTime = 0L + + init { + LayoutInflater.from(context).inflate(R.layout.view_connect_status, this, true) + val netSpan = SpanUtils.with(tvNetStatus) + netSpan.append("网络连接:") + if (NetworkUtils.isConnected()) { + netSpan.append("已连接") + .setForegroundColor(Color.GREEN) + } else { + disconnectNetCount++ + netSpan.append("已断开") + .setForegroundColor(Color.RED) + netSpan.append("| 断链次数:") + .append("$disconnectNetCount") + .setForegroundColor(Color.RED) + } + netSpan.create() + + onNetworkStatusChangedListener = object : OnNetworkStatusChangedListener { + override fun onDisconnected() { + disconnectNetCount++ + disconnectNetTime = System.currentTimeMillis() + val netSpan = SpanUtils.with(tvNetStatus) + netSpan.append("网络连接:") + .append("已断开") + .setForegroundColor(Color.RED) + netSpan.append("| 断链次数:") + .append("$disconnectNetCount") + .setForegroundColor(Color.RED) + netSpan.create() + //netSpan.append("断开时常").append("$disconnectNetCount").setForegroundColor(Color.RED) + + // 统计代码 + val properties: MutableMap = HashMap() + properties["连接状态"] = "已断开" + properties["重连次数"] = "$disconnectNetCount" + MogoAnalyticUtils.track("SYS_NET_STATUS", properties) + + } + + override fun onConnected(networkType: NetworkUtils.NetworkType?) { + // 统计代码 + val properties: MutableMap = HashMap() + properties["连接状态"] = "已连接" + properties["重连次数"] = "$disconnectNetCount" + + val netSpan = SpanUtils.with(tvNetStatus) + netSpan.append("网络连接:") + .append("已连接") + .setForegroundColor(Color.GREEN) + netSpan.append("| 断链次数:") + .append("$disconnectNetCount") + .setForegroundColor(Color.RED) + if (disconnectNetTime != 0L) { + netSpan.append("| 断开时常:") + .append("${(System.currentTimeMillis() - disconnectNetTime) / 1000} s") + .setForegroundColor(Color.RED) + properties["断开时常"] = + "${(System.currentTimeMillis() - disconnectNetTime) / 1000} s" + } + netSpan.create() + + MogoAnalyticUtils.track("SYS_NET_STATUS", properties) + } + } + } + + override fun onAutopilotIpcConnectStatusChanged(status: Int, reason: String?) { + super.onAutopilotIpcConnectStatusChanged(status, reason) + tvADASStatus.post { + when (status) { + IPC_CONNECTION_STATUS.CONNECTED -> { + // 统计代码 + val properties: MutableMap = HashMap() + properties["连接状态"] = "已连接" + properties["重连次数"] = "$disconnectADASCount" + + val adasSpan = SpanUtils.with(tvADASStatus) + adasSpan.append("ADAS连接:") + .append("已连接") + .setForegroundColor(Color.GREEN) + adasSpan.append("| 重连次数:") + .append("$disconnectADASCount") + .setForegroundColor(Color.RED) + + if (disconnectADASTime != 0L) { + adasSpan.append("| 断开时常:") + .append("${(System.currentTimeMillis() - disconnectADASTime) / 1000} s") + .setForegroundColor(Color.RED) + properties["断开时常"] = + "${(System.currentTimeMillis() - disconnectADASTime) / 1000} s" + } + adasSpan.create() + + MogoAnalyticUtils.track("IPC_CONNECTION_STATUS", properties) + } + + IPC_CONNECTION_STATUS.DISCONNECTED -> { + disconnectADASCount++ + disconnectADASTime = System.currentTimeMillis() + val adasSpan = SpanUtils.with(tvADASStatus) + + // 统计代码 + val properties: MutableMap = HashMap() + properties["连接状态"] = "已连接" + properties["重连次数"] = "$disconnectADASCount" + + MogoAnalyticUtils.track("IPC_CONNECTION_STATUS", properties) + + adasSpan.append("ADAS连接:") + .append("已断开") + .setForegroundColor(Color.RED) + + adasSpan.append("| 重连次数:") + .append("$disconnectADASCount") + .setForegroundColor(Color.RED) + adasSpan.create() + } + } + } + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + NetworkUtils.registerNetworkStatusChangedListener(onNetworkStatusChangedListener) + CallerAutoPilotStatusListenerManager.addListener(TAG, this) + } + + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + NetworkUtils.unregisterNetworkStatusChangedListener(onNetworkStatusChangedListener) + CallerAutoPilotStatusListenerManager.removeListener(TAG) + } + + interface IPC_CONNECTION_STATUS { + companion object { + /** + * 已连接 + */ + const val CONNECTED = 0x00 + + /** + * 未连接 + */ + const val DISCONNECTED = 0x01 + + /** + * 正在连接 + */ + const val CONNECTING = 0x02 + + /** + * 正在搜索IP + */ + const val SEARCH_ADDRESS = 0x03 + + /** + * 找不到可用IP 传入的IP不可用或固定IP列表中所有IP不可用 + */ + const val NOT_FOUND_ADDRESS = 0x04 + } + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/module_main_activity_main.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/module_main_activity_main.xml index 0b1e1b60cd..e5ef718f8c 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/module_main_activity_main.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/module_main_activity_main.xml @@ -37,4 +37,11 @@ android:layout_height="680dp" android:layout_gravity="bottom" /> + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_connect_status.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_connect_status.xml new file mode 100644 index 0000000000..767fe29dce --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_connect_status.xml @@ -0,0 +1,26 @@ + + + + + + + + + \ No newline at end of file