diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt index 5bee04ec58..f0e2f1a5db 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt @@ -494,11 +494,13 @@ class MoGoHmiProvider : IMoGoHmiProvider { if (target != null && target.visibility != View.VISIBLE) { TransitionManager.beginDelayedTransition(target.parent as ViewGroup, Slide(Gravity.START).also { it.duration = 150; it.addTarget(target) }) target.visibility = View.VISIBLE + CallerHmiViewControlListenerManager.invokeOperatePanelDisplayStatus(true) } } else { if (target != null && target.visibility == View.VISIBLE) { TransitionManager.beginDelayedTransition(target.parent as ViewGroup, Slide(Gravity.START).also { it.duration = 150; it.addTarget(target) }) target.visibility = View.GONE + CallerHmiViewControlListenerManager.invokeOperatePanelDisplayStatus(false) } } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/OperatePanelLayout.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/OperatePanelLayout.kt index 0c16e7412b..163e6bbb5d 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/OperatePanelLayout.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/OperatePanelLayout.kt @@ -5,10 +5,12 @@ import android.os.Bundle import android.os.SystemClock import android.util.AttributeSet import android.util.Log +import android.view.Gravity import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.LinearLayout +import android.widget.Toast import androidx.annotation.CallSuper import androidx.core.content.ContextCompat import androidx.lifecycle.lifecycleScope @@ -26,6 +28,7 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.config.HmiBuildConfig import com.mogo.eagle.core.data.multidisplay.TelematicConstant import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotCarConfigListener +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.api.autopilot.IMoGoGetParamResponseListener import com.mogo.eagle.core.function.api.devatools.IV2XListener import com.mogo.eagle.core.function.api.devatools.mofang.IMoGoMoFangProvider @@ -322,7 +325,8 @@ class OperatePanelLayout : LinearLayout { } } - class V2XPreferenceFragmentCompat : OperatePanelDetailBase(), IV2XListener { + class V2XPreferenceFragmentCompat : OperatePanelDetailBase(), IV2XListener, + IMoGoAutopilotStatusListener,IViewControlListener { companion object { private const val TAG = "V2XPreferenceFragmentCompat" @@ -352,14 +356,26 @@ class OperatePanelLayout : LinearLayout { //车辆图像上传行云大模型状态查询 CallerAutoPilotControlManager.sendImgUploadCloudStatusQuery() } + CallerAutoPilotStatusListenerManager.addListener(TAG, this) + CallerHmiViewControlListenerManager.addListener(TAG,this) return super.onCreateView(inflater, container, savedInstanceState) } override fun onDestroyView() { CallerV2XManager.removeListener(TAG) + CallerAutoPilotStatusListenerManager.removeListener(TAG) super.onDestroyView() } + override fun operatePanelDisplayStatus(isShow: Boolean) { + super.operatePanelDisplayStatus(isShow) + if(isShow){ + CallerAutoPilotStatusListenerManager.addListener(TAG, this) + }else{ + CallerAutoPilotStatusListenerManager.removeListener(TAG) + } + } + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.operate_panel_preference_details_v2x, rootKey) } @@ -418,6 +434,59 @@ class OperatePanelLayout : LinearLayout { return super.getDefaultVal(pref) } + override fun onAutopilotIpcConnectStatusChanged( + status: AdasConstants.IpcConnectionStatus, + reason: String? + ){ + ThreadUtils.runOnUiThread{ + Log.i("xuxinchao","status="+status) + if(status == AdasConstants.IpcConnectionStatus.CONNECTED){ + //域控连接成功,恢复正常状态 + Log.i("xuxinchao","域控连接成功") + setEnableStatus(true) + }else{ + Log.i("xuxinchao","请等待与域控恢复连接后操作") + //断连中,持续提示:请等待与域控恢复连接后操作;并且将所有开关置为不可用状态 + val customToastView = AppStateManager.currentActivity()?.layoutInflater?.inflate(R.layout.view_ipc_connect_status_toast,null) + val customToast = Toast(context?.applicationContext) + customToast.duration = Toast.LENGTH_LONG + customToast.view = customToastView + customToast.setGravity(Gravity.START,AutoSizeUtils.dp2px(context, 280f),0) + customToast.show() + + setEnableStatus(false) + } + } + } + + private fun setEnableStatus(isEnable: Boolean){ + //NDE(数据上车)上行 + preferenceScreen.findPreferenceReal(NDE_UPWARD_SWITCH)?.isEnabled = isEnable + //车辆图像上传行云大模型 + preferenceScreen.findPreferenceReal(IMAGE_UPLOAD_SWITCH)?.isEnabled = isEnable + //NDE(数据上车)下行 + preferenceScreen.findPreferenceReal(NDE_DOWNWARD_SWITCH)?.isEnabled = isEnable + //事件数据进PNC应用 + preferenceScreen.findPreferenceReal(NDE_EVENT_DATA_TO_PNC)?.isEnabled = isEnable + //感知数据进PNC应用 + preferenceScreen.findPreferenceReal(NDE_PERCEPTION_DATA_TO_PNC)?.isEnabled = isEnable + //云控基础平台上行 + preferenceScreen.findPreferenceReal(CLOUD_CONTROL_UPWARD)?.isEnabled = isEnable + //云控基础平台下行 + preferenceScreen.findPreferenceReal(CLOUD_CONTROL_DOWNWARD)?.isEnabled = isEnable + //OBU上报(V2I、V2V上行) + preferenceScreen.findPreferenceReal(OBU_UPWARD_SWITCH)?.isEnabled = isEnable + //V2I下行 + preferenceScreen.findPreferenceReal(V2I_DOWNWARD_SWITCH)?.isEnabled = isEnable + //弱势交通参与者 + preferenceScreen.findPreferenceReal(V2I_WEAK_TRAFFIC_PARTICIPANT)?.isEnabled = isEnable + //感知数据进PNC应用 + preferenceScreen.findPreferenceReal(V2I_PERCEPTION_DATA_TO_PNC)?.isEnabled = isEnable + //V2V下行 + preferenceScreen.findPreferenceReal(V2V_DOWNWARD_SWITCH)?.isEnabled = isEnable + } + + override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { Log.d(TAG, "-- onPreferenceChange:($preference, $newValue)") when (preference.key) { @@ -480,15 +549,15 @@ class OperatePanelLayout : LinearLayout { //关闭事件数据进PNC应用 CallerAutoPilotControlManager.sendNdeDownEventToPnc(0) //查询事件数据进PNC应用 -// UiThreadHandler.postDelayed({ -// CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.V2N_TO_PNC) -// }, 500) + UiThreadHandler.postDelayed({ + CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.V2N_TO_PNC) + }, 500) //关闭感知数据进PNC应用 CallerAutoPilotControlManager.sendNdeDownPerceptionToPnc(0) //查询感知数据进PNC应用 -// UiThreadHandler.postDelayed({ -// CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.PERCEPTION_TO_PNC) -// }, 500) + UiThreadHandler.postDelayed({ + CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.PERCEPTION_TO_PNC) + }, 500) } return true } @@ -502,9 +571,9 @@ class OperatePanelLayout : LinearLayout { CallerAutoPilotControlManager.sendNdeDownEventToPnc(0) } //查询事件数据进PNC应用 -// UiThreadHandler.postDelayed({ -// CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.V2N_TO_PNC) -// }, 500) + UiThreadHandler.postDelayed({ + CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.V2N_TO_PNC) + }, 500) hmiAction("事件数据进PNC应用, ", isChecked) clickEventAnalytics("事件数据进PNC应用", isChecked) return true @@ -519,9 +588,9 @@ class OperatePanelLayout : LinearLayout { CallerAutoPilotControlManager.sendNdeDownPerceptionToPnc(0) } //查询感知数据进PNC应用 -// UiThreadHandler.postDelayed({ -// CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.PERCEPTION_TO_PNC) -// }, 500) + UiThreadHandler.postDelayed({ + CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.PERCEPTION_TO_PNC) + }, 500) hmiAction("感知数据进PNC应用, ", isChecked) clickEventAnalytics("感知数据进PNC应用", isChecked) return true @@ -583,9 +652,9 @@ class OperatePanelLayout : LinearLayout { FunctionBuildConfig.v2iPerceptionDataToPnc = false CallerAutoPilotControlManager.sendV2iDownPerceptionToPnc(0) //查询V2I下行感知进PNC开关状态 -// UiThreadHandler.postDelayed({ -// CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.V2I_TO_PNC) -// }, 500) + UiThreadHandler.postDelayed({ + CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.V2I_TO_PNC) + }, 500) } hmiAction("V2I下行, ", isChecked) clickEventAnalytics("V2I下行", isChecked) @@ -610,9 +679,9 @@ class OperatePanelLayout : LinearLayout { CallerAutoPilotControlManager.sendV2iDownPerceptionToPnc(0) } //查询V2I下行感知进PNC开关状态 -// UiThreadHandler.postDelayed({ -// CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.V2I_TO_PNC) -// }, 500) + UiThreadHandler.postDelayed({ + CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.V2I_TO_PNC) + }, 500) hmiAction("感知数据进PNC应用, ", isChecked) clickEventAnalytics("感知数据进PNC应用", isChecked) return true @@ -706,14 +775,23 @@ class OperatePanelLayout : LinearLayout { * @param adasParam 解析后的配置参数 */ override fun onGetParamResp(getParamResp: MessagePad.SetParamReq, adasParam: AdasParam) { -// ThreadUtils.runOnUiThread { -// //融合v2n开关 NDE下行事件数据进pnc -// preferenceScreen.findPreferenceReal(NDE_EVENT_DATA_TO_PNC)?.also { changeValue(it,adasParam.v2nToPnc==1) } -// //融合v2i开关 V2I下行感知数据进pnc -// preferenceScreen.findPreferenceReal(V2I_PERCEPTION_DATA_TO_PNC)?.also { changeValue(it,adasParam.v2iToPnc==1) } -// //NDE下行感知数据进pnc -// preferenceScreen.findPreferenceReal(NDE_PERCEPTION_DATA_TO_PNC)?.also { changeValue(it,adasParam.perceptionToPnc==1) } -// } + ThreadUtils.runOnUiThread { + Log.i("onGetParamResp","adasParam.v2nToPnc="+adasParam.v2nToPnc) + Log.i("onGetParamResp","adasParam.v2iToPnc="+adasParam.v2iToPnc) + Log.i("onGetParamResp","adasParam.perceptionToPnc="+adasParam.perceptionToPnc) + //融合v2n开关 NDE下行事件数据进pnc + if(adasParam.v2nToPnc != -1){ + preferenceScreen.findPreferenceReal(NDE_EVENT_DATA_TO_PNC)?.also { changeValue(it,adasParam.v2nToPnc==1) } + } + //融合v2i开关 V2I下行感知数据进pnc + if(adasParam.v2iToPnc != -1){ + preferenceScreen.findPreferenceReal(V2I_PERCEPTION_DATA_TO_PNC)?.also { changeValue(it,adasParam.v2iToPnc==1) } + } + //NDE下行感知数据进pnc + if(adasParam.perceptionToPnc != -1){ + preferenceScreen.findPreferenceReal(NDE_PERCEPTION_DATA_TO_PNC)?.also { changeValue(it,adasParam.perceptionToPnc==1) } + } + } } /** diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/bg_v2x_toast.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/bg_v2x_toast.png new file mode 100644 index 0000000000..81fc493bfc Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/bg_v2x_toast.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_v2x_tip.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_v2x_tip.png new file mode 100644 index 0000000000..3e1e27d6bd Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_v2x_tip.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_ipc_connect_status_toast.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_ipc_connect_status_toast.xml new file mode 100644 index 0000000000..870a3fdad6 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_ipc_connect_status_toast.xml @@ -0,0 +1,42 @@ + + + + + + + + + + \ 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 15413fdf70..7e5b1b0db8 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 @@ -222,6 +222,8 @@ 红绿灯信号来源 已发起上报 + 请等待与域控恢复连接后操作 + Wifi连接状态图标 域控连接状态图标 SSM连接状态图标 diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/MogoRouteOverlayManager.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/MogoRouteOverlayManager.java index 2908c58310..c2cf7d5664 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/MogoRouteOverlayManager.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/MogoRouteOverlayManager.java @@ -34,6 +34,11 @@ public class MogoRouteOverlayManager implements private final IViewControlListener listener = new IViewControlListener() { + @Override + public void operatePanelDisplayStatus(boolean isShow) { + + } + @Override public void showColdStartProcessView() { diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/view/IViewControlListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/view/IViewControlListener.kt index 6622373275..403538bf6d 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/view/IViewControlListener.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/view/IViewControlListener.kt @@ -78,4 +78,10 @@ interface IViewControlListener { * 展示冷启动进度条 */ fun showColdStartProcessView(){} + + /** + * 运营面板展示状态 + * @param isShow true展示 false隐藏 + */ + fun operatePanelDisplayStatus(isShow: Boolean){} } diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiViewControlListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiViewControlListenerManager.kt index 60bee83c29..ef89d323c7 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiViewControlListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiViewControlListenerManager.kt @@ -121,4 +121,12 @@ object CallerHmiViewControlListenerManager : CallerBase() listener.showColdStartProcessView() } } + + fun invokeOperatePanelDisplayStatus(isShow: Boolean){ + M_LISTENERS.forEach { + val listener = it.value + listener.operatePanelDisplayStatus(isShow) + } + } + } \ No newline at end of file