[8.1.0][fmd] 修复bug,状态栏增加SSH连接状态

This commit is contained in:
xinfengkun
2025-06-20 14:40:24 +08:00
parent 370bb87367
commit 58debcb731
9 changed files with 175 additions and 200 deletions

View File

@@ -44,7 +44,7 @@ public abstract class BaseAdapter<D, VH extends BaseViewHolder> extends Recycler
public void setData(List<D> mDatas) {
this.mDatas = mDatas;
if (!mDatas.isEmpty())
if (mDatas != null && !mDatas.isEmpty())
notifyDataSetChanged();
}

View File

@@ -26,7 +26,6 @@ class NetworkUtilsExtend {
fun onLinkChanged(network: Network?, linkProperties: LinkProperties?)
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
class NetworkCallbackImpl : NetworkCallback() {
private val TAG = "NetworkCallbackImpl"

View File

@@ -21,12 +21,12 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotCarConfigListe
import com.mogo.eagle.core.function.call.autopilot.CallerFaultManagementStateListenerManager
import com.mogo.eagle.core.utilcode.util.GsonUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.zhidao.support.adas.high.AdasManager
import com.zhjt.mogo.adas.data.AdasConstants
import com.zhjt.mogo_core_function_devatools.rviz.R
import com.zhjt.mogo_core_function_devatools.rviz.common.config.SSHAccountConfig
import com.zhjt.mogo_core_function_devatools.rviz.common.coroutines.FlowBus
import com.zhjt.mogo_core_function_devatools.rviz.constant.AppConfigInfo
import com.zhjt.mogo_core_function_devatools.rviz.constant.DiagnoseType
import com.zhjt.mogo_core_function_devatools.rviz.constant.EventKey
import com.zhjt.mogo_core_function_devatools.rviz.constant.FaultLevel
import com.zhjt.mogo_core_function_devatools.rviz.constant.FaultModuleId
@@ -68,6 +68,7 @@ import java.util.Locale
import java.util.Timer
import java.util.TimerTask
import java.util.concurrent.ConcurrentHashMap
import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicReference
/**
@@ -93,6 +94,7 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener,
private val dockerInfoMap = mutableMapOf<SSHHostBean, ArrayList<DockerInfo>>()
private var cloudMapVersion = "未知"//云端MAP版本
private var hdMapVersion = HdMapVersion()//高精度版本
private val isReceiveFMData = AtomicBoolean(false)//是否接收到了FM数据
private val queryRosHostArgumentMap =
ConcurrentHashMap<SSHHostBean, Boolean>()//当前参与查询主机参数的主机
@@ -132,9 +134,12 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener,
override fun onCreate() {
super.onCreate()
initFMData()
CallerAutoPilotStatusListenerManager.addListener(TAG, adasConnectionStatuslistener)
CallerAutoPilotStatusListenerManager.addListener(TAG, adasConnectionStatusListener)
CallerAutopilotCarConfigListenerManager.addListener(TAG, this)
CallerFaultManagementStateListenerManager.addListener(TAG, this)
AdasManager.getInstance().carConfig?.let {
onAutopilotCarConfig(it)
}
Log.i(TAG, "故障管理诊断服务已启动")
}
@@ -186,16 +191,8 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener,
FmEntity("功能状态机&其他(FSM&OTH)")
}
/**
* 启动诊断
*/
fun startDiagnose() {
connectSSH()
}
private val adasConnectionStatuslistener = object : IMoGoAutopilotStatusListener {
@OptIn(DelicateCoroutinesApi::class)
private val adasConnectionStatusListener = object : IMoGoAutopilotStatusListener {
override fun onAutopilotIpcConnectStatusChanged(
status: AdasConstants.IpcConnectionStatus,
@@ -204,28 +201,19 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener,
super.onAutopilotIpcConnectStatusChanged(status, reason)
val adasConnectStatus = AdasConnectionStatus(status, reason)
when (status) {
AdasConstants.IpcConnectionStatus.DISCONNECTED -> {
}
AdasConstants.IpcConnectionStatus.CONNECTED -> {
if (AdasManager.getInstance().carConfig == null) {
AdasManager.getInstance().sendCarConfigReq()
}
GlobalScope.launch(Dispatchers.IO) {
delay(6000)
updateFaultManagementStop(FMInfoMsg(null, null, null))
}
}
AdasConstants.IpcConnectionStatus.CONNECTING -> {
else -> {
isReceiveFMData.set(false)
}
AdasConstants.IpcConnectionStatus.CONNECT_EXCEPTION -> {
}
AdasConstants.IpcConnectionStatus.SEARCH_ADDRESS -> {}
AdasConstants.IpcConnectionStatus.NOT_FOUND_ADDRESS -> {}
else -> {}
}
FlowBus.with<AdasConnectionStatus>(EventKey.UPDATE_ADAS_CONNECT_STATE)
.post(scopeSubscriber, adasConnectStatus)
@@ -235,7 +223,7 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener,
//连接SSH
private fun connectSSH() {
fun connectSSH() {
openConnection(
SSH.createHost(
SSHAccountConfig.getUserName(),
@@ -258,35 +246,15 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener,
private fun updateFaultManagementStop(fmInfo: FMInfoMsg) {
//TODO
// if (isReceiveFMData.get()) {
// return
// }
// isReceiveFMData.set(true)
val msg: String
val type: DiagnoseType
if (fmInfo.fmInfoList != null) {
msg = "FM数据获取成功……"
type = DiagnoseType.SUCCEED
} else {
if (isReceiveFMData.get()) {
return
}
isReceiveFMData.set(true)
if (fmInfo.fmInfoList == null) {
//证明未收到FM数据存在两种情况一个是没有发数据一个是版本不支持
FlowBus.with<Boolean>(EventKey.SEND_IS_SUPPORT_FM)
.post(scopeSubscriber, AppConfigInfo.isSupportFM)
if (AppConfigInfo.isSupportFM) {
msg = "FM数据获取成功……"
type = DiagnoseType.SUCCEED
} else {
msg = "获取FM数据失败此MAP不支持FM相关功能"
type = DiagnoseType.FAILED
}
}
//TODO
// updateDiagnoseUIStateInUIThread(
// DiagnoseSource.ADAS,
// msg,
// type
// )
// executeProcessConnectSSHStart()
}
@@ -491,44 +459,37 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener,
rosHostArgumentPosition: Int,
isInserted: Boolean
) {
GlobalScope.launch(Dispatchers.Main) {
//TODO
// updateDiagnoseUIState(
// DiagnoseSource.SSH,
// "正在连接${Utils.getIPLastSegment(host.hostname)}……"
// )
synchronized(rosHostArguments) {
val p = getRosHostArgument(host)
val argument = p.second
val isInsert = p.first < 0
if (isInsert) {//不存在
rosHostArguments.add(argument)
//根据IP排序主动连接的主机一般是rosMaster置顶
rosHostArguments.sortWith(Comparator<RosHostArgument> { rosHostArgument1, rosHostArgument2 ->
if (defaultSSH != null) {
if (rosHostArgument1.host == defaultSSH!!.host) {
return@Comparator -1
}
if (rosHostArgument2.host == defaultSSH!!.host) {
return@Comparator 1
}
synchronized(rosHostArguments) {
val p = getRosHostArgument(host)
val argument = p.second
val isInsert = p.first < 0
if (isInsert) {//不存在
rosHostArguments.add(argument)
//根据IP排序主动连接的主机一般是rosMaster置顶
rosHostArguments.sortWith(Comparator<RosHostArgument> { rosHostArgument1, rosHostArgument2 ->
if (defaultSSH != null) {
if (rosHostArgument1.host == defaultSSH!!.host) {
return@Comparator -1
}
rosHostArgument1.host.hostname
.compareTo(rosHostArgument2.host.hostname)
})
} else {
//已存在
argument.resetConnectFailureCode()
}
if (TextUtils.equals(SSHAccountConfig.getRosMasterIp(), argument.host.hostname)) {
argument.isRosMaster = true;
}
val index = rosHostArguments.indexOf(argument)
if (rosHostArgument2.host == defaultSSH!!.host) {
return@Comparator 1
}
}
rosHostArgument1.host.hostname
.compareTo(rosHostArgument2.host.hostname)
})
} else {
//已存在
argument.resetConnectFailureCode()
}
if (TextUtils.equals(SSHAccountConfig.getRosMasterIp(), argument.host.hostname)) {
argument.isRosMaster = true;
}
val index = rosHostArguments.indexOf(argument)
GlobalScope.launch(Dispatchers.Main) {
CallerSshConnectionListenerManager.invokeConnecting(
argument.host, index, isInsert
) //正在连接 在此的 -1和true不使用
)
}
}
Log.i(TAG, "${host.toString()} 连接中")
@@ -540,12 +501,6 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener,
sshMap.put(ssh.host, ssh)
}
GlobalScope.launch(Dispatchers.Main) {
//TODO
// updateDiagnoseUIState(
// DiagnoseSource.SSH,
// "连接${Utils.getIPLastSegment(ssh.host.hostname)}成功……",
// DiagnoseType.SUCCEED
// )
CallerSshConnectionListenerManager.invokeConnected(ssh)
}
getRosMasterConfig(ssh)
@@ -587,15 +542,8 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener,
defaultSSH = null
}
GlobalScope.launch(Dispatchers.Main) {
//TODO
// updateDiagnoseUIState(
// DiagnoseSource.SSH,
// "连接${Utils.getIPLastSegment(host.hostname)}失败,原因:$msg……",
// DiagnoseType.FAILED
// )
CallerSshConnectionListenerManager.invokeConnectFailure(host, msg)
}
updateDiagnoseFinish(host)
Log.i(TAG, "${host.toString()} 连接失败=${msg}")
}
@@ -607,11 +555,6 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener,
) {
if (list.isNotEmpty()) {
dockerInfoMap[host] = list
//TODO
// updateDiagnoseUIStateInUIThread(
// DiagnoseSource.SSH,
// "${Utils.getIPLastSegment(host.hostname)} Docker信息获取成功……"
// )
val mapDocker: DockerInfo? =
list.find { it.names == "autocar_default_1" || it.names == "autocar-default-1" }
if (mapDocker != null) {
@@ -629,7 +572,6 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener,
}
}
}
updateDiagnoseFinish(host)
} else {
if (dockerInfoMap.containsKey(host))
dockerInfoMap.remove(host)
@@ -765,7 +707,6 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener,
}
} else if (MogoCommand.QUERY_VEHICLE_CONFIG == cmd) {
vehicleConfig = VehicleConfig(result)
//TODO
// updateDiagnoseUIStateInUIThread(
// DiagnoseSource.SSH,
// "车辆信息,车牌:${vehicleConfig!!.plate} 品牌:${vehicleConfig!!.brand} 类型:${vehicleConfig!!.model}",
@@ -1086,54 +1027,7 @@ class FaultManagementDiagnosisService : Service(), OnSshConnectionListener,
ssh.execCommand(MogoCommand.QUERY_VEHICLE_CONFIG, false) //获取车牌等信息
ssh.execCommand(MogoCommand.QUERY_ROS_SLAVE, false) //获取从ros主机
}
//TODO
// updateDiagnoseUIStateInUIThread(
// DiagnoseSource.SSH,
// "正在获取${Utils.getIPLastSegment(ssh.host.hostname)} Docker信息……"
// )
ssh.execCommand(MogoCommand.QUERY_DOCKER_PS_A, false)
//等待获取Docker信息是否成功
GlobalScope.launch(Dispatchers.IO) {
delay(6000)
if (!dockerInfoMap.containsKey(ssh.host)) {
//TODO
// withContext(Dispatchers.Main) {
// updateDiagnoseUIState(
// DiagnoseSource.SSH,
// "${Utils.getIPLastSegment(ssh.host.hostname)} Docker信息获取失败……",
// DiagnoseType.FAILED
// )
// }
updateDiagnoseFinish(ssh.host)
}
}
}
//检查诊断是否完成,并更新状态
private fun updateDiagnoseFinish(host: SSHHostBean) {
//TODO
// if (!isDiagnoseFinish.get()) {
// synchronized(diagnoseFinishState) {
// if (diagnoseFinishState.containsKey(host)) {
// diagnoseFinishState[host] = true
// }
// }
// val count = diagnoseFinishState.count { it.value }
// if (count == diagnoseFinishState.size) {
// isDiagnoseFinish.set(true)
// val msg =
// if (CallerAutopilotActionsListenerManager.isAutopilotAbility()) "可自动驾驶,请打开「鹰眼」进入运营状态" else "不可自动驾驶,详细信息请关闭《诊断弹窗》查看"
// updateDiagnoseUIStateInUIThread(DiagnoseSource.MC, "诊断完成,当前环境${msg}")
// val vib = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
// val vibratorManager =
// getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager
// vibratorManager.defaultVibrator
// } else {
// getSystemService(VIBRATOR_SERVICE) as Vibrator
// }
// vib.vibrate(VibrationEffect.createOneShot(500, 255))
// }
// }
}
private fun queryRosHostArgument(ssh: SSH) {

View File

@@ -49,6 +49,7 @@ class FmdAct : BaseActivity() {
arrayOf("车况概览", "系统资源", "故障码")
private lateinit var overviewFrag: OverviewFrag
private lateinit var systemResourceFrag: SystemResourceFrag
private lateinit var faultCodeFrag: FaultCodeFrag
private val mIconUnselectIds = intArrayOf(
R.drawable.rviz_fmd_tab_car_status_unselect,
@@ -86,9 +87,10 @@ class FmdAct : BaseActivity() {
Utils.getApp().startService(Intent(Utils.getApp(), FmCodeUpdateService::class.java))
registerForContextMenu(clConnectStatusBarView.vehicleNumberView)
overviewFrag = OverviewFrag()
systemResourceFrag = SystemResourceFrag()
faultCodeFrag = FaultCodeFrag()
mFragments.add(overviewFrag)
mFragments.add(SystemResourceFrag())
mFragments.add(systemResourceFrag)
mFragments.add(faultCodeFrag)
for (i in mTitles.indices) {
@@ -201,8 +203,9 @@ class FmdAct : BaseActivity() {
fmdBound =
(service as FaultManagementDiagnosisService.FaultManagementDiagnosisBinder).service
faultCodeFrag.setData(fmdBound!!.fmDataMap)
systemResourceFrag.initData()
overviewFrag.setData(fmdBound!!.fmDataMap)
fmdBound!!.startDiagnose()
fmdBound!!.connectSSH()
}
override fun onServiceDisconnected(className: ComponentName) {

View File

@@ -39,13 +39,17 @@ class SystemResourceFrag : FmdBaseFragment(), OnRosHostClickListener,
override fun onHiddenChanged(hidden: Boolean) {
super.onHiddenChanged(hidden)
if (!hidden) {
if (!isInit) {
isInit = true
rosHostsView.setDatas(
fmdAct.getRosHostArguments(),
fmdAct.getCloudMapVersion()
)
}
initData()
}
}
fun initData() {
if (!isInit) {
isInit = true
rosHostsView.setDatas(
fmdAct.getRosHostArguments(),
fmdAct.getCloudMapVersion()
)
}
}

View File

@@ -27,12 +27,17 @@ import androidx.lifecycle.LifecycleRegistry;
import com.mogo.eagle.core.utilcode.util.NetworkUtils;
import com.zhjt.mogo.adas.data.AdasConstants;
import com.zhjt.mogo_core_function_devatools.rviz.R;
import com.zhjt.mogo_core_function_devatools.rviz.common.config.SSHAccountConfig;
import com.zhjt.mogo_core_function_devatools.rviz.common.coroutines.FlowBus;
import com.zhjt.mogo_core_function_devatools.rviz.common.utils.DetectHtml;
import com.zhjt.mogo_core_function_devatools.rviz.common.utils.NetworkUtilsExtend;
import com.zhjt.mogo_core_function_devatools.rviz.constant.AppConfigInfo;
import com.zhjt.mogo_core_function_devatools.rviz.constant.EventKey;
import com.zhjt.mogo_core_function_devatools.rviz.model.entities.AdasConnectionStatus;
import com.zhjt.mogo_core_function_devatools.rviz.ssh.SSH;
import com.zhjt.mogo_core_function_devatools.rviz.ssh.function.call.CallerSshConnectionListenerManager;
import com.zhjt.mogo_core_function_devatools.rviz.ssh.function.listener.OnSshConnectionListener;
import com.zhjt.mogo_core_function_devatools.rviz.ssh.module.SSHHostBean;
import java.net.Inet4Address;
import java.net.InetAddress;
@@ -47,7 +52,7 @@ import mogo.telematics.pad.MessagePad;
/**
* 连接以及状态展示
*/
public class StateBarView extends LinearLayout implements LifecycleOwner, NetworkUtilsExtend.NetworkCallbackListener {
public class StateBarView extends LinearLayout implements LifecycleOwner, NetworkUtilsExtend.NetworkCallbackListener, OnSshConnectionListener {
private static final String TAG = StateBarView.class.getSimpleName();
private final CoroutineScope scopeSubscriber = CoroutineScopeKt.CoroutineScope(MainScope().getCoroutineContext());
private final LifecycleRegistry lifecycle = new LifecycleRegistry(this);
@@ -55,6 +60,7 @@ public class StateBarView extends LinearLayout implements LifecycleOwner, Networ
private TextView ipView;
private TextView vehicleNumberView;
private TextView adasStateView;
private TextView sshStateView;
@NonNull
@Override
@@ -101,7 +107,6 @@ public class StateBarView extends LinearLayout implements LifecycleOwner, Networ
setListener();
initView();
getNetWorkType();
// FlowBus.INSTANCE.<String>with(EventKey.GET_VEHICLE_CONFIG).post(scopeSubscriber, EventKey.GET_VEHICLE_CONFIG);
FlowBus.INSTANCE.<MessagePad.CarConfigResp>with(EventKey.UPDATE_CAR_CONFIG_STATE).register(this, it -> {
setHintTextView(vehicleNumberView, it.getPlateNumber());
});
@@ -109,20 +114,35 @@ public class StateBarView extends LinearLayout implements LifecycleOwner, Networ
String msg = getResources().getString(R.string.rviz_fmd_disconnected);
AdasConstants.IpcConnectionStatus ipcConnectionStatus = it.getIpcConnectionStatus();
String reason = it.getReason();
if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CONNECTED) {
if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.DISCONNECTED) {
msg = getResources().getString(R.string.rviz_fmd_disconnected);
} else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CONNECTED) {
msg = getResources().getString(R.string.rviz_fmd_connected);
} else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.DISCONNECTED) {
msg = "连接失败";
} else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CONNECTING) {
msg = "连接中";
if (!TextUtils.isEmpty(reason)) {
if (reason.contains("")) {
String[] str = reason.split("");
msg = str[0];
} else {
msg = reason;
}
}
msg = getResources().getString(R.string.rviz_fmd_connecting);
setHintTextView(netNameView, getNetWorkType());
setHintTextView(ipView, getIpAddressString());
} else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.RECONNECTING_TIMER ||
ipcConnectionStatus == AdasConstants.IpcConnectionStatus.RECONNECTING_NETWORK) {
msg = getResources().getString(R.string.rviz_fmd_reconnecting);
setHintTextView(netNameView, getNetWorkType());
setHintTextView(ipView, getIpAddressString());
} else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CONNECT_EXCEPTION) {
msg = getResources().getString(R.string.rviz_fmd_connect_exception);
} else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.ILLEGAL_ADDRESS) {
msg = getResources().getString(R.string.rviz_fmd_illegal_address);
} else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.SEARCH_ADDRESS) {
msg = getResources().getString(R.string.rviz_fmd_search_address);
} else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.NOT_FOUND_ADDRESS) {
msg = getResources().getString(R.string.rviz_fmd_not_found_address);
} else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CERTIFICATION_FAILED) {
msg = getResources().getString(R.string.rviz_fmd_certification_failed);
} else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.HEARTBEAT_TIMEOUT) {
msg = getResources().getString(R.string.rviz_fmd_heartbeat_timeout);
} else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.PROTOCOL_MISMATCH) {
msg = getResources().getString(R.string.rviz_fmd_protocol_mismatch);
} else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.SERVER_DISCONNECTED) {
msg = getResources().getString(R.string.rviz_fmd_server_disconnected);
}
setHintTextView(adasStateView, msg);
if (ipcConnectionStatus != AdasConstants.IpcConnectionStatus.CONNECTED) {
@@ -150,10 +170,12 @@ public class StateBarView extends LinearLayout implements LifecycleOwner, Networ
ipView = findViewById(R.id.ip_view);
vehicleNumberView = findViewById(R.id.vehicle_number_view);
adasStateView = findViewById(R.id.adas_state_view);
sshStateView = findViewById(R.id.ssh_state_view);
setHintTextView(netNameView, getNetWorkType());
setHintTextView(ipView, getIpAddressString());
setHintTextView(vehicleNumberView, TextUtils.isEmpty(AppConfigInfo.INSTANCE.getPlateNumber()) ? getResources().getString(R.string.rviz_fmd_disconnected) : AppConfigInfo.INSTANCE.getPlateNumber());
setHintTextView(adasStateView, getResources().getString(R.string.rviz_fmd_disconnected));
setHintTextView(sshStateView, getResources().getString(R.string.rviz_fmd_disconnected));
}
/**
@@ -218,9 +240,20 @@ public class StateBarView extends LinearLayout implements LifecycleOwner, Networ
textView.setText(Html.fromHtml(text));
}
} else {
if (getResources().getString(R.string.rviz_fmd_disconnected).equals(text) || getResources().getString(R.string.rviz_fmd_unknown).equals(text) || "连接失败".equals(text)) {
if (getResources().getString(R.string.rviz_fmd_disconnected).equals(text) ||
getResources().getString(R.string.rviz_fmd_unknown).equals(text) ||
getResources().getString(R.string.rviz_fmd_connect_exception).equals(text) ||
getResources().getString(R.string.rviz_fmd_illegal_address).equals(text) ||
getResources().getString(R.string.rviz_fmd_not_found_address).equals(text) ||
getResources().getString(R.string.rviz_fmd_certification_failed).equals(text) ||
getResources().getString(R.string.rviz_fmd_heartbeat_timeout).equals(text) ||
getResources().getString(R.string.rviz_fmd_protocol_mismatch).equals(text) ||
getResources().getString(R.string.rviz_fmd_server_disconnected).equals(text)) {
textView.setTextColor(getResources().getColor(R.color.rviz_fmd_status_error));
} else if (getResources().getString(R.string.rviz_fmd_gain).equals(text) || "连接中".equals(text) || "重连中".equals(text)) {
} else if (getResources().getString(R.string.rviz_fmd_gain).equals(text) ||
getResources().getString(R.string.rviz_fmd_connecting).equals(text) ||
getResources().getString(R.string.rviz_fmd_reconnecting).equals(text) ||
getResources().getString(R.string.rviz_fmd_search_address).equals(text)) {
textView.setTextColor(Color.YELLOW);
} else {
textView.setTextColor(getResources().getColor(R.color.rviz_fmd_status_normal));
@@ -233,6 +266,8 @@ public class StateBarView extends LinearLayout implements LifecycleOwner, Networ
protected void onAttachedToWindow() {
super.onAttachedToWindow();
lifecycle.setCurrentState(Lifecycle.State.STARTED);
NetworkUtilsExtend.Companion.addNetworkCallback(this);
CallerSshConnectionListenerManager.INSTANCE.addListener(TAG, this);
}
@Override
@@ -240,9 +275,40 @@ public class StateBarView extends LinearLayout implements LifecycleOwner, Networ
super.onDetachedFromWindow();
lifecycle.setCurrentState(Lifecycle.State.DESTROYED);
NetworkUtilsExtend.Companion.removeNetworkCallback(this);
CallerSshConnectionListenerManager.INSTANCE.removeListener(TAG);
}
public View getVehicleNumberView() {
return vehicleNumberView;
}
@Override
public void onSshConnecting(@NonNull SSHHostBean host, int rosHostArgumentPosition, boolean isInserted) {
if (TextUtils.equals(host.getHostname(), SSHAccountConfig.INSTANCE.getRosMasterIp())) {
setHintTextView(sshStateView, "连接中");
}
}
@Override
public void onSshConnected(@NonNull SSH ssh) {
if (TextUtils.equals(ssh.host.getHostname(), SSHAccountConfig.INSTANCE.getRosMasterIp())) {
setHintTextView(sshStateView, getResources().getString(R.string.rviz_fmd_connected));
}
}
@Override
public void onSshDisconnected(@NonNull SSHHostBean host) {
if (TextUtils.equals(host.getHostname(), SSHAccountConfig.INSTANCE.getRosMasterIp())) {
setHintTextView(sshStateView, "已断开");
}
}
@Override
public void onSshConnectFailure(@NonNull SSHHostBean host, @NonNull String msg) {
if (TextUtils.equals(host.getHostname(), SSHAccountConfig.INSTANCE.getRosMasterIp())) {
setHintTextView(sshStateView, "连接失败");
setHintTextView(netNameView, getNetWorkType());
setHintTextView(ipView, getIpAddressString());
}
}
}

View File

@@ -2,9 +2,7 @@ package com.zhjt.mogo_core_function_devatools.rviz.widgets.ros.host;
import android.content.Context;
import android.graphics.Rect;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Pair;
import android.view.LayoutInflater;
import android.view.View;

View File

@@ -11,7 +11,7 @@
<LinearLayout
style="@style/RvizFmdStateBarLayoutStyle"
android:layout_weight="1.1">
android:layout_weight="1">
<TextView
style="@style/RvizFmdStateBarHintStyle"
@@ -38,7 +38,7 @@
<LinearLayout
style="@style/RvizFmdStateBarLayoutStyle"
android:layout_weight=".8">
android:layout_weight=".7">
<TextView
style="@style/RvizFmdStateBarHintStyle"
@@ -51,20 +51,7 @@
<LinearLayout
style="@style/RvizFmdStateBarLayoutStyle"
android:layout_weight="1.2">
<TextView
style="@style/RvizFmdStateBarHintStyle"
android:text="ROS Master SSH状态" />
<TextView
android:id="@+id/ssh_state_view"
style="@style/RvizFmdStateBarValueStyle" />
</LinearLayout>
<LinearLayout
style="@style/RvizFmdStateBarLayoutStyle"
android:layout_weight="0.8">
android:layout_weight="0.9">
<TextView
style="@style/RvizFmdStateBarHintStyle"
@@ -75,5 +62,18 @@
style="@style/RvizFmdStateBarValueStyle" />
</LinearLayout>
<LinearLayout
style="@style/RvizFmdStateBarLayoutStyle"
android:layout_weight="1.3">
<TextView
style="@style/RvizFmdStateBarHintStyle"
android:text="ROS Master SSH状态" />
<TextView
android:id="@+id/ssh_state_view"
style="@style/RvizFmdStateBarValueStyle" />
</LinearLayout>
</LinearLayout>

View File

@@ -1,8 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="rviz_fmd_unknown">未知</string>
<string name="rviz_fmd_connected">已连接</string>
<string name="rviz_fmd_disconnected">未连接</string>
<string name="rviz_fmd_connected">已连接</string>
<string name="rviz_fmd_connecting">连接中</string>
<string name="rviz_fmd_reconnecting">重连中</string>
<string name="rviz_fmd_connect_exception">连接失败</string>
<string name="rviz_fmd_illegal_address">地址非法</string>
<string name="rviz_fmd_search_address">搜索域控</string>
<string name="rviz_fmd_not_found_address">找不到域控</string>
<string name="rviz_fmd_certification_failed">认证异常</string>
<string name="rviz_fmd_heartbeat_timeout">心跳超时</string>
<string name="rviz_fmd_protocol_mismatch">协议不匹配</string>
<string name="rviz_fmd_server_disconnected">域控断开</string>
<string name="rviz_fmd_gain">获取中</string>
<string name="rviz_fmd_wifi">(WiFi)</string>
<string name="rviz_fmd_mobile_network">移动网络</string>