diff --git a/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/SweeperProvider.java b/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/SweeperProvider.java index b44c16cc04..4874610d6c 100644 --- a/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/SweeperProvider.java +++ b/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/SweeperProvider.java @@ -1,49 +1,67 @@ package com.mogo.och.sweeper; +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_SWEEPER; + +import android.annotation.SuppressLint; import android.content.Context; +import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; import com.alibaba.android.arouter.facade.annotation.Route; +import com.mogo.eagle.core.data.config.FunctionBuildConfig; +import com.mogo.eagle.core.function.api.vehicle.IMoGoSweeperModeListener; +import com.mogo.eagle.core.function.call.vehicle.CallerSweeperModeListenerManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.mogo.vehicle.SweeperVehicleConfigUtils; +import com.mogo.eagle.core.utilcode.util.AppUtils; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.och.sweeper.cloud.fragment.SweeperCloudFragment; import com.mogo.och.sweeper.common.constant.SweeperConst; +import com.mogo.och.sweeper.common.database.MyDataBase; +import com.mogo.och.sweeper.common.util.SweeperAnalyticsManager; import com.mogo.och.sweeper.operate.fragment.SweeperOperateFragment; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import io.reactivex.Observable; +import io.reactivex.functions.Consumer; +import io.reactivex.schedulers.Schedulers; + /** * 清扫车业务实现入口 * * @author tongchenfei */ @Route(path = SweeperConst.PATH) -public class SweeperProvider implements IMogoOCH { +public class SweeperProvider implements IMogoOCH, IMoGoSweeperModeListener { private static final String TAG = "SweeperProvider"; private SweeperOperateFragment sweeperOperateFragment; + private SweeperCloudFragment sweeperCloudFragment; private int containerId; private FragmentActivity activity; @Override public void init(Context context) { } - private void showFragment() { + + private void showOperateFragment() { FragmentManager supportFragmentManager = activity.getSupportFragmentManager(); if (sweeperOperateFragment == null) { CallerLogger.d(TAG, "准备add fragment======"); Fragment fragmentByTag = supportFragmentManager.findFragmentByTag(sweeperOperateFragment.TAG); - if (fragmentByTag instanceof SweeperCloudFragment) { + if (fragmentByTag instanceof SweeperOperateFragment) { sweeperOperateFragment = (SweeperOperateFragment) fragmentByTag; } else { sweeperOperateFragment = new SweeperOperateFragment(); } - if(!sweeperOperateFragment.isAdded()) { + if (!sweeperOperateFragment.isAdded()) { supportFragmentManager.beginTransaction().add(containerId, sweeperOperateFragment, sweeperOperateFragment.TAG).commitAllowingStateLoss(); } return; @@ -51,17 +69,39 @@ public class SweeperProvider implements IMogoOCH { CallerLogger.d(TAG, "准备show fragment"); supportFragmentManager.beginTransaction().show(sweeperOperateFragment).commitAllowingStateLoss(); } + + private void showCloudFragment() { + FragmentManager supportFragmentManager = activity.getSupportFragmentManager(); + if (sweeperCloudFragment == null) { + CallerLogger.d(TAG, "准备add fragment======"); + Fragment fragmentByTag = supportFragmentManager.findFragmentByTag(sweeperCloudFragment.TAG); + if (fragmentByTag instanceof SweeperCloudFragment) { + sweeperCloudFragment = (SweeperCloudFragment) fragmentByTag; + } else { + sweeperCloudFragment = new SweeperCloudFragment(); + } + if (!sweeperCloudFragment.isAdded()) { + supportFragmentManager.beginTransaction().add(containerId, sweeperCloudFragment, sweeperCloudFragment.TAG).commitAllowingStateLoss(); + } + return; + } + CallerLogger.d(TAG, "准备show fragment"); + supportFragmentManager.beginTransaction().show(sweeperCloudFragment).commitAllowingStateLoss(); + } + private void hideFragment() { if (sweeperOperateFragment != null) { - CallerLogger.d(TAG, "准备hide fragment"); + CallerLogger.d(TAG, "准备hide operate fragment"); activity.getSupportFragmentManager().beginTransaction().hide(sweeperOperateFragment).commitAllowingStateLoss(); + } else if (sweeperCloudFragment != null) { + CallerLogger.d(TAG, "准备hide cloud fragment"); + activity.getSupportFragmentManager().beginTransaction().hide(sweeperCloudFragment).commitAllowingStateLoss(); } - + CallerSweeperModeListenerManager.INSTANCE.removeListener(TAG); } @Override public void createCoverage(FragmentActivity activity, int containerId) { - } @NotNull @@ -75,14 +115,61 @@ public class SweeperProvider implements IMogoOCH { public Fragment createCoverage(@Nullable FragmentActivity fragmentActivity, @Nullable Integer integer) { this.containerId = integer; this.activity = fragmentActivity; - showFragment(); + + // 第一优先级:SP中缓存的当前模式(用户切换后会在SP中写入当前模式,切换完后清除,因为现在产品确认还不需要每次启动时首先使用用户上次选择的模式,目前优先还是使用gradle中默认配置的模式打开) + // 第二优先级:gradle中默认配置的当前模式(用户不进行切换时SP中没有配置,默认使用的gradle中默认当前模式) + CallerLogger.i(M_SWEEPER + TAG, "清扫车启动,当前业务模式:isSPCurrentSweeperOperateMode=" + + SweeperVehicleConfigUtils.isSPCurrentSweeperOperateMode() + + ", isSPCurrentSweeperCloudMode=" + SweeperVehicleConfigUtils.isSPCurrentSweeperCloudMode()); + if (SweeperVehicleConfigUtils.isSPCurrentSweeperOperateMode()) { + showOperateFragment(); + } else if (SweeperVehicleConfigUtils.isSPCurrentSweeperCloudMode()) { + showCloudFragment(); + } else if (SweeperVehicleConfigUtils.isDefaultSweeperOperateMode(FunctionBuildConfig.sweeperDefaultMode)) { + showOperateFragment(); + } else if (SweeperVehicleConfigUtils.isDefaultSweeperCloudMode(FunctionBuildConfig.sweeperDefaultMode)) { + showCloudFragment(); + } else { + // 默认云控模式 + showCloudFragment(); + } + + CallerSweeperModeListenerManager.INSTANCE.addListener(TAG, this); return null; } @Override public void onDestroy() { - //若不调用finish, 设置中打开关闭UITouch,会造成och fragment 重叠 + //若不调用finish, 设置中打开关闭UITouch,会造成och fragment 重叠 if (activity == null) return; activity.finish(); } + + @SuppressLint("CheckResult") + @Override + public void onSweeperCurrentModeChanged(@NonNull String currentMode) { + // 日志、埋点 + CallerLogger.i(M_SWEEPER + TAG, "切换清扫车业务模式,当前切换的模式:" + currentMode); + SweeperAnalyticsManager.getInstance().trackSweeperModeChangeEvent(currentMode); + + Observable.just(currentMode) + .observeOn(Schedulers.io()) + .subscribeOn(Schedulers.io()) + .subscribe(new Consumer() { + @Override + public void accept(String s) throws Exception { + // 写入SP当前模式 + SweeperVehicleConfigUtils.setSPCurrentSweeperMode(currentMode); + // 清除本地业务缓存数据 + MyDataBase.getInstance().getWeltDataDao().deleteAllWeltData(); + // 等清除完数据库数据后,重启App + UiThreadHandler.postDelayed(new Runnable() { + @Override + public void run() { + AppUtils.relaunchApp(true); + } + }, 1000L); + } + }); + } } diff --git a/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/cloud/fragment/SweeperCloudFragment.kt b/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/cloud/fragment/SweeperCloudFragment.kt index a232fe8abd..ee08acaf38 100644 --- a/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/cloud/fragment/SweeperCloudFragment.kt +++ b/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/cloud/fragment/SweeperCloudFragment.kt @@ -53,7 +53,7 @@ import kotlinx.coroutines.launch class SweeperCloudFragment : BaseSweeperCloudTabFragment() { companion object { - const val TAG = "SweeperFragment" + const val TAG = "SweeperCloudFragment" } private var mSubMutableList: MutableList? = null diff --git a/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/common/constant/SweeperConst.kt b/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/common/constant/SweeperConst.kt index d9127e8b6d..f0ee4dd32d 100644 --- a/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/common/constant/SweeperConst.kt +++ b/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/common/constant/SweeperConst.kt @@ -54,6 +54,10 @@ class SweeperConst { const val EVENT_KEY_AP_UNABLE_START_REASON = "event_key_och_bus_ap_unable_start_reason" const val EVENT_PARAM_UNABLE_START_REASON = "unable_start_reason"; + // 埋点Key: 切换清扫业务模式 + const val EVENT_KEY_CHANGE_CURRENT_SWEEPER_MODE = "event_key_och_change_current_sweeper_mode" + const val EVENT_PARAM_CHANGE_CURRENT_SWEEPER_MODE_CURRENT_MODE = "event_param_och_change_current_sweeper_mode_current_mode" + /** * 子任务起终点Marker类型 */ diff --git a/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/common/util/SweeperAnalyticsManager.java b/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/common/util/SweeperAnalyticsManager.java index 5cde8aa5cd..d46c36a9b9 100644 --- a/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/common/util/SweeperAnalyticsManager.java +++ b/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/common/util/SweeperAnalyticsManager.java @@ -146,4 +146,10 @@ public class SweeperAnalyticsManager { params.put(SweeperConst.EVENT_PARAM_UNABLE_START_REASON, reason); MogoAnalyticUtils.INSTANCE.track(SweeperConst.EVENT_KEY_AP_UNABLE_START_REASON, params); } + + public void trackSweeperModeChangeEvent(String currentMode) { + HashMap params = new HashMap<>(); + params.put(SweeperConst.EVENT_PARAM_CHANGE_CURRENT_SWEEPER_MODE_CURRENT_MODE, currentMode); + MogoAnalyticUtils.INSTANCE.track(SweeperConst.EVENT_KEY_CHANGE_CURRENT_SWEEPER_MODE, params); + } } diff --git a/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/operate/fragment/SweeperOperateFragment.kt b/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/operate/fragment/SweeperOperateFragment.kt index 0abedd0289..e2351f7cbf 100644 --- a/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/operate/fragment/SweeperOperateFragment.kt +++ b/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/operate/fragment/SweeperOperateFragment.kt @@ -42,7 +42,7 @@ import kotlin.math.roundToInt class SweeperOperateFragment : BaseSweeperOperateTabFragment(), MenuPopWindow.OnMenuItemOnClickListener { companion object { - const val TAG = "SweeperFragment" + const val TAG = "SweeperOperateFragment" } private var mAdapter: TaskListAdapter? = null diff --git a/app/script/functions/och.gradle b/app/script/functions/och.gradle index 804ae6d846..242420bee2 100644 --- a/app/script/functions/och.gradle +++ b/app/script/functions/och.gradle @@ -30,7 +30,7 @@ project.dependencies { } else if (isCurrentDriver("sweeperOperate")) { implementation project.project(':OCH:sweeper:driver') } else if (isCurrentDriver("sweeperCloud")) { - implementation project.project('OCH:sweeper:driver') + implementation project.project(':OCH:sweeper:driver') } else if (isCurrentDriver("taxiunmanned")) { implementation project.project(':OCH:taxi:unmanned-driver') } else if (isCurrentPassenger("taxiunmanned")) { diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt index e08857ad0c..0f5005892e 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt @@ -14,40 +14,79 @@ import com.mogo.eagle.core.data.multidisplay.TelematicConstant import com.mogo.eagle.core.data.obu.MogoObuConst import com.mogo.eagle.core.function.api.autopilot.IMoGoGetParamResponseListener import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsFuncConfigListener -import com.mogo.eagle.core.function.api.devatools.mofang.* +import com.mogo.eagle.core.function.api.devatools.mofang.IMoGoMoFangProvider import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener.Companion.FUNC_MODE_DEMO import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener.Companion.FUNC_MODE_RAIN import com.mogo.eagle.core.function.api.setting.ISopSettingListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotGetParamResponseDispatcher -import com.mogo.eagle.core.function.call.devatools.* +import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsFuncConfigListenerManager +import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager import com.mogo.eagle.core.function.call.hmi.CallerHmiManager -import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager import com.mogo.eagle.core.function.call.obu.CallerObuApiManager import com.mogo.eagle.core.function.call.setting.CallerSopSettingManager import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager +import com.mogo.eagle.core.function.call.vehicle.CallerSweeperModeListenerManager +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.function.hmi.ui.tools.DockerRebootDialog +import com.mogo.eagle.core.function.hmi.ui.tools.SweeperModeChangedConfirmDialog import com.mogo.eagle.core.function.hmi.ui.utils.HmiActionLog.Companion.hmiAction import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.eagle.core.utilcode.mogo.vehicle.SweeperVehicleConfigUtils import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.mogo.adas.data.bean.AdasParam -import kotlinx.android.synthetic.main.view_sop_setting.view.* +import kotlinx.android.synthetic.main.view_sop_setting.view.btnSpeedSet +import kotlinx.android.synthetic.main.view_sop_setting.view.ivSpeedAdd +import kotlinx.android.synthetic.main.view_sop_setting.view.ivSpeedReduce +import kotlinx.android.synthetic.main.view_sop_setting.view.mfStatusLayout +import kotlinx.android.synthetic.main.view_sop_setting.view.mfTest +import kotlinx.android.synthetic.main.view_sop_setting.view.rgFusionMode +import kotlinx.android.synthetic.main.view_sop_setting.view.scCarAperture +import kotlinx.android.synthetic.main.view_sop_setting.view.scDemoMode +import kotlinx.android.synthetic.main.view_sop_setting.view.scDrawPointCloudData +import kotlinx.android.synthetic.main.view_sop_setting.view.scFaultSlowDown +import kotlinx.android.synthetic.main.view_sop_setting.view.scGreenWaveSop +import kotlinx.android.synthetic.main.view_sop_setting.view.scIPCReport +import kotlinx.android.synthetic.main.view_sop_setting.view.scMarkingObstacles +import kotlinx.android.synthetic.main.view_sop_setting.view.scNew360LookAround +import kotlinx.android.synthetic.main.view_sop_setting.view.scNewV2NData +import kotlinx.android.synthetic.main.view_sop_setting.view.scObstacleAvoidance +import kotlinx.android.synthetic.main.view_sop_setting.view.scObu +import kotlinx.android.synthetic.main.view_sop_setting.view.scObuV2vView +import kotlinx.android.synthetic.main.view_sop_setting.view.scObuWeaknessTrafficSop +import kotlinx.android.synthetic.main.view_sop_setting.view.scRainMode +import kotlinx.android.synthetic.main.view_sop_setting.view.scRouteDynamicEffect +import kotlinx.android.synthetic.main.view_sop_setting.view.scRunRedLightSop +import kotlinx.android.synthetic.main.view_sop_setting.view.scShowBagRecordWindow +import kotlinx.android.synthetic.main.view_sop_setting.view.scSpeedLimit +import kotlinx.android.synthetic.main.view_sop_setting.view.scSweeperModeSwitch +import kotlinx.android.synthetic.main.view_sop_setting.view.scTrafficLight +import kotlinx.android.synthetic.main.view_sop_setting.view.scV2ISwitch +import kotlinx.android.synthetic.main.view_sop_setting.view.scV2NSwitch +import kotlinx.android.synthetic.main.view_sop_setting.view.scV2XSwitch +import kotlinx.android.synthetic.main.view_sop_setting.view.scV2iPnc +import kotlinx.android.synthetic.main.view_sop_setting.view.scV2nPnc +import kotlinx.android.synthetic.main.view_sop_setting.view.scWeakNetSlowDown +import kotlinx.android.synthetic.main.view_sop_setting.view.sopLayout +import kotlinx.android.synthetic.main.view_sop_setting.view.tvSpeed +import kotlinx.android.synthetic.main.view_sop_setting.view.tvSpeedThresholdTitle import mogo.telematics.pad.MessagePad /** * SOP设置窗口 */ internal class SOPSettingView @JvmOverloads constructor( - context: Context, - attrs: AttributeSet? = null, - defStyleAttr: Int = 0 + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 ) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoDevaToolsFuncConfigListener, - IViewControlListener, IMoGoMoFangProvider.OnMoFangStatusListener, - IMoGoGetParamResponseListener, ISopSettingListener { + IViewControlListener, IMoGoMoFangProvider.OnMoFangStatusListener, + IMoGoGetParamResponseListener, ISopSettingListener { companion object { const val TAG = "SOPSettingView" @@ -64,7 +103,7 @@ internal class SOPSettingView @JvmOverloads constructor( } private fun initView() { - sopLayout.setOnClickListener { } + sopLayout.setOnClickListener { } //V2X消息设置 v2xSetting() //地图效果类设置 @@ -78,50 +117,50 @@ internal class SOPSettingView @JvmOverloads constructor( /** * V2X消息设置 */ - private fun v2xSetting(){ + private fun v2xSetting() { //V2X总开关 scV2XSwitch.isChecked = FunctionBuildConfig.v2xMainSwitch scV2XSwitch.setOnCheckedChangeListener { _, isChecked -> FunctionBuildConfig.v2xMainSwitch = isChecked - hmiAction("SOP V2X总开关, ",isChecked) - Log.i(TAG,"SOP V2X总开关,$isChecked") - if(isChecked){ + hmiAction("SOP V2X总开关, ", isChecked) + Log.i(TAG, "SOP V2X总开关,$isChecked") + if (isChecked) { //V2N总开关 scV2NSwitch.isChecked = FunctionBuildConfig.v2nMainSwitch - hmiAction("SOP V2N总开关, ",FunctionBuildConfig.v2nMainSwitch) - Log.i(TAG,"SOP V2N总开关, ${FunctionBuildConfig.v2nMainSwitch}") + hmiAction("SOP V2N总开关, ", FunctionBuildConfig.v2nMainSwitch) + Log.i(TAG, "SOP V2N总开关, ${FunctionBuildConfig.v2nMainSwitch}") //V2I总开关 scV2ISwitch.isChecked = HmiBuildConfig.isShowObuV2iView - hmiAction("SOP V2I总开关, ",HmiBuildConfig.isShowObuV2iView) - Log.i(TAG,"SOP V2I总开关, ${HmiBuildConfig.isShowObuV2iView}") + hmiAction("SOP V2I总开关, ", HmiBuildConfig.isShowObuV2iView) + Log.i(TAG, "SOP V2I总开关, ${HmiBuildConfig.isShowObuV2iView}") //V2V总开关 scObuV2vView.isChecked = HmiBuildConfig.isShowObuV2vView - hmiAction("SOP V2V总开关, ",HmiBuildConfig.isShowObuV2vView) - Log.i(TAG,"SOP V2V总开关, ${HmiBuildConfig.isShowObuV2vView}") + hmiAction("SOP V2V总开关, ", HmiBuildConfig.isShowObuV2vView) + Log.i(TAG, "SOP V2V总开关, ${HmiBuildConfig.isShowObuV2vView}") //obu总开关 scObu.isChecked = obuConnectStatus - hmiAction("SOP obu总开关, ",obuConnectStatus) - Log.i(TAG,"SOP obu总开关, $obuConnectStatus") - if(obuConnectStatus){ + hmiAction("SOP obu总开关, ", obuConnectStatus) + Log.i(TAG, "SOP obu总开关, $obuConnectStatus") + if (obuConnectStatus) { CallerObuApiManager.resetObuIpAddress(MogoObuConst.OBU_DEFAULT_IP) } - }else{ + } else { //V2N总开关 scV2NSwitch.isChecked = false - hmiAction("SOP V2N总开关, ",false) - Log.i(TAG,"SOP V2N总开关, false") + hmiAction("SOP V2N总开关, ", false) + Log.i(TAG, "SOP V2N总开关, false") //V2I总开关 scV2ISwitch.isChecked = false - hmiAction("SOP V2I总开关, ",false) - Log.i(TAG,"SOP V2I总开关, false") + hmiAction("SOP V2I总开关, ", false) + Log.i(TAG, "SOP V2I总开关, false") //V2V总开关 scObuV2vView.isChecked = false - hmiAction("SOP V2V总开关, ",false) - Log.i(TAG,"SOP V2V总开关, false") + hmiAction("SOP V2V总开关, ", false) + Log.i(TAG, "SOP V2V总开关, false") //obu总开关 scObu.isChecked = false - hmiAction("SOP OBU控制总开关, ",false) - Log.i(TAG,"SOP OBU控制总开关, false") + hmiAction("SOP OBU控制总开关, ", false) + Log.i(TAG, "SOP OBU控制总开关, false") //断开链接 CallerObuApiManager.disConnectObu() } @@ -141,41 +180,41 @@ internal class SOPSettingView @JvmOverloads constructor( //绿波通行(默认关闭) scGreenWaveSop.isEnabled = FunctionBuildConfig.v2nMainSwitch scV2NSwitch.setOnCheckedChangeListener { compoundButton, isChecked -> - if(isChecked){ + if (isChecked) { //V2N新链路 scNewV2NData.isChecked = FunctionBuildConfig.isNewV2NData - hmiAction("SOP 是否是V2N新链路(云->工控机->App)",FunctionBuildConfig.isNewV2NData) - Log.i(TAG,"SOP 是否是V2N新链路(云->工控机->App), ${FunctionBuildConfig.isNewV2NData}") + hmiAction("SOP 是否是V2N新链路(云->工控机->App)", FunctionBuildConfig.isNewV2NData) + Log.i(TAG, "SOP 是否是V2N新链路(云->工控机->App), ${FunctionBuildConfig.isNewV2NData}") //V2N场景进PNC scV2nPnc.isChecked = FunctionBuildConfig.isV2NPnc - hmiAction("SOP V2N场景进PNC, ",FunctionBuildConfig.isV2NPnc) - Log.i(TAG,"SOP V2N场景进PNC, ${FunctionBuildConfig.isV2NPnc}") + hmiAction("SOP V2N场景进PNC, ", FunctionBuildConfig.isV2NPnc) + Log.i(TAG, "SOP V2N场景进PNC, ${FunctionBuildConfig.isV2NPnc}") CallerAutoPilotControlManager.sendV2nToPncCmd(FunctionBuildConfig.isV2NPnc) //绿波通行 scGreenWaveSop.isChecked = HmiBuildConfig.isShowGreenWaveView - hmiAction("SOP obu绿波通行, ",HmiBuildConfig.isShowGreenWaveView) - Log.i(TAG,"SOP obu绿波通行, ${HmiBuildConfig.isShowGreenWaveView}") + hmiAction("SOP obu绿波通行, ", HmiBuildConfig.isShowGreenWaveView) + Log.i(TAG, "SOP obu绿波通行, ${HmiBuildConfig.isShowGreenWaveView}") CallerTelematicManager.sendMsgToAllClients(TelematicConstant.OBU_GREENWAVE_WARNING, "1".toByteArray()) - }else{ + } else { //V2N新链路 scNewV2NData.isChecked = false - hmiAction("SOP 是否是V2N新链路(云->工控机->App)",false) - Log.i(TAG,"SOP 是否是V2N新链路(云->工控机->App), false") + hmiAction("SOP 是否是V2N新链路(云->工控机->App)", false) + Log.i(TAG, "SOP 是否是V2N新链路(云->工控机->App), false") //V2N场景进PNC scV2nPnc.isChecked = false - hmiAction("SOP V2N场景进PNC, ",false) - Log.i(TAG,"SOP V2N场景进PNC, false") + hmiAction("SOP V2N场景进PNC, ", false) + Log.i(TAG, "SOP V2N场景进PNC, false") CallerAutoPilotControlManager.sendV2nToPncCmd(false) //绿波通行 scGreenWaveSop.isChecked = false - hmiAction("SOP obu绿波通行, ",false) - Log.i(TAG,"SOP obu绿波通行, false") + hmiAction("SOP obu绿波通行, ", false) + Log.i(TAG, "SOP obu绿波通行, false") CallerTelematicManager.sendMsgToAllClients(TelematicConstant.OBU_GREENWAVE_WARNING, "0".toByteArray()) } scNewV2NData.isEnabled = isChecked scV2nPnc.isEnabled = isChecked scGreenWaveSop.isEnabled = isChecked - if(!compoundButton.isPressed){ + if (!compoundButton.isPressed) { return@setOnCheckedChangeListener } FunctionBuildConfig.v2nMainSwitch = isChecked @@ -188,41 +227,41 @@ internal class SOPSettingView @JvmOverloads constructor( scRunRedLightSop.isEnabled = HmiBuildConfig.isShowObuV2iView scObuWeaknessTrafficSop.isEnabled = HmiBuildConfig.isShowObuV2iView scV2ISwitch.setOnCheckedChangeListener { compoundButton, isChecked -> - if(isChecked){ + if (isChecked) { //V2I场景进PNC scV2iPnc.isChecked = FunctionBuildConfig.isV2IPnc - hmiAction("SOP V2I场景进PNC, ",FunctionBuildConfig.isV2IPnc) - Log.i(TAG,"SOP V2I场景进PNC,${FunctionBuildConfig.isV2IPnc}") + hmiAction("SOP V2I场景进PNC, ", FunctionBuildConfig.isV2IPnc) + Log.i(TAG, "SOP V2I场景进PNC,${FunctionBuildConfig.isV2IPnc}") CallerAutoPilotControlManager.sendV2iToPncCmd(FunctionBuildConfig.isV2IPnc) //闯红灯预警 scRunRedLightSop.isChecked = HmiBuildConfig.isShowRunRedLightView - hmiAction("SOP obu闯红灯预警, ",HmiBuildConfig.isShowRunRedLightView) - Log.i(TAG,"SOP obu闯红灯预警, ${HmiBuildConfig.isShowRunRedLightView}") + hmiAction("SOP obu闯红灯预警, ", HmiBuildConfig.isShowRunRedLightView) + Log.i(TAG, "SOP obu闯红灯预警, ${HmiBuildConfig.isShowRunRedLightView}") CallerTelematicManager.sendMsgToAllClients(TelematicConstant.OBU_RUNREDLIGHT_WARNING, "1".toByteArray()) //路侧弱势交通参与者 scObuWeaknessTrafficSop.isChecked = HmiBuildConfig.isShowObuWeaknessTrafficView - hmiAction("SOP obu弱势交通控制, ",HmiBuildConfig.isShowObuWeaknessTrafficView) - Log.i(TAG,"SOP obu弱势交通控制, ${HmiBuildConfig.isShowObuWeaknessTrafficView}") - }else{ + hmiAction("SOP obu弱势交通控制, ", HmiBuildConfig.isShowObuWeaknessTrafficView) + Log.i(TAG, "SOP obu弱势交通控制, ${HmiBuildConfig.isShowObuWeaknessTrafficView}") + } else { //V2I场景进PNC scV2iPnc.isChecked = false CallerAutoPilotControlManager.sendV2iToPncCmd(false) - hmiAction("SOP V2I场景进PNC, ",false) - Log.i(TAG,"SOP V2I场景进PNC, false") + hmiAction("SOP V2I场景进PNC, ", false) + Log.i(TAG, "SOP V2I场景进PNC, false") //闯红灯预警 scRunRedLightSop.isChecked = false - hmiAction("SOP obu闯红灯预警, ",false) - Log.i(TAG,"SOP obu闯红灯预警, false") + hmiAction("SOP obu闯红灯预警, ", false) + Log.i(TAG, "SOP obu闯红灯预警, false") CallerTelematicManager.sendMsgToAllClients(TelematicConstant.OBU_RUNREDLIGHT_WARNING, "0".toByteArray()) //路侧弱势交通参与者 scObuWeaknessTrafficSop.isChecked = false - hmiAction("SOP obu弱势交通控制, ",false) - Log.i(TAG,"SOP obu弱势交通控制, false") + hmiAction("SOP obu弱势交通控制, ", false) + Log.i(TAG, "SOP obu弱势交通控制, false") } scV2iPnc.isEnabled = isChecked scRunRedLightSop.isEnabled = isChecked scObuWeaknessTrafficSop.isEnabled = isChecked - if(!compoundButton.isPressed){ + if (!compoundButton.isPressed) { return@setOnCheckedChangeListener } HmiBuildConfig.isShowObuV2iView = isChecked @@ -231,22 +270,22 @@ internal class SOPSettingView @JvmOverloads constructor( //V2N新链路 scNewV2NData.isChecked = FunctionBuildConfig.isNewV2NData scNewV2NData.setOnCheckedChangeListener { compoundButton, isChecked -> - if(!compoundButton.isPressed){ + if (!compoundButton.isPressed) { return@setOnCheckedChangeListener } - hmiAction("SOP 是否是V2N新链路(云->工控机->App)",isChecked) - Log.i(TAG,"SOP 是否是V2N新链路(云->工控机->App) ${isChecked}") + hmiAction("SOP 是否是V2N新链路(云->工控机->App)", isChecked) + Log.i(TAG, "SOP 是否是V2N新链路(云->工控机->App) ${isChecked}") FunctionBuildConfig.isNewV2NData = isChecked } //V2N场景进PNC scV2nPnc.isChecked = FunctionBuildConfig.isV2NPnc - scV2nPnc.setOnCheckedChangeListener{ compoundButton, isChecked -> - if(!compoundButton.isPressed){ + scV2nPnc.setOnCheckedChangeListener { compoundButton, isChecked -> + if (!compoundButton.isPressed) { return@setOnCheckedChangeListener } - hmiAction("SOP V2N场景进PNC, ",isChecked) - Log.i(TAG,"SOP V2N场景进PNC, $isChecked") + hmiAction("SOP V2N场景进PNC, ", isChecked) + Log.i(TAG, "SOP V2N场景进PNC, $isChecked") CallerAutoPilotControlManager.sendV2nToPncCmd(isChecked) FunctionBuildConfig.isV2NPnc = isChecked } @@ -254,11 +293,11 @@ internal class SOPSettingView @JvmOverloads constructor( //绿波通行(默认关闭) scGreenWaveSop.isChecked = HmiBuildConfig.isShowGreenWaveView scGreenWaveSop.setOnCheckedChangeListener { compoundButton, isChecked -> - if(!compoundButton.isPressed){ + if (!compoundButton.isPressed) { return@setOnCheckedChangeListener } - hmiAction("SOP obu绿波通行, ",isChecked) - Log.i(TAG,"SOP obu绿波通行, $isChecked") + hmiAction("SOP obu绿波通行, ", isChecked) + Log.i(TAG, "SOP obu绿波通行, $isChecked") HmiBuildConfig.isShowGreenWaveView = isChecked if (HmiBuildConfig.isShowGreenWaveView) { CallerTelematicManager.sendMsgToAllClients(TelematicConstant.OBU_GREENWAVE_WARNING, "1".toByteArray()) @@ -269,12 +308,12 @@ internal class SOPSettingView @JvmOverloads constructor( //V2I场景进PNC scV2iPnc.isChecked = FunctionBuildConfig.isV2IPnc - scV2iPnc.setOnCheckedChangeListener{ compoundButton, isChecked -> - if(!compoundButton.isPressed){ + scV2iPnc.setOnCheckedChangeListener { compoundButton, isChecked -> + if (!compoundButton.isPressed) { return@setOnCheckedChangeListener } - hmiAction("SOP V2I场景进PNC, ",isChecked) - Log.i(TAG,"SOP V2I场景进PNC, $isChecked") + hmiAction("SOP V2I场景进PNC, ", isChecked) + Log.i(TAG, "SOP V2I场景进PNC, $isChecked") CallerAutoPilotControlManager.sendV2iToPncCmd(isChecked) FunctionBuildConfig.isV2IPnc = isChecked } @@ -282,11 +321,11 @@ internal class SOPSettingView @JvmOverloads constructor( //闯红灯预警(默认关闭) scRunRedLightSop.isChecked = HmiBuildConfig.isShowRunRedLightView scRunRedLightSop.setOnCheckedChangeListener { compoundButton, isChecked -> - if(!compoundButton.isPressed){ + if (!compoundButton.isPressed) { return@setOnCheckedChangeListener } - hmiAction("SOP obu闯红灯预警, ",isChecked) - Log.i(TAG,"SOP obu闯红灯预警, $isChecked") + hmiAction("SOP obu闯红灯预警, ", isChecked) + Log.i(TAG, "SOP obu闯红灯预警, $isChecked") HmiBuildConfig.isShowRunRedLightView = isChecked if (HmiBuildConfig.isShowRunRedLightView) { CallerTelematicManager.sendMsgToAllClients(TelematicConstant.OBU_RUNREDLIGHT_WARNING, "1".toByteArray()) @@ -298,22 +337,22 @@ internal class SOPSettingView @JvmOverloads constructor( //路侧弱势交通参与者(默认开启) scObuWeaknessTrafficSop.isChecked = HmiBuildConfig.isShowObuWeaknessTrafficView scObuWeaknessTrafficSop.setOnCheckedChangeListener { compoundButton, isChecked -> - if(!compoundButton.isPressed){ + if (!compoundButton.isPressed) { return@setOnCheckedChangeListener } - hmiAction("SOP obu弱势交通控制, ",isChecked) - Log.i(TAG,"SOP obu弱势交通控制, $isChecked") + hmiAction("SOP obu弱势交通控制, ", isChecked) + Log.i(TAG, "SOP obu弱势交通控制, $isChecked") HmiBuildConfig.isShowObuWeaknessTrafficView = isChecked } //V2V总开关(默认关闭) scObuV2vView.isChecked = HmiBuildConfig.isShowObuV2vView scObuV2vView.setOnCheckedChangeListener { compoundButton, isChecked -> - if(!compoundButton.isPressed){ + if (!compoundButton.isPressed) { return@setOnCheckedChangeListener } - hmiAction("SOP obuV2V开关, ",isChecked) - Log.i(TAG,"SOP obuV2V开关, $isChecked") + hmiAction("SOP obuV2V开关, ", isChecked) + Log.i(TAG, "SOP obuV2V开关, $isChecked") HmiBuildConfig.isShowObuV2vView = isChecked } @@ -321,11 +360,11 @@ internal class SOPSettingView @JvmOverloads constructor( obuConnectStatus = CallerObuApiManager.isConnected() scObu.isChecked = obuConnectStatus scObu.setOnCheckedChangeListener { compoundButton, isChecked -> - if(!compoundButton.isPressed){ + if (!compoundButton.isPressed) { return@setOnCheckedChangeListener } - hmiAction("SOP OBU控制总开关, ",isChecked) - Log.i(TAG,"SOP OBU控制总开关, $isChecked") + hmiAction("SOP OBU控制总开关, ", isChecked) + Log.i(TAG, "SOP OBU控制总开关, $isChecked") if (isChecked) { CallerObuApiManager.resetObuIpAddress(MogoObuConst.OBU_DEFAULT_IP) } else { @@ -339,12 +378,12 @@ internal class SOPSettingView @JvmOverloads constructor( /** * 地图效果类设置 */ - private fun mapSetting(){ + private fun mapSetting() { //危险障碍物颜色标记开关 scMarkingObstacles.isChecked = FunctionBuildConfig.isPNCWarning scMarkingObstacles.setOnCheckedChangeListener { _, isChecked -> - hmiAction("SOP 危险障碍物颜色标记开关, ",isChecked) - Log.i(TAG,"SOP 危险障碍物颜色标记开关, $isChecked") + hmiAction("SOP 危险障碍物颜色标记开关, ", isChecked) + Log.i(TAG, "SOP 危险障碍物颜色标记开关, $isChecked") FunctionBuildConfig.isPNCWarning = isChecked } if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { @@ -354,8 +393,8 @@ internal class SOPSettingView @JvmOverloads constructor( //引导线动态效果 scRouteDynamicEffect.isChecked = HmiBuildConfig.isShowRouteStrategy scRouteDynamicEffect.setOnCheckedChangeListener { _, isChecked -> - hmiAction("SOP 引导线动态效果, ",isChecked) - Log.i(TAG,"SOP 引导线动态效果, $isChecked") + hmiAction("SOP 引导线动态效果, ", isChecked) + Log.i(TAG, "SOP 引导线动态效果, $isChecked") HmiBuildConfig.isShowRouteStrategy = isChecked } @@ -364,40 +403,40 @@ internal class SOPSettingView @JvmOverloads constructor( scDrawPointCloudData.isChecked = FunctionBuildConfig.isDrawPointCloudData //是否渲染点云数据 scDrawPointCloudData.setOnCheckedChangeListener { compoundButton, isChecked -> - if(!compoundButton.isPressed){ + if (!compoundButton.isPressed) { return@setOnCheckedChangeListener } //打开点云效果时,如果自车光圈是关闭状态,则自动打开自车光圈(点云是跟随光圈的 默认没有光圈就不显示点云的) - if(isChecked && !FunctionBuildConfig.isDisplayAnimEnable){ + if (isChecked && !FunctionBuildConfig.isDisplayAnimEnable) { scCarAperture.isChecked = true - }else{ + } else { scCarAperture.isChecked = FunctionBuildConfig.isDisplayAnimEnable } CallerAutoPilotControlManager.setIsDrawPointCloud(isChecked) FunctionBuildConfig.isDrawPointCloudData = isChecked CallerMapUIServiceManager.getMapUIController()?.setIsDrawPointCloud(isChecked) CallerSopSettingManager.invokePointCloudListener(isChecked) - hmiAction("SOP 是否渲染点云数据, ",isChecked) - Log.i(TAG,"SOP 是否渲染点云数据, $isChecked") + hmiAction("SOP 是否渲染点云数据, ", isChecked) + Log.i(TAG, "SOP 是否渲染点云数据, $isChecked") } //自车光圈 - if(FunctionBuildConfig.isDrawPointCloudData){ + if (FunctionBuildConfig.isDrawPointCloudData) { //如果点云效果是打开的,则自车光圈也跟随打开 FunctionBuildConfig.isDisplayAnimEnable = true scCarAperture.isChecked = true CallerMapUIServiceManager.getMapUIController()?.setDisplayAnimEnable(true) - hmiAction("SOP 是否展示自车光圈,",FunctionBuildConfig.isDisplayAnimEnable) - Log.i(TAG,"SOP 是否展示自车光圈,${FunctionBuildConfig.isDisplayAnimEnable}") - }else{ + hmiAction("SOP 是否展示自车光圈,", FunctionBuildConfig.isDisplayAnimEnable) + Log.i(TAG, "SOP 是否展示自车光圈,${FunctionBuildConfig.isDisplayAnimEnable}") + } else { scCarAperture.isChecked = FunctionBuildConfig.isDisplayAnimEnable } scCarAperture.setOnCheckedChangeListener { compoundButton, isChecked -> CallerMapUIServiceManager.getMapUIController()?.setDisplayAnimEnable(isChecked) CallerSopSettingManager.invokeCarApertureListener(isChecked) - hmiAction("SOP 是否展示自车光圈,",isChecked) - Log.i(TAG,"SOP 是否展示自车光圈,$isChecked") - if(!compoundButton.isPressed){ + hmiAction("SOP 是否展示自车光圈,", isChecked) + Log.i(TAG, "SOP 是否展示自车光圈,$isChecked") + if (!compoundButton.isPressed) { return@setOnCheckedChangeListener } FunctionBuildConfig.isDisplayAnimEnable = isChecked @@ -407,12 +446,12 @@ internal class SOPSettingView @JvmOverloads constructor( /** * 与车相关类设置 */ - private fun vehicleSetting(){ + private fun vehicleSetting() { //绕障类功能 scObstacleAvoidance.isChecked = FunctionBuildConfig.isDetouring scObstacleAvoidance.setOnCheckedChangeListener { _, isChecked -> - hmiAction("SOP 绕障类功能开关, ",isChecked) - Log.i(TAG,"SOP 绕障类功能开关, $isChecked") + hmiAction("SOP 绕障类功能开关, ", isChecked) + Log.i(TAG, "SOP 绕障类功能开关, $isChecked") CallerAutoPilotControlManager.sendDetouring(isChecked) FunctionBuildConfig.isDetouring = isChecked } @@ -420,11 +459,11 @@ internal class SOPSettingView @JvmOverloads constructor( // 演示模式,上一次勾选的数据 scDemoMode.isChecked = FunctionBuildConfig.isDemoMode scDemoMode.setOnCheckedChangeListener { compoundButton, isChecked -> - if(!compoundButton.isPressed){ + if (!compoundButton.isPressed) { return@setOnCheckedChangeListener } - hmiAction("SOP 演示模式开关, ",!FunctionBuildConfig.isDemoMode) - Log.i(TAG,"SOP 演示模式开关, ${!FunctionBuildConfig.isDemoMode}") + hmiAction("SOP 演示模式开关, ", !FunctionBuildConfig.isDemoMode) + Log.i(TAG, "SOP 演示模式开关, ${!FunctionBuildConfig.isDemoMode}") FunctionBuildConfig.isDemoMode = !FunctionBuildConfig.isDemoMode CallerAutoPilotControlManager.setDemoMode(FunctionBuildConfig.isDemoMode) CallerHmiViewControlListenerManager.invokeFuncMode(FUNC_MODE_DEMO, FunctionBuildConfig.isDemoMode) @@ -442,11 +481,11 @@ internal class SOPSettingView @JvmOverloads constructor( // 雨天模式,上一次勾选的数据 scRainMode.isChecked = FunctionBuildConfig.isRainMode scRainMode.setOnCheckedChangeListener { compoundButton, isChecked -> - if(!compoundButton.isPressed){ + if (!compoundButton.isPressed) { return@setOnCheckedChangeListener } - hmiAction("SOP 雨天模式开关, ",isChecked) - Log.i(TAG,"SOP 雨天模式开关, $isChecked") + hmiAction("SOP 雨天模式开关, ", isChecked) + Log.i(TAG, "SOP 雨天模式开关, $isChecked") FunctionBuildConfig.isRainMode = isChecked CallerAutoPilotControlManager.setRainMode(isChecked) CallerHmiViewControlListenerManager.invokeFuncMode(FUNC_MODE_RAIN, isChecked) @@ -459,47 +498,47 @@ internal class SOPSettingView @JvmOverloads constructor( //弱网减速停车 scWeakNetSlowDown.isChecked = FunctionBuildConfig.isWeakNetSlowDown - scWeakNetSlowDown.setOnCheckedChangeListener{_, isChecked -> + scWeakNetSlowDown.setOnCheckedChangeListener { _, isChecked -> FunctionBuildConfig.isWeakNetSlowDown = isChecked CallerAutoPilotControlManager.sendWeakNetSlowDown(isChecked) - hmiAction("SOP 弱网减速停车, ",isChecked) - Log.i(TAG,"SOP 弱网减速停车, $isChecked") + hmiAction("SOP 弱网减速停车, ", isChecked) + Log.i(TAG, "SOP 弱网减速停车, $isChecked") } //故障减速停车 scFaultSlowDown.isChecked = FunctionBuildConfig.isFaultSlowDown - scFaultSlowDown.setOnCheckedChangeListener{_, isChecked -> + scFaultSlowDown.setOnCheckedChangeListener { _, isChecked -> FunctionBuildConfig.isFaultSlowDown = isChecked CallerAutoPilotControlManager.sendBreakdownSlowDown(isChecked) - hmiAction("SOP 故障减速停车, ",isChecked) - Log.i(TAG,"SOP 故障减速停车, $isChecked") + hmiAction("SOP 故障减速停车, ", isChecked) + Log.i(TAG, "SOP 故障减速停车, $isChecked") } //融合模式 rgFusionMode.setOnCheckedChangeListener { _, p1 -> - when(p1){ + when (p1) { //全融合模式 - R.id.rbFullIntegration ->{ + R.id.rbFullIntegration -> { FunctionBuildConfig.fusionMode = 1 } //盲区模式 - R.id.rbBlind ->{ + R.id.rbBlind -> { FunctionBuildConfig.fusionMode = 2 } //超视距模式 - R.id.rbBeyondSight ->{ + R.id.rbBeyondSight -> { FunctionBuildConfig.fusionMode = 3 } //透传模式 - R.id.rbTransparent ->{ + R.id.rbTransparent -> { FunctionBuildConfig.fusionMode = 4 } //纯路侧模式 - R.id.rbPureRoad ->{ + R.id.rbPureRoad -> { FunctionBuildConfig.fusionMode = 5 } } - hmiAction("SOP 融合模式, ",FunctionBuildConfig.fusionMode) - Log.i(TAG,"SOP 融合模式, ${FunctionBuildConfig.fusionMode}") + hmiAction("SOP 融合模式, ", FunctionBuildConfig.fusionMode) + Log.i(TAG, "SOP 融合模式, ${FunctionBuildConfig.fusionMode}") CallerAutoPilotControlManager.sendFusionMode(FunctionBuildConfig.fusionMode) } } @@ -507,12 +546,12 @@ internal class SOPSettingView @JvmOverloads constructor( /** * 其他类别开关设置 */ - private fun otherSetting(){ + private fun otherSetting() { //红绿灯标识开关 scTrafficLight.isChecked = !HmiBuildConfig.isShowTrafficLightView scTrafficLight.setOnCheckedChangeListener { _, isChecked -> - hmiAction("SOP 红绿灯标识开关, ",isChecked) - Log.i(TAG,"SOP 红绿灯标识开关, $isChecked") + hmiAction("SOP 红绿灯标识开关, ", isChecked) + Log.i(TAG, "SOP 红绿灯标识开关, $isChecked") if (isChecked) { CallerHmiManager.showTrafficLightView() } else { @@ -523,22 +562,22 @@ internal class SOPSettingView @JvmOverloads constructor( //限速标识 scSpeedLimit.isChecked = HmiBuildConfig.isShowLimitingVelocityView scSpeedLimit.setOnCheckedChangeListener { _, isChecked -> - hmiAction("SOP 限速标识开关, ",isChecked) - Log.i(TAG,"SOP 限速标识开关, $isChecked") + hmiAction("SOP 限速标识开关, ", isChecked) + Log.i(TAG, "SOP 限速标识开关, $isChecked") if (isChecked) { HmiBuildConfig.isShowLimitingVelocityView = true - CallerHmiViewControlListenerManager.invokeVisible(IViewControlListener.LimitingVelocityView_TAG,View.VISIBLE) + CallerHmiViewControlListenerManager.invokeVisible(IViewControlListener.LimitingVelocityView_TAG, View.VISIBLE) } else { HmiBuildConfig.isShowLimitingVelocityView = false - CallerHmiViewControlListenerManager.invokeVisible(IViewControlListener.LimitingVelocityView_TAG,View.GONE) + CallerHmiViewControlListenerManager.invokeVisible(IViewControlListener.LimitingVelocityView_TAG, View.GONE) } } //异常上报提示 scIPCReport.isChecked = FunctionBuildConfig.isReportWarning scIPCReport.setOnCheckedChangeListener { _, isChecked -> - hmiAction("SOP 是否开启异常上报, ",isChecked) - Log.i(TAG,"SOP 是否开启异常上报, $isChecked") + hmiAction("SOP 是否开启异常上报, ", isChecked) + Log.i(TAG, "SOP 是否开启异常上报, $isChecked") FunctionBuildConfig.isReportWarning = isChecked } @@ -561,10 +600,52 @@ internal class SOPSettingView @JvmOverloads constructor( //是否展示被动触发的录包弹窗(自动驾驶下出现问题触发的录包) scShowBagRecordWindow.isChecked = FunctionBuildConfig.isShowBagRecordWindow - scShowBagRecordWindow.setOnCheckedChangeListener{_, isChecked -> + scShowBagRecordWindow.setOnCheckedChangeListener { _, isChecked -> FunctionBuildConfig.isShowBagRecordWindow = isChecked - hmiAction("SOP 是否展示被动触发的录包弹窗, ",isChecked) - Log.i(TAG,"SOP 是否展示被动触发的录包弹窗, $isChecked") + hmiAction("SOP 是否展示被动触发的录包弹窗, ", isChecked) + Log.i(TAG, "SOP 是否展示被动触发的录包弹窗, $isChecked") + } + + // 清扫车业务模式切换 + scSweeperModeSwitch?.also { switchView -> + switchView.isChecked = + if (SweeperVehicleConfigUtils.isSPExistCurrentSweeperModeConfig()) + SweeperVehicleConfigUtils.isSPCurrentSweeperCloudMode() + else + SweeperVehicleConfigUtils.isDefaultSweeperCloudMode(FunctionBuildConfig.sweeperDefaultMode) + if (!AppIdentityModeUtils.isSweeper(FunctionBuildConfig.appIdentityMode)) { + switchView.visibility = GONE + } else { + if (SweeperVehicleConfigUtils.isDefaultSweeperCanSwitchMode(FunctionBuildConfig.sweeperCanSwitchMode)) { + switchView.isEnabled = true + switchView.visibility = VISIBLE + + switchView.setOnCheckedChangeListener { buttonView, isChecked -> + // isChecked==true 云控模式,isChecked==false 运营模式 + // 先弹框确认 + if(!buttonView.isPressed) return@setOnCheckedChangeListener + context?.also { cxt -> + val confirmDialog = SweeperModeChangedConfirmDialog(cxt) + confirmDialog.setClickListener(object: SweeperModeChangedConfirmDialog.ClickListener { + override fun confirm() { + CallerSweeperModeListenerManager.invokeSweeperModeListeners( + if (isChecked) SweeperVehicleConfigUtils.BUSINESS_MODE_CLOUD + else SweeperVehicleConfigUtils.BUSINESS_MODE_OPERATE + ) + } + + override fun cancel() { + buttonView.isChecked = !isChecked + } + }) + confirmDialog.showSweeperModeChangeConfirmDialog() + } + } + } else { + switchView.isEnabled = false + switchView.visibility = GONE + } + } } //变道绕障的目标障碍物速度阈值 @@ -576,7 +657,7 @@ internal class SOPSettingView @JvmOverloads constructor( FunctionBuildConfig.detouringSpeed-- tvSpeed.text = "${FunctionBuildConfig.detouringSpeed} m/s" } - hmiAction("SOP 变道绕障的目标障碍物速度阈值",FunctionBuildConfig.detouringSpeed) + hmiAction("SOP 变道绕障的目标障碍物速度阈值", FunctionBuildConfig.detouringSpeed) } ivSpeedAdd.setOnClickListener { if (FunctionBuildConfig.detouringSpeed >= 7) { @@ -585,17 +666,17 @@ internal class SOPSettingView @JvmOverloads constructor( FunctionBuildConfig.detouringSpeed++ tvSpeed.text = "${FunctionBuildConfig.detouringSpeed} m/s" } - hmiAction("SOP 变道绕障的目标障碍物速度阈值",FunctionBuildConfig.detouringSpeed) + hmiAction("SOP 变道绕障的目标障碍物速度阈值", FunctionBuildConfig.detouringSpeed) } btnSpeedSet.setOnClickListener { val isSuccess = - CallerAutoPilotControlManager.sendDetouringSpeed(FunctionBuildConfig.detouringSpeed.toDouble()) + CallerAutoPilotControlManager.sendDetouringSpeed(FunctionBuildConfig.detouringSpeed.toDouble()) if (isSuccess == true) { ToastUtils.showShort("变道绕障的目标障碍物速度阈值设置成功") - hmiAction("SOP 变道绕障的目标障碍物速度阈值设置","成功") + hmiAction("SOP 变道绕障的目标障碍物速度阈值设置", "成功") } else { ToastUtils.showShort("变道绕障的目标障碍物速度阈值设置失败") - hmiAction("SOP 变道绕障的目标障碍物速度阈值设置","失败") + hmiAction("SOP 变道绕障的目标障碍物速度阈值设置", "失败") } } @@ -614,7 +695,7 @@ internal class SOPSettingView @JvmOverloads constructor( val mf = CallerDevaToolsManager.mofang() if (mf != null) { mfStatusLayout.setClickEnabled(true) - mfStatusLayout.setClickedTextAndTag(if (mf.isConnected()) "断开魔方连接" else "开始连接魔方", if (mf.isConnected()) 0 else 1) + mfStatusLayout.setClickedTextAndTag(if (mf.isConnected()) "断开魔方连接" else "开始连接魔方", if (mf.isConnected()) 0 else 1) mf.registerMoFangStatusListener(TAG, this) mfStatusLayout.setOnClickCallback { val tag = it.tag as? Int @@ -659,22 +740,22 @@ internal class SOPSettingView @JvmOverloads constructor( super.onAttachedToWindow() //添加 业务配置监听 CallerDevaToolsFuncConfigListenerManager.registerDevaToolsFuncConfigListener( - FuncBizConfig.FOUNDATION, TAG, true, this + FuncBizConfig.FOUNDATION, TAG, true, this ) - CallerHmiViewControlListenerManager.addListener(TAG,this) + CallerHmiViewControlListenerManager.addListener(TAG, this) CallerAutopilotGetParamResponseDispatcher.addListener(TAG, this) //查询融合模式 CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.FUSION_MODE) //雨天、美化、点云设置同步 - CallerSopSettingManager.addListener(TAG,this) + CallerSopSettingManager.addListener(TAG, this) } override fun updateFuncMode(tag: String, boolean: Boolean) { super.updateFuncMode(tag, boolean) - if(tag == FUNC_MODE_DEMO){ + if (tag == FUNC_MODE_DEMO) { scDemoMode.isChecked = FunctionBuildConfig.isDemoMode } - if(tag == FUNC_MODE_RAIN){ + if (tag == FUNC_MODE_RAIN) { scRainMode.isChecked = FunctionBuildConfig.isRainMode } } @@ -696,9 +777,9 @@ internal class SOPSettingView @JvmOverloads constructor( //美化模式 FuncBizConfig.BIZ_BEAUTY_MODE -> { scDemoMode.isClickable = !lock - if(lock){ + if (lock) { scDemoMode.visibility = View.INVISIBLE - }else{ + } else { scDemoMode.visibility = View.VISIBLE } } @@ -781,31 +862,35 @@ internal class SOPSettingView @JvmOverloads constructor( * 工控机配置参数获取 */ override fun onGetParamResp( - header: MessagePad.Header, - getParamResp: MessagePad.SetParamReq, - adasParam: AdasParam + header: MessagePad.Header, + getParamResp: MessagePad.SetParamReq, + adasParam: AdasParam ) { //融合模式 ThreadUtils.runOnUiThread { FunctionBuildConfig.fusionMode = adasParam.fusionMode - when(FunctionBuildConfig.fusionMode){ - 1->{ + when (FunctionBuildConfig.fusionMode) { + 1 -> { //全融合模式 rgFusionMode.check(R.id.rbFullIntegration) } - 2->{ + + 2 -> { //盲区模式 rgFusionMode.check(R.id.rbBlind) } - 3->{ + + 3 -> { //超视距模式 rgFusionMode.check(R.id.rbBeyondSight) } - 4->{ + + 4 -> { //透传模式 rgFusionMode.check(R.id.rbTransparent) } - 5->{ + + 5 -> { //纯路侧模式 rgFusionMode.check(R.id.rbPureRoad) } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/SweeperModeChangedConfirmDialog.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/SweeperModeChangedConfirmDialog.kt new file mode 100644 index 0000000000..068cdea617 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/SweeperModeChangedConfirmDialog.kt @@ -0,0 +1,51 @@ +package com.mogo.eagle.core.function.hmi.ui.tools + +import android.content.Context +import android.widget.TextView +import androidx.lifecycle.LifecycleObserver +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.function.hmi.dialog.BaseFloatDialog + +/** + * @author aibingbing + * @description 切换清扫车模式确认对话框 + * @since: 2023/10/30 + */ +class SweeperModeChangedConfirmDialog(context: Context) : BaseFloatDialog(context), LifecycleObserver { + + private var modeChangeBtnConfirm: TextView? = null + private var modeChangeBtnCancel: TextView? = null + private var clickListener: ClickListener? = null + + init { + setContentView(R.layout.dialog_sweeper_mode_change) + setCanceledOnTouchOutside(true) + modeChangeBtnConfirm = findViewById(R.id.tv_sweeper_mode_change_confirm) + modeChangeBtnCancel = findViewById(R.id.tv_sweeper_mode_change_cancel) + + modeChangeBtnConfirm?.setOnClickListener { + clickListener?.confirm() + dismiss() + } + modeChangeBtnCancel?.setOnClickListener { + clickListener?.cancel() + dismiss() + } + } + + fun setClickListener(clickListener: ClickListener) { + this.clickListener = clickListener + } + + fun showSweeperModeChangeConfirmDialog() { + if (isShowing) { + return + } + show() + } + + interface ClickListener { + fun confirm() + fun cancel() + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_sweeper_mode_change.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_sweeper_mode_change.xml new file mode 100644 index 0000000000..0839d24951 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_sweeper_mode_change.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml index 5121d303f6..20c9770eed 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml @@ -588,6 +588,20 @@ android:layout_marginTop="@dimen/dp_25" android:layout_marginBottom="@dimen/dp_10" /> + + 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 f47fcdb292..61bda1fa07 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 @@ -91,4 +91,7 @@ 同步中... 请求失败 异常 + + 清扫业务模式切换提示 + 请确认是否要切换清扫业务(切换将自动重启APP)? diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt index fcc59f6365..aa8933fb86 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt @@ -325,6 +325,6 @@ object FunctionBuildConfig { */ @Volatile @JvmField - var sweeperCanSwitchMode = "true" + var sweeperCanSwitchMode = true } \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/vehicle/IMoGoSweeperModeListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/vehicle/IMoGoSweeperModeListener.kt new file mode 100644 index 0000000000..5dab0c2a33 --- /dev/null +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/vehicle/IMoGoSweeperModeListener.kt @@ -0,0 +1,9 @@ +package com.mogo.eagle.core.function.api.vehicle + +/** + * 清扫车业务模式 + */ +interface IMoGoSweeperModeListener { + + fun onSweeperCurrentModeChanged(currentMode: String) +} \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/vehicle/CallerSweeperModeListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/vehicle/CallerSweeperModeListenerManager.kt new file mode 100644 index 0000000000..de72f04ca5 --- /dev/null +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/vehicle/CallerSweeperModeListenerManager.kt @@ -0,0 +1,17 @@ +package com.mogo.eagle.core.function.call.vehicle + +import com.mogo.eagle.core.function.api.vehicle.IMoGoSweeperModeListener +import com.mogo.eagle.core.function.call.base.CallerBase + +/** + * 清扫车业务模式 模式变化 监听管理类 + */ +object CallerSweeperModeListenerManager : CallerBase() { + + fun invokeSweeperModeListeners(currentMode: String) { + CallerSweeperModeListenerManager.M_LISTENERS.forEach { + val listener = it.value + listener.onSweeperCurrentModeChanged(currentMode) + } + } +} \ No newline at end of file diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/mogo/vehicle/SweeperVehicleConfigUtils.kt b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/mogo/vehicle/SweeperVehicleConfigUtils.kt index a74a154aed..c72d252f84 100644 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/mogo/vehicle/SweeperVehicleConfigUtils.kt +++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/mogo/vehicle/SweeperVehicleConfigUtils.kt @@ -7,14 +7,24 @@ import com.mogo.eagle.core.utilcode.util.SPUtils */ object SweeperVehicleConfigUtils { // 业务模式(云控/运营) - private const val BUSINESS_MODE_OPERATE = "Operate" - private const val BUSINESS_MODE_CLOUD = "Cloud" + const val BUSINESS_MODE_OPERATE = "Operate" + const val BUSINESS_MODE_CLOUD = "Cloud" // 本地存储SP key private const val SP_KEY_SWEEPER_CURRENT_MODE = "key_sweeper_current_mode" /** - * 是否 默认清扫车营运模式 + * 是否 能切换清扫车业务模式 + * + * @param sweeperCanSwitchMode productFlavors 配置的默认值 + */ + @JvmStatic + fun isDefaultSweeperCanSwitchMode(sweeperCanSwitchMode: Boolean): Boolean { + return sweeperCanSwitchMode + } + + /** + * 是否 默认清扫车运营模式 * * @param sweeperDefaultMode productFlavors 配置的默认值 * @return true - 是默认清扫车运营模式 false - 不是默认清扫车运营模式 @@ -36,7 +46,7 @@ object SweeperVehicleConfigUtils { } /** - * 保存 当前清扫业务模式到SP + * 保存 当前用户选择的清扫业务模式到SP */ @JvmStatic fun setSPCurrentSweeperMode(sweeperCurrentMode: String) { @@ -44,7 +54,15 @@ object SweeperVehicleConfigUtils { } /** - * 是否SP中存在 当前清扫业务模式的配置 + * 移除 当前用户选择的清扫业务模式到SP + */ + @JvmStatic + fun removeSPCurrentSweeperMode() { + SPUtils.getInstance().remove(SP_KEY_SWEEPER_CURRENT_MODE) + } + + /** + * 是否SP中存在 当前用户选择的清扫业务模式的配置 */ @JvmStatic fun isSPExistCurrentSweeperModeConfig(): Boolean { @@ -52,7 +70,7 @@ object SweeperVehicleConfigUtils { } /** - * 是否SP中 当前是运营业务模式 + * 是否SP中 当前是用户选择的运营业务模式 */ @JvmStatic fun isSPCurrentSweeperOperateMode(): Boolean { @@ -62,7 +80,7 @@ object SweeperVehicleConfigUtils { } /** - * 是否SP中 当前是云控业务模式 + * 是否SP中 当前是用户选择的云控业务模式 */ @JvmStatic fun isSPCurrentSweeperCloudMode(): Boolean { diff --git a/gradle.properties b/gradle.properties index 6101bac0ca..44c63f16fe 100644 --- a/gradle.properties +++ b/gradle.properties @@ -173,6 +173,6 @@ CHARTER_DRIVER_VERSION=6.1.0 # 包车模式乘客端端版本号 CHARTER_PASSENGER_VERSION=5.1.0 # 支持云控清扫车模式司机端版本号 -SWEEPERCLOUD_DRIVER_VERSION=3.2.0 +SWEEPERCLOUD_DRIVER_VERSION=6.1.0 # 清扫车模式司机端版本号 -SWEEPEROPERATE_DRIVER_VERSION=3.1.0 +SWEEPEROPERATE_DRIVER_VERSION=6.1.0