From 2d5e2cdc48fd66edee3d307fa5c4e281ad40b66c Mon Sep 17 00:00:00 2001 From: yangyakun Date: Wed, 25 Sep 2024 15:51:07 +0800 Subject: [PATCH 1/3] =?UTF-8?q?[6.7.0]=20[fea]=20[=E5=BE=AA=E7=8E=AF?= =?UTF-8?q?=E7=BA=BF=E8=B7=AF=E6=94=AF=E6=8C=81]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/module/constant/OchCommonConst.kt | 2 + .../autopilot/OchAutoPilotManager.kt | 1 - .../OchAutoPilotStatusListenerManager.kt | 46 +++++++++++--- .../manager/autopilot/line/ILineCallback.java | 2 + .../manager/autopilot/line/LineManager.kt | 63 +++++++++++++++++-- .../com/mogo/och/weaknet/model/OrderModel.kt | 30 +++------ 6 files changed, 107 insertions(+), 37 deletions(-) diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/constant/OchCommonConst.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/constant/OchCommonConst.kt index 4c30321280..a57266e728 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/constant/OchCommonConst.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/constant/OchCommonConst.kt @@ -59,5 +59,7 @@ class OchCommonConst { // 自动驾驶自动规划的最大距离 const val AUTOMATIC_PLANNING_MAX_DISTANCE = 15 + + const val ARRIVE_AT_END_STATION_DISTANCE = 10 } } \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotManager.kt index 558ac3c4a8..9da319e419 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotManager.kt @@ -95,7 +95,6 @@ object OchAutoPilotManager : IMoGoReceiveReceivedAckListener, IMoGoFsm2024Listen @JvmStatic fun startAutoPilot(controlParameters: AutopilotControlParameters?): Long { val sessionId = CallerAutoPilotControlManager.startAutoPilot(controlParameters) - LineManager.isReStartAutopilot = false globalSessionId.set(sessionId) fsmBackSessionId.set(-1L) OchAutopilotAnalytics.triggerStartAutopilotParameters(controlParameters, sessionId) diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotStatusListenerManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotStatusListenerManager.kt index 441363f1de..fbc81bca6e 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotStatusListenerManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotStatusListenerManager.kt @@ -6,11 +6,13 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.eagle.core.utilcode.util.StringUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.och.common.module.R import com.mogo.och.common.module.manager.autopilot.autopilot.bean.ArrivedStation import com.mogo.och.common.module.manager.autopilot.line.LineManager import com.mogo.och.common.module.manager.autopilot.trajectory.TrajectoryManager +import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager import com.mogo.och.common.module.utils.CallerBase import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.mogo.adas.data.bean.MogoReport @@ -51,10 +53,12 @@ object OchAutoPilotStatusListenerManager : CallerBase() { */ private var endStation: BusStationBean? = null - var isReStartAutopilot = true + var isFirstStartAutopilot = true + + private var orderId = "" + + // 自车定位 + private val mMapLocationListener = object : IMoGoChassisLocationGCJ02Listener { + override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) { + if (null == mogoLocation) return + getStations { start, end -> + val startLon = end.gcjLon + val startLat = end.gcjLat + val distance = CoordinateUtils.calculateLineDistance( + startLon, startLat, + mogoLocation.longitude, mogoLocation.latitude + ) + if (distance <= OchCommonConst.ARRIVE_AT_END_STATION_DISTANCE) { + val token = CallerAutoPilotControlManager.sendSsmFuncQueryAutoPilotStation(orderId) + OchChainLogManager.writeChainLogAutopilot("到站逻辑","距离站点:$distance 请求token:$token") + } + } + } + } + + + fun invokeArrivedStation(orderId: String, arrivedStationFlag: Boolean) { + if (this.orderId==orderId&&arrivedStationFlag){ + M_LISTENERS.forEach { + it.value.arrivedStationSuccessBySearch() + } + } + } + + fun invokeSetIsFirstAutopilot(orderId: String?, firstAutopilotFlag: Boolean, count: Int) { + if (this.orderId==orderId){ + if(count>=1){ + isFirstStartAutopilot = false + }else{ + isFirstStartAutopilot = true + } + } + } /** * 设置站点信息 */ fun setStartAndEndStation(startStation: BusStationBean?, endStation: BusStationBean?) { if(this.startStation!=startStation||this.endStation!=endStation){ - isReStartAutopilot = true + isFirstStartAutopilot = true } this.startStation = startStation this.endStation = endStation @@ -197,11 +241,19 @@ object LineManager : CallerBase() { endStationLocation.latitude = end.gcjLat endStationLocation.longitude = end.gcjLon TrajectoryAndDistanceManager.setStationPoint(startStationLocation, endStationLocation, lineInfo.lineId) + OchLocationManager.addGCJ02Listener(TAG,1,mMapLocationListener) + // 恢复启动自驾信息 + searchAutopilotState() } } + fun searchAutopilotState(){ + CallerAutoPilotControlManager.sendSsmFuncQueryAutoPilotInfo() + } private fun clearAutopilotControlParameters(){ CallerAutoPilotStatusListenerManager.updateAutopilotControlParameters(null) TrajectoryAndDistanceManager.setStationPoint(null, null, null) + this.orderId = "" + OchLocationManager.removeGCJ02Listener(TAG) } fun hasDrawnGlobalTrajectory(): Boolean { @@ -245,6 +297,9 @@ object LineManager : CallerBase() { parameters?.startLatLon = AutoPilotLonLat(start.lat, start.lon) parameters?.endLatLon = AutoPilotLonLat(end.lat, end.lon) parameters?.vehicleType = 10 + this.orderId = "${lineInfo.lineId}_${start.siteId}_${end.siteId}" + parameters?.orderId = this.orderId + parameters?.firstAutopilotFlag = isFirstStartAutopilot if (parameters?.autoPilotLine == null) { parameters?.autoPilotLine = AutoPilotLine( @@ -334,7 +389,7 @@ object LineManager : CallerBase() { M_BUS + TAG, "行程日志-开启自动驾驶====" + GsonUtil.jsonFromObject(parameters) + " startLatLon=" + parameters.startName + ",endLatLon=" + parameters.endName + - "isRestart = " + LineManager.isReStartAutopilot + "isRestart = " + LineManager.isFirstStartAutopilot ) M_LISTENERS.forEach { @@ -354,7 +409,7 @@ object LineManager : CallerBase() { fun triggerStartServiceEvent(send: Boolean,source:Int) { getStationsWithLine { start, end, lineInfo -> OchAutopilotAnalytics.triggerStartAutopilotEvent( - isReStartAutopilot, + isFirstStartAutopilot, send, start.name, end.name, diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/OrderModel.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/OrderModel.kt index 01abfbb83f..de776a3056 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/OrderModel.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/OrderModel.kt @@ -18,6 +18,7 @@ import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.och.common.module.biz.login.LoginStatusManager import com.mogo.och.common.module.manager.autopilot.autopilot.bean.ArrivedStation +import com.mogo.och.common.module.manager.autopilot.line.ILineCallback import com.mogo.och.common.module.manager.autopilot.line.LineManager import com.mogo.och.common.module.manager.autopilot.location.OchLocationManager import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager @@ -71,8 +72,8 @@ object OrderModel { // 加载核销模块 TicketModel.load() - // 定位监听 - OchLocationManager.addGCJ02Listener(TAG, 5, mMapLocationListener) + + LineManager.addListener(TAG,arriveStationBySearch) OchTransform.addListener(TAG,ochTransform) @@ -87,7 +88,7 @@ object OrderModel { TicketModel.release() - OchLocationManager.removeGCJ02Listener(TAG) + LineManager.removeListener(TAG) OchTransform.removeListener(TAG) } @@ -105,34 +106,17 @@ object OrderModel { // 自车定位 - private val mMapLocationListener = object : IMoGoChassisLocationGCJ02Listener { - override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) { - if (null == mogoLocation) return - + private val arriveStationBySearch = object : ILineCallback { + override fun arrivedStationSuccessBySearch() { //是否到站的围栏判断 离站状态并且自动驾驶还未触发到站 if (isGoingToNextStation && !isArrivedStation) { OCHThreadPoolManager.getsInstance().locationExecute { - judgeArrivedStation(mogoLocation) + onArriveAt(null, "兜底:根据定位计算到站") } } } } - //根据围栏判断,是否到达站点 - private fun judgeArrivedStation(location: MogoLocation) { - LineManager.getStations { start, end -> - val startLon = end.gcjLon - val startLat = end.gcjLat - val distance = CoordinateUtils.calculateLineDistance( - startLon, startLat, - location.longitude, location.latitude - ) - if (distance <= BusConst.ARRIVE_AT_END_STATION_DISTANCE) { - d(M_BUS + TAG, "行程日志-judgeArrivedStation() distance = $distance to ${end.name}") - onArriveAt(null, "兜底:根据定位计算到站") - } - } - } /** * 查询小巴路线 From 719762cf984ba576fd227a1057da797d1c24210a Mon Sep 17 00:00:00 2001 From: renwj Date: Wed, 25 Sep 2024 17:16:59 +0800 Subject: [PATCH 2/3] =?UTF-8?q?[6.7.0][=E8=BF=90=E8=90=A5=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF]=20=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo/och/taxi/ui/BaseTaxiTabFragment.java | 62 +- .../main/res/layout/taxi_base_fragment.xml | 39 +- .../java/com/mogo/functions/test/V2NTest.kt | 40 +- .../eagle/function/biz/FuncBizProvider.kt | 2 +- .../biz/v2x/overview/OverViewDataManager.kt | 2 +- .../function/biz/v2x/v2n/V2XEventManager.kt | 6 +- .../biz/v2x/v2n/pnc/V2NIdentifyDrawer.kt | 13 +- .../autopilot/MoGoAutopilotControlProvider.kt | 5 +- .../autopilot/telematic/TeleMsgHandler.kt | 8 +- .../datacenter/obu/MogoObuDcCombineManager.kt | 16 +- .../obu/MogoPrivateObuNewManager.kt | 16 +- .../DevaToolsProvider.kt | 7 +- .../exam/ExamControlManager.kt | 11 +- .../logcat/MoGoLogRecordProviderImpl.kt | 2 +- .../hmi/bone/toolkit/ToolKitDataManager.kt | 4 +- .../core/function/hmi/ui/MoGoHmiProvider.kt | 42 +- .../hmi/ui/operate/OperatePanelLayout.kt | 1001 ++++++++++++++++- .../preferences/PreferenceWithMoFang.kt | 69 ++ .../preferences/PreferenceWithSpeedSetting.kt | 95 ++ .../PreferenceWithUnmanInterval.kt | 103 ++ .../preferences/PreferenceWithWelcomeWords.kt | 56 + .../function/hmi/ui/setting/SOPSettingView.kt | 92 +- .../hmi/ui/viewport/VisualAngleToggleView.kt | 5 - .../drawable-xhdpi/icon_operate_panel_add.png | Bin 0 -> 727 bytes .../icon_operate_panel_checkbox_checked.png | Bin 0 -> 6178 bytes .../icon_operate_panel_checkbox_disabled.png | Bin 0 -> 2485 bytes .../icon_operate_panel_checkbox_unchecked.png | Bin 0 -> 4055 bytes .../icon_operate_panel_minus.png | Bin 0 -> 472 bytes ...con_operate_panel_mofang_connect_doing.png | Bin 0 -> 16203 bytes ...on_operate_panel_mofang_connect_failed.png | Bin 0 -> 41903 bytes ...con_operate_panel_mofang_connect_start.png | Bin 0 -> 19287 bytes .../icon_operate_panel_mofang_disconnect.png | Bin 0 -> 24500 bytes .../icon_operate_panel_ok_disabled.png | Bin 0 -> 4790 bytes .../icon_operate_panel_ok_enabled.png | Bin 0 -> 17345 bytes .../icon_operate_panel_ok_pressed.png | Bin 0 -> 32253 bytes ...on_operate_panel_switch_compat_checked.png | Bin 0 -> 7372 bytes ...n_operate_panel_switch_compat_disabled.png | Bin 0 -> 2593 bytes ..._operate_panel_switch_compat_unchecked.png | Bin 0 -> 2837 bytes ...n_operate_panel_unman_interval_checked.png | Bin 0 -> 11062 bytes .../drawable/bg_operate_panel_checkbox.xml | 6 + .../res/drawable/bg_operate_panel_edit.xml | 16 + .../drawable/bg_operate_panel_edit_button.xml | 6 + .../bg_operate_panel_preference_detail.xml | 6 + .../bg_operate_panel_preference_header.xml | 2 +- .../bg_operate_panel_switch_compat.xml | 6 + .../bg_operate_panel_welcome_words_edit.xml | 6 + ...io_button_operate_panel_unman_interval.xml | 10 + ...dio_group_operate_panel_unman_interval.xml | 6 + ...yout_operate_panel_detail_recyclerview.xml | 7 + .../layout/layout_operate_panel_holder.xml | 5 + ...perate_panel_preference_category_title.xml | 4 +- ...erate_panel_preference_checkbox_compat.xml | 1 + ...layout_operate_panel_preference_header.xml | 5 +- ...operate_panel_preference_switch_compat.xml | 4 +- ...anel_preference_switch_compat_dependee.xml | 4 +- ...anel_preference_widget_checkbox_compat.xml | 4 +- ...nel_preference_widget_edit_with_button.xml | 74 +- ...panel_preference_widget_mofang_connect.xml | 4 +- ...l_preference_widget_radio_group_custom.xml | 76 +- ..._panel_preference_widget_switch_compat.xml | 6 +- ...rate_panel_preference_with_edit_button.xml | 29 + ...rate_panel_preference_with_title_above.xml | 10 +- .../res/layout/module_main_activity_main.xml | 9 +- .../main/res/layout/view_map_container.xml | 15 + .../main/res/values/operate_pandel_dimens.xml | 4 + ...ate_panel_preference_details_business.xml} | 11 +- ...operate_panel_preference_details_demo.xml} | 3 + ...perate_panel_preference_details_hdmap.xml} | 7 + ...erate_panel_preference_details_mofang.xml} | 4 +- ... operate_panel_preference_details_v2x.xml} | 38 +- ...ate_panel_preference_details_vehicles.xml} | 23 +- ...panel_preference_details_welcome_words.xml | 11 + ...l => operate_panel_preference_headers.xml} | 10 +- .../core/data/config/FunctionBuildConfig.kt | 38 +- .../eagle/core/data/config/HmiBuildConfig.kt | 12 +- .../api/devatools/IDevaToolsProvider.kt | 3 +- .../devatools/mofang/IMoGoMoFangProvider.kt | 14 +- .../autopilot/CallerV2XListenerManager.kt | 5 +- .../call/devatools/CallerDevaToolsManager.kt | 4 +- .../mogo-core-res/src/main/res/values/ids.xml | 3 + .../main/res/values/operate_panel_config.xml | 49 + 81 files changed, 1948 insertions(+), 308 deletions(-) create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/preferences/PreferenceWithMoFang.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/preferences/PreferenceWithSpeedSetting.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/preferences/PreferenceWithUnmanInterval.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/preferences/PreferenceWithWelcomeWords.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_add.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_checkbox_checked.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_checkbox_disabled.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_checkbox_unchecked.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_minus.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_mofang_connect_doing.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_mofang_connect_failed.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_mofang_connect_start.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_mofang_disconnect.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_ok_disabled.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_ok_enabled.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_ok_pressed.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_switch_compat_checked.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_switch_compat_disabled.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_switch_compat_unchecked.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_unman_interval_checked.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_checkbox.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_edit.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_edit_button.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_preference_detail.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_switch_compat.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_welcome_words_edit.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_radio_button_operate_panel_unman_interval.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_radio_group_operate_panel_unman_interval.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_detail_recyclerview.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_holder.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_with_edit_button.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/values/operate_pandel_dimens.xml rename core/function-impl/mogo-core-function-hmi/src/main/res/xml/{operate_preference_details_business.xml => operate_panel_preference_details_business.xml} (87%) rename core/function-impl/mogo-core-function-hmi/src/main/res/xml/{operate_preference_details_demo.xml => operate_panel_preference_details_demo.xml} (91%) rename core/function-impl/mogo-core-function-hmi/src/main/res/xml/{operate_preference_details_hdmap.xml => operate_panel_preference_details_hdmap.xml} (81%) rename core/function-impl/mogo-core-function-hmi/src/main/res/xml/{operate_preference_details_mofang.xml => operate_panel_preference_details_mofang.xml} (84%) rename core/function-impl/mogo-core-function-hmi/src/main/res/xml/{operate_preference_details_v2x.xml => operate_panel_preference_details_v2x.xml} (69%) rename core/function-impl/mogo-core-function-hmi/src/main/res/xml/{operate_preference_details_vehicles.xml => operate_panel_preference_details_vehicles.xml} (84%) create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/xml/operate_panel_preference_details_welcome_words.xml rename core/function-impl/mogo-core-function-hmi/src/main/res/xml/{operate_preference_headers.xml => operate_panel_preference_headers.xml} (82%) create mode 100644 core/mogo-core-res/src/main/res/values/operate_panel_config.xml diff --git a/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java b/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java index a8d88edf6b..0344ff4e70 100644 --- a/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java +++ b/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java @@ -36,7 +36,6 @@ import com.mogo.map.listener.IMogoMapListener; import com.mogo.och.common.module.utils.ResourcesUtils; import com.mogo.och.common.module.wigets.map.orderstatus.OrderStatusView; import com.mogo.och.common.module.wigets.map.overmapview.OverMapDialog; -import com.mogo.och.common.module.wigets.map.switchvisual.VisualViewDirver; import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager; import com.mogo.och.taxi.R; @@ -60,11 +59,11 @@ public abstract class BaseTaxiTabFragment { - if (groupTestPanel.getVisibility() == View.VISIBLE) { - groupTestPanel.setVisibility(View.GONE); - } else { - groupTestPanel.setVisibility(View.VISIBLE); - } - return false; - }); +// mSpeedView.setOnLongClickListener(v -> { +// if (groupTestPanel.getVisibility() == View.VISIBLE) { +// groupTestPanel.setVisibility(View.GONE); +// } else { +// groupTestPanel.setVisibility(View.VISIBLE); +// } +// return false; +// }); CallerHmiViewControlListenerManager.INSTANCE.invokeMainPageViewVisible(View.VISIBLE); onAutopilotStatusChanged(CallerAutoPilotStatusListenerManager.INSTANCE.getState(), CallerAutoPilotControlManager.INSTANCE.isCanStartAutopilot(false, 0)); @@ -233,7 +232,6 @@ public abstract class BaseTaxiTabFragment - + + + + + + + + --> - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/androidTest/java/com/mogo/functions/test/V2NTest.kt b/app/src/androidTest/java/com/mogo/functions/test/V2NTest.kt index 78f15e375f..7987fb199f 100644 --- a/app/src/androidTest/java/com/mogo/functions/test/V2NTest.kt +++ b/app/src/androidTest/java/com/mogo/functions/test/V2NTest.kt @@ -58,12 +58,12 @@ class V2NTest { if (millis > 0) { delay(millis) } - FunctionBuildConfig.isNewV2NData = true - FunctionBuildConfig.v2nMainSwitch = true + FunctionBuildConfig.v2nNewLinked = true + FunctionBuildConfig.v2nTotalSwitch = true runCatching { val map = HashMap().also { - it["f1"] = FunctionBuildConfig.v2nMainSwitch - it["f2"] = FunctionBuildConfig.isNewV2NData + it["f1"] = FunctionBuildConfig.v2nTotalSwitch + it["f2"] = FunctionBuildConfig.v2nNewLinked } CallerTelematicManager.sendMsgToAllClients(TelematicConstant.V2N_NEW_LINK_SWITCH, GsonUtils.toJson(map).toByteArray()) } @@ -99,12 +99,12 @@ class V2NTest { if (millis > 0) { delay(millis) } - FunctionBuildConfig.isNewV2NData = true - FunctionBuildConfig.v2nMainSwitch = true + FunctionBuildConfig.v2nNewLinked = true + FunctionBuildConfig.v2nTotalSwitch = true runCatching { val map = HashMap().also { - it["f1"] = FunctionBuildConfig.v2nMainSwitch - it["f2"] = FunctionBuildConfig.isNewV2NData + it["f1"] = FunctionBuildConfig.v2nTotalSwitch + it["f2"] = FunctionBuildConfig.v2nNewLinked } CallerTelematicManager.sendMsgToAllClients(TelematicConstant.V2N_NEW_LINK_SWITCH, GsonUtils.toJson(map).toByteArray()) } @@ -179,12 +179,12 @@ class V2NTest { } val newPoint = DrivingDirectionUtils.calculateNewPoint(car.longitude, car.latitude, car.heading , 200.0) Log.d(TAG, "获取到路口数据..., 自车:[${car.longitude}, ${car.latitude}]前方200米外的点: [${newPoint.first}, ${newPoint.second}]") - FunctionBuildConfig.isNewV2NData = true - FunctionBuildConfig.v2nMainSwitch = true + FunctionBuildConfig.v2nNewLinked = true + FunctionBuildConfig.v2nTotalSwitch = true runCatching { val map = HashMap().also { - it["f1"] = FunctionBuildConfig.v2nMainSwitch - it["f2"] = FunctionBuildConfig.isNewV2NData + it["f1"] = FunctionBuildConfig.v2nTotalSwitch + it["f2"] = FunctionBuildConfig.v2nNewLinked } CallerTelematicManager.sendMsgToAllClients(TelematicConstant.V2N_NEW_LINK_SWITCH, GsonUtils.toJson(map).toByteArray()) } @@ -211,12 +211,12 @@ class V2NTest { if (millis > 0) { delay(millis) } - FunctionBuildConfig.isNewV2NData = true - FunctionBuildConfig.v2nMainSwitch = true + FunctionBuildConfig.v2nNewLinked = true + FunctionBuildConfig.v2nTotalSwitch = true runCatching { val map = HashMap().also { - it["f1"] = FunctionBuildConfig.v2nMainSwitch - it["f2"] = FunctionBuildConfig.isNewV2NData + it["f1"] = FunctionBuildConfig.v2nTotalSwitch + it["f2"] = FunctionBuildConfig.v2nNewLinked } CallerTelematicManager.sendMsgToAllClients(TelematicConstant.V2N_NEW_LINK_SWITCH, GsonUtils.toJson(map).toByteArray()) } @@ -261,12 +261,12 @@ class V2NTest { if (millis > 0) { delay(millis) } - FunctionBuildConfig.isNewV2NData = true - FunctionBuildConfig.v2nMainSwitch = true + FunctionBuildConfig.v2nNewLinked = true + FunctionBuildConfig.v2nTotalSwitch = true runCatching { val map = HashMap().also { - it["f1"] = FunctionBuildConfig.v2nMainSwitch - it["f2"] = FunctionBuildConfig.isNewV2NData + it["f1"] = FunctionBuildConfig.v2nTotalSwitch + it["f2"] = FunctionBuildConfig.v2nNewLinked } CallerTelematicManager.sendMsgToAllClients(TelematicConstant.V2N_NEW_LINK_SWITCH, GsonUtils.toJson(map).toByteArray()) } diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/FuncBizProvider.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/FuncBizProvider.kt index 1e29f19194..574bd5f14a 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/FuncBizProvider.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/FuncBizProvider.kt @@ -118,7 +118,7 @@ class FuncBizProvider : IMoGoFuncBizProvider { } override fun queryV2XEvents() { - if (V2NCarTypeCheck.verifyCarType() && (!FunctionBuildConfig.v2nMainSwitch || !FunctionBuildConfig.isNewV2NData)) { + if (V2NCarTypeCheck.verifyCarType() && (!FunctionBuildConfig.v2nTotalSwitch || !FunctionBuildConfig.v2nNewLinked)) { v2xPoiLoader.queryWholeRoadEvents() } } diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/overview/OverViewDataManager.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/overview/OverViewDataManager.kt index 496ddc44b2..e121438401 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/overview/OverViewDataManager.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/overview/OverViewDataManager.kt @@ -107,7 +107,7 @@ object OverViewDataManager { .observeOn(AndroidSchedulers.mainThread()) .subscribe { it?.apply { - if (V2NCarTypeCheck.verifyCarType() && (!FunctionBuildConfig.v2nMainSwitch || !FunctionBuildConfig.isNewV2NData)) { + if (V2NCarTypeCheck.verifyCarType() && (!FunctionBuildConfig.v2nTotalSwitch || !FunctionBuildConfig.v2nNewLinked)) { CallerFuncBizListenerManager.invokeV2XEvents(this) } } diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/V2XEventManager.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/V2XEventManager.kt index 4b4238ee09..dd3b9092d5 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/V2XEventManager.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/V2XEventManager.kt @@ -196,8 +196,8 @@ object V2XEventManager : IMoGoChassisLocationGCJ02Listener, IV2XCallback, } is V2XEvent.RoadEventX -> { val flag = verifyCarType() - Log.d("$M_V2X$TAG", "---- 收到ai云V2N事件 ---:${flag}, ${FunctionBuildConfig.v2nMainSwitch}, ${FunctionBuildConfig.isNewV2NData}") - if (flag && (!FunctionBuildConfig.v2nMainSwitch || !FunctionBuildConfig.isNewV2NData)) { + Log.d("$M_V2X$TAG", "---- 收到ai云V2N事件 ---:${flag}, ${FunctionBuildConfig.v2nTotalSwitch}, ${FunctionBuildConfig.v2nNewLinked}") + if (flag && (!FunctionBuildConfig.v2nTotalSwitch || !FunctionBuildConfig.v2nNewLinked)) { // try { if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { Log.d("$M_V2X$TAG", "onAck -> 司机端: 将收到云端事件给到乘客端...") @@ -210,7 +210,7 @@ object V2XEventManager : IMoGoChassisLocationGCJ02Listener, IV2XCallback, // } handleRoadMarkerEvent(event.data.toRoadMarker()) } else{ - V2XBizTrace.onAck("事件未触发,被开关拦截",mapOf("roadEvent" to event, "v2nMainSwitch" to FunctionBuildConfig.v2nMainSwitch,"isNewV2NData" to FunctionBuildConfig.isNewV2NData), true) + V2XBizTrace.onAck("事件未触发,被开关拦截",mapOf("roadEvent" to event, "v2nMainSwitch" to FunctionBuildConfig.v2nTotalSwitch,"isNewV2NData" to FunctionBuildConfig.v2nNewLinked), true) } } else -> { diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/pnc/V2NIdentifyDrawer.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/pnc/V2NIdentifyDrawer.kt index a9a0282d94..516feb66b2 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/pnc/V2NIdentifyDrawer.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/pnc/V2NIdentifyDrawer.kt @@ -45,7 +45,6 @@ import com.mogo.eagle.function.biz.v2x.v2n.utils.EventDismissBean import com.mogo.eagle.function.biz.v2x.v2n.utils.EventDismissManager import com.mogo.eagle.function.biz.v2x.v2n.utils.IEventDismissListener import com.mogo.eagle.function.biz.v2x.v2n.utils.V2XEventAnalyticsManager -import com.mogo.map.entities.Lane import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.asCoroutineDispatcher import kotlinx.coroutines.delay @@ -484,42 +483,42 @@ internal object V2NIdentifyDrawer: IEventDismissListener { } private fun drawShiGong(events: List) { - if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nMainSwitch && FunctionBuildConfig.isNewV2NData) { + if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nTotalSwitch && FunctionBuildConfig.v2nNewLinked) { handler.removeMessages(MSG_WHAT_DRAW_SHIGONE) handler.sendMessage(Message.obtain(handler, MSG_WHAT_DRAW_SHIGONE, events)) } } private fun drawShiGu(events: List) { - if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nMainSwitch && FunctionBuildConfig.isNewV2NData) { + if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nTotalSwitch && FunctionBuildConfig.v2nNewLinked) { handler.removeMessages(MSG_WHAT_DRAW_SHIGU) handler.sendMessage(Message.obtain(handler, MSG_WHAT_DRAW_SHIGU, events)) } } private fun drawYongDu(events: List) { - if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nMainSwitch && FunctionBuildConfig.isNewV2NData) { + if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nTotalSwitch && FunctionBuildConfig.v2nNewLinked) { handler.removeMessages(MSG_WHAT_DRAW_YONGDU) handler.sendMessage(Message.obtain(handler, MSG_WHAT_DRAW_YONGDU, events)) } } private fun drawOtherRetrogradeVehicle(event: MessagePad.Event) { - if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nMainSwitch && FunctionBuildConfig.isNewV2NData) { + if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nTotalSwitch && FunctionBuildConfig.v2nNewLinked) { handler.removeMessages(MSG_WHAT_DRAW_OTHER_RETROGRADE_VEHICLE) handler.sendMessage(Message.obtain(handler, MSG_WHAT_DRAW_OTHER_RETROGRADE_VEHICLE, event)) } } private fun drawGreenWave(crossSpeed: V2nCrossSpeed) { - if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nMainSwitch && FunctionBuildConfig.isNewV2NData) { + if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nTotalSwitch && FunctionBuildConfig.v2nNewLinked) { handler.removeMessages(MSG_WHAT_DRAW_GREEN_WAVE) handler.sendMessage(Message.obtain(handler, MSG_WHAT_DRAW_GREEN_WAVE, crossSpeed)) } } private fun drawPeopleCross(event: MessagePad.Event) { - if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nMainSwitch && FunctionBuildConfig.isNewV2NData) { + if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nTotalSwitch && FunctionBuildConfig.v2nNewLinked) { handler.removeMessages(MSG_WHAT_DRAW_PEOPLE_CROSS) handler.sendMessage(Message.obtain(handler, MSG_WHAT_DRAW_PEOPLE_CROSS, event)) } diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt index 41e007e3b0..107722103d 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt @@ -68,7 +68,6 @@ import com.zhidao.support.adas.high.common.Constants import com.zhidao.support.adas.high.common.CupidLogUtils import com.zhjt.mogo.adas.common.MessageType import com.zhjt.mogo.adas.common.power.PowerUnitChannel -import com.zhjt.mogo.adas.data.Adas import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.mogo.adas.data.bean.MogoReport import com.zhjt.mogo.adas.data.bean.NodeStateInfo @@ -1166,8 +1165,8 @@ class MoGoAutopilotControlProvider : CallerLogger.d("$M_D_C$TAG", status) runCatching { val map = HashMap().also { - it["f1"] = FunctionBuildConfig.v2nMainSwitch - it["f2"] = FunctionBuildConfig.isNewV2NData + it["f1"] = FunctionBuildConfig.v2nTotalSwitch + it["f2"] = FunctionBuildConfig.v2nNewLinked } CallerTelematicManager.sendMsgToAllClients(TelematicConstant.V2N_NEW_LINK_SWITCH, GsonUtils.toJson(map).toByteArray()) } diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/telematic/TeleMsgHandler.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/telematic/TeleMsgHandler.kt index 6bcc217bf5..b49fc78e30 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/telematic/TeleMsgHandler.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/telematic/TeleMsgHandler.kt @@ -149,8 +149,8 @@ class TeleMsgHandler : IMsgHandler { val f1 = data["f1"] as Boolean val f2 = data["f2"] as Boolean Log.d(TAG, "乘客屏收到司机屏转发的新链路开关 --- 3 ---:$data, f1: $f1, f2:$f2") - FunctionBuildConfig.v2nMainSwitch = f1 - FunctionBuildConfig.isNewV2NData = f2 + FunctionBuildConfig.v2nTotalSwitch = f1 + FunctionBuildConfig.v2nNewLinked = f2 } catch (t: Throwable) { t.printStackTrace() Log.e(TAG, "乘客屏收到司机屏转发的新链路开关异常", t) @@ -270,11 +270,11 @@ class TeleMsgHandler : IMsgHandler { TelematicConstant.OBU_RUNREDLIGHT_WARNING -> { when (String(it.body)) { "0" -> { - HmiBuildConfig.isShowRunRedLightView = false + HmiBuildConfig.v2iRedLightWarning = false } "1" -> { - HmiBuildConfig.isShowRunRedLightView = true + HmiBuildConfig.v2iRedLightWarning = true } } } diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoObuDcCombineManager.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoObuDcCombineManager.kt index 37b63b34be..b874c07fee 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoObuDcCombineManager.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoObuDcCombineManager.kt @@ -64,25 +64,25 @@ class MogoObuDcCombineManager private constructor() : IMoGoObuWarningRsiListener } override fun onMoGoObuRsiWarning(rsiWarningData: ObuScene.RsiWarningData) { - if (FunctionBuildConfig.v2xMainSwitch && HmiBuildConfig.isShowObuV2iView) { + if (FunctionBuildConfig.v2xTotalSwitch && HmiBuildConfig.v2iTotalSwitch) { onMogoObuDcRsiWarning(rsiWarningData) } } override fun onMoGoObuRsmWarning(rsmWarningData: ObuScene.RsmWarningData) { - if (FunctionBuildConfig.v2xMainSwitch && HmiBuildConfig.isShowObuV2iView) { + if (FunctionBuildConfig.v2xTotalSwitch && HmiBuildConfig.v2iTotalSwitch) { onMogoObuDcRsmWarning(rsmWarningData) } } override fun onMoGoObuSpatWarning(spatWarningData: ObuScene.SpatWarningData) { - if (FunctionBuildConfig.v2xMainSwitch && HmiBuildConfig.isShowObuV2iView) { + if (FunctionBuildConfig.v2xTotalSwitch && HmiBuildConfig.v2iTotalSwitch) { onMogoObuDcSpatWarning(spatWarningData) } } override fun onMoGoObuMapMath(mapMatchData: ObuScene.MapMatchData) { - if (FunctionBuildConfig.v2xMainSwitch && HmiBuildConfig.isShowObuV2iView) { + if (FunctionBuildConfig.v2xTotalSwitch && HmiBuildConfig.v2iTotalSwitch) { onMogoObuMapMath(mapMatchData) } } @@ -339,7 +339,7 @@ class MogoObuDcCombineManager private constructor() : IMoGoObuWarningRsiListener * RSM预警信息 CvxPtcThreatIndInfo CvxPtcInfoIndInfo(主车与弱势交通参与者之间的预警(如:弱势交通参与者碰撞预警)) */ fun onMogoObuDcRsmWarning(rsmWarningData: ObuScene.RsmWarningData?) { - if (HmiBuildConfig.isShowObuWeaknessTrafficView) { + if (HmiBuildConfig.v2iWeaknessTraffic) { CallerLogger.d( "${M_OBU}${TAG}", "MogoObuDcCombineManager onMogoObuRsmWarning ------> ${rsmWarningData.toString()}" @@ -576,8 +576,8 @@ class MogoObuDcCombineManager private constructor() : IMoGoObuWarningRsiListener } 1 -> { //闯红灯 V2I_RLVW_VIOLATION_TYPE_RUNNING_RED_LIGHT 一个红灯周期只显示一次 - if(FunctionBuildConfig.v2xMainSwitch && HmiBuildConfig.isShowObuV2iView){ - if (HmiBuildConfig.isShowRunRedLightView) { + if(FunctionBuildConfig.v2xTotalSwitch && HmiBuildConfig.v2iTotalSwitch){ + if (HmiBuildConfig.v2iRedLightWarning) { if (!isShowRunRedLight) { isShowRunRedLight = true ttsContent = @@ -609,7 +609,7 @@ class MogoObuDcCombineManager private constructor() : IMoGoObuWarningRsiListener } 2 -> { //绿波通行引导 V2I_RLVW_VIOLATION_TYPE_NO_VIOLATION 一个绿灯周期只显示一次 - if (FunctionBuildConfig.v2xMainSwitch && FunctionBuildConfig.v2nMainSwitch && HmiBuildConfig.isShowGreenWaveView) { + if (FunctionBuildConfig.v2xTotalSwitch && FunctionBuildConfig.v2nTotalSwitch && HmiBuildConfig.isShowGreenWaveView) { if (!isShowGreenWave) { isShowGreenWave = true CallerLogger.d( diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt index edab8756ef..9307fc3ecd 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt @@ -296,7 +296,7 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener { * v2v预警信息 CvxRvInfoIndInfo CvxV2vThreatIndInfo 他车 */ override fun onObuRvWarning(data: ObuScene.RvWarningData) { - if (FunctionBuildConfig.v2xMainSwitch && HmiBuildConfig.isShowObuV2vView) { + if (FunctionBuildConfig.v2xTotalSwitch && HmiBuildConfig.v2vTotalSwitch) { if (data.warningMsg != null) { // 更新数据,远车数据,之前要匹配uuid data.vehBasicsMsg?.let { @@ -343,7 +343,7 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener { * 红绿灯预警信息 CvxIvpThreatIndInfo */ override fun onObuSpatWarning(data: ObuScene.SpatWarningData) { - if (FunctionBuildConfig.v2xMainSwitch && HmiBuildConfig.isShowObuV2iView) { + if (FunctionBuildConfig.v2xTotalSwitch && HmiBuildConfig.v2iTotalSwitch) { handlerTrafficLight( data.warningType, data.status, @@ -356,7 +356,7 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener { * RSI预警信息 onMogoObuRsiWarning(交通标志预警(前方限速、前方学校等等),交通事件预警(前方拥堵、前方积水等等)) */ override fun onObuRsiWarning(data: ObuScene.RsiWarningData) { - if (FunctionBuildConfig.v2xMainSwitch && HmiBuildConfig.isShowObuV2iView) { + if (FunctionBuildConfig.v2xTotalSwitch && HmiBuildConfig.v2iTotalSwitch) { if (data.warningMsgList != null && data.warningMsgList.size > 0) { var alertContent = "" var ttsContent = "" @@ -643,8 +643,8 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener { "$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", "onMogoObuRsmWarning ------> ${data?.toString()}" ) - if (FunctionBuildConfig.v2xMainSwitch && HmiBuildConfig.isShowObuV2iView) { - if (HmiBuildConfig.isShowObuWeaknessTrafficView) { + if (FunctionBuildConfig.v2xTotalSwitch && HmiBuildConfig.v2iTotalSwitch) { + if (HmiBuildConfig.v2iWeaknessTraffic) { // 交通参与者类型 0x0:未知 UNKNOWN | 1机动车 2:非机动车 NON_MOTOR | 3:行人 PEDESTRIAN 4:obu if (data != null && data.participant != null) { val v2xType = when (data.participant.ptcType) { @@ -736,7 +736,7 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener { * 地图匹配 是OBU算法输出地图匹配结果,主车匹配道路哪条路或者哪条车道 */ override fun onObuMapMath(data: ObuScene.MapMatchData?) { - if (FunctionBuildConfig.v2xMainSwitch && HmiBuildConfig.isShowObuV2iView) { + if (FunctionBuildConfig.v2xTotalSwitch && HmiBuildConfig.v2iTotalSwitch) { if (data != null) { CallerLogger.d( "$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", @@ -1056,8 +1056,8 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener { } 1 -> {//闯红灯 V2I_RLVW_VIOLATION_TYPE_RUNNING_RED_LIGHT 一个红灯周期只显示一次 - if(FunctionBuildConfig.v2xMainSwitch && HmiBuildConfig.isShowObuV2iView){ - if (HmiBuildConfig.isShowRunRedLightView) { + if(FunctionBuildConfig.v2xTotalSwitch && HmiBuildConfig.v2iTotalSwitch){ + if (HmiBuildConfig.v2iRedLightWarning) { if (!isShowRunRedLight) { isShowRunRedLight = true ttsContent = diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt index 7c6cc2fb8c..5b7a6b9b6a 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt @@ -34,7 +34,6 @@ import com.mogo.eagle.core.function.api.devatools.strict.IStrictModeProvider import com.mogo.eagle.core.function.api.lookaround.IMoGoLookAroundProvider import com.mogo.eagle.core.function.api.map.route.IMapRouteProvider import com.mogo.eagle.core.function.api.upgrade.IMoGoUpgradeProvider -import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager import com.mogo.eagle.core.utilcode.kotlin.lifeCycleScope import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger @@ -84,10 +83,8 @@ import com.zhjt.mogo_core_function_devatools.weaknetwork.DetectResultImpl import com.zhjt.mogo_core_function_devatools.weaknetwork.WeakNetworkStrategy import com.zhjt.mogo_core_function_devatools.workorder.WorkOrderManager import com.zhjt.service.chain.ChainLog -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch -import java.io.File import java.lang.ref.WeakReference import java.util.concurrent.ConcurrentHashMap @@ -410,8 +407,8 @@ class DevaToolsProvider : IDevaToolsProvider, IAppStateListener { /** * 展示考试车辆控制窗口 */ - override fun showExamControlWindow(view: View,isShow: Boolean) { - ExamControlManager.showExamControlWindow(view,isShow) + override fun showExamControlWindow(isShow: Boolean) { + ExamControlManager.showExamControlWindow(isShow) } override fun onReceiveBadCaseRecord( diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/exam/ExamControlManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/exam/ExamControlManager.kt index 566399a786..81abca169f 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/exam/ExamControlManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/exam/ExamControlManager.kt @@ -1,14 +1,10 @@ package com.zhjt.mogo_core_function_devatools.exam import android.annotation.SuppressLint -import android.view.View import androidx.fragment.app.FragmentActivity import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.function.call.setting.CallerSopSettingManager -import com.mogo.eagle.core.utilcode.util.ClickUtils -import com.mogo.eagle.core.utilcode.util.NetworkUtils -import com.mogo.eagle.core.utilcode.util.ToastUtils -import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig +import com.mogo.eagle.core.utilcode.util.AppStateManager /** * 考试控制管理 @@ -21,9 +17,8 @@ internal object ExamControlManager { /** * 开启考试车辆控制窗口 */ - fun showExamControlWindow(view: View,isShow: Boolean){ - val activity = view.context as? FragmentActivity - ?: throw IllegalStateException("please ensure context is FragmentActivity.") + fun showExamControlWindow(isShow: Boolean){ + val activity = AppStateManager.currentActivity() ?: return if(examControlWindow == null){ examControlWindow = ExamControlWindow(activity) } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt index 31d0275237..c6f4ab2506 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt @@ -147,7 +147,7 @@ internal class MoGoLogRecordProviderImpl: IMoGoLogRecordProvider, builder.crashConfig( CrashConfig.Builder() .enabled(true) - .uploader(CrashLogUploader()) +// .uploader(CrashLogUploader()) .crashDir(File(context.getExternalFilesDir(null), "crash")) .expireDuration(TimeUnit.DAYS.toMillis(3)) .javaCrash(true) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/toolkit/ToolKitDataManager.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/toolkit/ToolKitDataManager.kt index 673b975272..31e17a63ae 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/toolkit/ToolKitDataManager.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/toolkit/ToolKitDataManager.kt @@ -13,6 +13,7 @@ import com.mogo.eagle.core.function.api.och.toolkit.IToolKitItemClickListener import com.mogo.eagle.core.function.api.och.toolkit.ToolKitCustomItemAddParam import com.mogo.eagle.core.function.api.och.toolkit.ToolKitDefaultItemAddParam 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.hmi.bone.toolkit.custom.ToolDriverRomaView import com.mogo.eagle.core.function.hmi.bone.toolkit.custom.ToolRestartSystemView @@ -161,7 +162,8 @@ object ToolKitDataManager : IToolKitItemClickListener { ToolTypeEnum.OPERATION_PANEL.name -> { ctx?.also { - SopView.sopView.toggle(it) +// SopView.sopView.toggle(it) + CallerHmiManager.toggleOperatePanel(true) } } 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 a4c2ba44e4..0b42a8cffe 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 @@ -2,14 +2,15 @@ package com.mogo.eagle.core.function.hmi.ui import android.content.Context import android.text.TextUtils -import android.transition.Slide import android.util.Log import android.view.Gravity import android.view.View import android.view.ViewGroup -import android.view.WindowManager +import android.view.ViewStub import androidx.lifecycle.ProcessLifecycleOwner import androidx.lifecycle.lifecycleScope +import androidx.transition.Slide +import androidx.transition.TransitionManager import com.alibaba.android.arouter.facade.annotation.Route import com.mogo.commons.module.status.MogoStatusManager import com.mogo.commons.voice.AIAssist @@ -36,6 +37,7 @@ import com.mogo.eagle.core.function.api.och.toolkit.ToolKitDefaultItemAddParam import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager import com.mogo.eagle.core.function.call.v2x.CallerTurnLightListenerManager +import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.function.hmi.bone.status.fsm.FSMStatusDetailWindowManager import com.mogo.eagle.core.function.hmi.bone.toolkit.ToolKitDataManager import com.mogo.eagle.core.function.hmi.ui.camera.RoadVideoDialog @@ -66,8 +68,6 @@ import com.zhjt.service_biz.BizConfig import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.launch -import me.jessyan.autosize.utils.AutoSizeUtils -import java.lang.ref.WeakReference import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicReference @@ -95,8 +95,6 @@ class MoGoHmiProvider : IMoGoHmiProvider { private val xiaozhi by lazy { XiaoZhiStateManager() } - private val operatePanel by lazy { AtomicReference>(null) } - override fun init(context: Context?) { this.context = context } @@ -451,26 +449,22 @@ class MoGoHmiProvider : IMoGoHmiProvider { return } if (show) { - if (operatePanel.get()?.get()?.isShowing() == true) { - return + var target = activity.findViewById(R.id.id_operate_panel) + if (target == null) { + val vs = activity.findViewById(R.id.vs_operate_panel) ?: throw AssertionError() + target = vs.inflate() + } + 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 + target.post { target.bringToFront() } } - MoGoPopWindow.Builder() - .attachToActivity(activity) - .gravityInActivity(Gravity.START or Gravity.TOP) - .contentView(OperatePanelLayout(activity)) - .width(AutoSizeUtils.dp2px(activity, 1000.0f)) - .height(WindowManager.LayoutParams.MATCH_PARENT) - .transition(Slide(Gravity.START), Slide(Gravity.START)) - .onDismissed { - operatePanel.set(null) - } - .build() - .also { - operatePanel.set(WeakReference(it)) - } - .show() } else { - operatePanel.get()?.get()?.hide() + val operatePanelView = activity.findViewById(R.id.id_operate_panel) + if (operatePanelView != null && operatePanelView.visibility == View.VISIBLE) { + TransitionManager.beginDelayedTransition(operatePanelView.parent as ViewGroup, Slide(Gravity.START).also { it.duration = 150; it.addTarget(operatePanelView) }) + operatePanelView.visibility = View.GONE + } } } 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 3d8708f210..79fba3c154 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,99 +5,1024 @@ import android.os.Bundle import android.util.AttributeSet import android.util.Log import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup import android.widget.LinearLayout +import androidx.annotation.CallSuper import androidx.core.content.ContextCompat +import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat +import androidx.preference.PreferenceGroup import androidx.preference.PreferenceHeaderFragmentCompat +import androidx.preference.SwitchPreferenceCompat +import androidx.preference.TwoStatePreference +import androidx.preference.forEach +import androidx.recyclerview.widget.RecyclerView +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.data.obu.MogoObuConst +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.call.autopilot.CallerAutoPilotControlManager +import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager import com.mogo.eagle.core.function.call.hmi.CallerHmiManager +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.unmanned.CallerUnmannedListenerManager import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.function.hmi.ui.operate.preferences.PreferenceWithMoFang +import com.mogo.eagle.core.function.hmi.ui.operate.preferences.PreferenceWithSpeedSetting +import com.mogo.eagle.core.function.hmi.ui.operate.preferences.PreferenceWithUnmanInterval +import com.mogo.eagle.core.function.hmi.ui.operate.preferences.PreferenceWithWelcomeWords +import com.mogo.eagle.core.function.hmi.ui.utils.HmiActionLog.Companion.hmiAction +import com.mogo.eagle.core.function.hmi.ui.utils.SOPAnalyticsManager.clickEventAnalytics import com.mogo.eagle.core.utilcode.kotlin.onClick +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.rv.divider.CommonDividerItemDecoration +import com.mogo.eagle.core.utilcode.util.ToastUtils import kotlinx.android.synthetic.main.layout_operate_panel.view.iv_operate_panel_close +import me.jessyan.autosize.utils.AutoSizeUtils -class OperatePanelLayout: LinearLayout { +class OperatePanelLayout : LinearLayout { companion object { private const val TAG = "OperatePanelLayout" } - class PreferenceHeaderFragmentCompatImpl: PreferenceHeaderFragmentCompat() { + class PreferenceHeaderFragmentCompatImpl : PreferenceHeaderFragmentCompat() { + + private var header: PreferenceFragmentCompat? = null override fun onCreatePreferenceHeader(): PreferenceFragmentCompat { - Log.d(TAG, "--- onCreatePreferenceHeader ---") - return PreferenceHeader() + return PreferenceHeader().also { header = it } + } + + override fun onPrimaryNavigationFragmentChanged(isPrimaryNavigationFragment: Boolean) { + super.onPrimaryNavigationFragmentChanged(isPrimaryNavigationFragment) + val screen = header?.preferenceScreen + val count = screen?.preferenceCount ?: 0 + var curr = 0 + var perf: Preference? = null + while (curr < count) { + perf = screen?.getPreference(curr) + if (perf?.fragment != null) { + break + } + curr++ + } + if (perf != null) { + handleNaviBackground(perf) + } + } + + + override fun onPreferenceStartFragment(caller: PreferenceFragmentCompat, pref: Preference): Boolean { + try { + return super.onPreferenceStartFragment(caller, pref) + } finally { + handleNaviBackground(pref) + } + } + + private fun handleNaviBackground(pref: Preference) { + val position = (header?.listView?.adapter as? PreferenceGroup.PreferencePositionCallback)?.getPreferenceAdapterPosition(pref) + ?: RecyclerView.NO_POSITION + val prev = header?.listView?.getTag(R.id.operate_panel_header_last_selected) as? Int + ?: -1 + if (prev == position) { + return + } + if (position != RecyclerView.NO_POSITION) { + if (prev >= 0) { + header?.listView?.layoutManager?.findViewByPosition(prev)?.isSelected = false + } + header?.listView?.layoutManager?.findViewByPosition(position)?.isSelected = true + header?.listView?.setTag(R.id.operate_panel_header_last_selected, position) + } } } - class PreferenceHeader: PreferenceFragmentCompat() { + class PreferenceHeader : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - Log.d(TAG, "PreferenceHeader --- onCreatePreferences ---") - setPreferencesFromResource(R.xml.operate_preference_headers, rootKey) + setPreferencesFromResource(R.xml.operate_panel_preference_headers, rootKey) } } - class V2XPreferenceFragmentCompat: PreferenceFragmentCompat() { - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - Log.d(TAG, "V2XPreferenceFragmentCompat --- onCreatePreferences ---") - setPreferencesFromResource(R.xml.operate_preference_details_v2x, rootKey) + abstract class OperatePanelDetailBase : PreferenceFragmentCompat(), Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setPreferenceChangeListener(preferenceScreen) + setPreferenceClickListener(preferenceScreen) + setDefaultVal(preferenceScreen) + setEnabled(preferenceScreen) + } + + protected open fun getDefaultVal(pref: Preference): Any? { + return null + } + + protected open fun isEnabled(pref: Preference): Boolean { + return true + } + + private fun setDefaultVal(pref: Preference) { + if (pref is PreferenceGroup) { + pref.forEach { + setDefaultVal(it) + } + } else { + if (!pref.isPersistent) { + val defVal = getDefaultVal(pref) + if (defVal != null) { + if (pref is TwoStatePreference) { + changeValue(pref, defVal as Boolean) + } else { + pref.setDefaultValue(defVal) + } + } + } else { //TODO renwj 处理持久化存储时,将持久化的值重新赋给业务层的静态变量 + } + } + } + + private fun setEnabled(pref: Preference) { + if (pref is PreferenceGroup) { + pref.forEach { + setEnabled(it) + } + } else { + val curr = isEnabled(pref) + val prev = pref.isEnabled + if (curr != prev) { + pref.isEnabled = curr + } + } + } + + private fun setPreferenceChangeListener(pref: Preference) { + if (pref is PreferenceGroup) { + pref.forEach { setPreferenceChangeListener(it) } + } else { + pref.onPreferenceChangeListener = this + } + } + + private fun setPreferenceClickListener(pref: Preference) { + if (pref is PreferenceGroup) { + pref.forEach { + setPreferenceClickListener(it) + } + } else { + pref.onPreferenceClickListener = this + } + } + + @Suppress("UNCHECKED_CAST") + fun Preference.findPreferenceReal(key: String): T? { + if (this is PreferenceGroup) { + this.forEach { + val find = it.findPreferenceReal(key) + if (find != null) { + return find + } + } + return null + } else { + return if (this.key == key) this as T else null + } + } + + fun changeValue(pref: TwoStatePreference, isChecked: Boolean) { + if (pref.isChecked != isChecked) { + pref.isChecked = isChecked + pref.callChangeListener(isChecked) + } + } + + @CallSuper + override fun onCreateRecyclerView(inflater: LayoutInflater, parent: ViewGroup, savedInstanceState: Bundle?): RecyclerView { + val rv = inflater.inflate(R.layout.layout_operate_panel_detail_recyclerview, parent, false) as RecyclerView + rv.addItemDecoration(CommonDividerItemDecoration.Builder().spanCountTBCare(false).verticalExternalSpace(AutoSizeUtils.dp2px(parent.context, 20.0f)).verticalInnerSpace(AutoSizeUtils.dp2px(parent.context, 30.0f)).externalSpaceEnd(true).build()) + rv.background = ContextCompat.getDrawable(parent.context, R.drawable.bg_operate_panel_preference_detail) + rv.layoutManager = onCreateLayoutManager() + return rv + } + + override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { + return !preference.isPersistent + } + + override fun onPreferenceClick(preference: Preference): Boolean { + return !preference.isPersistent } } + class V2XPreferenceFragmentCompat : OperatePanelDetailBase() { + + companion object { + private const val KEY_V2X_TOTAL_SWITCH = "v2x_total_switch" + private const val KEY_V2N_TOTAL_SWITCH = "v2n_total_switch" + private const val KEY_V2N_NEW_LINKED = "v2n_new_linked" + private const val KEY_V2N_NEW_LINKED_TO_PNC = "v2n_new_linked_to_pnc" + private const val KEY_V2N_NEW_LINKED_GREEN_WAVE = "v2n_new_linked_green_wave" + private const val KEY_V2I_TOTAL_SWITCH = "v2i_total_switch" + private const val KEY_V2I_TO_PNC = "v2i_to_pnc" + private const val KEY_V2I_RED_LIGHT_WARNING = "v2i_red_light_warning" + private const val KEY_V2I_WEAKNESS_TRAFFIC = "v2i_weakness_traffic" + private const val KEY_V2V_TOTAL_SWITCH = "v2v_total_switch" + private const val KEY_OBU_TOTAL_SWITCH = "obu_total_switch" + } - class DemoPreferenceFragmentCompat: PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - Log.d(TAG, "DemoPreferenceFragmentCompat --- onCreatePreferences ---") - setPreferencesFromResource(R.xml.operate_preference_details_demo, rootKey) + setPreferencesFromResource(R.xml.operate_panel_preference_details_v2x, rootKey) + } + + override fun getDefaultVal(pref: Preference): Any? { + when (pref.key) { + KEY_V2X_TOTAL_SWITCH -> { + return FunctionBuildConfig.v2xTotalSwitch + } + KEY_V2N_TOTAL_SWITCH -> { + return FunctionBuildConfig.v2nTotalSwitch + } + KEY_V2N_NEW_LINKED -> { + return FunctionBuildConfig.v2nNewLinked + } + KEY_V2N_NEW_LINKED_TO_PNC -> { + return FunctionBuildConfig.v2nNewLinkedToPNC + } + KEY_V2N_NEW_LINKED_GREEN_WAVE -> { + return FunctionBuildConfig.v2nGreenWave + } + KEY_V2I_TOTAL_SWITCH -> { + return HmiBuildConfig.v2iTotalSwitch + } + KEY_V2I_TO_PNC -> { + return FunctionBuildConfig.v2iToPNC + } + KEY_V2I_RED_LIGHT_WARNING -> { + return HmiBuildConfig.v2iRedLightWarning + } + KEY_V2I_WEAKNESS_TRAFFIC -> { + return HmiBuildConfig.v2iWeaknessTraffic + } + KEY_V2V_TOTAL_SWITCH -> { + return HmiBuildConfig.v2vTotalSwitch + } + KEY_OBU_TOTAL_SWITCH -> { + return CallerObuApiManager.isConnected() + } + } + return super.getDefaultVal(pref) + } + + override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { + Log.d(TAG, "-- onPreferenceChange:($preference, $newValue)") + when (preference.key) { + KEY_V2X_TOTAL_SWITCH -> { + val isChecked = newValue as? Boolean ?: false + FunctionBuildConfig.v2xTotalSwitch = isChecked + hmiAction("V2X总开关, ", isChecked) + clickEventAnalytics("V2X总开关", isChecked) + if (isChecked) { + preferenceScreen.findPreferenceReal(KEY_V2N_TOTAL_SWITCH)?.also { changeValue(it, FunctionBuildConfig.v2nTotalSwitch) } // V2N总开关 + preferenceScreen.findPreferenceReal(KEY_V2I_TOTAL_SWITCH)?.also { changeValue(it, HmiBuildConfig.v2iTotalSwitch) } // V2I总开关 + preferenceScreen.findPreferenceReal(KEY_V2V_TOTAL_SWITCH)?.also { changeValue(it, HmiBuildConfig.v2vTotalSwitch) } // V2V总开关 + preferenceScreen.findPreferenceReal(KEY_OBU_TOTAL_SWITCH)?.also { changeValue(it, CallerObuApiManager.isConnected()) } // OBU总开关 + } else { + preferenceScreen.findPreferenceReal(KEY_V2N_TOTAL_SWITCH)?.also { changeValue(it, false) } // V2N总开关 + preferenceScreen.findPreferenceReal(KEY_V2I_TOTAL_SWITCH)?.also { changeValue(it, false) } // V2I总开关 + preferenceScreen.findPreferenceReal(KEY_V2V_TOTAL_SWITCH)?.also { changeValue(it, false) } // V2V总开关 + preferenceScreen.findPreferenceReal(KEY_OBU_TOTAL_SWITCH)?.also { changeValue(it, false) } // OBU总开关 + } + return true + } + KEY_V2N_TOTAL_SWITCH -> { + val isChecked = newValue as? Boolean ?: false + FunctionBuildConfig.v2nTotalSwitch = isChecked + hmiAction("V2N总开关, ", isChecked) + clickEventAnalytics("V2N总开关", isChecked) + if (!isChecked) { + preferenceScreen.findPreferenceReal(KEY_V2N_NEW_LINKED)?.also { changeValue(it, false) } + preferenceScreen.findPreferenceReal(KEY_V2N_NEW_LINKED_TO_PNC)?.also { changeValue(it, false) } + preferenceScreen.findPreferenceReal(KEY_V2N_NEW_LINKED_GREEN_WAVE)?.also { changeValue(it, false) } + } + return true + } + KEY_V2N_NEW_LINKED -> { + val isChecked = newValue as? Boolean ?: false + FunctionBuildConfig.v2nNewLinked = isChecked + hmiAction("V2N新链路", isChecked) + clickEventAnalytics("V2N新链路", isChecked) + return true + } + KEY_V2N_NEW_LINKED_TO_PNC -> { + val isChecked = newValue as? Boolean ?: false + FunctionBuildConfig.v2nNewLinkedToPNC = isChecked + clickEventAnalytics("V2N场景进PNC", isChecked) + hmiAction("V2N场景进PNC, ", isChecked) + CallerAutoPilotControlManager.sendV2nToPncCmd(isChecked) + return true + } + KEY_V2N_NEW_LINKED_GREEN_WAVE -> { + val isChecked = newValue as? Boolean ?: false + FunctionBuildConfig.v2nGreenWave = isChecked + hmiAction("绿波通行", isChecked) + clickEventAnalytics("绿波通行", isChecked) + CallerTelematicManager.sendMsgToAllClients(TelematicConstant.OBU_GREENWAVE_WARNING, (if (isChecked) "1" else "0").toByteArray()) + return true + } + KEY_V2I_TOTAL_SWITCH -> { + val isChecked = newValue as? Boolean ?: false + HmiBuildConfig.v2iTotalSwitch = isChecked + hmiAction("V2I总开关, ", isChecked) + clickEventAnalytics("V2I总开关", isChecked) + return true + } + KEY_V2I_TO_PNC -> { + val isChecked = newValue as? Boolean ?: false + FunctionBuildConfig.v2iToPNC = isChecked + CallerAutoPilotControlManager.sendV2iToPncCmd(isChecked) + hmiAction("V2I场景进PNC, ", isChecked) + clickEventAnalytics("V2I场景进PNC", isChecked) + return true + } + KEY_V2I_RED_LIGHT_WARNING -> { + val isChecked = newValue as? Boolean ?: false + HmiBuildConfig.v2iRedLightWarning = isChecked + CallerTelematicManager.sendMsgToAllClients(TelematicConstant.OBU_RUNREDLIGHT_WARNING, (if (isChecked) "1" else "0").toByteArray()) + clickEventAnalytics("V2I闯红灯预警", isChecked) + hmiAction("V2I闯红灯预警, ", isChecked) + return true + } + KEY_V2I_WEAKNESS_TRAFFIC -> { + val isChecked = newValue as? Boolean ?: false + HmiBuildConfig.v2iWeaknessTraffic = isChecked + clickEventAnalytics("V2I弱势交通参与者", isChecked) + hmiAction("V2I弱势交通参与者, ", isChecked) + return true + } + KEY_V2V_TOTAL_SWITCH -> { + val isChecked = newValue as? Boolean ?: false + HmiBuildConfig.v2vTotalSwitch = isChecked + clickEventAnalytics("V2V总开关", isChecked) + hmiAction("V2V总开关, ", isChecked) + return true + } + KEY_OBU_TOTAL_SWITCH -> { + val isChecked = newValue as? Boolean ?: false + if (!isChecked) { + CallerObuApiManager.disConnectObu() // 断开OBU连接 + } else { + val isObuConnected = CallerObuApiManager.isConnected() + if (isObuConnected) { + CallerObuApiManager.resetObuIpAddress(MogoObuConst.OBU_DEFAULT_IP) + } + } + clickEventAnalytics("OBU控制总开关", isChecked) + hmiAction("OBU控制总开关, ", isChecked) + return true + } + } + return super.onPreferenceChange(preference, newValue) } } - class HdMapPreferenceFragmentCompat: PreferenceFragmentCompat() { + class DemoPreferenceFragmentCompat : OperatePanelDetailBase() { + + companion object { + private const val KEY_DEMO_SWITCH = "demo_switch" + private const val KEY_RECORD_BAG_DIALOG = "record_bag_dialog" + private const val KEY_TAKE_OVER_WAKE = "take_over_wake" + } + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - Log.d(TAG, "HdMapPreferenceFragmentCompat --- onCreatePreferences ---") - setPreferencesFromResource(R.xml.operate_preference_details_hdmap, rootKey) + setPreferencesFromResource(R.xml.operate_panel_preference_details_demo, rootKey) + } + + override fun getDefaultVal(pref: Preference): Any? { + when (pref.key) { + KEY_DEMO_SWITCH -> { + return FunctionBuildConfig.isDemoMode + } + KEY_RECORD_BAG_DIALOG -> { + return FunctionBuildConfig.isShowBagRecordWindow + } + KEY_TAKE_OVER_WAKE -> { + return FunctionBuildConfig.isTakeoverRemind + } + } + return super.getDefaultVal(pref) + } + + override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { + when (preference.key) { + KEY_DEMO_SWITCH -> { + val isChecked = newValue as? Boolean ?: false + hmiAction("SOP 演示模式开关, ", !FunctionBuildConfig.isDemoMode) + clickEventAnalytics("美化模式", isChecked) + FunctionBuildConfig.isDemoMode = !FunctionBuildConfig.isDemoMode + CallerAutoPilotControlManager.setDemoMode(FunctionBuildConfig.isDemoMode) + CallerHmiViewControlListenerManager.invokeFuncMode(FUNC_MODE_DEMO, FunctionBuildConfig.isDemoMode) + CallerSopSettingManager.invokeDemoModeListener(isChecked) + if (!FunctionBuildConfig.isDemoMode) { //关闭美化模式时,通知工控机 + CallerAutoPilotControlManager.setIPCDemoMode(FunctionBuildConfig.isDemoMode) + } + } + KEY_RECORD_BAG_DIALOG -> { + val isChecked = newValue as? Boolean ?: false + FunctionBuildConfig.isShowBagRecordWindow = isChecked + hmiAction("SOP 是否展示录包弹窗, ", isChecked) + clickEventAnalytics("录包弹窗", isChecked) + } + KEY_TAKE_OVER_WAKE -> { + val isChecked = newValue as? Boolean ?: false + FunctionBuildConfig.isTakeoverRemind = isChecked + hmiAction("SOP 是否展示接管提醒, ", isChecked) + clickEventAnalytics("接管提醒", isChecked) + } + } + return super.onPreferenceChange(preference, newValue) } } - class BusinessPreferenceFragmentCompat: PreferenceFragmentCompat() { + class HdMapPreferenceFragmentCompat : OperatePanelDetailBase() { + companion object { + private const val KEY_DANGER_OBSTACLES_COLOR_MARK = "danger_obstacles_color_mark" + private const val KEY_ROUTE_GUIDE_LINE_DYNAMIC_EFFECT = "route_guide_line_dynamic_effect" + private const val KEY_POINT_CLOUD_EFFECT = "point_cloud_effect" + private const val KEY_SELF_CAR_APERTURE = "self_car_aperture" + } + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - Log.d(TAG, "BusinessPreferenceFragmentCompat --- onCreatePreferences ---") - setPreferencesFromResource(R.xml.operate_preference_details_business, rootKey) + setPreferencesFromResource(R.xml.operate_panel_preference_details_hdmap, rootKey) + } + + override fun getDefaultVal(pref: Preference): Any? { + when (pref.key) { + KEY_DANGER_OBSTACLES_COLOR_MARK -> { + return FunctionBuildConfig.isPNCWarning + } + KEY_POINT_CLOUD_EFFECT -> { + return FunctionBuildConfig.isDrawPointCloudData + } + KEY_ROUTE_GUIDE_LINE_DYNAMIC_EFFECT -> { + return HmiBuildConfig.isShowRouteStrategy + } + KEY_SELF_CAR_APERTURE -> { + return FunctionBuildConfig.isDrawPointCloudData || FunctionBuildConfig.isDisplayAnimEnable + } + } + return super.getDefaultVal(pref) + } + + override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { + when (preference.key) { + KEY_DANGER_OBSTACLES_COLOR_MARK -> { + val isChecked = newValue as? Boolean ?: false + hmiAction("SOP 危险障碍物颜色标记开关, ", isChecked) + clickEventAnalytics("危险障碍物颜色标记", isChecked) + FunctionBuildConfig.isPNCWarning = isChecked + return true + } + KEY_ROUTE_GUIDE_LINE_DYNAMIC_EFFECT -> { + val isChecked = newValue as? Boolean ?: false + hmiAction("SOP 引导线动态效果, ", isChecked) + clickEventAnalytics("引导线动态效果", isChecked) + HmiBuildConfig.isShowRouteStrategy = isChecked + CallerDevaToolsManager.setRouteDynamicColorEnable(isChecked) + return true + } + KEY_POINT_CLOUD_EFFECT -> { + val isChecked = newValue as? Boolean + ?: false //打开点云效果时,如果自车光圈是关闭状态,则自动打开自车光圈(点云是跟随光圈的 默认没有光圈就不显示点云的) + if (isChecked && !FunctionBuildConfig.isDisplayAnimEnable) { + preferenceScreen.findPreferenceReal(KEY_SELF_CAR_APERTURE)?.also { changeValue(it, true) } + } else { + preferenceScreen.findPreferenceReal(KEY_SELF_CAR_APERTURE)?.also { changeValue(it, FunctionBuildConfig.isDisplayAnimEnable) } + } + CallerAutoPilotControlManager.setIsDrawPointCloud(isChecked) + FunctionBuildConfig.isDrawPointCloudData = isChecked + CallerMapUIServiceManager.getMapUIController()?.setIsDrawPointCloud(isChecked) + CallerSopSettingManager.invokePointCloudListener(isChecked) + hmiAction("SOP 是否渲染点云数据, ", isChecked) + clickEventAnalytics("点云效果", isChecked) + return true + } + KEY_SELF_CAR_APERTURE -> { + val isChecked = newValue as? Boolean ?: false + CallerMapUIServiceManager.getMapUIController()?.setDisplayAnimEnable(isChecked) + CallerSopSettingManager.invokeCarApertureListener(isChecked) + hmiAction("SOP 是否展示自车光圈,", isChecked) + FunctionBuildConfig.isDisplayAnimEnable = isChecked + clickEventAnalytics("自车光圈", isChecked) + return true + } + } + return super.onPreferenceChange(preference, newValue) } } - class MoFangPreferenceFragmentCompat: PreferenceFragmentCompat() { + class BusinessPreferenceFragmentCompat : OperatePanelDetailBase() { + + companion object { + private const val KEY_RED_OR_GREEN_LIGHT_MARKER = "red_or_green_light_marker" + private const val KEY_RED_OR_GREEN_LIGHT_MERGE_MARKER = "red_or_green_light_merge_marker" + private const val KEY_FAULT_REPORT_TIP = "fault_report_tip" + private const val KEY_LIMIT_SPEED_MARKER = "limit_speed_marker" + private const val KEY_SELF_ROUTING_VERIFY_MODE = "self_routing_verify_mode" + private const val KEY_LOOK_AROUND_360 = "look_around_360" + private const val KEY_WEATHER_EFFECT_SWITCH = "weather_effect_switch" + private const val KEY_SYSTEM_BOOT_STATUS_SHOW = "system_boot_status_show" + private const val KEY_UNMANNED_DEMO_PULL_INTERVAL = "unmanned_demo_pull_interval" + } + + override fun getDefaultVal(pref: Preference): Any? { + when (pref.key) { + KEY_RED_OR_GREEN_LIGHT_MARKER -> { + return HmiBuildConfig.isShowTrafficLightView + } + KEY_RED_OR_GREEN_LIGHT_MERGE_MARKER -> { + return HmiBuildConfig.isShowCarSourceTrafficLightView + } + KEY_FAULT_REPORT_TIP -> { + return FunctionBuildConfig.isReportWarning + } + KEY_LIMIT_SPEED_MARKER -> { + return HmiBuildConfig.isShowLimitingVelocityView + } + KEY_SELF_ROUTING_VERIFY_MODE -> { + return CallerHmiManager.isTaxiUnmanedDriverLineRoutingVerifyMode() + } + KEY_LOOK_AROUND_360 -> { + return CallerHmiManager.isM1360LookAroundShowing() + } + KEY_WEATHER_EFFECT_SWITCH -> { + return FunctionBuildConfig.weatherEffectSwitch + } + KEY_SYSTEM_BOOT_STATUS_SHOW -> { + return HmiBuildConfig.isShowConnectionProgressView + } + KEY_UNMANNED_DEMO_PULL_INTERVAL -> { + return CallerUnmannedListenerManager.getVirtualTaskPullTaskIntervalF() + } + } + return super.getDefaultVal(pref) + } + + override fun isEnabled(pref: Preference): Boolean { + return when (pref.key) { + KEY_SELF_ROUTING_VERIFY_MODE -> { + AppIdentityModeUtils.isTaxiDriver(FunctionBuildConfig.appIdentityMode) + } + KEY_LOOK_AROUND_360 -> { + AppIdentityModeUtils.isM1(FunctionBuildConfig.appIdentityMode) + } + KEY_WEATHER_EFFECT_SWITCH -> { + AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode) + } + else -> super.isEnabled(pref) + } + } + + override fun onPreferenceClick(preference: Preference): Boolean { + if (preference.key == KEY_UNMANNED_DEMO_PULL_INTERVAL) { + val interval = PreferenceWithUnmanInterval.Interval.values().find { it.ordinal == preference.extras.getInt(PreferenceWithUnmanInterval.KEY_BUNDLE_CURRENT_INTERVAL) } + Log.d(TAG, "业务类->onPreferenceClick: $interval") + if (interval != null) { + when (interval) { + PreferenceWithUnmanInterval.Interval.FIVE_SECOND -> CallerUnmannedListenerManager.dispatchVirtualTaskPullTaskInterval(5) + PreferenceWithUnmanInterval.Interval.FIFTEEN_SECOND -> CallerUnmannedListenerManager.dispatchVirtualTaskPullTaskInterval(15) + PreferenceWithUnmanInterval.Interval.THIRTY_SECOND -> CallerUnmannedListenerManager.dispatchVirtualTaskPullTaskInterval(30) + PreferenceWithUnmanInterval.Interval.FORTY_FIVE_SECOND -> CallerUnmannedListenerManager.dispatchVirtualTaskPullTaskInterval(45) + PreferenceWithUnmanInterval.Interval.NEVER -> CallerUnmannedListenerManager.dispatchVirtualTaskPullTaskInterval(-1) + } + clickEventAnalytics("Taxi无人化演练任务拉取时间间隔",true) + } + } + return super.onPreferenceClick(preference) + } + + override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { + when (preference.key) { + KEY_RED_OR_GREEN_LIGHT_MARKER -> { + val isChecked = newValue as? Boolean ?: false + hmiAction("SOP 红绿灯标识开关, ", isChecked) + clickEventAnalytics("红绿灯标识", isChecked) + if (isChecked) { + CallerHmiManager.showTrafficLightView() + } else { + CallerHmiManager.hideTrafficLightView() + } + return true + } + KEY_RED_OR_GREEN_LIGHT_MERGE_MARKER -> { + val isChecked = newValue as? Boolean ?: false + hmiAction("SOP 红绿灯车端来源标识开关, ", isChecked) + clickEventAnalytics("红绿灯车端融合标识", isChecked) + HmiBuildConfig.isShowCarSourceTrafficLightView = isChecked + return true + } + KEY_FAULT_REPORT_TIP -> { + val isChecked = newValue as? Boolean ?: false + hmiAction("SOP 是否开启异常上报, ", isChecked) + clickEventAnalytics("异常上报提示", isChecked) + FunctionBuildConfig.isReportWarning = isChecked + return true + } + KEY_LIMIT_SPEED_MARKER -> { + val isChecked = newValue as? Boolean ?: false + hmiAction("SOP 限速标识开关, ", isChecked) + clickEventAnalytics("限速标识", isChecked) + if (isChecked) { + HmiBuildConfig.isShowLimitingVelocityView = true + CallerHmiViewControlListenerManager.invokeVisible(IViewControlListener.LimitingVelocityView_TAG, View.VISIBLE) + } else { + HmiBuildConfig.isShowLimitingVelocityView = false + CallerHmiViewControlListenerManager.invokeVisible(IViewControlListener.LimitingVelocityView_TAG, View.GONE) + } + return true + } + KEY_SELF_ROUTING_VERIFY_MODE -> { + val isChecked = newValue as? Boolean ?: false + if (isChecked) { + if (CallerHmiManager.isTaxiUnmanedDriverPerformTask()) { + ToastUtils.showLong("请先结束当前任务") + preferenceScreen.findPreferenceReal(KEY_SELF_ROUTING_VERIFY_MODE)?.also { changeValue(it, false) } + return true + } + if (CallerHmiManager.isTaxiUnmanedDriverTakingOrders()) { + ToastUtils.showLong("请先结束接单状态") + preferenceScreen.findPreferenceReal(KEY_SELF_ROUTING_VERIFY_MODE)?.also { changeValue(it, false) } + return true + } + CallerHmiManager.setTaxiUnmanedDriverLineRoutingVerifyMode(true) + } else { + if (CallerHmiManager.isTaxiUnmanedDriverLineRoutingPerformTask()) { + ToastUtils.showLong("请先结束当前任务") + preferenceScreen.findPreferenceReal(KEY_SELF_ROUTING_VERIFY_MODE)?.also { changeValue(it, true) } + return true + } + CallerHmiManager.setTaxiUnmanedDriverLineRoutingVerifyMode(false) + } + clickEventAnalytics("自主算路验证模式", isChecked) + return true + } + KEY_LOOK_AROUND_360 -> { + val isChecked = newValue as? Boolean ?: false + if (isChecked) { + CallerHmiManager.showM1360LookAround() + } else { + CallerHmiManager.hidM1360LookAround() + } + clickEventAnalytics("360环视", isChecked) + return true + } + KEY_WEATHER_EFFECT_SWITCH -> { + val isChecked = newValue as? Boolean ?: false + FunctionBuildConfig.weatherEffectSwitch = isChecked + CallerLogger.d(TAG, "发送开关数据:${isChecked}到乘客屏") + CallerTelematicManager.sendMsgToAllClients(TelematicConstant.WEATHER_SWITCH_STATUS, (if (isChecked) "1" else "0").toByteArray()) + clickEventAnalytics("天气效果开关", isChecked) + } + KEY_SYSTEM_BOOT_STATUS_SHOW -> { + val isChecked = newValue as? Boolean ?: false + hmiAction("SOP 系统启动状态展示, ", isChecked) + clickEventAnalytics("系统启动状态展示", isChecked) + HmiBuildConfig.isShowConnectionProgressView = isChecked + CallerHmiViewControlListenerManager.updateConnectionProgressView(isChecked) + } + } + return super.onPreferenceChange(preference, newValue) + } + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - Log.d(TAG, "MoFangPreferenceFragmentCompat --- onCreatePreferences ---") - setPreferencesFromResource(R.xml.operate_preference_details_mofang, rootKey) + setPreferencesFromResource(R.xml.operate_panel_preference_details_business, rootKey) } } - class VehiclesPreferenceFragmentCompat: PreferenceFragmentCompat() { - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - Log.d(TAG, "VehiclesPreferenceFragmentCompat --- onCreatePreferences ---") - setPreferencesFromResource(R.xml.operate_preference_details_vehicles, rootKey) + class MoFangPreferenceFragmentCompat : OperatePanelDetailBase(), IMoGoMoFangProvider.OnMoFangStatusListener { + + companion object { + private const val TAG = "MoFangPreferenceFragmentCompat" + private const val KEY_MOFANG_CONNECT = "mofang_connect" + private const val KEY_MOFANG_COMMAND_TEST = "mofang_command_test" } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + CallerDevaToolsManager.mofang()?.registerMoFangStatusListener(TAG, this) + } + + override fun onDestroyView() { + super.onDestroyView() + CallerDevaToolsManager.mofang()?.unRegisterMoFangStatusListener(this) + } + + override fun onMoFangConnected() { + preferenceScreen.findPreferenceReal(KEY_MOFANG_CONNECT)?.updateStatus(PreferenceWithMoFang.MoFangConnectStatus.CONNECTED) + } + + override fun onMoFangDisconnected() { + preferenceScreen.findPreferenceReal(KEY_MOFANG_CONNECT)?.updateStatus(PreferenceWithMoFang.MoFangConnectStatus.CONNECT_START) + } + + override fun onPreferenceClick(preference: Preference): Boolean { + Log.d(TAG, "mofang -> onPreferenceClick -> $preference") + when (preference.key) { + KEY_MOFANG_CONNECT -> { + val status = PreferenceWithMoFang.MoFangConnectStatus.values().find { it.ordinal == preference.extras.getInt(PreferenceWithMoFang.KEY_CURRENT_CONNECT_STATUS) } + when (status) { + PreferenceWithMoFang.MoFangConnectStatus.CONNECT_START -> { + CallerDevaToolsManager.mofang()?.connect() + } + PreferenceWithMoFang.MoFangConnectStatus.CONNECTED -> { + CallerDevaToolsManager.mofang()?.disconnect() + } + else -> { + Log.d(TAG, "-- onPreferenceClick else --:pref -> $preference") + } + } + return true + } + } + return super.onPreferenceClick(preference) + } + + override fun getDefaultVal(pref: Preference): Any? { + if (pref.key == KEY_MOFANG_CONNECT) { + val provider = CallerDevaToolsManager.mofang() + if (provider != null) { + return if (provider.isConnected()) { + PreferenceWithMoFang.MoFangConnectStatus.CONNECTED.ordinal + } else { + PreferenceWithMoFang.MoFangConnectStatus.CONNECT_START.ordinal + } + } + } else if (pref.key == KEY_MOFANG_COMMAND_TEST) { + return CallerDevaToolsManager.mofang()?.isEnableTest() ?: false + } + return super.getDefaultVal(pref) + } + + override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { + if (preference.key == KEY_MOFANG_COMMAND_TEST) { + val isChecked = newValue as? Boolean ?: false + CallerDevaToolsManager.mofang()?.enableTest(isChecked) + return true + } + return super.onPreferenceChange(preference, newValue) + } + + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + setPreferencesFromResource(R.xml.operate_panel_preference_details_mofang, rootKey) + } + } + + class VehiclesPreferenceFragmentCompat : OperatePanelDetailBase() { + companion object { + private const val KEY_PNC_PARK_INTERSECTION_CAR = "pnc_park_intersection_car" + private const val KEY_PNC_PARK_OVERTAKE_CAR = "pnc_park_overtake_car" + private const val KEY_DETOUR_RETARD_PARK = "detour_retard_park" + private const val KEY_RAIN_DAY = "rain_day" + private const val KEY_FAULT_DECELERATION_PARK = "fault_deceleration_park" + private const val KEY_WEAK_NET_DECELERATION_PARK = "weak_net_deceleration_park" + private const val KEY_EXAM_FUNCTION_PANEL = "exam_function_panel" + private const val KEY_ALL_MERGE_MODE = "all_merge_mode" + private const val KEY_BLIND_AREA_MODE = "blind_area_mode" + private const val KEY_BEYOND_VISUAL_RANGE_MODE = "beyond_visual_range_mode" + private const val KEY_TRANSPARENT_TRANSFER_MODE = "transparent_transfer_mode" + private const val KEY_PURE_OBU_MODE = "pure_obu_mode" + private const val KEY_AUTO_PILOT_SPEED_THRESHOLDS = "auto_pilot_speed_thresholds" + private const val KEY_CHANGE_LANE_SPEED_THRESHOLDS = "change_lane_speed_thresholds" + private const val KEY_OVERTAKE_SPEED_THRESHOLDSS = "overtake_speed_thresholds" + } + + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + setPreferencesFromResource(R.xml.operate_panel_preference_details_vehicles, rootKey) + } + + override fun isEnabled(pref: Preference): Boolean { + when (pref.key) { + KEY_AUTO_PILOT_SPEED_THRESHOLDS, KEY_OVERTAKE_SPEED_THRESHOLDSS -> { + return !AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode) + } + } + return super.isEnabled(pref) + } + + override fun getDefaultVal(pref: Preference): Any? { + when (pref.key) { + KEY_PNC_PARK_INTERSECTION_CAR -> { + return FunctionBuildConfig.isOpenParkVehCross + } + KEY_PNC_PARK_OVERTAKE_CAR -> { + return FunctionBuildConfig.isOpenOvertake + } + KEY_DETOUR_RETARD_PARK -> { + return FunctionBuildConfig.isDetouring + } + KEY_RAIN_DAY -> { + return FunctionBuildConfig.isRainMode + } + KEY_WEAK_NET_DECELERATION_PARK -> { + return FunctionBuildConfig.isWeakNetSlowDown + } + KEY_FAULT_DECELERATION_PARK -> { + return FunctionBuildConfig.isFaultSlowDown + } + KEY_ALL_MERGE_MODE -> { + return FunctionBuildConfig.fusionMode == 1 + } + KEY_BLIND_AREA_MODE -> { + return FunctionBuildConfig.fusionMode == 2 + } + KEY_BEYOND_VISUAL_RANGE_MODE -> { + return FunctionBuildConfig.fusionMode == 3 + } + KEY_TRANSPARENT_TRANSFER_MODE -> { + return FunctionBuildConfig.fusionMode == 4 + } + KEY_PURE_OBU_MODE -> { + return FunctionBuildConfig.fusionMode == 5 + } + KEY_CHANGE_LANE_SPEED_THRESHOLDS -> { + return setOf("3.0", "7.0", "${FunctionBuildConfig.detouringSpeed}", "0.5") + } + KEY_OVERTAKE_SPEED_THRESHOLDSS -> { + return setOf("3.0", "12.5", "${FunctionBuildConfig.overTakeSpeed}", "0.5") + } + KEY_AUTO_PILOT_SPEED_THRESHOLDS -> { //TODO renwj 自动驾驶速度阈值,旧版本没有看到 + } + } + return super.getDefaultVal(pref) + } + + override fun onPreferenceClick(preference: Preference): Boolean { + Log.d(TAG, "-- onPreferenceClick --:pref -> $preference") + when (preference.key) { + KEY_AUTO_PILOT_SPEED_THRESHOLDS -> { + FunctionBuildConfig.detouringSpeed = preference.extras.getFloat(PreferenceWithSpeedSetting.KEY_BUNDLE_CURRENT_VALUE, FunctionBuildConfig.detouringSpeed.toFloat()).toInt() + hmiAction("SOP 变道绕障的目标障碍物速度阈值", FunctionBuildConfig.detouringSpeed) + val isSuccess = CallerAutoPilotControlManager.sendDetouringSpeed(FunctionBuildConfig.detouringSpeed.toDouble()) + if (isSuccess == true) { + ToastUtils.showShort("变道绕障的目标障碍物速度阈值设置成功") + hmiAction("SOP 变道绕障的目标障碍物速度阈值设置", "成功") + } else { + ToastUtils.showShort("变道绕障的目标障碍物速度阈值设置失败") + hmiAction("SOP 变道绕障的目标障碍物速度阈值设置", "失败") + } + clickEventAnalytics("变道速度阈值", true) + } + KEY_OVERTAKE_SPEED_THRESHOLDSS -> { + FunctionBuildConfig.overTakeSpeed = preference.extras.getFloat(PreferenceWithSpeedSetting.KEY_BUNDLE_CURRENT_VALUE, FunctionBuildConfig.overTakeSpeed) + val isSuccess = CallerAutoPilotControlManager.sendOvertakeMaxSpeed(FunctionBuildConfig.overTakeSpeed.toDouble()) + if (isSuccess == true) { + ToastUtils.showShort("SOP 超车目标障碍物速度阈值设置成功") + hmiAction("SOP 超车目标障碍物速度阈值设置", "成功") + } else { + ToastUtils.showShort("SOP 超车目标障碍物速度阈值设置失败") + hmiAction("SOP 超车目标障碍物速度阈值设置", "失败") + } + clickEventAnalytics("超车速度阈值", true) + } + } + return super.onPreferenceClick(preference) + } + + override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { + when (preference.key) { + KEY_PNC_PARK_INTERSECTION_CAR -> { + val isChecked = newValue as? Boolean ?: false + hmiAction("SOP PNC-park-会车, ", isChecked) + CallerAutoPilotControlManager.sendParkVehCross(isChecked) + FunctionBuildConfig.isOpenParkVehCross = isChecked + } + KEY_PNC_PARK_OVERTAKE_CAR -> { + val isChecked = newValue as? Boolean ?: false + hmiAction("SOP PNC-park-超车, ", isChecked) + CallerAutoPilotControlManager.sendParkVehOvertake(isChecked) + FunctionBuildConfig.isOpenOvertake = isChecked + } + KEY_DETOUR_RETARD_PARK -> { + val isChecked = newValue as? Boolean ?: false + hmiAction("SOP 绕障类功能开关, ", isChecked) + CallerAutoPilotControlManager.sendDetouring(isChecked) + FunctionBuildConfig.isDetouring = isChecked + clickEventAnalytics("绕障类功能", isChecked) + } + KEY_RAIN_DAY -> { + val isChecked = newValue as? Boolean ?: false + hmiAction("SOP 雨天模式开关, ", isChecked) + clickEventAnalytics("雨天模式", isChecked) + FunctionBuildConfig.isRainMode = isChecked + CallerAutoPilotControlManager.setRainMode(isChecked) + CallerHmiViewControlListenerManager.invokeFuncMode(FUNC_MODE_RAIN, isChecked) + CallerSopSettingManager.invokeRainModeListener(isChecked) + } + KEY_WEAK_NET_DECELERATION_PARK -> { + val isChecked = newValue as? Boolean ?: false + FunctionBuildConfig.isWeakNetSlowDown = isChecked + CallerAutoPilotControlManager.sendWeakNetSlowDown(isChecked) + hmiAction("SOP 弱网减速停车, ", isChecked) + clickEventAnalytics("弱网减速停车", isChecked) + } + KEY_FAULT_DECELERATION_PARK -> { + val isChecked = newValue as? Boolean ?: false + FunctionBuildConfig.isFaultSlowDown = isChecked + CallerAutoPilotControlManager.sendBreakdownSlowDown(isChecked) + hmiAction("SOP 故障减速停车, ", isChecked) + clickEventAnalytics("故障减速停车", isChecked) + } + KEY_EXAM_FUNCTION_PANEL -> { + val isChecked = newValue as? Boolean ?: false + FunctionBuildConfig.isShowExamWindow = isChecked + CallerDevaToolsManager.showExamControlWindow(isChecked) + hmiAction("SOP 考试功能面板, ", isChecked) + clickEventAnalytics("考试功能面板", isChecked) + } + KEY_ALL_MERGE_MODE -> { + FunctionBuildConfig.fusionMode = 1 + hmiAction("SOP 融合模式, ", FunctionBuildConfig.fusionMode) + clickEventAnalytics("融合模式", true) + CallerAutoPilotControlManager.sendFusionMode(FunctionBuildConfig.fusionMode) + } + KEY_BLIND_AREA_MODE -> { + FunctionBuildConfig.fusionMode = 2 + hmiAction("SOP 融合模式, ", FunctionBuildConfig.fusionMode) + clickEventAnalytics("融合模式", true) + CallerAutoPilotControlManager.sendFusionMode(FunctionBuildConfig.fusionMode) + } + KEY_BEYOND_VISUAL_RANGE_MODE -> { + FunctionBuildConfig.fusionMode = 3 + hmiAction("SOP 融合模式, ", FunctionBuildConfig.fusionMode) + clickEventAnalytics("融合模式", true) + CallerAutoPilotControlManager.sendFusionMode(FunctionBuildConfig.fusionMode) + } + KEY_TRANSPARENT_TRANSFER_MODE -> { + FunctionBuildConfig.fusionMode = 4 + hmiAction("SOP 融合模式, ", FunctionBuildConfig.fusionMode) + clickEventAnalytics("融合模式", true) + CallerAutoPilotControlManager.sendFusionMode(FunctionBuildConfig.fusionMode) + } + KEY_PURE_OBU_MODE -> { + FunctionBuildConfig.fusionMode = 5 + hmiAction("SOP 融合模式, ", FunctionBuildConfig.fusionMode) + clickEventAnalytics("融合模式", true) + CallerAutoPilotControlManager.sendFusionMode(FunctionBuildConfig.fusionMode) + } + } + return super.onPreferenceChange(preference, newValue) + } + } + + class WelcomeWordsPreferenceCompat : OperatePanelDetailBase() { + + + companion object { + private const val KEY_WELCOME_WORDS = "welcome_words" + } + + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + setPreferencesFromResource(R.xml.operate_panel_preference_details_welcome_words, rootKey) + } + + override fun getDefaultVal(pref: Preference): Any? { + if (pref.key == KEY_WELCOME_WORDS) { + return FunctionBuildConfig.welcomeWords + } + return super.getDefaultVal(pref) + } + + override fun onPreferenceClick(preference: Preference): Boolean { + if (preference.key == KEY_WELCOME_WORDS) { + FunctionBuildConfig.welcomeWords = preference.extras.getString(PreferenceWithWelcomeWords.KEY_BUNDLE_CURRENT_EDIT_TEXT_VALUE) + hmiAction("外屏欢迎语", FunctionBuildConfig.welcomeWords ?: "") + clickEventAnalytics("外屏欢迎语", true) + } + return super.onPreferenceClick(preference) + } + } constructor(context: Context) : this(context, null) constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0) constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { orientation = VERTICAL - Log.d(TAG, "--- init ----") LayoutInflater.from(context).inflate(R.layout.layout_operate_panel, this, true) background = ContextCompat.getDrawable(context, R.drawable.bg_operate_panel) iv_operate_panel_close?.onClick { CallerHmiManager.toggleOperatePanel(false) } - } - - override fun onAttachedToWindow() { - super.onAttachedToWindow() - Log.d(TAG, "--- onAttachedToWindow ---") - } - - override fun onDetachedFromWindow() { - super.onDetachedFromWindow() - Log.d(TAG, "--- onDetachedFromWindow ---") + isClickable = true } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/preferences/PreferenceWithMoFang.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/preferences/PreferenceWithMoFang.kt new file mode 100644 index 0000000000..9c8cc6b8e2 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/preferences/PreferenceWithMoFang.kt @@ -0,0 +1,69 @@ +package com.mogo.eagle.core.function.hmi.ui.operate.preferences + +import android.content.Context +import android.util.AttributeSet +import androidx.core.content.ContextCompat +import androidx.preference.Preference +import androidx.preference.PreferenceViewHolder +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.utilcode.kotlin.onClick + +class PreferenceWithMoFang: Preference { + + constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) + constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) + constructor(context: Context) : super(context) + + companion object { + const val KEY_CURRENT_CONNECT_STATUS = "key_mofang_connect_status" + } + + enum class MoFangConnectStatus { + CONNECT_START, + CONNECTED, + CONNECTING + } + + private var status: MoFangConnectStatus? = null + + override fun setDefaultValue(defaultValue: Any?) { + super.setDefaultValue(defaultValue) + status = MoFangConnectStatus.values().find { it.ordinal == defaultValue } + notifyChanged() + } + + fun updateStatus(status: MoFangConnectStatus) { + this.status = status + notifyChanged() + } + + override fun onBindViewHolder(holder: PreferenceViewHolder) { + super.onBindViewHolder(holder) + val stats = this.status ?: return + val btConnect = holder.findViewById(R.id.bt_mofang) + btConnect.setOnClickListener(null) + when(stats) { + MoFangConnectStatus.CONNECT_START -> { + btConnect.isEnabled = true + btConnect.background = ContextCompat.getDrawable(holder.itemView.context, R.drawable.icon_operate_panel_mofang_connect_start) + btConnect.onClick { + extras.putInt(KEY_CURRENT_CONNECT_STATUS, stats.ordinal) + onPreferenceClickListener?.onPreferenceClick(this) + } + } + MoFangConnectStatus.CONNECTED -> { + btConnect.isEnabled = true + btConnect.background = ContextCompat.getDrawable(holder.itemView.context, R.drawable.icon_operate_panel_mofang_disconnect) + btConnect.onClick { + extras.putInt(KEY_CURRENT_CONNECT_STATUS, stats.ordinal) + onPreferenceClickListener?.onPreferenceClick(this) + } + } + MoFangConnectStatus.CONNECTING -> { + btConnect.isEnabled = false + btConnect.background = ContextCompat.getDrawable(holder.itemView.context, R.drawable.icon_operate_panel_mofang_connect_doing) + } + } + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/preferences/PreferenceWithSpeedSetting.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/preferences/PreferenceWithSpeedSetting.kt new file mode 100644 index 0000000000..aa5d4c529d --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/preferences/PreferenceWithSpeedSetting.kt @@ -0,0 +1,95 @@ +package com.mogo.eagle.core.function.hmi.ui.operate.preferences + +import android.content.Context +import android.util.AttributeSet +import android.widget.TextView +import androidx.preference.Preference +import androidx.preference.PreferenceViewHolder +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.utilcode.kotlin.onClick +import com.mogo.eagle.core.utilcode.util.ToastUtils +import kotlin.math.max + +class PreferenceWithSpeedSetting : Preference { + + companion object { + const val KEY_BUNDLE_CURRENT_VALUE = "key_bundle_current_val" + } + + constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) + constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) + constructor(context: Context) : super(context) + + private var mDefaultValueSet: Any? = null + + override fun setDefaultValue(defaultValue: Any?) { + super.setDefaultValue(defaultValue) + mDefaultValueSet = defaultValue + notifyChanged() + } + + override fun onBindViewHolder(holder: PreferenceViewHolder) { + super.onBindViewHolder(holder) + val defaultSet = mDefaultValueSet ?: return + if (defaultSet !is Set<*> || defaultSet.size != 4) { + throw AssertionError() + } + val min = (defaultSet.elementAt(0) as String).toFloat() + val max = (defaultSet.elementAt(1) as String).toFloat() + var cur = (defaultSet.elementAt(2) as String).toFloat() + val step = (defaultSet.elementAt(3) as String).toFloat() + if (min > max) { + throw AssertionError() + } + if (min > cur) { + throw AssertionError() + } + if (cur > max) { + throw AssertionError() + } + val ll = holder.findViewById(R.id.ll_speed) + val btnOk = holder.findViewById(R.id.bt_ok) + val speedLimit = holder.findViewById(R.id.tv_speed_limit) as? TextView + if (speedLimit?.tag != null && speedLimit.tag is Float) { + cur = max(cur, speedLimit.tag as Float) + } + speedLimit?.text = cur.toString() + val minus = holder.findViewById(R.id.iv_speed_minus) + minus.setOnClickListener(null) + minus.onClick { + val minusAfter = cur - step + if (minusAfter < min) { + ToastUtils.showShort("阈值最小可为${min}m/s") + return@onClick + } + cur = minusAfter + btnOk.isEnabled = true + ll.isSelected = true + speedLimit?.tag = minusAfter + speedLimit?.text = minusAfter.toString() + } + val add = holder.findViewById(R.id.iv_speed_add) + add.setOnClickListener(null) + add.onClick { + val addAfter = cur + step + if (addAfter > max) { + ToastUtils.showShort("阈值最大可为${max}m/s") + return@onClick + } + cur = addAfter + ll.isSelected = true + btnOk.isEnabled = true + speedLimit?.tag = addAfter + speedLimit?.text = addAfter.toString() + } + btnOk.isEnabled = false + btnOk.setOnClickListener(null) + btnOk.onClick { + onPreferenceClickListener?.also { + extras.putFloat(KEY_BUNDLE_CURRENT_VALUE, cur) + it.onPreferenceClick(this) + } + } + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/preferences/PreferenceWithUnmanInterval.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/preferences/PreferenceWithUnmanInterval.kt new file mode 100644 index 0000000000..70672af2b0 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/preferences/PreferenceWithUnmanInterval.kt @@ -0,0 +1,103 @@ +package com.mogo.eagle.core.function.hmi.ui.operate.preferences + +import android.content.Context +import android.util.AttributeSet +import android.util.Log +import android.widget.CompoundButton +import android.widget.RadioButton +import android.widget.RadioGroup +import androidx.preference.Preference +import androidx.preference.PreferenceViewHolder +import com.mogo.eagle.core.function.hmi.R + +class PreferenceWithUnmanInterval: Preference, RadioGroup.OnCheckedChangeListener { + + companion object { + const val KEY_BUNDLE_CURRENT_INTERVAL = "key_bundle_unman_interval" + private const val TAG = "PreferenceWithUnmanInterval" + } + + constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) + constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) + constructor(context: Context) : super(context) + + enum class Interval { + FIVE_SECOND, + FIFTEEN_SECOND, + THIRTY_SECOND, + FORTY_FIVE_SECOND, + NEVER + } + + + private var interval: Interval? = null + + override fun setDefaultValue(defaultValue: Any?) { + super.setDefaultValue(defaultValue) + Log.d(TAG, "--- setDefaultValue 1 ---:defaultValue -> $defaultValue") + if (defaultValue is Int) { + interval = when(defaultValue) { + 5 -> Interval.FIVE_SECOND + 15 -> Interval.FIFTEEN_SECOND + 30 -> Interval.THIRTY_SECOND + 45 -> Interval.FORTY_FIVE_SECOND + else -> Interval.NEVER + } + } + } + + override fun onBindViewHolder(holder: PreferenceViewHolder) { + super.onBindViewHolder(holder) + Log.d(TAG, "--- onBindViewHolder 1 ---:interval -> $interval") + val temp = interval?: return + Log.d(TAG, "--- onBindViewHolder 2 --- ") + val five = holder.findViewById(R.id.rb_5s) as? RadioButton + val fifteen = holder.findViewById(R.id.rb_15s) as? RadioButton + val thirty = holder.findViewById(R.id.rb_30s) as? RadioButton + val forty_five = holder.findViewById(R.id.rb_45s) as? RadioButton + val never = holder.findViewById(R.id.rb_never) as? RadioButton + when(temp) { + Interval.FIVE_SECOND -> five?.isChecked = true + Interval.FIFTEEN_SECOND -> fifteen?.isChecked = true + Interval.THIRTY_SECOND -> thirty?.isChecked = true + Interval.FORTY_FIVE_SECOND -> forty_five?.isChecked = true + Interval.NEVER -> never?.isChecked = true + } + + (holder.findViewById(R.id.rg_root) as? RadioGroup)?.also { + it.setOnCheckedChangeListener(this) + } + } + + override fun onCheckedChanged(group: RadioGroup?, checkedId: Int) { + Log.d(TAG, "--- onCheckedChanged --- ") + when(checkedId) { + R.id.rb_5s -> { + Log.d(TAG, "--- onCheckedChanged 5s--- ") + extras.putInt(KEY_BUNDLE_CURRENT_INTERVAL, Interval.FIVE_SECOND.ordinal) + onPreferenceClickListener?.onPreferenceClick(this) + } + R.id.rb_15s -> { + Log.d(TAG, "--- onCheckedChanged 15s--- ") + extras.putInt(KEY_BUNDLE_CURRENT_INTERVAL, Interval.FIFTEEN_SECOND.ordinal) + onPreferenceClickListener?.onPreferenceClick(this) + } + R.id.rb_30s -> { + Log.d(TAG, "--- onCheckedChanged 30s--- ") + extras.putInt(KEY_BUNDLE_CURRENT_INTERVAL, Interval.THIRTY_SECOND.ordinal) + onPreferenceClickListener?.onPreferenceClick(this) + } + R.id.rb_45s -> { + Log.d(TAG, "--- onCheckedChanged 45s--- ") + extras.putInt(KEY_BUNDLE_CURRENT_INTERVAL, Interval.FORTY_FIVE_SECOND.ordinal) + onPreferenceClickListener?.onPreferenceClick(this) + } + R.id.rb_never -> { + Log.d(TAG, "--- onCheckedChanged never--- ") + extras.putInt(KEY_BUNDLE_CURRENT_INTERVAL, Interval.NEVER.ordinal) + onPreferenceClickListener?.onPreferenceClick(this) + } + } + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/preferences/PreferenceWithWelcomeWords.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/preferences/PreferenceWithWelcomeWords.kt new file mode 100644 index 0000000000..cb6cd99e79 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/preferences/PreferenceWithWelcomeWords.kt @@ -0,0 +1,56 @@ +package com.mogo.eagle.core.function.hmi.ui.operate.preferences + +import android.content.Context +import android.text.TextUtils +import android.util.AttributeSet +import android.widget.EditText +import androidx.core.widget.doOnTextChanged +import androidx.preference.Preference +import androidx.preference.PreferenceViewHolder +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.utilcode.kotlin.onClick + +class PreferenceWithWelcomeWords: Preference { + + companion object { + const val KEY_BUNDLE_CURRENT_EDIT_TEXT_VALUE = "key_bundle_current_edit_text" + } + + constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) + constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) + constructor(context: Context) : super(context) + + + private var mCurrentWelcomeWords: String? = null + + override fun setDefaultValue(defaultValue: Any?) { + super.setDefaultValue(defaultValue) + if (defaultValue is String) { + mCurrentWelcomeWords = defaultValue + notifyChanged() + } + } + + override fun onBindViewHolder(holder: PreferenceViewHolder) { + super.onBindViewHolder(holder) + val currentWelcomeWords = mCurrentWelcomeWords + val et = holder.findViewById(R.id.et_welcome_words) as? EditText + val btn_ok = holder.findViewById(R.id.bt_ok) + btn_ok.isEnabled = false + et?.doOnTextChanged { text, _, _, _ -> + if (!TextUtils.isEmpty(text)) { + btn_ok?.isEnabled = true + } else { + btn_ok?.isEnabled = false + } + } + if (!TextUtils.isEmpty(currentWelcomeWords)) { + et?.setText(currentWelcomeWords) + } + btn_ok.onClick { + extras.putString(KEY_BUNDLE_CURRENT_EDIT_TEXT_VALUE, et?.text.toString()) + onPreferenceClickListener?.onPreferenceClick(this) + } + } +} \ No newline at end of file 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 c5acc363ee..d131746232 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 @@ -143,21 +143,21 @@ internal class SOPSettingView @JvmOverloads constructor( */ private fun v2xSetting() { //V2X总开关 - scV2XSwitch.isChecked = FunctionBuildConfig.v2xMainSwitch + scV2XSwitch.isChecked = FunctionBuildConfig.v2xTotalSwitch scV2XSwitch.setOnCheckedChangeListener { _, isChecked -> - FunctionBuildConfig.v2xMainSwitch = isChecked + FunctionBuildConfig.v2xTotalSwitch = isChecked hmiAction("SOP V2X总开关, ", isChecked) clickEventAnalytics("V2X总开关",isChecked) if (isChecked) { //V2N总开关 - scV2NSwitch.isChecked = FunctionBuildConfig.v2nMainSwitch - hmiAction("SOP V2N总开关, ", FunctionBuildConfig.v2nMainSwitch) + scV2NSwitch.isChecked = FunctionBuildConfig.v2nTotalSwitch + hmiAction("SOP V2N总开关, ", FunctionBuildConfig.v2nTotalSwitch) //V2I总开关 - scV2ISwitch.isChecked = HmiBuildConfig.isShowObuV2iView - hmiAction("SOP V2I总开关, ", HmiBuildConfig.isShowObuV2iView) + scV2ISwitch.isChecked = HmiBuildConfig.v2iTotalSwitch + hmiAction("SOP V2I总开关, ", HmiBuildConfig.v2iTotalSwitch) //V2V总开关 - scObuV2vView.isChecked = HmiBuildConfig.isShowObuV2vView - hmiAction("SOP V2V总开关, ", HmiBuildConfig.isShowObuV2vView) + scObuV2vView.isChecked = HmiBuildConfig.v2vTotalSwitch + hmiAction("SOP V2V总开关, ", HmiBuildConfig.v2vTotalSwitch) //obu总开关 scObu.isChecked = obuConnectStatus hmiAction("SOP obu总开关, ", obuConnectStatus) @@ -187,24 +187,24 @@ internal class SOPSettingView @JvmOverloads constructor( } //V2N总开关 - scV2NSwitch.isChecked = FunctionBuildConfig.v2nMainSwitch + scV2NSwitch.isChecked = FunctionBuildConfig.v2nTotalSwitch //根据V2N状态设置子开关是否可以点击 //V2N新链路 - scNewV2NData.isEnabled = FunctionBuildConfig.v2nMainSwitch + scNewV2NData.isEnabled = FunctionBuildConfig.v2nTotalSwitch //V2N场景进PNC - scV2nPnc.isEnabled = FunctionBuildConfig.v2nMainSwitch + scV2nPnc.isEnabled = FunctionBuildConfig.v2nTotalSwitch //绿波通行(默认关闭) - scGreenWaveSop.isEnabled = FunctionBuildConfig.v2nMainSwitch + scGreenWaveSop.isEnabled = FunctionBuildConfig.v2nTotalSwitch scV2NSwitch.setOnCheckedChangeListener { compoundButton, isChecked -> clickEventAnalytics("V2N总开关",isChecked) if (isChecked) { //V2N新链路 - scNewV2NData.isChecked = FunctionBuildConfig.isNewV2NData - hmiAction("SOP 是否是V2N新链路(云->工控机->App)", FunctionBuildConfig.isNewV2NData) + scNewV2NData.isChecked = FunctionBuildConfig.v2nNewLinked + hmiAction("SOP 是否是V2N新链路(云->工控机->App)", FunctionBuildConfig.v2nNewLinked) //V2N场景进PNC - scV2nPnc.isChecked = FunctionBuildConfig.isV2NPnc - hmiAction("SOP V2N场景进PNC, ", FunctionBuildConfig.isV2NPnc) - CallerAutoPilotControlManager.sendV2nToPncCmd(FunctionBuildConfig.isV2NPnc) + scV2nPnc.isChecked = FunctionBuildConfig.v2nNewLinkedToPNC + hmiAction("SOP V2N场景进PNC, ", FunctionBuildConfig.v2nNewLinkedToPNC) + CallerAutoPilotControlManager.sendV2nToPncCmd(FunctionBuildConfig.v2nNewLinkedToPNC) //绿波通行 scGreenWaveSop.isChecked = HmiBuildConfig.isShowGreenWaveView hmiAction("SOP obu绿波通行, ", HmiBuildConfig.isShowGreenWaveView) @@ -234,37 +234,37 @@ internal class SOPSettingView @JvmOverloads constructor( if (!compoundButton.isPressed) { return@setOnCheckedChangeListener } - FunctionBuildConfig.v2nMainSwitch = isChecked + FunctionBuildConfig.v2nTotalSwitch = isChecked val map = HashMap().also { it["f1"] = isChecked - it["f2"] = FunctionBuildConfig.isNewV2NData + it["f2"] = FunctionBuildConfig.v2nNewLinked } CallerTelematicManager.sendMsgToAllClients(TelematicConstant.V2N_NEW_LINK_SWITCH, GsonUtils.toJson(map).toByteArray()) } //V2I总开关 - scV2ISwitch.isChecked = HmiBuildConfig.isShowObuV2iView //是否展示obu的v2i + scV2ISwitch.isChecked = HmiBuildConfig.v2iTotalSwitch //是否展示obu的v2i //根据V2I状态设置子开关是否可以点击 - scV2iPnc.isEnabled = HmiBuildConfig.isShowObuV2iView - scRunRedLightSop.isEnabled = HmiBuildConfig.isShowObuV2iView - scObuWeaknessTrafficSop.isEnabled = HmiBuildConfig.isShowObuV2iView + scV2iPnc.isEnabled = HmiBuildConfig.v2iTotalSwitch + scRunRedLightSop.isEnabled = HmiBuildConfig.v2iTotalSwitch + scObuWeaknessTrafficSop.isEnabled = HmiBuildConfig.v2iTotalSwitch scV2ISwitch.setOnCheckedChangeListener { compoundButton, isChecked -> clickEventAnalytics("V2I总开关",isChecked) if (isChecked) { //V2I场景进PNC - scV2iPnc.isChecked = FunctionBuildConfig.isV2IPnc - hmiAction("SOP V2I场景进PNC, ", FunctionBuildConfig.isV2IPnc) - CallerAutoPilotControlManager.sendV2iToPncCmd(FunctionBuildConfig.isV2IPnc) + scV2iPnc.isChecked = FunctionBuildConfig.v2iToPNC + hmiAction("SOP V2I场景进PNC, ", FunctionBuildConfig.v2iToPNC) + CallerAutoPilotControlManager.sendV2iToPncCmd(FunctionBuildConfig.v2iToPNC) //闯红灯预警 - scRunRedLightSop.isChecked = HmiBuildConfig.isShowRunRedLightView - hmiAction("SOP obu闯红灯预警, ", HmiBuildConfig.isShowRunRedLightView) + scRunRedLightSop.isChecked = HmiBuildConfig.v2iRedLightWarning + hmiAction("SOP obu闯红灯预警, ", HmiBuildConfig.v2iRedLightWarning) CallerTelematicManager.sendMsgToAllClients( TelematicConstant.OBU_RUNREDLIGHT_WARNING, "1".toByteArray() ) //路侧弱势交通参与者 - scObuWeaknessTrafficSop.isChecked = HmiBuildConfig.isShowObuWeaknessTrafficView - hmiAction("SOP obu弱势交通控制, ", HmiBuildConfig.isShowObuWeaknessTrafficView) + scObuWeaknessTrafficSop.isChecked = HmiBuildConfig.v2iWeaknessTraffic + hmiAction("SOP obu弱势交通控制, ", HmiBuildConfig.v2iWeaknessTraffic) } else { //V2I场景进PNC scV2iPnc.isChecked = false @@ -287,28 +287,28 @@ internal class SOPSettingView @JvmOverloads constructor( if (!compoundButton.isPressed) { return@setOnCheckedChangeListener } - HmiBuildConfig.isShowObuV2iView = isChecked + HmiBuildConfig.v2iTotalSwitch = isChecked } //V2N新链路 - scNewV2NData.isChecked = FunctionBuildConfig.isNewV2NData + scNewV2NData.isChecked = FunctionBuildConfig.v2nNewLinked scNewV2NData.setOnCheckedChangeListener { compoundButton, isChecked -> if (!compoundButton.isPressed) { return@setOnCheckedChangeListener } clickEventAnalytics("V2N新链路",isChecked) hmiAction("SOP 是否是V2N新链路(云->工控机->App)", isChecked) - FunctionBuildConfig.isNewV2NData = isChecked + FunctionBuildConfig.v2nNewLinked = isChecked val map = HashMap().also { - it["f1"] = FunctionBuildConfig.v2nMainSwitch + it["f1"] = FunctionBuildConfig.v2nTotalSwitch it["f2"] = isChecked } CallerTelematicManager.sendMsgToAllClients(TelematicConstant.V2N_NEW_LINK_SWITCH, GsonUtils.toJson(map).toByteArray()) } //V2N场景进PNC - scV2nPnc.isChecked = FunctionBuildConfig.isV2NPnc + scV2nPnc.isChecked = FunctionBuildConfig.v2nNewLinkedToPNC scV2nPnc.setOnCheckedChangeListener { compoundButton, isChecked -> if (!compoundButton.isPressed) { return@setOnCheckedChangeListener @@ -316,7 +316,7 @@ internal class SOPSettingView @JvmOverloads constructor( clickEventAnalytics("V2N场景进PNC",isChecked) hmiAction("SOP V2N场景进PNC, ", isChecked) CallerAutoPilotControlManager.sendV2nToPncCmd(isChecked) - FunctionBuildConfig.isV2NPnc = isChecked + FunctionBuildConfig.v2nNewLinkedToPNC = isChecked } //绿波通行(默认关闭) @@ -342,7 +342,7 @@ internal class SOPSettingView @JvmOverloads constructor( } //V2I场景进PNC - scV2iPnc.isChecked = FunctionBuildConfig.isV2IPnc + scV2iPnc.isChecked = FunctionBuildConfig.v2iToPNC scV2iPnc.setOnCheckedChangeListener { compoundButton, isChecked -> if (!compoundButton.isPressed) { return@setOnCheckedChangeListener @@ -350,19 +350,19 @@ internal class SOPSettingView @JvmOverloads constructor( clickEventAnalytics("V2I场景进PNC",isChecked) hmiAction("SOP V2I场景进PNC, ", isChecked) CallerAutoPilotControlManager.sendV2iToPncCmd(isChecked) - FunctionBuildConfig.isV2IPnc = isChecked + FunctionBuildConfig.v2iToPNC = isChecked } //闯红灯预警(默认关闭) - scRunRedLightSop.isChecked = HmiBuildConfig.isShowRunRedLightView + scRunRedLightSop.isChecked = HmiBuildConfig.v2iRedLightWarning scRunRedLightSop.setOnCheckedChangeListener { compoundButton, isChecked -> if (!compoundButton.isPressed) { return@setOnCheckedChangeListener } clickEventAnalytics("闯红灯预警",isChecked) hmiAction("SOP obu闯红灯预警, ", isChecked) - HmiBuildConfig.isShowRunRedLightView = isChecked - if (HmiBuildConfig.isShowRunRedLightView) { + HmiBuildConfig.v2iRedLightWarning = isChecked + if (HmiBuildConfig.v2iRedLightWarning) { CallerTelematicManager.sendMsgToAllClients( TelematicConstant.OBU_RUNREDLIGHT_WARNING, "1".toByteArray() @@ -376,25 +376,25 @@ internal class SOPSettingView @JvmOverloads constructor( } //路侧弱势交通参与者(默认开启) - scObuWeaknessTrafficSop.isChecked = HmiBuildConfig.isShowObuWeaknessTrafficView + scObuWeaknessTrafficSop.isChecked = HmiBuildConfig.v2iWeaknessTraffic scObuWeaknessTrafficSop.setOnCheckedChangeListener { compoundButton, isChecked -> if (!compoundButton.isPressed) { return@setOnCheckedChangeListener } clickEventAnalytics("路侧弱势交通参与者",isChecked) hmiAction("SOP obu弱势交通控制, ", isChecked) - HmiBuildConfig.isShowObuWeaknessTrafficView = isChecked + HmiBuildConfig.v2iWeaknessTraffic = isChecked } //V2V总开关(默认关闭) - scObuV2vView.isChecked = HmiBuildConfig.isShowObuV2vView + scObuV2vView.isChecked = HmiBuildConfig.v2vTotalSwitch scObuV2vView.setOnCheckedChangeListener { compoundButton, isChecked -> if (!compoundButton.isPressed) { return@setOnCheckedChangeListener } clickEventAnalytics("V2V总开关",isChecked) hmiAction("SOP obuV2V开关, ", isChecked) - HmiBuildConfig.isShowObuV2vView = isChecked + HmiBuildConfig.v2vTotalSwitch = isChecked } //obu总开关 @@ -599,7 +599,7 @@ internal class SOPSettingView @JvmOverloads constructor( scExamControl.isChecked = FunctionBuildConfig.isShowExamWindow scExamControl.setOnCheckedChangeListener { _, isChecked -> FunctionBuildConfig.isShowExamWindow = isChecked - CallerDevaToolsManager.showExamControlWindow(this,isChecked) + CallerDevaToolsManager.showExamControlWindow(isChecked) hmiAction("SOP 考试功能面板, ", isChecked) clickEventAnalytics("考试功能面板",isChecked) } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/viewport/VisualAngleToggleView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/viewport/VisualAngleToggleView.kt index 4c49110a97..8cb7971cd9 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/viewport/VisualAngleToggleView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/viewport/VisualAngleToggleView.kt @@ -15,7 +15,6 @@ import com.mogo.eagle.core.function.angle.scenes.Default import com.mogo.eagle.core.function.angle.scenes.LongSight import com.mogo.eagle.core.function.api.map.angle.IMoGoVisualAngleChangeProvider import com.mogo.eagle.core.function.api.map.angle.Scene -import com.mogo.eagle.core.function.call.hmi.CallerHmiManager import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.utilcode.kotlin.scope @@ -85,8 +84,6 @@ class VisualAngleToggleView : FrameLayout, IMoGoVisualAngleChangeProvider.OnMoGo override fun onAnimationEnd(animation: Animator, isReverse: Boolean) { super.onAnimationEnd(animation, isReverse) iv_toggle_block?.isEnabled = true - //TODO renwj - CallerHmiManager.toggleOperatePanel(false) } }) animator.interpolator = AccelerateDecelerateInterpolator() @@ -114,8 +111,6 @@ class VisualAngleToggleView : FrameLayout, IMoGoVisualAngleChangeProvider.OnMoGo override fun onAnimationEnd(animation: Animator, isReverse: Boolean) { iv_toggle_block?.isEnabled = true - //TODO renwj - CallerHmiManager.toggleOperatePanel(true) } }) animator.interpolator = AccelerateDecelerateInterpolator() diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_add.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_add.png new file mode 100644 index 0000000000000000000000000000000000000000..57787b878654d4b6b48966ef9c943e8e191c8299 GIT binary patch literal 727 zcmeAS@N?(olHy`uVBq!ia0vp^At21b1|(&&1r7o!#^NA%Cx&(BWL^R}E~ycoX}-P; zT0k}j17mw80}DtA5K93u0|WB{Mh0de%?J`(zyy~KS-^~7gA{JhIP1W`z~t!Z;uuoF z`1a;TufqW%$3D8b6b6X19}P5*ci?*TMnOZ5&#rs&g2fhABJ4*`nirIm7EV-pv?8PM z^#bodOkzt+%(wl`^LS}ru;T1VTg&g)vxP53_3|>Z2skj{AUL>|WLhn?2->3&)s=lT zs6gOk4dX*ok-O2s)@h&IC%)8F*m5-Qr2TvTD!x?*&UJEqnQ;A3RGiaq=bZ;O{8*{g z?8mlD{uFE5QU6d$lYeiN=P(8sYb|J)#d_vx#6p79A{(~L%@1t9?p!!Se$oA>2X5%j zO;((s?^XM{f&HlKB$c;|ntz{E|0@$yvPNy@)!l(_#AKr<{@MI%1^3sxSNnfkm&Et> za;2s1SY&bTUqNo(1>f*w)oUBSyeh7g7gN)IKAn~6St@nzbA;p9r~g(w z+ob(x_2!cvTQ~9l3$UGU{W^O6r@6=K)_+@FWqQm+nKkj$N_e=VIC%!r^mHl^m|J5fNS6Q$8$z`WYVqhIp;WphfZ?=Dy vJ-X&mnE$KybH1)@Wnkh^XuwH0++?zMySUln;gTe~DWM4f$X_Ss literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_checkbox_checked.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_checkbox_checked.png new file mode 100644 index 0000000000000000000000000000000000000000..70f4ea6db7de3fe8ac779dac7934a445569e72d6 GIT binary patch literal 6178 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 AEC2ui literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_checkbox_disabled.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_checkbox_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..796b2bbb7a1f248b4e01c3f5a089c2a88d5ccb65 GIT binary patch literal 2485 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 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_checkbox_unchecked.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_checkbox_unchecked.png new file mode 100644 index 0000000000000000000000000000000000000000..0473f102b7b8c6a34ec9f93ea238129d838793c6 GIT binary patch literal 4055 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 JPDHLkV1l_hv(f+n literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_minus.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d0da98e7c12a4031af503f26bf16b2b6c96507c0 GIT binary patch literal 472 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 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_mofang_disconnect.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_mofang_disconnect.png new file mode 100644 index 0000000000000000000000000000000000000000..abcb2e456fd61e8842597f24988986d07929453f GIT binary patch literal 24500 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 E14#j*U;qFB literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_ok_enabled.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_ok_enabled.png new file mode 100644 index 0000000000000000000000000000000000000000..bc2217f62daaf919acf5821b030a2bfe51b30bcc GIT binary patch literal 17345 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

=xUYx`ex_wh9QQSHB1 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 DnB$~I literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_switch_compat_unchecked.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_operate_panel_switch_compat_unchecked.png new file mode 100644 index 0000000000000000000000000000000000000000..60b809f4e62ef46d398f8386bb2796f9757cd4c3 GIT binary patch literal 2837 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 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_checkbox.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_checkbox.xml new file mode 100644 index 0000000000..a09689403e --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_checkbox.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_edit.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_edit.xml new file mode 100644 index 0000000000..6b64c07192 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_edit.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_edit_button.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_edit_button.xml new file mode 100644 index 0000000000..5e2f41f142 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_edit_button.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_preference_detail.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_preference_detail.xml new file mode 100644 index 0000000000..21d5075519 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_preference_detail.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_preference_header.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_preference_header.xml index b6ab109307..d5e8dae0d7 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_preference_header.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_preference_header.xml @@ -6,5 +6,5 @@ - + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_switch_compat.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_switch_compat.xml new file mode 100644 index 0000000000..a00fe5a714 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_switch_compat.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_welcome_words_edit.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_welcome_words_edit.xml new file mode 100644 index 0000000000..2972712b93 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_operate_panel_welcome_words_edit.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_radio_button_operate_panel_unman_interval.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_radio_button_operate_panel_unman_interval.xml new file mode 100644 index 0000000000..f1d2a57c5b --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_radio_button_operate_panel_unman_interval.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_radio_group_operate_panel_unman_interval.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_radio_group_operate_panel_unman_interval.xml new file mode 100644 index 0000000000..3cc871f759 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_radio_group_operate_panel_unman_interval.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_detail_recyclerview.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_detail_recyclerview.xml new file mode 100644 index 0000000000..8ff0d51233 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_detail_recyclerview.xml @@ -0,0 +1,7 @@ + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_holder.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_holder.xml new file mode 100644 index 0000000000..6ecee10c27 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_holder.xml @@ -0,0 +1,5 @@ + + diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_category_title.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_category_title.xml index dde2caa791..0f15e27692 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_category_title.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_category_title.xml @@ -9,5 +9,7 @@ android:textSize="@dimen/dp_30" android:paddingTop="@dimen/dp_30" android:paddingStart="@dimen/dp_30" + android:background="@android:color/transparent" tools:text="地图效果" - android:gravity="start" /> \ No newline at end of file + android:gravity="start" + tools:ignore="RtlSymmetry,SpUsage" /> \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_checkbox_compat.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_checkbox_compat.xml index 18f7a152e0..ff6172eb3b 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_checkbox_compat.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_checkbox_compat.xml @@ -6,6 +6,7 @@ android:layout_height="wrap_content" android:paddingStart="@dimen/dp_30" android:paddingEnd="@dimen/dp_30" + android:background="@android:color/transparent" android:orientation="horizontal" tools:background="#83000000"> diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_header.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_header.xml index a6ed4b8461..78d511e5e8 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_header.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_header.xml @@ -10,5 +10,8 @@ android:paddingTop="@dimen/dp_25" android:paddingBottom="@dimen/dp_25" android:paddingStart="@dimen/dp_30" + android:layout_marginEnd="@dimen/dp_30" + android:background="@drawable/bg_operate_panel_preference_header" tools:text="地图效果" - android:gravity="start" /> \ No newline at end of file + android:gravity="start" + tools:ignore="RtlSymmetry,SpUsage" /> \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_switch_compat.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_switch_compat.xml index 18f7a152e0..919de4480e 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_switch_compat.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_switch_compat.xml @@ -7,6 +7,7 @@ android:paddingStart="@dimen/dp_30" android:paddingEnd="@dimen/dp_30" android:orientation="horizontal" + android:background="@android:color/transparent" tools:background="#83000000"> + tools:text="V2X总开关" + tools:ignore="SpUsage" /> + tools:text="V2X总开关" + tools:ignore="SpUsage" /> + android:clickable="false" + android:button="@null" + android:background="@drawable/bg_operate_panel_checkbox"/> diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_widget_edit_with_button.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_widget_edit_with_button.xml index 6a19ddfa51..fde0695380 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_widget_edit_with_button.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_operate_panel_preference_widget_edit_with_button.xml @@ -1,6 +1,72 @@ - + android:orientation="horizontal" + android:layout_marginTop="@dimen/dp_20" + tools:background="#83000000"> + + + + + + + + + + + + + + +