From 2c90f5ca6fb4539a5084a2309332402890d99883 Mon Sep 17 00:00:00 2001 From: renwj Date: Wed, 18 Jan 2023 11:00:20 +0800 Subject: [PATCH 01/81] =?UTF-8?q?[2.13.2]=E7=A7=BB=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/launcher/MogoApplication.java | 43 ------------------- 1 file changed, 43 deletions(-) diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java index 547e5c243f..8f87eca0de 100644 --- a/app/src/main/java/com/mogo/launcher/MogoApplication.java +++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java @@ -1,14 +1,10 @@ package com.mogo.launcher; import com.mogo.eagle.core.function.main.MainMoGoApplication; -import android.content.Context; - import com.mogo.eagle.core.utilcode.mogo.logger.LogLevel; import com.mogo.eagle.core.utilcode.mogo.logger.Logger; import com.mogo.launcher.crash.CrashSystem; -import java.util.concurrent.ThreadPoolExecutor; - /** * @author congtaowang * @since 2019-12-18 @@ -17,45 +13,6 @@ import java.util.concurrent.ThreadPoolExecutor; */ public class MogoApplication extends MainMoGoApplication { - @Override - protected void attachBaseContext(Context base) { - super.attachBaseContext(base); -// ThreadConfig.Builder builder = new ThreadConfig.Builder().listener(new ThreadConfig.TaskExecuteListener() { -// @Override -// public boolean isEnabled() { -// return true; // 如果返回true,会有后续的回调;如果返回false, 不会有后续的回调 -// } -// -// @Override -// public void onExecutorBefore(@NonNull Runnable runnable, @NonNull ThreadConfig.TaskType type) { -// //每个任务执行前回调 -//// if (type == ThreadConfig.TaskType.HandlerThread) { -//// -//// -//// } -// } -// -// @Override -// public void onExecutorAfter(@NonNull Runnable runnable, @NonNull ThreadConfig.TaskType type) { -// //每个任务执行后回调 -// } -// -// /** -// * @param core 线程池的核心数 -// * @param max 线程池的最大线程数 -// * @param active 线程池正在活跃的任务数 -// * @param completed 线程池已完成的任务数 -// */ -// @Override -// public void onExecutorStateChanged(@NonNull ThreadPoolExecutor pool, int core, int max, int active, long completed) { -// //线程池在执行过程,状态变化回调 -// //Log.d("POOL", "core:" + core + ";max:" + max + ";active:" + active + ";completed:" + completed); -// } -// }); -// builder.loggable(false); -// ThreadManager.INSTANCE.init(builder); - } - @Override protected void initCrashConfig() { CrashSystem crashSystem = CrashSystem.getInstance(this); From 784d97b8db63318518cdf1eb88abf9ffb70cefc0 Mon Sep 17 00:00:00 2001 From: renwj Date: Wed, 18 Jan 2023 15:05:34 +0800 Subject: [PATCH 02/81] =?UTF-8?q?[2.13.2]=E4=BF=AE=E6=AD=A3Android8.0?= =?UTF-8?q?=E5=8F=8A=E4=BB=A5=E5=90=8E,=E5=90=8E=E5=8F=B0=E5=BC=80?= =?UTF-8?q?=E5=90=AFService=E5=BC=95=E8=B5=B7=E7=9A=84=E5=B4=A9=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 7 ++-- .../com/mogo/launcher/MogoApplication.java | 30 +---------------- .../java/com/mogo/launcher/lancet/CrashFix.kt | 32 +++++++++++++++++++ 3 files changed, 36 insertions(+), 33 deletions(-) create mode 100644 app/src/main/java/com/mogo/launcher/lancet/CrashFix.kt diff --git a/app/build.gradle b/app/build.gradle index 0b5f1cb500..9470c7c56c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -52,13 +52,12 @@ if (!isAndroidTestBuild()) { enableInDebug true weaveGroup { - leak_canary_crash_fix { - enable !isReleaseBuild - } - anr_fix { enable true } + crash_fix { + enable true + } } } } diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java index 8f87eca0de..c0ce3cb4d2 100644 --- a/app/src/main/java/com/mogo/launcher/MogoApplication.java +++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java @@ -1,29 +1 @@ -package com.mogo.launcher; - -import com.mogo.eagle.core.function.main.MainMoGoApplication; -import com.mogo.eagle.core.utilcode.mogo.logger.LogLevel; -import com.mogo.eagle.core.utilcode.mogo.logger.Logger; -import com.mogo.launcher.crash.CrashSystem; - -/** - * @author congtaowang - * @since 2019-12-18 - *

- * Launcher application - */ -public class MogoApplication extends MainMoGoApplication { - - @Override - protected void initCrashConfig() { - CrashSystem crashSystem = CrashSystem.getInstance(this); - crashSystem.init(); - //设置debug模式,日志不上传 - crashSystem.setDebug(BuildConfig.DEBUG); - } - - @Override - protected void initLogConfig() { - super.initLogConfig(); - Logger.init(BuildConfig.DEBUG ? LogLevel.DEBUG : LogLevel.OFF); - } -} +package com.mogo.launcher; import com.mogo.eagle.core.function.main.MainMoGoApplication; import com.mogo.eagle.core.utilcode.mogo.logger.LogLevel; import com.mogo.eagle.core.utilcode.mogo.logger.Logger; import com.mogo.launcher.crash.CrashSystem; /** * @author congtaowang * @since 2019-12-18 *

* Launcher application */ public class MogoApplication extends MainMoGoApplication { @Override protected void initCrashConfig() { CrashSystem crashSystem = CrashSystem.getInstance(this); crashSystem.init(); //设置debug模式,日志不上传 crashSystem.setDebug(BuildConfig.DEBUG); } @Override protected void initLogConfig() { super.initLogConfig(); Logger.init(BuildConfig.DEBUG ? LogLevel.DEBUG : LogLevel.OFF); } } \ No newline at end of file diff --git a/app/src/main/java/com/mogo/launcher/lancet/CrashFix.kt b/app/src/main/java/com/mogo/launcher/lancet/CrashFix.kt new file mode 100644 index 0000000000..09ae7d1c42 --- /dev/null +++ b/app/src/main/java/com/mogo/launcher/lancet/CrashFix.kt @@ -0,0 +1,32 @@ +package com.mogo.launcher.lancet + +import android.content.ComponentName +import android.content.Intent +import androidx.annotation.* +import com.knightboost.lancet.api.Origin +import com.knightboost.lancet.api.Scope.ALL +import com.knightboost.lancet.api.Scope.LEAF +import com.knightboost.lancet.api.annotations.* + +@Keep +@Weaver +@Group("crash_fix") +class CrashFix { + + /** + * 修正Android8.0及之后,后台启动Service引起的崩溃 + * java.lang.IllegalStateException: Not allowed to start service Intent { + * act=com.zhidao.cosupload.service.UPLOAD_ACTION cmp=com.mogo.launcher.f/com.zhidao.cosupload.service.UploadService }: app is in background uid UidRecord{6443b7b u0a404 LAST bg:+1m15s362ms idle change:idle procs:1 seq(0,0,0)} + */ + @Insert(mayCreateSuper = true) + @TargetClass("android.content.Context", scope = LEAF) + @TargetMethod(methodName = "startService") + fun fixStartServiceCrash(intent: Intent): ComponentName? { + return try { + Origin.call() as ComponentName? + } catch (t: Throwable) { + t.printStackTrace() + null + } + } +} \ No newline at end of file From 24e8ca5adcceeedd06f0457119089a3445b53066 Mon Sep 17 00:00:00 2001 From: renwj Date: Sat, 28 Jan 2023 15:31:59 +0800 Subject: [PATCH 03/81] =?UTF-8?q?[2.13.2]=E4=BC=98=E5=8C=96MarkerManager?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/v2x/events/marker/MarkerManager.kt | 17 +++++++---------- .../scenario/scene/airoad/AiRoadMarker.kt | 2 +- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/marker/MarkerManager.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/marker/MarkerManager.kt index 01387ee060..032df3a43f 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/marker/MarkerManager.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/marker/MarkerManager.kt @@ -96,43 +96,39 @@ object MarkerManager { } val currentLocation = carLoc.get() val lastLocation = if (marker.coordinateType == 0) lastCarLocation.get() else lastGpsLocation.get() - - if (marker.coordinateType == 0) { - lastCarLocation.set(currentLocation) - } else { - lastGpsLocation.set(currentLocation) - } if (currentLocation != null && lastLocation != null) { val delta = CoordinateUtils.calculateLineDistance(currentLocation.longitude, currentLocation.latitude, lastLocation.longitude, lastLocation.latitude) - Log.d(TAG, "--- checkTask --- 4 ---:delta:$delta") + Log.d(TAG, "--- checkTask --- 4 ---:delta:$delta, id:${marker.id}") var elapsed = elapsedDistances[marker] if (elapsed == null) { elapsed = delta.toDouble() } else { elapsed += delta } - Log.d(TAG, "--- checkTask --- 5 ---:delta:$delta, elapsed:${elapsed}") + Log.d(TAG, "--- checkTask --- 5 ---:delta:$delta, elapsed:${elapsed}, id: ${marker.id}") if (elapsed >= 200) { var removeMarkerError = false marker.markers?.forEach { try { + Log.e(TAG, "--- checkTask --- remove marker: $it, id: ${marker.id}") it.setVisible(false) it.destroy() } catch (t: Throwable) { t.printStackTrace() removeMarkerError = true - Log.e(TAG, "--- checkTask --- remove marker error:${t.message}") + Log.e(TAG, "--- checkTask --- remove marker error:${t.message}, id: ${marker.id}") } } var removeLineError = false marker.lines?.forEach { try { it.isVisible = false + Log.e(TAG, "--- checkTask --- remove line : $it, id:${marker.id}") it.destroy() } catch (t: Throwable) { t.printStackTrace() removeLineError = true - Log.e(TAG, "--- checkTask --- remove line error:${t.message}") + Log.e(TAG, "--- checkTask --- remove line error:${t.message}, id: ${marker.id}") } } if (!removeLineError && !removeMarkerError) { @@ -186,6 +182,7 @@ object MarkerManager { fun addMarker(marker: MarkerWrapper) { + Log.d(TAG, "=== addMarker ====: $marker") synchronized(showedMarkers) { showedMarkers.offer(marker) } diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/scene/airoad/AiRoadMarker.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/scene/airoad/AiRoadMarker.kt index dfbf16bf89..06bc9193de 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/scene/airoad/AiRoadMarker.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/scene/airoad/AiRoadMarker.kt @@ -144,8 +144,8 @@ class AiRoadMarker { if (line != null) { wrapper.addLine(line) } - MarkerManager.addMarker(wrapper) } + MarkerManager.addMarker(wrapper) } private fun removeLine() { From 2c27af28a3e8706cba7f079f49e4bb13c6c8ef49 Mon Sep 17 00:00:00 2001 From: renwj Date: Sat, 28 Jan 2023 15:49:49 +0800 Subject: [PATCH 04/81] =?UTF-8?q?[2.13.2]=E5=BC=BA=E5=88=B6=E5=BC=80?= =?UTF-8?q?=E5=90=AF=E7=BA=BF=E7=A8=8B=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9470c7c56c..98bc4c30e6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -39,8 +39,8 @@ if (!isAndroidTestBuild()) { if (!isAndroidTestBuild()) { apply plugin: 'bytex.threadOpt' thread_opt { - enable !isReleaseBuild - enableInDebug !isReleaseBuild + enable true + enableInDebug true logLevel "DEBUG" } } From faf0d0864e5b0899e204ea128c044922dc56e8e0 Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Wed, 1 Feb 2023 19:43:52 +0800 Subject: [PATCH 05/81] =?UTF-8?q?[2.14.0]=20bus=E4=B9=98=E5=AE=A2=E5=B1=8F?= =?UTF-8?q?=E4=B8=A4=E4=B8=AA=E7=AB=99=E7=82=B9=E4=B9=9F=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E4=B8=A4=E4=B8=AA=E7=AB=99=E7=82=B9=E4=B9=8B=E9=97=B4=E7=9A=84?= =?UTF-8?q?=E8=B7=9D=E7=A6=BB=EF=BC=8C=E4=B8=8D=E7=9B=B4=E6=8E=A5=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E8=BD=A8=E8=BF=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/och/bus/passenger/model/BusPassengerModel.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java index 80b648d14c..117ca80f85 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java @@ -426,7 +426,7 @@ public class BusPassengerModel { //找出前往站对应的轨迹点,拿出两站点的集合 CallerLogger.INSTANCE.d(M_BUS_P + TAG, "mRoutePoints.size() = " + mRoutePoints.size()); if (mRoutePoints.size() > 0) { - if (mStations.size() > 2){ //两个站点以上要计算两个站点间的估计路线 + if (mStations.size() > 1){ //改为两个站点及以上计算两个站点间的估计路线 if (mNextStationIndex <= mStations.size()-1 && mNextStationIndex - 1 >=0){ mTwoStationsRouts.clear(); BusPassengerStation stationNext = mStations.get(mNextStationIndex); @@ -445,9 +445,6 @@ public class BusPassengerModel { mTwoStationsRouts.addAll(mRoutePoints.subList(currentRouteIndex,nextRouteIndex + 1)); } } - }else { //只有两个站点的时候整个路线就是两个站点之间的轨迹 - mTwoStationsRouts.clear(); - mTwoStationsRouts.addAll(mRoutePoints); } if (mTwoStationsRouts.size() > 0){ float sumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(mTwoStationsRouts); From 2ee6e2a417f2ccf931492641132af6a5686ed3fb Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Wed, 1 Feb 2023 19:55:29 +0800 Subject: [PATCH 06/81] =?UTF-8?q?[2.14.0]=E6=B6=88=E6=81=AF=E7=9B=92?= =?UTF-8?q?=E5=AD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mulprocess/ILeftMenuService.aidl | 2 +- .../passenger/model/TaxiPassengerModel.java | 21 ++++ .../core/function/hmi/ui/MoGoHmiFragment.kt | 74 ++++++-------- .../hmi/ui/msgbox/DriverMsgBoxBubbleView.kt | 3 +- .../hmi/ui/msgbox/DriverMsgBoxButtonView.kt | 96 ++++++++++++++++++ .../hmi/ui/msgbox/DriverMsgBoxListView.kt | 42 +++++++- .../ui/msgbox/PassengerMsgBoxBubbleView.kt | 3 +- .../ui/msgbox/PassengerMsgBoxButtonView.kt | 97 +++++++++++++++++++ .../hmi/ui/msgbox/PassengerMsgBoxListView.kt | 28 +++++- .../adapter/DriverMsgBoxBubbleAdapter.kt | 20 +++- .../adapter/PassengerMsgBoxBubbleAdapter.kt | 7 +- .../adapter/PassengerMsgBoxListAdapter.kt | 2 +- .../src/main/res/layout/fragment_hmi.xml | 55 +++-------- .../res/layout/item_msg_bubble_operation.xml | 8 +- .../res/layout/item_msg_bubble_report.xml | 5 +- .../main/res/layout/item_msg_bubble_v2x.xml | 5 +- .../res/layout/item_passenger_msg_box_v2x.xml | 5 +- .../res/layout/view_driver_msg_box_button.xml | 34 +++++++ .../layout/view_passenger_msg_box_button.xml | 31 ++++++ .../api/hmi/warning/IMoGoWaringProvider.kt | 10 -- .../api/msgbox/IMsgBoxEventListener.kt | 16 +++ .../function/call/hmi/CallerHmiManager.kt | 14 --- .../CallerMsgBoxEventListenerManager.kt | 49 +++++++++- .../widget/RoundCanClickConstraintLayout.java | 70 +++++++++++++ 24 files changed, 567 insertions(+), 130 deletions(-) create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxButtonView.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxButtonView.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_driver_msg_box_button.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_passenger_msg_box_button.xml create mode 100644 core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/RoundCanClickConstraintLayout.java diff --git a/OCH/mogo-och-taxi-passenger/src/main/aidl/com/mogo/och/taxi/passenger/mulprocess/ILeftMenuService.aidl b/OCH/mogo-och-taxi-passenger/src/main/aidl/com/mogo/och/taxi/passenger/mulprocess/ILeftMenuService.aidl index 0e0aa676e9..ab9159d363 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/aidl/com/mogo/och/taxi/passenger/mulprocess/ILeftMenuService.aidl +++ b/OCH/mogo-och-taxi-passenger/src/main/aidl/com/mogo/och/taxi/passenger/mulprocess/ILeftMenuService.aidl @@ -8,7 +8,7 @@ import com.mogo.och.taxi.passenger.mulprocess.ICallback; interface ILeftMenuService { /** - * 向主进程传选中的item + * Pass the selected item to the main process */ void transmissionIndex(int index); diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java index aa06fd8dae..37c153bc23 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java @@ -24,6 +24,7 @@ import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters; import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo; import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.eagle.core.data.map.MogoLocation; +import com.mogo.eagle.core.data.msgbox.MsgBoxBean; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotPlanningListener; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; import com.mogo.eagle.core.function.api.map.listener.IMoGoMapLocationListener; @@ -611,6 +612,26 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback }; private final IMsgBoxEventListener iMsgBoxEventListener = new IMsgBoxEventListener() { + @Override + public void onBubbleReportClickEvent(@NonNull MsgBoxBean msgBoxBean) { + + } + + @Override + public void onBubbleV2XClickEvent(@NonNull MsgBoxBean msgBoxBean) { + + } + + @Override + public void onBubbleOperationClickEvent(@NonNull MsgBoxBean msgBoxBean) { + + } + + @Override + public void onUpdateTipEvent(boolean isShow) { + + } + @Override public void onSummaryClickEvent() { if (mCurrentOCHOrder == null){ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt index b30ccde589..66e286e578 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt @@ -73,6 +73,8 @@ import com.mogo.eagle.core.function.hmi.ui.bindingcar.ToBindingCarDialog import com.mogo.eagle.core.function.hmi.ui.bindingcar.UpgradeAppDialog import com.mogo.eagle.core.function.hmi.ui.camera.CameraListView import com.mogo.eagle.core.function.hmi.ui.camera.RoadVideoDialog +import com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxButtonView +import com.mogo.eagle.core.function.hmi.ui.msgbox.PassengerMsgBoxButtonView import com.mogo.eagle.core.function.hmi.ui.notice.NoticeCheckDialog import com.mogo.eagle.core.function.hmi.ui.notice.NoticeTrafficDialog import com.mogo.eagle.core.function.hmi.ui.setting.DebugSettingView @@ -253,41 +255,45 @@ class MoGoHmiFragment : MvpFragment(), } } } - - cbMsgBoxDriver.setOnCheckedChangeListener { _, isChecked -> - if(isChecked){ - viewDriverMsgBoxList.visibility = View.VISIBLE - viewDriverMsgBoxList.notifyData() - viewDriverMsgBoxBubble.visibility = View.GONE - viewDriverMsgBoxBubble.isShowData(false) - CallerHmiManager.updateDriverMsgBoxTipView(false) - }else{ - viewDriverMsgBoxList.visibility = View.GONE - viewDriverMsgBoxBubble.visibility = View.VISIBLE - viewDriverMsgBoxBubble.isShowData(true) + //消息盒子 + viewDriverMsgBoxButton.setClickListener(object: DriverMsgBoxButtonView.ClickListener{ + override fun showMsgBoxList(show: Boolean) { + if(show){ + viewDriverMsgBoxList.visibility = View.VISIBLE + viewDriverMsgBoxList.notifyData() + viewDriverMsgBoxBubble.visibility = View.GONE + viewDriverMsgBoxBubble.isShowData(false) + }else{ + viewDriverMsgBoxList.visibility = View.GONE + viewDriverMsgBoxBubble.visibility = View.VISIBLE + viewDriverMsgBoxBubble.isShowData(true) + } } - } - cbMsgBoxPassenger.setOnCheckedChangeListener { _, isChecked -> - if(isChecked){ - viewPassengerMsgBoxList.visibility = View.VISIBLE - viewPassengerMsgBoxBubble.visibility = View.GONE - viewPassengerMsgBoxBubble.isShowData(false) - CallerHmiManager.updatePassengerMsgBoxTipView(false) - }else{ - viewPassengerMsgBoxList.visibility = View.GONE - viewPassengerMsgBoxBubble.visibility = View.VISIBLE - viewPassengerMsgBoxBubble.isShowData(true) + }) + + viewPassengerMsgBoxButton.setClickListener(object: PassengerMsgBoxButtonView.ClickListener{ + override fun showMsgBoxList(show: Boolean) { + if(show){ + viewPassengerMsgBoxList.visibility = View.VISIBLE + viewPassengerMsgBoxBubble.visibility = View.GONE + viewPassengerMsgBoxBubble.isShowData(false) + }else{ + viewPassengerMsgBoxList.visibility = View.GONE + viewPassengerMsgBoxBubble.visibility = View.VISIBLE + viewPassengerMsgBoxBubble.isShowData(true) + } } - } + + }) if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){ - cbMsgBoxDriver.visibility = View.VISIBLE + viewDriverMsgBoxButton.visibility = View.VISIBLE viewDriverMsgBoxBubble.visibility = View.VISIBLE } if(AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) && AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)){ - cbMsgBoxPassenger.visibility = View.VISIBLE + viewPassengerMsgBoxButton.visibility = View.VISIBLE viewPassengerMsgBoxBubble.visibility = View.VISIBLE } } @@ -469,22 +475,6 @@ class MoGoHmiFragment : MvpFragment(), statusBarView?.updateMfStatus(tag, status) } - override fun updateDriverMsgBoxTipView(show: Boolean) { - if(show){ - MsgBoxTipView?.visibility = View.VISIBLE - }else{ - MsgBoxTipView?.visibility = View.GONE - } - } - - override fun updatePassengerMsgBoxTipView(show: Boolean) { - if(show){ - MsgBoxPTipView?.visibility = View.VISIBLE - }else{ - MsgBoxPTipView?.visibility = View.GONE - } - } - /** * 设置 红绿灯 代理View */ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxBubbleView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxBubbleView.kt index fb8fabb4a4..e30cd5c3fa 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxBubbleView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxBubbleView.kt @@ -13,6 +13,7 @@ import com.mogo.eagle.core.data.msgbox.MsgCategory import com.mogo.eagle.core.function.api.msgbox.IMsgBoxListener 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.msgbox.CallerMsgBoxEventListenerManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxListenerManager import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.function.hmi.ui.msgbox.adapter.DriverMsgBoxBubbleAdapter @@ -83,7 +84,7 @@ class DriverMsgBoxBubbleView @JvmOverloads constructor( } } if(isShowData){ - CallerHmiManager.updateDriverMsgBoxTipView(true) + CallerMsgBoxEventListenerManager.invokeUpdateTipListener(true) if(category == MsgCategory.RECORD_BAG){ //弹出被动录包弹窗 CallerDevaToolsManager.onReceiveBadCaseRecord(msgBoxBean,context as Activity,true) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxButtonView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxButtonView.kt new file mode 100644 index 0000000000..3d1bf00d43 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxButtonView.kt @@ -0,0 +1,96 @@ +package com.mogo.eagle.core.function.hmi.ui.msgbox + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.data.msgbox.MsgBoxBean +import com.mogo.eagle.core.function.api.msgbox.IMsgBoxEventListener +import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import kotlinx.android.synthetic.main.view_driver_msg_box_button.view.* + +/** + * @author XuXinChao + * @description 消息盒子司机端视图切换按钮 + * @since: 2023/1/31 + */ +class DriverMsgBoxButtonView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +):ConstraintLayout(context, attrs, defStyleAttr), IMsgBoxEventListener { + + companion object { + const val TAG = "DriverMsgBoxButtonView" + } + + private var clickListener: ClickListener? = null + + init{ + LayoutInflater.from(context).inflate(R.layout.view_driver_msg_box_button, this, true) + initView() + } + + private fun initView(){ + cbMsgBoxDriver.setOnCheckedChangeListener { _, isChecked -> + clickListener?.showMsgBoxList(isChecked) + msgBoxTipView.visibility = View.GONE + } + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){ + CallerMsgBoxEventListenerManager.addListener(TAG,this) + } + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){ + CallerMsgBoxEventListenerManager.removeListener(TAG) + } + } + + override fun onSummaryClickEvent() { + + } + + /** + * 更新新消息提醒红点 + * @param isShow true:展示;false:不展示 + */ + override fun onUpdateTipEvent(isShow: Boolean) { + if(isShow){ + msgBoxTipView.visibility = View.VISIBLE + }else{ + msgBoxTipView.visibility = View.GONE + } + } + + override fun onBubbleOperationClickEvent(msgBoxBean: MsgBoxBean) { + cbMsgBoxDriver.performClick() + } + + override fun onBubbleV2XClickEvent(msgBoxBean: MsgBoxBean) { + cbMsgBoxDriver.performClick() + } + + override fun onBubbleReportClickEvent(msgBoxBean: MsgBoxBean) { + cbMsgBoxDriver.performClick() + } + + fun setClickListener(clickListener: ClickListener) { + this.clickListener = clickListener + } + + interface ClickListener{ + fun showMsgBoxList(show: Boolean) + } + + +} \ 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/msgbox/DriverMsgBoxListView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxListView.kt index 547b6c8719..76c87a28ab 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxListView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxListView.kt @@ -10,7 +10,9 @@ import androidx.recyclerview.widget.LinearLayoutManager import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.msgbox.MsgBoxBean import com.mogo.eagle.core.data.msgbox.MsgCategory +import com.mogo.eagle.core.function.api.msgbox.IMsgBoxEventListener import com.mogo.eagle.core.function.api.msgbox.IMsgBoxListener +import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxListenerManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.function.hmi.R @@ -32,7 +34,7 @@ class DriverMsgBoxListView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 -) : ConstraintLayout(context, attrs, defStyleAttr) , IMsgBoxListener { +) : ConstraintLayout(context, attrs, defStyleAttr) , IMsgBoxListener, IMsgBoxEventListener { init { LayoutInflater.from(context).inflate(R.layout.layout_driver_msg_box_list, this, true) @@ -43,11 +45,13 @@ class DriverMsgBoxListView @JvmOverloads constructor( private var ipcReportList: ArrayList ?= null private var badCaseList: ArrayList ?= null private var driverMsgBoxListAdapter: DriverMsgBoxListAdapter ?=null + private var linearLayoutManager: LinearLayoutManager ?= null private fun initView() { driverMsgBoxListAdapter= DriverMsgBoxListAdapter(context as Activity) rvMsgBoxList.adapter = driverMsgBoxListAdapter - rvMsgBoxList.layoutManager = LinearLayoutManager(context) + linearLayoutManager = LinearLayoutManager(context) + rvMsgBoxList.layoutManager = linearLayoutManager //获取通知消息列表 noticeList= CallerMsgBoxManager.getCachedNotifyData() as ArrayList? @@ -195,6 +199,7 @@ class DriverMsgBoxListView @JvmOverloads constructor( super.onAttachedToWindow() if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){ CallerMsgBoxListenerManager.addListener(TAG,this) + CallerMsgBoxEventListenerManager.addListener(TAG,this) EventBus.getDefault().register(this) } } @@ -203,6 +208,7 @@ class DriverMsgBoxListView @JvmOverloads constructor( super.onDetachedFromWindow() if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){ CallerMsgBoxListenerManager.removeListener(TAG) + CallerMsgBoxEventListenerManager.removeListener(TAG) EventBus.getDefault().unregister(this) } } @@ -214,4 +220,36 @@ class DriverMsgBoxListView @JvmOverloads constructor( it.remove(msgBoxList) } } + + override fun onSummaryClickEvent() { + + } + + override fun onUpdateTipEvent(isShow: Boolean) { + + } + + override fun onBubbleOperationClickEvent(msgBoxBean: MsgBoxBean) { + MsgBoxConfig.setUserRecord(0) + notifyData() + noticeList?.let { + rvMsgBoxList?.scrollToPosition(it.indexOf(msgBoxBean)) + } + } + + override fun onBubbleV2XClickEvent(msgBoxBean: MsgBoxBean) { + MsgBoxConfig.setUserRecord(0) + notifyData() + noticeList?.let { + rvMsgBoxList?.scrollToPosition(it.indexOf(msgBoxBean)) + } + } + + override fun onBubbleReportClickEvent(msgBoxBean: MsgBoxBean) { + MsgBoxConfig.setUserRecord(1) + notifyData() + ipcReportList?.let { + linearLayoutManager?.scrollToPositionWithOffset(it.indexOf(msgBoxBean),0) + } + } } \ 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/msgbox/PassengerMsgBoxBubbleView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxBubbleView.kt index edd8a0688b..feda00428a 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxBubbleView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxBubbleView.kt @@ -12,6 +12,7 @@ import com.mogo.eagle.core.data.msgbox.MsgBoxType import com.mogo.eagle.core.data.msgbox.MsgCategory import com.mogo.eagle.core.function.api.msgbox.IMsgBoxListener import com.mogo.eagle.core.function.call.hmi.CallerHmiManager +import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxListenerManager import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.function.hmi.ui.msgbox.adapter.PassengerMsgBoxBubbleAdapter @@ -64,7 +65,7 @@ class PassengerMsgBoxBubbleView @JvmOverloads constructor( || msgBoxList.type == MsgBoxType.OBU){ MsgBoxConfig.noticeList.add(msgBoxList) if(isShowData){ - CallerHmiManager.updatePassengerMsgBoxTipView(true) + CallerMsgBoxEventListenerManager.invokeUpdateTipListener(true) dataList.add(msgBoxList) passengerMsgBoxBubbleAdapter?.setData(dataList) } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxButtonView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxButtonView.kt new file mode 100644 index 0000000000..8026b86070 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxButtonView.kt @@ -0,0 +1,97 @@ +package com.mogo.eagle.core.function.hmi.ui.msgbox + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.data.msgbox.MsgBoxBean +import com.mogo.eagle.core.function.api.msgbox.IMsgBoxEventListener +import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import kotlinx.android.synthetic.main.view_passenger_msg_box_button.view.* + +/** + * @author XuXinChao + * @description 消息盒子乘客端视图切换按钮 + * @since: 2023/1/31 + */ +class PassengerMsgBoxButtonView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +): ConstraintLayout(context, attrs, defStyleAttr), IMsgBoxEventListener { + + companion object { + const val TAG = "PassengerMsgBoxButtonView" + } + + private var clickListener: ClickListener? = null + + init{ + LayoutInflater.from(context).inflate(R.layout.view_passenger_msg_box_button, this, true) + initView() + } + + private fun initView(){ + cbMsgBoxPassenger.setOnCheckedChangeListener { _, isChecked -> + clickListener?.showMsgBoxList(isChecked) + msgBoxPTipView.visibility = View.GONE + } + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + if(AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) && + AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)){ + CallerMsgBoxEventListenerManager.addListener(TAG,this) + } + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + if(AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) && + AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)){ + CallerMsgBoxEventListenerManager.removeListener(TAG) + } + } + + override fun onSummaryClickEvent() { + + } + + /** + * 更新新消息提醒红点 + * @param isShow true:展示;false:不展示 + */ + override fun onUpdateTipEvent(isShow: Boolean) { + if(isShow){ + msgBoxPTipView.visibility = View.VISIBLE + }else{ + msgBoxPTipView.visibility = View.GONE + } + } + + override fun onBubbleOperationClickEvent(msgBoxBean: MsgBoxBean) { + cbMsgBoxPassenger.performClick() + } + + override fun onBubbleV2XClickEvent(msgBoxBean: MsgBoxBean) { + cbMsgBoxPassenger.performClick() + } + + override fun onBubbleReportClickEvent(msgBoxBean: MsgBoxBean) { + cbMsgBoxPassenger.performClick() + } + + fun setClickListener(clickListener: ClickListener) { + this.clickListener = clickListener + } + + interface ClickListener{ + fun showMsgBoxList(show: Boolean) + } + +} \ 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/msgbox/PassengerMsgBoxListView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxListView.kt index f0720f387c..1c5bdd33d7 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxListView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxListView.kt @@ -11,7 +11,9 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.msgbox.MsgBoxBean import com.mogo.eagle.core.data.msgbox.MsgBoxType import com.mogo.eagle.core.data.msgbox.MsgCategory +import com.mogo.eagle.core.function.api.msgbox.IMsgBoxEventListener import com.mogo.eagle.core.function.api.msgbox.IMsgBoxListener +import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxListenerManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.function.hmi.R @@ -30,7 +32,7 @@ class PassengerMsgBoxListView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 -) : ConstraintLayout(context, attrs, defStyleAttr), IMsgBoxListener { +) : ConstraintLayout(context, attrs, defStyleAttr), IMsgBoxListener, IMsgBoxEventListener { private val TAG = "PassengerMsgBoxListView" var passengerMsgBoxListAdapter: PassengerMsgBoxListAdapter ?= null @@ -78,6 +80,7 @@ class PassengerMsgBoxListView @JvmOverloads constructor( if(AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) && AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)){ CallerMsgBoxListenerManager.addListener(TAG,this) + CallerMsgBoxEventListenerManager.addListener(TAG,this) } } @@ -86,7 +89,30 @@ class PassengerMsgBoxListView @JvmOverloads constructor( if(AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) && AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)){ CallerMsgBoxListenerManager.removeListener(TAG) + CallerMsgBoxEventListenerManager.removeListener(TAG) } } + override fun onSummaryClickEvent() { + + } + + override fun onUpdateTipEvent(isShow: Boolean) { + + } + + override fun onBubbleOperationClickEvent(msgBoxBean: MsgBoxBean) { + + } + + override fun onBubbleV2XClickEvent(msgBoxBean: MsgBoxBean) { + noticeList?.let { + rvPassengerList.scrollToPosition(it.indexOf(msgBoxBean)) + } + } + + override fun onBubbleReportClickEvent(msgBoxBean: MsgBoxBean) { + + } + } \ 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/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt index 1f656db107..de4a40a628 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt @@ -13,12 +13,14 @@ import com.mogo.eagle.core.data.msgbox.* import com.mogo.eagle.core.data.report.ReportEntity import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager import com.mogo.eagle.core.function.call.hmi.CallerHmiManager +import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.utilcode.mogo.glide.GlideApp import com.mogo.eagle.core.utilcode.mogo.glide.transform.GlideRoundedCornersTransform import com.mogo.eagle.core.utilcode.util.TimeUtils import com.mogo.eagle.core.utilcode.util.TimeUtils.getHourMinFormat +import com.mogo.eagle.core.widget.RoundCanClickConstraintLayout /** * @author XuXinChao @@ -75,14 +77,19 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A when (holder) { is BubbleOperationHolder -> { data?.let { - val operationMsg = it[position].bean as OperationMsg + val msgBoxBean = it[position] + val operationMsg = msgBoxBean.bean as OperationMsg holder.tvBubbleOperationTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat()) holder.tvBubbleOperationContent.text = operationMsg.content + holder.clBubbleOperationLayout.setOnClickListener { + CallerMsgBoxEventListenerManager.invokeBubbleOperationListener(msgBoxBean) + } } } is BubbleReportHolder -> { data?.let { - val reportEntity = it[position].bean as ReportEntity + val msgBoxBean = it[position] + val reportEntity = msgBoxBean.bean as ReportEntity holder.tvBubbleReportTime.text = "时间:${TimeUtils.millis2String(it[position].timestamp)}" holder.tvBubbleReceiveTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat()) var resultStr = "类型:" @@ -90,6 +97,9 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A resultStr = "${resultStr}${CallerAutoPilotManager.getReportResultDesc(result)}" } holder.tvBubbleReportType.text = resultStr + holder.clReportLayout.setOnClickListener { + CallerMsgBoxEventListenerManager.invokeBubbleReportListener(msgBoxBean) + } } } is BubbleNoticeHolder -> { @@ -139,6 +149,9 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A holder.tvV2XContent.text = v2XMsg.content holder.ivV2XImage.setImageDrawable(activity.resources.getDrawable( EventTypeEnumNew.getUpdateIconRes(v2XMsg.type))) + holder.clV2XLayout.setOnClickListener { + CallerMsgBoxEventListenerManager.invokeBubbleV2XListener(msgBoxBean) + } } } is BubbleSummaryHolder -> { @@ -190,12 +203,14 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A var tvBubbleReportTime: TextView = itemView.findViewById(R.id.tvBubbleReportTime) var tvBubbleReportType: TextView = itemView.findViewById(R.id.tvBubbleReportType) var tvBubbleReceiveTime: TextView = itemView.findViewById(R.id.tvBubbleReceiveTime) + var clReportLayout: RoundCanClickConstraintLayout = itemView.findViewById(R.id.clReportLayout) } //运营平台 class BubbleOperationHolder(itemView: View): RecyclerView.ViewHolder(itemView){ var tvBubbleOperationTime: TextView = itemView.findViewById(R.id.tvBubbleOperationTime) var tvBubbleOperationContent: TextView = itemView.findViewById(R.id.tvBubbleOperationContent) + var clBubbleOperationLayout: RoundCanClickConstraintLayout = itemView.findViewById(R.id.clBubbleOperationLayout) } //Notice @@ -212,6 +227,7 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A var ivV2XImage: ImageView = itemView.findViewById(R.id.ivV2XImage) var tvV2XTime: TextView = itemView.findViewById(R.id.tvV2XTime) var tvV2XContent: TextView = itemView.findViewById(R.id.tvV2XContent) + var clV2XLayout: RoundCanClickConstraintLayout = itemView.findViewById(R.id.clV2XLayout) } //汇总消息 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxBubbleAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxBubbleAdapter.kt index db78cd9935..2edcd6acc1 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxBubbleAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxBubbleAdapter.kt @@ -18,6 +18,7 @@ import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.utilcode.mogo.glide.transform.GlideRoundedCornersTransform import com.mogo.eagle.core.utilcode.util.TimeUtils import com.mogo.eagle.core.utilcode.util.TimeUtils.getHourMinFormat +import com.mogo.eagle.core.widget.RoundCanClickConstraintLayout /** * @author XuXinChao @@ -104,6 +105,9 @@ class PassengerMsgBoxBubbleAdapter(private val activity: Activity): RecyclerView holder.tvPassengerV2XContent.text = v2XMsg.content holder.ivPassengerV2XImage.setImageDrawable(activity.resources.getDrawable( EventTypeEnumNew.getUpdateIconRes(v2XMsg.type))) + holder.clPassengerVeXLayout.setOnClickListener { + CallerMsgBoxEventListenerManager.invokeBubbleV2XListener(msgBoxBean) + } } } is BubbleSummaryHolder -> { @@ -114,7 +118,7 @@ class PassengerMsgBoxBubbleAdapter(private val activity: Activity): RecyclerView holder.tvPassengerSummaryCheck.setOnClickListener { //跳转全览模式 // CallerHmiManager.showSmallFragment() - CallerMsgBoxEventListenerManager.invokeListener() + CallerMsgBoxEventListenerManager.invokeSummaryListener() } } } @@ -163,6 +167,7 @@ class PassengerMsgBoxBubbleAdapter(private val activity: Activity): RecyclerView var ivPassengerV2XImage: ImageView = itemView.findViewById(R.id.ivPassengerV2XImage) var tvPassengerV2XTime: TextView = itemView.findViewById(R.id.tvPassengerV2XTime) var tvPassengerV2XContent: TextView = itemView.findViewById(R.id.tvPassengerV2XContent) + var clPassengerVeXLayout: RoundCanClickConstraintLayout = itemView.findViewById(R.id.clPassengerVeXLayout) } //汇总消息 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxListAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxListAdapter.kt index 8bb23e0ed6..c183783d1d 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxListAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxListAdapter.kt @@ -106,7 +106,7 @@ class PassengerMsgBoxListAdapter(private val activity: Activity): RecyclerView.A holder.tvPassengerSummaryCheck.setOnClickListener { //跳转全览模式 // CallerHmiManager.showSmallFragment() - CallerMsgBoxEventListenerManager.invokeListener() + CallerMsgBoxEventListenerManager.invokeSummaryListener() } } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml index 21d86a2dc9..67a6cfcdd7 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml @@ -198,57 +198,26 @@ app:layout_constraintTop_toBottomOf="@+id/viewLimitingVelocity" /> - - - - - - - @@ -256,7 +225,7 @@ android:id="@+id/viewDriverMsgBoxList" android:layout_width="864dp" android:layout_height="746dp" - app:layout_constraintTop_toBottomOf="@id/cbMsgBoxDriver" + app:layout_constraintTop_toBottomOf="@id/viewDriverMsgBoxButton" app:layout_constraintRight_toRightOf="parent" android:layout_marginEnd="40dp" android:visibility="gone" @@ -266,7 +235,7 @@ android:id="@+id/viewDriverMsgBoxBubble" android:layout_width="864dp" android:layout_height="wrap_content" - app:layout_constraintTop_toBottomOf="@id/cbMsgBoxDriver" + app:layout_constraintTop_toBottomOf="@id/viewDriverMsgBoxButton" app:layout_constraintRight_toRightOf="parent" android:layout_marginEnd="40dp" android:visibility="gone" @@ -276,9 +245,9 @@ android:id="@+id/viewPassengerMsgBoxBubble" android:layout_width="650dp" android:layout_height="wrap_content" - app:layout_constraintBottom_toTopOf="@id/cbMsgBoxPassenger" - app:layout_constraintLeft_toLeftOf="@id/cbMsgBoxPassenger" - app:layout_constraintRight_toRightOf="@id/cbMsgBoxPassenger" + app:layout_constraintBottom_toTopOf="@id/viewPassengerMsgBoxButton" + app:layout_constraintLeft_toLeftOf="@id/viewPassengerMsgBoxButton" + app:layout_constraintRight_toRightOf="@id/viewPassengerMsgBoxButton" android:layout_marginBottom="20dp" android:visibility="gone" /> @@ -287,9 +256,9 @@ android:id="@+id/viewPassengerMsgBoxList" android:layout_width="650dp" android:layout_height="750dp" - app:layout_constraintBottom_toTopOf="@id/cbMsgBoxPassenger" - app:layout_constraintLeft_toLeftOf="@id/cbMsgBoxPassenger" - app:layout_constraintRight_toRightOf="@id/cbMsgBoxPassenger" + app:layout_constraintBottom_toTopOf="@id/viewPassengerMsgBoxButton" + app:layout_constraintLeft_toLeftOf="@id/viewPassengerMsgBoxButton" + app:layout_constraintRight_toRightOf="@id/viewPassengerMsgBoxButton" android:layout_marginBottom="20dp" android:visibility="gone" /> diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_operation.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_operation.xml index af25aec755..f488699d48 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_operation.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_operation.xml @@ -1,5 +1,6 @@ - + android:layout_marginBottom="7dp" + > - \ No newline at end of file + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_report.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_report.xml index ac287b1ca2..7bc6c8e3a8 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_report.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_report.xml @@ -1,5 +1,6 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_v2x.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_v2x.xml index 8c1cb8475d..9888e42f87 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_v2x.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_v2x.xml @@ -1,5 +1,6 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_v2x.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_v2x.xml index d7096b95b6..fbe95e1a36 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_v2x.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_v2x.xml @@ -1,5 +1,6 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_driver_msg_box_button.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_driver_msg_box_button.xml new file mode 100644 index 0000000000..4d6aeebadb --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_driver_msg_box_button.xml @@ -0,0 +1,34 @@ + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_passenger_msg_box_button.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_passenger_msg_box_button.xml new file mode 100644 index 0000000000..8b2935a3f6 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_passenger_msg_box_button.xml @@ -0,0 +1,31 @@ + + + + + + + + + + \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt index 6927c467f3..eb8e799ed2 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt @@ -302,16 +302,6 @@ interface IMoGoWaringProvider : IMoGoHmiViewProxy { */ fun updateStatusBarLeftView(insert: Boolean, tag: String, viewGroup: ViewGroup) - /** - * 设置司机端消息盒子是否展示 - */ - fun updateDriverMsgBoxTipView(show: Boolean) - - /** - * 设置乘客端消息盒子是否展示 - */ - fun updatePassengerMsgBoxTipView(show: Boolean) - /** * 更新(添加/删除)下载进度 */ diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/msgbox/IMsgBoxEventListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/msgbox/IMsgBoxEventListener.kt index cebfca9d9b..8cd6469ae6 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/msgbox/IMsgBoxEventListener.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/msgbox/IMsgBoxEventListener.kt @@ -1,9 +1,25 @@ package com.mogo.eagle.core.function.api.msgbox + +import com.mogo.eagle.core.data.msgbox.MsgBoxBean + /** * @author XuXinChao * @date 2023/1/16 * 消息盒子事件监听回调 */ interface IMsgBoxEventListener { + //汇总事件点击监听 fun onSummaryClickEvent() + + //更新提示红点视图 + fun onUpdateTipEvent(isShow: Boolean) + + //气泡态运营平台事件点击监听 + fun onBubbleOperationClickEvent(msgBoxBean: MsgBoxBean) + + //气泡态V2X消息事件点击监听 + fun onBubbleV2XClickEvent(msgBoxBean: MsgBoxBean) + + //气泡态上报消息事件点击监听 + fun onBubbleReportClickEvent(msgBoxBean: MsgBoxBean) } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt index e256ba1691..1c8aa2182e 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt @@ -484,20 +484,6 @@ object CallerHmiManager : CallerBase() { waringProviderApi?.updateStatusBarLeftView(insert, tag, viewGroup) } - /** - * 设置司机端消息盒子是否展示 - */ - fun updateDriverMsgBoxTipView(show: Boolean = false){ - waringProviderApi?.updateDriverMsgBoxTipView(show) - } - - /** - * 设置乘客端消息盒子是否展示 - */ - fun updatePassengerMsgBoxTipView(show: Boolean = false){ - waringProviderApi?.updatePassengerMsgBoxTipView(show) - } - /** * 更新(添加/删除)状态栏右侧元素 */ diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/msgbox/CallerMsgBoxEventListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/msgbox/CallerMsgBoxEventListenerManager.kt index 3696e0f471..3860afa41f 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/msgbox/CallerMsgBoxEventListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/msgbox/CallerMsgBoxEventListenerManager.kt @@ -1,6 +1,7 @@ package com.mogo.eagle.core.function.call.msgbox import androidx.annotation.Nullable +import com.mogo.eagle.core.data.msgbox.MsgBoxBean import com.mogo.eagle.core.function.api.msgbox.IMsgBoxEventListener import com.mogo.eagle.core.function.call.base.CallerBase import java.util.concurrent.ConcurrentHashMap @@ -56,9 +57,9 @@ object CallerMsgBoxEventListenerManager: CallerBase() { } /** - * 触发监听 + * 触发汇总报告点击事件监听 */ - fun invokeListener(){ + fun invokeSummaryListener(){ statusListeners.forEach { val tag = it.key val listener = it.value @@ -66,5 +67,49 @@ object CallerMsgBoxEventListenerManager: CallerBase() { } } + /** + * 更新消息提示View展示状态 + */ + fun invokeUpdateTipListener(isShow: Boolean){ + statusListeners.forEach { + val tag = it.key + val listener = it.value + listener.onUpdateTipEvent(isShow) + } + } + + /** + * 气泡态运营平台事件点击监听 + **/ + fun invokeBubbleOperationListener(msgBoxBean: MsgBoxBean){ + statusListeners.forEach{ + val tag = it.key + val listener = it.value + listener.onBubbleOperationClickEvent(msgBoxBean) + } + } + + /** + * 气泡态V2X消息事件点击监听 + */ + fun invokeBubbleV2XListener(msgBoxBean: MsgBoxBean){ + statusListeners.forEach{ + val tag = it.key + val listener = it.value + listener.onBubbleV2XClickEvent(msgBoxBean) + } + } + + /** + * 气泡态上报消息事件点击监听 + */ + fun invokeBubbleReportListener(msgBoxBean: MsgBoxBean){ + statusListeners.forEach{ + val tag = it.key + val listener = it.value + listener.onBubbleReportClickEvent(msgBoxBean) + } + } + } \ No newline at end of file diff --git a/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/RoundCanClickConstraintLayout.java b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/RoundCanClickConstraintLayout.java new file mode 100644 index 0000000000..86f6939aa0 --- /dev/null +++ b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/RoundCanClickConstraintLayout.java @@ -0,0 +1,70 @@ +package com.mogo.eagle.core.widget; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Path; +import android.graphics.RectF; +import android.util.AttributeSet; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.constraintlayout.widget.ConstraintLayout; + +public class RoundCanClickConstraintLayout extends ConstraintLayout { + + private float roundLayoutRadius = 14f; + private Path roundPath; + private RectF rectF; + + public RoundCanClickConstraintLayout(@NonNull Context context) { + super(context); + } + + public RoundCanClickConstraintLayout(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RoundLayout); + roundLayoutRadius = typedArray.getDimensionPixelSize(R.styleable.RoundLayout_roundLayoutRadius, (int) roundLayoutRadius); + typedArray.recycle(); + + init(); + } + + public RoundCanClickConstraintLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + private void init() { + setWillNotDraw(false);//如果你继承的是ViewGroup,注意此行,否则draw方法是不会回调的; + roundPath = new Path(); + rectF = new RectF(); + } + + private void setRoundPath() { + //添加一个圆角矩形到path中, 如果要实现任意形状的View, 只需要手动添加path就行 + roundPath.reset(); + roundPath.addRoundRect(rectF, roundLayoutRadius, roundLayoutRadius, Path.Direction.CW); + } + + public void setRoundLayoutRadius(float roundLayoutRadius) { + this.roundLayoutRadius = roundLayoutRadius; + setRoundPath(); + postInvalidate(); + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + rectF.set(0f, 0f, getMeasuredWidth(), getMeasuredHeight()); + setRoundPath(); + } + + @Override + public void draw(Canvas canvas) { + if (roundLayoutRadius > 0f) { + canvas.clipPath(roundPath); + } + super.draw(canvas); + } + +} From 5f48fd6c5a2367401a84075f7e60c3b3e62390fc Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Thu, 2 Feb 2023 15:23:33 +0800 Subject: [PATCH 07/81] =?UTF-8?q?[pb10][Bag=E5=8C=85=E7=AE=A1=E7=90=862.1]?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BD=95=E5=8C=85=E7=AE=A1=E7=90=862.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zhidao/adas/client/ui/MainActivity.java | 6 ++ .../zhidao/adas/magic/ui/MainActivity.java | 6 ++ .../autopilot/adapter/MoGoAdasListenerImpl.kt | 10 +++ .../src/main/proto/bag_manager.proto | 69 +++++++++++++++++++ .../src/main/proto/message_pad.proto | 68 +++++++++++++++++- .../src/main/proto/obu_warning_event.proto | 2 +- .../main/proto/robo_sweeper_task_index.proto | 6 +- .../main/proto/special_vehicle_task_cmd.proto | 18 +++++ .../src/main/proto/vehicle_state.proto | 46 ++++++++++++- .../zhidao/support/adas/high/AdasChannel.java | 13 ++++ .../zhidao/support/adas/high/AdasManager.java | 12 ++++ .../support/adas/high/IAdasNetCommApi.java | 8 +++ .../support/adas/high/OnAdasListener.java | 9 +++ .../support/adas/high/common/MessageType.java | 18 +++-- .../adas/high/msg/BagManagerMessage.java | 33 +++++++++ .../adas/high/msg/MyMessageFactory.java | 7 ++ 16 files changed, 320 insertions(+), 11 deletions(-) create mode 100644 libraries/mogo-adas-data/src/main/proto/bag_manager.proto create mode 100644 libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/BagManagerMessage.java diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java index 538eea185c..22b6f1188c 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java @@ -113,6 +113,7 @@ import java.util.List; import java.util.Locale; import java.util.concurrent.ScheduledExecutorService; +import bag_manager.BagManagerOuterClass; import chassis.Chassis; import chassis.VehicleStateOuterClass; import io.netty.channel.Channel; @@ -1025,6 +1026,11 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas DataDistribution.getInstance().addData(base); } + @Override + public void onBagManagerCmd(MessagePad.Header header, BagManagerOuterClass.BagManager bagManager) { + + } + private void initAdas() { CupidLogUtils.e(TAG, "--->初始化"); AdasOptions options; diff --git a/app_mogo_magic_ring/src/main/java/com/zhidao/adas/magic/ui/MainActivity.java b/app_mogo_magic_ring/src/main/java/com/zhidao/adas/magic/ui/MainActivity.java index a4e603b05e..5cfd2d55ab 100644 --- a/app_mogo_magic_ring/src/main/java/com/zhidao/adas/magic/ui/MainActivity.java +++ b/app_mogo_magic_ring/src/main/java/com/zhidao/adas/magic/ui/MainActivity.java @@ -64,6 +64,7 @@ import java.util.Locale; import java.util.Timer; import java.util.TimerTask; +import bag_manager.BagManagerOuterClass; import chassis.VehicleStateOuterClass; import mogo.telematics.pad.MessagePad; import mogo.v2x.ObuWarningEvent; @@ -544,6 +545,11 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas } + @Override + public void onBagManagerCmd(MessagePad.Header header, BagManagerOuterClass.BagManager bagManager) { + + } + private void initAdas() { CupidLogUtils.e(TAG, "--->初始化"); AdasOptions options; diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt index 8cffd15828..511826c0e0 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt @@ -1,5 +1,6 @@ package com.mogo.eagle.core.function.autopilot.adapter +import bag_manager.BagManagerOuterClass import chassis.VehicleStateOuterClass import com.mogo.eagle.core.data.app.AppConfigInfo import com.mogo.eagle.core.data.config.FunctionBuildConfig @@ -453,6 +454,15 @@ class MoGoAdasListenerImpl : OnAdasListener { CallerObuDcCombineListenerManager.invokeObuDcData(obuWarningData) } + /** + * Bag管理应答 + * + * @param header 头 + * @param bagManager 数据 + */ + override fun onBagManagerCmd(header: MessagePad.Header?, bagManager: BagManagerOuterClass.BagManager?) { + } + /** * 是否可以启动自动驾驶 * 使用方法查看:app_ipc_monitoring/uiMainActivity/onAutopilotAbility diff --git a/libraries/mogo-adas-data/src/main/proto/bag_manager.proto b/libraries/mogo-adas-data/src/main/proto/bag_manager.proto new file mode 100644 index 0000000000..448e1bfdb9 --- /dev/null +++ b/libraries/mogo-adas-data/src/main/proto/bag_manager.proto @@ -0,0 +1,69 @@ +syntax = "proto2"; +package bag_manager; + +enum BagStat{ + SUCCEED = 0; + EXECUTING = 1; + EXECUTEERROR = 2; + COPYERROR = 3; + MERGEERROR = 4; + UPLOADCOSERROR = 5; +} + +// 上传cos桶状态 +message UploadCosStat{ + required uint64 key = 1; + required uint32 stat = 2; // 0-成功 1-执行中 2-copy过程失败 3-合并过程失败 4-上传过程失败 + optional string message = 3; // 失败时的具体描述 +} + +//空间使用情况 +message SpaceInfo{ + optional string directory = 1; // 路径名,为空表示总空间,否则表示对应的/home/mogo/data/bags下的子目录 + optional uint64 total = 2; // 总空间 + optional uint64 free = 3; // 可用空间 + optional uint64 used = 4; // 已用空间 +} +// bag目录空间使用情况 +message BagSpaceInfo{ + optional string host = 1; // 主机名 + optional SpaceInfo diskSpaceInfo = 2; // 硬盘空间信息 + repeated SpaceInfo BagDirsSpaceInfo = 3; // /home/mogo/data/bags下各子空间信息 +} + +// bag附加信息(录音,备注,接管信息) +message BagDescription{ + optional string description = 1; // bag接管描述或重命名信息 + optional bool hasAudio = 2; // 此bag是否具有录音文件 + optional string audioUrl = 3; // bag附加录音文件的文件名 + optional bool reportBI = 4; //上报BI状态 +} + +// 各主机上报的包信息 +message SubBag { + required uint64 key = 1; // bag key值 + required string host = 2; // 主机名 + optional uint64 size = 3; // 此子包的大小 +} + +// 单个key值对应的包信息 +message BagInfo{ + required uint64 key = 1; // bag key值 + optional uint64 totalSize = 2; // 所有子包或合并后的包的总大小 + optional string timestamp = 3; // 时间戳 + optional string bagPath = 4; // bag所在路径 + optional bool mergeStat = 5; // 合并状态 + optional bool uploadStat = 6; // 上传cos桶状态 + optional BagDescription description = 7; // 包描述信息 + repeated SubBag subBags = 8; // 子包信息 +} + +// 包管理请求 +message BagManager{ + required uint32 reqType = 1; // 请求类型:0-invalid 1-获取空间使用信息 2-遍历所有bag 3-上传cos 4-删除bag 5-为bag添加附加信息 + optional uint64 keyReq = 2; // 要操作的包的key值,发送请求且reqType=(3,4,5)时有效 + optional BagDescription descReq = 3; // 更新包附加信息,发送请求且reqType=5时有效 + repeated BagSpaceInfo spaceInfoResp = 4; // 空间使用信息,获取响应且reqType=1时有效 + repeated BagInfo bagsInfoResp = 5; // 包信息列表,获取响应且reqType=2时有效 + optional UploadCosStat uploadCosResp = 6; //反馈上传cos桶结果,获取响应且reqType=3时有效 +} \ No newline at end of file diff --git a/libraries/mogo-adas-data/src/main/proto/message_pad.proto b/libraries/mogo-adas-data/src/main/proto/message_pad.proto index 465b5a675d..f96fe6fa96 100644 --- a/libraries/mogo-adas-data/src/main/proto/message_pad.proto +++ b/libraries/mogo-adas-data/src/main/proto/message_pad.proto @@ -6,7 +6,7 @@ import "geometry.proto"; enum ProtocolVersion { Defaultver = 0; - CurrentVersion = 9; //每次修改proto文件增加1 + CurrentVersion = 10; //每次修改proto文件增加1 } enum MessageType @@ -58,6 +58,8 @@ enum MessageType MsgTypeSpecialVehicleTaskCmd = 0x10118; //特种车辆命令 MsgTypeSetParamReq = 0x10119; //设置参数命令 MsgTypeTripInfoEvent = 0x1011a; //行程信息 + MsgTypeBagManagerCmd = 0x1011b; //bag管理 + MsgTypePlanningCmd = 0x1011c; //给planning的指令 } message Header @@ -455,11 +457,30 @@ enum DrivingState START_UP = 9; //起步状态: driving_action:1 表示正常启动;driving_action:2 表示择机起步 PULL_OVER = 10; //靠边停车状态: driving_action:1 表示正常靠边停车;driving_action:2 表示择机靠边停车 UN_PROTECTED_INTERSECTION = 11; //路口预测响应状态: driving_action:1 表示触发了预测响应 + AUTO_LANE_CHANGE_LEFT_V2N = 12; //V2N主动向左变道状态: driving_action:1 表示触发变道;driving_action:2 表示执行变道;driving_action:3 表示变道取消;driving_action:4 表示变道完成 AUTO_LANE_CHANGE_RIGHT_V2N = 13; //V2N主动向右变道状态: driving_action:1 表示触发变道;driving_action:2 表示执行变道;driving_action:3 表示变道取消;driving_action:4 表示变道完成 LANE_AVOID_LEFT_V2N = 14; //V2N主动向左绕行状态: driving_action:1 表示触发绕行;driving_action:2 表示执行绕行;driving_action:3 表示绕行取消;driving_action:4 表示绕行完成 LANE_AVOID_RIGHT_V2N = 15; //V2N主动向右绕行状态: driving_action:1 表示触发绕行;driving_action:2 表示执行绕行;driving_action:3 表示绕行取消;driving_action:4 表示绕行完成 WAITING_V2N = 16; //V2N正在等待变道避让施工场景/静止障碍物: driving_action:1 表示正在等待;driving_action:2 表示等待超时请求平行驾驶; + + AUTO_LANE_CHANGE_LEFT_RSI = 17; //V2N RSI主动向左变道状态: driving_action:1 表示触发变道;driving_action:2 表示执行变道;driving_action:3 表示变道取消;driving_action:4 表示变道完成 + AUTO_LANE_CHANGE_RIGHT_RSI = 18; //V2N RSI主动向右变道状态: driving_action:1 表示触发变道;driving_action:2 表示执行变道;driving_action:3 表示变道取消;driving_action:4 表示变道完成 + LANE_AVOID_LEFT_RSI = 19; //V2N RSI主动向左绕行状态: driving_action:1 表示触发绕行;driving_action:2 表示执行绕行;driving_action:3 表示绕行取消;driving_action:4 表示绕行完成 + LANE_AVOID_RIGHT_RSI = 20; //V2N RSI主动向右绕行状态: driving_action:1 表示触发绕行;driving_action:2 表示执行绕行;driving_action:3 表示绕行取消;driving_action:4 表示绕行完成 + WAITING_RSI = 21; //V2N RSI正在等待变道避让施工场景/静止障碍物: driving_action:1 表示正在等待;driving_action:2 表示等待超时请求平行驾驶; + + AUTO_LANE_CHANGE_LEFT_RSM = 22; //V2N RSM主动向左变道状态: driving_action:1 表示触发变道;driving_action:2 表示执行变道;driving_action:3 表示变道取消;driving_action:4 表示变道完成 + AUTO_LANE_CHANGE_RIGHT_RSM = 23; //V2N RSM主动向右变道状态: driving_action:1 表示触发变道;driving_action:2 表示执行变道;driving_action:3 表示变道取消;driving_action:4 表示变道完成 + LANE_AVOID_LEFT_RSM = 24; //V2N RSM主动向左绕行状态: driving_action:1 表示触发绕行;driving_action:2 表示执行绕行;driving_action:3 表示绕行取消;driving_action:4 表示绕行完成 + LANE_AVOID_RIGHT_RSM = 25; //V2N RSM主动向右绕行状态: driving_action:1 表示触发绕行;driving_action:2 表示执行绕行;driving_action:3 表示绕行取消;driving_action:4 表示绕行完成 + WAITING_RSM = 26; //V2N RSM正在等待变道避让施工场景/静止障碍物: driving_action:1 表示正在等待;driving_action:2 表示等待超时请求平行驾驶; + + AUTO_LANE_CHANGE_LEFT_RSI_TRIANGLE = 27; //V2N 三角锥主动向左变道状态: driving_action:1 表示触发变道;driving_action:2 表示执行变道;driving_action:3 表示变道取消;driving_action:4 表示变道完成 + AUTO_LANE_CHANGE_RIGHT_RSI_TRIANGLE = 28; //V2N 三角锥主动向右变道状态: driving_action:1 表示触发变道;driving_action:2 表示执行变道;driving_action:3 表示变道取消;driving_action:4 表示变道完成 + LANE_AVOID_LEFT_RSI_TRIANGLE = 29; //V2N 三角锥主动向左绕行状态: driving_action:1 表示触发绕行;driving_action:2 表示执行绕行;driving_action:3 表示绕行取消;driving_action:4 表示绕行完成 + LANE_AVOID_RIGHT_RSI_TRIANGLE = 30; //V2N 三角锥主动向右绕行状态: driving_action:1 表示触发绕行;driving_action:2 表示执行绕行;driving_action:3 表示绕行取消;driving_action:4 表示绕行完成 + WAITING_RSI_TRIANGLE = 31; //V2N 三角锥正在等待变道避让施工场景/静止障碍物: driving_action:1 表示正在等待;driving_action:2 表示等待超时请求平行驾驶 } enum DrivingAction @@ -469,6 +490,11 @@ enum DrivingAction DRIVING_ACTION_STATE_TWO = 2; DRIVING_ACTION_STATE_THREE = 3; DRIVING_ACTION_STATE_FOUR = 4; + DRIVING_ACTION_STATE_FIVE = 5; + DRIVING_ACTION_STATE_SIX = 6; + DRIVING_ACTION_STATE_SEVEN = 7; + DRIVING_ACTION_STATE_EIGHT = 8; + DRIVING_ACTION_STATE_NINE = 9; } message DrivingActionMsg @@ -477,10 +503,36 @@ message DrivingActionMsg DrivingAction driving_action = 2; } +enum ParkScenarioDrivingState +{ + PARK_SENARIO_NO_AUTODRIVING = 0; //不在自动驾驶状态 + PARK_SENARIO_LANKE_KEEP = 1; //车道保持状态 + PARK_SENARIO_LANE_AVOID_LEFT = 2; //主动向左绕行状态: driving_action:1 表示触发绕行;driving_action:2 表示执行绕行;driving_action:3 表示绕行取消;driving_action:4 表示绕行完成 + PARK_SENARIO_LANE_AVOID_RIGHT = 3; //主动向右绕行状态: driving_action:1 表示触发绕行;driving_action:2 表示执行绕行;driving_action:3 表示绕行取消;driving_action:4 表示绕行完成 + PARK_SENARIO_START_UP = 4; //起步状态: driving_action:1 表示正常启动;driving_action:2 表示择机起步; + PARK_SENARIO_PULL_OVER = 5; //站点停车状态: driving_action:1 表示正常站点停车;driving_action:2 表示择机站点停车; + PARK_SENARIO_FORCE_PULL_OVER_ON = 6; //响应触发靠边停车状态: driving_action:1 表示开始靠边停车;driving_action:2 表示靠边停车成功;3:靠边停车失败; + PARK_SENARIO_FORCE_PULL_OVER_OFF = 7; //不响应触发靠边停车状态: driving_action:1 表示距离前方站点100m;driving_action:2 表示距离路口100m;3: 正在变道 。。。 +} + +message ParkScenarioDrivingAction +{ + ParkScenarioDrivingState driving_state = 1; //决策场景 + DrivingAction driving_action = 2; //决策场景状态 +} + +message ParkScenarioPlanningAction +{ + ParkScenarioDrivingAction action_msg = 1; //决策场景(包含场景以及响应状态) + double destination_acc = 2; //驾驶的意图(规划期望的加速或者减速值) +} + message PlanningActionMsg { DrivingActionMsg action_msg = 1; double destination_acc = 2; //驾驶的意图(规划期望的加速或者减速值) + + ParkScenarioPlanningAction park_scenario_action = 3; } //message definition for MsgTypeSpecialVehicleTaskCmd @@ -520,4 +572,18 @@ message TripInfoEvent //message definition for MsgTypeObuWarningData //refer to obu_warning_event.proto for details +//message definition for MsgTypeBagManagerCmd +//refer to bag_manager.proto for details + +//message definition for MsgTypePlanningCmd +message PullOverCmd +{ + uint32 cmd = 1; //0: default 1: 靠边停车 2:重新起步 +} + +message PlanningCmd +{ + PullOverCmd pullOverCmd = 1; +} + diff --git a/libraries/mogo-adas-data/src/main/proto/obu_warning_event.proto b/libraries/mogo-adas-data/src/main/proto/obu_warning_event.proto index 5dd9552082..a0fc6b36f8 100644 --- a/libraries/mogo-adas-data/src/main/proto/obu_warning_event.proto +++ b/libraries/mogo-adas-data/src/main/proto/obu_warning_event.proto @@ -112,6 +112,6 @@ message ObuWarningData{ RsiWarningData rsiEvent = 3; RsmWarningData rsmEvent = 4; SpatWarningData spatEvent = 5; - MapMatchData mapMatchData = 6; + MapMatchData mapMatchData = 6; } diff --git a/libraries/mogo-adas-data/src/main/proto/robo_sweeper_task_index.proto b/libraries/mogo-adas-data/src/main/proto/robo_sweeper_task_index.proto index 5d442b3ae6..9f78494d75 100644 --- a/libraries/mogo-adas-data/src/main/proto/robo_sweeper_task_index.proto +++ b/libraries/mogo-adas-data/src/main/proto/robo_sweeper_task_index.proto @@ -17,4 +17,8 @@ message RoboSweeperTaskIndex { double ref_edge_point_lon = 10; // 投影边沿点经度 double ref_edge_point_lat = 11; // 投影边沿点纬度 double dist_to_ref_edge_point = 12; // 自车到投影边沿点的距离 正值为在投影边沿点的右边 ,负值为在投影边沿点的右边 -} \ No newline at end of file + + uint32 clean_mode = 13; // 清扫作业模式 1–纯扫 2--洗扫, 3--纯洗, 4--纯吸 + uint32 clean_direction = 14; // 清扫方向 1--两侧, 2--左侧, 3--右侧 + uint32 clean_intensity= 15; // 作业强度 1–标准 2--强力 +} diff --git a/libraries/mogo-adas-data/src/main/proto/special_vehicle_task_cmd.proto b/libraries/mogo-adas-data/src/main/proto/special_vehicle_task_cmd.proto index 850a8ae307..b3d273c353 100644 --- a/libraries/mogo-adas-data/src/main/proto/special_vehicle_task_cmd.proto +++ b/libraries/mogo-adas-data/src/main/proto/special_vehicle_task_cmd.proto @@ -24,8 +24,26 @@ message RoboVanSkywellTaskCmd { optional uint32 horn_cmd = 2 [default = 0]; //1:开始鸣笛 2:停止鸣笛 } +message RoboBusJinlvM1Cmd { + optional uint32 air_conditioner_cmd = 1; //0: default, 1: 开启空调, 2: 关闭空调 + optional uint32 air_conditioner_mode_cmd = 2; //模式 0: default, 1: 自动模式, 2: 制冷模式, 3: 通风模式(仅送风,无温度) + optional uint32 air_conditioner_wind_speed_cmd = 3; //风速 0: default, 1: 1档,2: 2档,3:3档 + optional uint32 air_conditioner_temperature_cmd = 4; //温度 0: default, 16-26: 温度 + + optional uint32 header_cmd = 5; //0: default, 1: 开启暖风机, 2: 关闭暖风机 + optional uint32 header_wind_speed_cmd = 6; //风速 0: default, 1: 1档,2: 2档 + + optional uint32 main_lamp1_cmd = 7; //0: default, 1: 开启顶灯1, 2: 关闭顶灯1 + optional uint32 main_lamp2_cmd = 8; //0: default, 1: 开启顶灯2, 2: 关闭顶灯2 + optional uint32 small_lamp_cmd = 9; //0: default, 1: 开启小灯(氛围灯), 2: 关闭小灯(氛围灯) + + optional uint32 front_door_cmd = 10; //0: default, 1: 开启车门, 2: 关闭车门 +} + + message SpecialVehicleTaskCmd { optional common.Header header = 1; optional RoboSweeperFuTianTaskCmd robo_sweeper_futian_task_cmd = 2; // 福田清扫车业务指令 optional RoboVanSkywellTaskCmd robo_van_skywell_task_cmd = 3; // 开沃小巴业务指令 + optional RoboBusJinlvM1Cmd robo_bus_jinlv_m1_cmd = 4; //金旅定制车m1指令 } diff --git a/libraries/mogo-adas-data/src/main/proto/vehicle_state.proto b/libraries/mogo-adas-data/src/main/proto/vehicle_state.proto index ac6fbc96cc..de1b6f386b 100644 --- a/libraries/mogo-adas-data/src/main/proto/vehicle_state.proto +++ b/libraries/mogo-adas-data/src/main/proto/vehicle_state.proto @@ -49,6 +49,45 @@ message SweeperFuTianCleanSystemState { optional float secu_sweepdisk_speed = 41 [default = 0]; // 扫盘转速 } +message RoboTaxiState { + optional bool veh_rta_recover = 1 [default = false]; // 车辆可进入自动驾驶标志位,不可进入时一定时间内恢复可自动进入 + optional bool veh_rta_no_recover = 2 [default = false]; // 车辆可进入自动驾驶标志位,不可进入时恢复无法自动进入 +} + +message RoboBusState { + optional bool reserved = 1; // 预留 +} + +message AirConditionerState { + optional bool is_on = 1; //是否开启 + optional uint32 mode = 2; //模式, 1: 自动模式, 2: 制冷模式, 3: 通风模式(仅送风,无温度) + optional uint32 temperature = 3; //温度 + optional uint32 wind_speed = 4; //风速, 1-3: 1-3档 +} + +message HeaterState { + optional bool is_on = 1; //是否开启 + optional uint32 wind_speed = 2; //风速, 1-2: 1-2档 +} + +message DoorState { + optional bool is_on = 1; //是否开启 +} + +message LightState { + optional bool is_on = 1; //是否开启 + optional uint32 color = 2; //颜色 +} + +message RoboBusJinlvM1State { + optional AirConditionerState air_conditioner_state = 1; //空调 + optional HeaterState heater_state = 2; //暖风机 + optional DoorState front_door_state = 3; //车门 + optional LightState main_lamp1_state = 4; //顶灯1 + optional LightState main_lamp2_state = 5; //顶灯2 + optional LightState small_lamp_state = 6; //小灯(氛围灯) +} + message VehicleState { optional common.Header header = 1; optional chassis.PilotMode pilot_mode = 2 [default = MODE_MANUAL]; @@ -90,14 +129,15 @@ message VehicleState { optional float rightFrontWheelAngle = 34 [default = 0]; //右前轮角度(deg),左负右正 optional chassis.EPBWorkStatus epb = 35 [default = EPBSTATUS_NONE]; // EPB工作状态 - optional chassis.VehicleTakeOverStatus vehicletakeoverstatus = 36 [default = None_TakeOver]; // 车辆人工接管状态 optional bool Emergency_Stop_Switch = 37 [default = false]; // 急停开关状态 optional chassis.VehicleFaultLevel vehiclefaultlevel = 38 [default = None_Fault]; // 整车故障状态 optional float bms_soc = 40 [default = 0]; // 电量百分比范围 0~100 - - reserved 41 to 199; + optional float fuel_value = 41 [default = 0]; // 油车剩余油量 optional SweeperFuTianCleanSystemState sweeper_futian_clean_system_state = 200; // 福田清扫车上装状态信息 + optional RoboTaxiState robo_taxi_state = 201; // taxi状态 + optional RoboBusState robo_bus_state = 202; // bus状态 + optional RoboBusJinlvM1State robo_bus_jinlv_m1_state = 203; //金旅定制车m1状态 } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java index ea191071e4..e00a25d351 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java @@ -55,6 +55,7 @@ import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.atomic.AtomicInteger; +import bag_manager.BagManagerOuterClass; import chassis.SpecialVehicleTaskCmdOuterClass; import common.HeaderOuterClass; import mogo.telematics.pad.MessagePad; @@ -1375,5 +1376,17 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec return sendPBMessage(MessageType.TYPE_SEND_TRIP_INFO_REQ.typeCode, req.toByteArray()); } + /** + * 发送包管理请求 + * + * @param bagManager 包管理参数 + * @return boolean + */ + @Override + public boolean sendBagManagerCmd(BagManagerOuterClass.BagManager bagManager) { + return sendPBMessage(MessageType.TYPE_SEND_BAG_MANAGER_CMD.typeCode, bagManager.toByteArray()); + } + + } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java index 52a2c2c294..bcdcf03590 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java @@ -15,6 +15,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import bag_manager.BagManagerOuterClass; import chassis.SpecialVehicleTaskCmdOuterClass; import mogo.telematics.pad.MessagePad; @@ -706,6 +707,17 @@ public class AdasManager implements IAdasNetCommApi { return mChannel != null && mChannel.sendTripInfoReq(type, lineName, departureStopName, arrivalStopName, isLastStop); } + /** + * 发送包管理请求 + * + * @param bagManager 包管理参数 + * @return boolean + */ + @Override + public boolean sendBagManagerCmd(BagManagerOuterClass.BagManager bagManager) { + return mChannel != null && mChannel.sendBagManagerCmd(bagManager); + } + /** * 获取工控机固定IP列表 * diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java index ccc6a0acf9..ce88e086dd 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java @@ -10,6 +10,7 @@ import com.zhidao.support.adas.high.common.MessageType; import java.util.List; import java.util.Set; +import bag_manager.BagManagerOuterClass; import chassis.SpecialVehicleTaskCmdOuterClass; import mogo.telematics.pad.MessagePad; @@ -420,6 +421,13 @@ public interface IAdasNetCommApi { */ boolean sendTripInfoReq(int type, String lineName, String departureStopName, String arrivalStopName, boolean isLastStop); + /** + * 发送包管理请求 + * + * @param bagManager 包管理参数 + * @return boolean + */ + boolean sendBagManagerCmd(BagManagerOuterClass.BagManager bagManager); // TODO 需求暂停 待讨论 // boolean getRoutes(); diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java index 5f0b6395e8..85d276ef55 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java @@ -4,6 +4,7 @@ import com.zhidao.support.adas.high.bean.AutopilotAbility; import com.zhidao.support.adas.high.bean.AutopilotStatistics; import com.zhidao.support.adas.high.common.ProtocolStatus; +import bag_manager.BagManagerOuterClass; import chassis.VehicleStateOuterClass; import mogo.telematics.pad.MessagePad; import mogo.v2x.ObuWarningEvent; @@ -189,6 +190,14 @@ public interface OnAdasListener { */ void onObuWarningData(MessagePad.Header header, ObuWarningEvent.ObuWarningData obuWarningData); + /** + * Bag管理应答 + * + * @param header 头 + * @param bagManager 数据 + */ + void onBagManagerCmd(MessagePad.Header header, BagManagerOuterClass.BagManager bagManager); + /** * 是否有能力启动自动驾驶 * diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MessageType.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MessageType.java index 2de37de94f..92f1d31659 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MessageType.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MessageType.java @@ -16,13 +16,15 @@ public enum MessageType { TYPE_RECEIVE_TRAJECTORY(MessagePad.MessageType.MsgTypeTrajectory, "车前引导线"), TYPE_RECEIVE_TRACKED_OBJECTS(MessagePad.MessageType.MsgTypeTrackedObjects, "障碍物信息"), TYPE_RECEIVE_GNSS_INFO(MessagePad.MessageType.MsgTypeGnssInfo, "惯导信息"), - TYPE_RECEIVE_VEHICLE_STATE(MessagePad.MessageType.MsgTypeVehicleState, "底盘信息"), + TYPE_RECEIVE_VEHICLE_STATE(MessagePad.MessageType.MsgTypeVehicleState, "老底盘状态"), TYPE_RECEIVE_AUTOPILOT_STATE(MessagePad.MessageType.MsgTypeAutopilotState, "自动驾驶状态"), TYPE_RECEIVE_REPORT_MESSAGE(MessagePad.MessageType.MsgTypeReportMessage, "监控事件报告"), TYPE_RECEIVE_PERCEPTION_TRAFFIC_LIGHT(MessagePad.MessageType.MsgTypePerceptionTrafficLight, "感知红绿灯"), TYPE_RECEIVE_PREDICTION_OBSTACLE_TRAJECTORY(MessagePad.MessageType.MsgTypePredictionObstacleTrajectory, "他车轨迹预测"), TYPE_RECEIVE_POINT_CLOUD(MessagePad.MessageType.MsgTypePointCloud, "点云透传"), TYPE_RECEIVE_PLANNING_OBJECTS(MessagePad.MessageType.MsgTypePlanningObjects, "Planning障碍物"), + TYPE_RECEIVE_CHASSIS_STATES(MessagePad.MessageType.MsgTypeChassisStates, "底盘状态"), + TYPE_RECEIVE_FUNCTION_STATES(MessagePad.MessageType.MsgTypeFunctionStates, "重构后功能状态"), TYPE_RECEIVE_BASIC_INFO_REQ(MessagePad.MessageType.MsgTypeBasicInfoReq, "自动驾驶设备基础信息请求"), TYPE_SEND_BASIC_INFO_RESP(MessagePad.MessageType.MsgTypeBasicInfoResp, "自动驾驶设备基础信息应答"), @@ -36,6 +38,7 @@ public enum MessageType { TYPE_SEND_SET_AUTOPILOT_SPEED_REQ(MessagePad.MessageType.MsgTypeSetAutopilotSpeedReq, "设置自动驾驶最大速度"), TYPE_SEND_GLOBAL_PATH_REQ(MessagePad.MessageType.MsgTypeGlobalPathReq, "自动驾驶路径请求"), TYPE_RECEIVE_GLOBAL_PATH_RESP(MessagePad.MessageType.MsgTypeGlobalPathResp, "自动驾驶路径应答"), + @Deprecated//MAP290开始此接口弃用 TYPE_SEND_TRAFFIC_LIGHT_DATA(MessagePad.MessageType.MsgTypeTrafficLightData, "发送红绿灯数据到工控机"), @Deprecated TYPE_RECEIVE_WARN(MessagePad.MessageType.MsgTypeWarn, "预警数据"), @@ -45,16 +48,21 @@ public enum MessageType { TYPE_SEND_STATUS_QUERY_REQ(MessagePad.MessageType.MsgTypeStatusQueryReq, "状态查询请求"), TYPE_RECEIVE_STATUS_QUERY_RESP(MessagePad.MessageType.MsgTypeStatusQueryResp, "状态查询应答"), TYPE_SEND_SET_RAIN_MODE_REQ(MessagePad.MessageType.MsgTypeSetRainModeReq, "设置雨天模式"), - TYPE_SEND_OPERATOR_CMD_REQ(MessagePad.MessageType.MsgTypeOperatorCmdReq, "操控指令"), TYPE_SEND_RECORD_DATA_CONFIG_REQ(MessagePad.MessageType.MsgTypeRecordDataConfigReq, "数据采集配置查询"), TYPE_RECEIVE_RECORD_DATA_CONFIG_RESP(MessagePad.MessageType.MsgTypeRecordDataConfigResp, "数据采集配置"), + TYPE_SEND_OPERATOR_CMD_REQ(MessagePad.MessageType.MsgTypeOperatorCmdReq, "操控指令"), TYPE_SEND_SUBSCRIBE_DATA_REQ(MessagePad.MessageType.MsgTypeSubscribeDataReq, "数据订阅、取消订阅请求"), + TYPE_SEND_SPECIAL_VEHICLE_TASK_CMD(MessagePad.MessageType.MsgTypeSpecialVehicleTaskCmd, "特种车辆命令"), TYPE_SEND_SET_PARAM_REQ(MessagePad.MessageType.MsgTypeSetParamReq, "设置参数命令"), TYPE_SEND_TRIP_INFO_REQ(MessagePad.MessageType.MsgTypeTripInfoEvent, "行程信息"), - TYPE_SEND_SPECIAL_VEHICLE_TASK_CMD(MessagePad.MessageType.MsgTypeSpecialVehicleTaskCmd, "特种车辆命令"), - //透传 原始pb文件中不存在以下type。由于Java中无法强转所以在mogo-adas-data message_pad.proto中放开注释 + TYPE_SEND_BAG_MANAGER_CMD(MessagePad.MessageType.MsgTypeBagManagerCmd, "Bag管理请求"), + TYPE_RECEIVE_BAG_MANAGER_CMD(MessagePad.MessageType.MsgTypeBagManagerCmd, "Bag管理应答"), + TYPE_SEND_PLANNING_CMD(MessagePad.MessageType.MsgTypePlanningCmd, "给Planning指令"), + //TODO 透传原始pb文件中不存在以下type。由于Java中无法强转,所以在mogo-adas-data/message_pad.proto中放开注释 TYPE_RECEIVE_PLANNING_DECISION_STATE(MessagePad.MessageType.MsgTypePlanningDecisionState, "Planning决策状态"), - TYPE_RECEIVE_OBU_WARNING_DATA(MessagePad.MessageType.MsgTypeObuWarningData, "OBU预警事件"); + TYPE_RECEIVE_SWEEPER_TASK_INDEX_DATA(MessagePad.MessageType.MsgTypeSweeperTaskIndexData, "清扫车指标数据"), + TYPE_RECEIVE_OBU_WARNING_DATA(MessagePad.MessageType.MsgTypeObuWarningData, "OBU预警事件"), + ; /** diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/BagManagerMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/BagManagerMessage.java new file mode 100644 index 0000000000..d4717f7c86 --- /dev/null +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/BagManagerMessage.java @@ -0,0 +1,33 @@ +package com.zhidao.support.adas.high.msg; + +import android.os.SystemClock; + +import com.google.protobuf.InvalidProtocolBufferException; +import com.zhidao.support.adas.high.AdasChannel; +import com.zhidao.support.adas.high.OnAdasListener; +import com.zhidao.support.adas.high.common.CupidLogUtils; +import com.zhidao.support.adas.high.protocol.RawData; + +import bag_manager.BagManagerOuterClass; + +/** + * Bag管理应答 + */ +public class BagManagerMessage extends MyAbstractMessageHandler { + + public BagManagerMessage() { + } + + @Override + public void handlerMsg(RawData raw, OnAdasListener adasListener) throws InvalidProtocolBufferException { + BagManagerOuterClass.BagManager bagManager = BagManagerOuterClass.BagManager.parser().parseFrom(raw.originalData.toByteArray(), raw.getOffsetValue(), raw.getPackageLengthValue() - raw.getOffsetValue()); + AdasChannel.calculateTimeConsumingOnDispatchRaw("Bag管理应答", raw.receiveTime); + long nowTime = 0; + if (CupidLogUtils.isEnableLog()) + nowTime = SystemClock.elapsedRealtime(); + if (adasListener != null) { + adasListener.onBagManagerCmd(raw.getHeader(), bagManager); + } + AdasChannel.calculateTimeConsumingBusiness("Bag管理应答", nowTime); + } +} diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java index db9df5b63e..9d0b11daed 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java @@ -32,6 +32,7 @@ public class MyMessageFactory implements IMyMessageFactory { private IMsg recordDataConfigRespMessage;//数据采集配置应答 private IMsg planningDecisionStateMessage;//planning决策状态 private IMsg obuWarningDataMessage;//工控机透传OBU V2I数据 + private IMsg bagManagerMessage;//Bag管理应答 private final AutopilotReview autopilotReview; @@ -155,6 +156,12 @@ public class MyMessageFactory implements IMyMessageFactory { obuWarningDataMessage = new ObuWarningDataMessage(); } return obuWarningDataMessage; + } else if (messageType == MessageType.TYPE_RECEIVE_BAG_MANAGER_CMD.typeCode) { + //Bag管理应答 + if (bagManagerMessage == null) { + bagManagerMessage = new BagManagerMessage(); + } + return bagManagerMessage; } else { //MessageType.TYPE_DEFAULT.typeCode return null; From 0469bf2d4855931473c670c8f8c330653ad9d676 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Fri, 3 Feb 2023 18:06:08 +0800 Subject: [PATCH 08/81] =?UTF-8?q?[2.14.0]BadCase=E4=B8=89=E6=9C=9F-?= =?UTF-8?q?=E5=BD=95=E5=8C=85=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autopilot/MoGoAutopilotProvider.kt | 95 ++++++++++ .../autopilot/adapter/MoGoAdasListenerImpl.kt | 1 + .../DevaToolsProvider.kt | 4 + .../badcase/BadCaseManager.kt | 16 ++ .../badcase/biz/BadCaseManagerView.kt | 60 ++++++ .../badcase/biz/BagUploadDialog.java | 67 +++++++ .../badcase/biz/SpaceWarningDialog.java | 70 +++++++ .../biz/adapter/BagManagerListAdapter.kt | 45 +++++ .../badcase/record/Audition.java | 103 ++++++++++ .../res/drawable/bag_report_button_bg.xml | 9 + .../res/drawable/bag_reported_button_bg.xml | 9 + .../res/drawable/cancel_select_button_bg.xml | 9 + .../main/res/drawable/delete_button_bg.xml | 9 + .../res/drawable/select_all_button_bg.xml | 9 + .../main/res/drawable/space_percent_bg.xml | 27 +++ .../src/main/res/drawable/unused_space_bg.xml | 8 + .../res/drawable/upload_cloud_button_bg.xml | 9 + .../src/main/res/drawable/used_space_bg.xml | 8 + .../src/main/res/layout/dialog_bag_upload.xml | 94 +++++++++ .../main/res/layout/dialog_space_warning.xml | 93 +++++++++ .../src/main/res/layout/item_bag_manager.xml | 71 +++++++ .../res/layout/layout_badcase_manager.xml | 179 ++++++++++++++++++ .../core/function/hmi/ui/MoGoHmiFragment.kt | 5 + .../hmi/ui/tools/AutoPilotAndCheckView.kt | 10 +- .../main/res/layout/view_auto_pilot_check.xml | 28 +++ .../core/data/badcase/BagDescriptionEntity.kt | 12 ++ .../eagle/core/data/badcase/BagInfoEntity.kt | 16 ++ .../core/data/badcase/BagManagerEntity.kt | 14 ++ .../core/data/badcase/BagSpaceInfoEntity.kt | 11 ++ .../core/data/badcase/SpaceInfoEntity.kt | 13 ++ .../eagle/core/data/badcase/SubBagEntity.kt | 11 ++ .../core/data/badcase/UploadCosStatEntity.kt | 11 ++ .../api/autopilot/IMoGoAutopilotProvider.kt | 7 + .../api/devatools/IDevaToolsProvider.kt | 5 + .../call/autopilot/CallerAutoPilotManager.kt | 14 ++ .../call/devatools/CallerDevaToolsManager.kt | 7 + gradle.properties | 2 +- 37 files changed, 1155 insertions(+), 6 deletions(-) create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BagUploadDialog.java create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/SpaceWarningDialog.java create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/record/Audition.java create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bag_report_button_bg.xml create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bag_reported_button_bg.xml create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/drawable/cancel_select_button_bg.xml create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/drawable/delete_button_bg.xml create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/drawable/select_all_button_bg.xml create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/drawable/space_percent_bg.xml create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/drawable/unused_space_bg.xml create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/drawable/upload_cloud_button_bg.xml create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/drawable/used_space_bg.xml create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_bag_upload.xml create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_space_warning.xml create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_manager.xml create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/layout/layout_badcase_manager.xml create mode 100644 core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagDescriptionEntity.kt create mode 100644 core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagInfoEntity.kt create mode 100644 core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagManagerEntity.kt create mode 100644 core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagSpaceInfoEntity.kt create mode 100644 core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/SpaceInfoEntity.kt create mode 100644 core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/SubBagEntity.kt create mode 100644 core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/UploadCosStatEntity.kt diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt index cf75ad4dbe..601891ddd6 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt @@ -4,12 +4,14 @@ import android.Manifest.permission import android.content.Context import android.util.Log import androidx.annotation.RequiresPermission +import bag_manager.BagManagerOuterClass import chassis.SpecialVehicleTaskCmdOuterClass import com.alibaba.android.arouter.facade.annotation.Route import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters import com.mogo.eagle.core.data.autopilot.toAutoPilotLine import com.mogo.eagle.core.data.autopilot.toRouteInfo +import com.mogo.eagle.core.data.badcase.BagManagerEntity import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.constants.MoGoConfig import com.mogo.eagle.core.data.constants.MogoServicePaths @@ -54,6 +56,7 @@ import com.zhidao.support.adas.high.common.Constants import com.zhidao.support.adas.high.common.Constants.IPC_CONNECTION_STATUS import com.zhidao.support.adas.high.common.CupidLogUtils import com.zhidao.support.adas.high.common.MogoReport +import com.zhidao.support.adas.high.msg.BagManagerMessage import com.zhjt.service.chain.ChainLog import com.zhjt.service.chain.TracingConstants import io.netty.channel.Channel @@ -544,6 +547,98 @@ class MoGoAutopilotProvider : return AdasManager.getInstance().sendRecordDataConfigReq(reqType, recordType, topicsNeedToCache) } + /** + * 获取Bag包管理信息 + * @param bagManagerEntity 包管理请求实体类 + */ + override fun sendBagManagerCmd(bagManagerEntity: BagManagerEntity): Boolean { + val bagManager = BagManagerOuterClass.BagManager + .newBuilder() + .setReqType(bagManagerEntity.reqType) + .setKeyReq(bagManagerEntity.keyReq) + + // 更新包附加信息,发送请求且reqType=5时有效 + val descReq = BagManagerOuterClass.BagDescription + .newBuilder() + .setDescription(bagManagerEntity.descReq.description) + .setHasAudio(bagManagerEntity.descReq.hasAudio) + .setAudioUrl(bagManagerEntity.descReq.audioUrl) + .setReportBI(bagManagerEntity.descReq.reportBI) + .build() + bagManager.descReq = descReq + + // 空间使用信息,获取响应且reqType=1时有效 + for(diskSpaceInfoEntity in bagManagerEntity.spaceInfoResp){ + val spaceInfoResp = BagManagerOuterClass.BagSpaceInfo + .newBuilder() + val diskSpaceInfo = BagManagerOuterClass.SpaceInfo + .newBuilder() + .setDirectory(diskSpaceInfoEntity.diskSpaceInfo.directory) + .setTotal(diskSpaceInfoEntity.diskSpaceInfo.total) + .setFree(diskSpaceInfoEntity.diskSpaceInfo.free) + .setUsed(diskSpaceInfoEntity.diskSpaceInfo.used) + .build() + spaceInfoResp + .setHost(diskSpaceInfoEntity.host).diskSpaceInfo = diskSpaceInfo + for(entity in diskSpaceInfoEntity.BagDirsSpaceInfo){ + val bagDirsSpaceInfo = BagManagerOuterClass.SpaceInfo + .newBuilder() + .setDirectory(entity.directory) + .setTotal(entity.total) + .setFree(entity.free) + .setUsed(entity.used) + .build() + spaceInfoResp.addBagDirsSpaceInfo(bagDirsSpaceInfo) + } + bagManager.addSpaceInfoResp(spaceInfoResp.build()) + } + + // 包信息列表,获取响应且reqType=2时有效 + for(bagsInfoRespEntity in bagManagerEntity.bagsInfoResp){ + // 包描述信息 + val bagDescription = BagManagerOuterClass.BagDescription + .newBuilder() + .setDescription(bagsInfoRespEntity.description.description) + .setHasAudio(bagsInfoRespEntity.description.hasAudio) + .setAudioUrl(bagsInfoRespEntity.description.audioUrl) + .setReportBI(bagsInfoRespEntity.description.reportBI) + .build() + + val bagsInfoResp = BagManagerOuterClass.BagInfo + .newBuilder() + .setKey(bagsInfoRespEntity.key) + .setTotalSize(bagsInfoRespEntity.totalSize) + .setTimestamp(bagsInfoRespEntity.timestamp) + .setBagPath(bagsInfoRespEntity.bagPath) + .setMergeStat(bagsInfoRespEntity.mergeStat) + .setUploadStat(bagsInfoRespEntity.uploadStat) + .setDescription(bagDescription) + + // 子包信息 + for(subBagEntity in bagsInfoRespEntity.subBags){ + val subBag = BagManagerOuterClass.SubBag + .newBuilder() + .setKey(subBagEntity.key) + .setHost(subBagEntity.host) + .setSize(subBagEntity.size) + .build() + bagsInfoResp.addSubBags(subBag) + } + bagManager.addBagsInfoResp(bagsInfoResp) + } + + //反馈上传cos桶结果,获取响应且reqType=3时有效 + val uploadCosResp = BagManagerOuterClass.UploadCosStat + .newBuilder() + .setKey(bagManagerEntity.uploadCosResp.key) + .setStat(bagManagerEntity.uploadCosResp.stat) + .setMessage(bagManagerEntity.uploadCosResp.message) + .build() + bagManager.uploadCosResp = uploadCosResp + + return AdasManager.getInstance().sendBagManagerCmd(bagManager.build()) + } + /** * 向左变道 */ diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt index 511826c0e0..dc82a8841c 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt @@ -461,6 +461,7 @@ class MoGoAdasListenerImpl : OnAdasListener { * @param bagManager 数据 */ override fun onBagManagerCmd(header: MessagePad.Header?, bagManager: BagManagerOuterClass.BagManager?) { + } /** 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 1f8dfe50b6..3036f9b16f 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 @@ -107,6 +107,10 @@ class DevaToolsProvider : IDevaToolsProvider { BadCaseManager.showBadCaseConfigWindow(ctx) } + override fun showBadCaseManagerView(context: Context) { + BadCaseManager.showBadCaseManagerWindow(context) + } + override fun getUpgradeVersionUrls(versionName: String) { upgradeManager.getPackageUrls(versionName) } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt index 5eed6e1651..cdc0aa2497 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt @@ -98,6 +98,22 @@ internal object BadCaseManager : LifecycleEventObserver { } } + /** + * 展示BadCase录包管理页面 + */ + fun showBadCaseManagerWindow(context: Context){ + val badCaseManagerView = BadCaseManagerView(context) + badCaseManagerView.setOnClickListener(object: BadCaseManagerView.ClickListener{ + override fun onClose() { + hideFloat?.invoke() + hideFloat = null + } + }) + context.enqueuePop(badCaseManagerView,AutoSizeUtils.dp2px(context,960f), WindowManager.LayoutParams.MATCH_PARENT, key = "BadCaseConfigView").also { + hideFloat = it + } + } + /** * 主动采集BadCase */ diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt new file mode 100644 index 0000000000..0185622822 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt @@ -0,0 +1,60 @@ +package com.zhjt.mogo_core_function_devatools.badcase.biz + +import android.content.Context +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import com.zhidao.loglib.download.DownloadManager +import com.zhjt.mogo_core_function_devatools.R +import com.zhjt.mogo_core_function_devatools.badcase.record.Audition +import kotlinx.android.synthetic.main.layout_badcase_manager.view.* + +/** + * @author XuXinChao + * @description BadCase录包管理页面 + * @since: 2022/12/15 + */ +internal class BadCaseManagerView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr){ + + companion object { + const val TAG = "BadCaseManagerView" + } + + private var clickListener: ClickListener? = null + + init { + LayoutInflater.from(context).inflate(R.layout.layout_badcase_manager, this, true) + initView() + } + + private fun initView(){ + background = ColorDrawable(Color.parseColor("#F0151D41")) + //关闭BadCase管理窗口 + ivManagerClose.setOnClickListener { + clickListener?.onClose() + } + + //音频文件播放 +// Audition.getInstance().playOrStop("/mnt/sdcard/mogo/test.wav") + + //音频下载 +// DownloadManager.getInstance().init(context) +// DownloadManager.getInstance().download("CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav", +// "/mnt/sdcard/mogo/","test13.wav") + } + + fun setOnClickListener(clickListener: ClickListener) { + this.clickListener = clickListener + } + + interface ClickListener { + fun onClose() + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BagUploadDialog.java b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BagUploadDialog.java new file mode 100644 index 0000000000..edfad1faeb --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BagUploadDialog.java @@ -0,0 +1,67 @@ +package com.zhjt.mogo_core_function_devatools.badcase.biz; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.view.WindowManager; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.zhjt.mogo_core_function_devatools.R; + +/** + * @author XuXinChao + * @description Bag包上传进度展示弹窗 + * @since: 2022/2/1 + */ +public class BagUploadDialog extends Dialog { + + private TextView tvCancelUpload;//取消上传 + private TextView tvCancel;//取消 + private TextView tvUploadDetail;//上传详情 + + public BagUploadDialog(@NonNull Context context) { + super(context, R.style.bad_case_dialog); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_bag_upload); + WindowManager.LayoutParams params = getWindow().getAttributes(); + params.height = 688; + params.width = 1110; + getWindow().setAttributes(params);//向WindowManager设置属性 + setCanceledOnTouchOutside(false); + init(); + initEvent(); + } + + private void init(){ + tvCancelUpload = findViewById(R.id.tvCancelUpload); + tvCancel = findViewById(R.id.tvCancel); + tvUploadDetail = findViewById(R.id.tvUploadDetail); + } + + private void initEvent(){ + //取消上传 + tvCancelUpload.setOnClickListener(v -> { + + }); + //取消 + tvCancel.setOnClickListener(v -> { + dismiss(); + }); + } + + @Override + public void onAttachedToWindow() { + super.onAttachedToWindow(); + } + + @Override + public void onDetachedFromWindow() { + super.onDetachedFromWindow(); + } +} diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/SpaceWarningDialog.java b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/SpaceWarningDialog.java new file mode 100644 index 0000000000..68fb89106d --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/SpaceWarningDialog.java @@ -0,0 +1,70 @@ +package com.zhjt.mogo_core_function_devatools.badcase.biz; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.view.WindowManager; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager; +import com.zhjt.mogo_core_function_devatools.R; + +/** + * @author XuXinChao + * @description BadCase车端磁盘空间已满预警弹窗 + * @since: 2022/2/1 + */ +public class SpaceWarningDialog extends Dialog { + + private TextView tvCleanDisk;//清理磁盘 + private TextView tvCancel;//取消 + + public SpaceWarningDialog(@NonNull Context context) { + super(context, R.style.bad_case_dialog); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_space_warning); + WindowManager.LayoutParams params = getWindow().getAttributes(); + params.height = 688; + params.width = 1110; + getWindow().setAttributes(params);//向WindowManager设置属性 + setCanceledOnTouchOutside(false); + init(); + initEvent(); + } + + private void init(){ + tvCleanDisk = findViewById(R.id.tvCleanDisk); + tvCancel = findViewById(R.id.tvCancel); + } + + private void initEvent(){ + //清理磁盘 + tvCleanDisk.setOnClickListener(v -> { + //跳转录包管理页面 + CallerDevaToolsManager.INSTANCE.showBadCaseManagerView(getContext()); + dismiss(); + }); + //取消 + tvCancel.setOnClickListener(v -> { + //取消弹窗 + dismiss(); + }); + } + + @Override + public void onAttachedToWindow() { + super.onAttachedToWindow(); + } + + @Override + public void onDetachedFromWindow() { + super.onDetachedFromWindow(); + } + +} diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt new file mode 100644 index 0000000000..2fb6b559c8 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt @@ -0,0 +1,45 @@ +package com.zhjt.mogo_core_function_devatools.badcase.biz.adapter + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.CheckBox +import android.widget.EditText +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.zhjt.mogo_core_function_devatools.R +import kotlinx.coroutines.NonDisposableHandle +import kotlinx.coroutines.NonDisposableHandle.parent + +/** + * @author XuXinChao + * @description Bag包管理列表适配器 + * @since: 2022/12/19 + */ +class BagManagerListAdapter: RecyclerView.Adapter() { + + private var data:List ?= null + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BagManagerListHolder { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_bag_manager, parent, false) + return BagManagerListHolder(view) + } + + override fun onBindViewHolder(holder: BagManagerListHolder, position: Int) { + + } + + override fun getItemCount() = data?.size ?: 0 + + class BagManagerListHolder(itemView: View) : RecyclerView.ViewHolder(itemView){ + var cbBagSelect: CheckBox = itemView.findViewById(R.id.cbBagSelect) + var etBagNameEdit: EditText = itemView.findViewById(R.id.etBagNameEdit) + var tvBagReportStatus: TextView = itemView.findViewById(R.id.tvBagReportStatus) + var ivBagAudio: ImageView = itemView.findViewById(R.id.ivBagAudio) + var tvBagTime: TextView = itemView.findViewById(R.id.tvBagTime) + var tvBagSize: TextView = itemView.findViewById(R.id.tvBagSize) + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/record/Audition.java b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/record/Audition.java new file mode 100644 index 0000000000..f4ec60ac13 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/record/Audition.java @@ -0,0 +1,103 @@ +package com.zhjt.mogo_core_function_devatools.badcase.record; + +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.text.TextUtils; + +//播放试听 +public class Audition implements MediaPlayer.OnPreparedListener, MediaPlayer.OnCompletionListener{ + private static volatile Audition INSTANCE; + public MediaPlayer mediaPlayer; + private String oldPath; + private OnAuditionListener listener; + + public interface OnAuditionListener { + void onAuditionCompletion(); + + } + + public void registerOnAuditionListener(OnAuditionListener listener) { + this.listener = listener; + } + + public void unregisterOnAuditionListener() { + this.listener = null; + } + + private Audition() { + } + + public static Audition getInstance() { + if (INSTANCE == null) { + synchronized (Audition.class) { + if (INSTANCE == null) { + INSTANCE = new Audition(); + } + } + } + return INSTANCE; + } + + + public boolean isPlaying() { + return mediaPlayer != null && mediaPlayer.isPlaying(); + } + + private void play(String path) { + oldPath = path; + if (mediaPlayer != null) { + mediaPlayer.release(); + mediaPlayer = null; + } + if (mediaPlayer == null) { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.setOnPreparedListener(this); + mediaPlayer.setOnCompletionListener(this); + } + try { + mediaPlayer.setDataSource(path); + } catch (Exception e) { + e.printStackTrace(); + } + mediaPlayer.prepareAsync(); + + } + + public void stop() { + oldPath = null; + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.reset(); + } + + } + + public boolean playOrStop(String path) { + if (!TextUtils.equals(oldPath, path)) { + play(path); + return true; + } else { + stop(); + return false; + } + } + + public void onDestroy() { + stop(); + mediaPlayer = null; + } + + @Override + public void onPrepared(MediaPlayer mp) { + mp.start(); + } + + @Override + public void onCompletion(MediaPlayer mp) { + oldPath = null; + if (listener != null) { + listener.onAuditionCompletion(); + } + } +} diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bag_report_button_bg.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bag_report_button_bg.xml new file mode 100644 index 0000000000..23037d43c7 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bag_report_button_bg.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bag_reported_button_bg.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bag_reported_button_bg.xml new file mode 100644 index 0000000000..40bd562159 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bag_reported_button_bg.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/cancel_select_button_bg.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/cancel_select_button_bg.xml new file mode 100644 index 0000000000..b08f6cbec3 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/cancel_select_button_bg.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/delete_button_bg.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/delete_button_bg.xml new file mode 100644 index 0000000000..7bcbe63d19 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/delete_button_bg.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/select_all_button_bg.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/select_all_button_bg.xml new file mode 100644 index 0000000000..8db8728253 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/select_all_button_bg.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/space_percent_bg.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/space_percent_bg.xml new file mode 100644 index 0000000000..c4425322f3 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/space_percent_bg.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/unused_space_bg.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/unused_space_bg.xml new file mode 100644 index 0000000000..efb8967e91 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/unused_space_bg.xml @@ -0,0 +1,8 @@ + + + + diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/upload_cloud_button_bg.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/upload_cloud_button_bg.xml new file mode 100644 index 0000000000..fe4635f8aa --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/upload_cloud_button_bg.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/used_space_bg.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/used_space_bg.xml new file mode 100644 index 0000000000..8d23b4cb9f --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/used_space_bg.xml @@ -0,0 +1,8 @@ + + + + diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_bag_upload.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_bag_upload.xml new file mode 100644 index 0000000000..7af9702d7a --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_bag_upload.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_space_warning.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_space_warning.xml new file mode 100644 index 0000000000..5498248f1b --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_space_warning.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_manager.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_manager.xml new file mode 100644 index 0000000000..b3802a1ffc --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_manager.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/layout_badcase_manager.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/layout_badcase_manager.xml new file mode 100644 index 0000000000..88e48b03c6 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/layout_badcase_manager.xml @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt index 66e286e578..08656d1ff9 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt @@ -517,6 +517,11 @@ class MoGoHmiFragment : MvpFragment(), override fun showSOPSettingView() { toggleSOPView() } + + override fun showBadCaseManagerView() { + dismissToolsFloatView() + CallerDevaToolsManager.showBadCaseManagerView(it) + } }) } toolsViewFloat = WarningFloat.with(it) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt index dd38c48ad2..7bc486bb84 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt @@ -7,7 +7,6 @@ import android.graphics.Color import android.graphics.drawable.ColorDrawable import android.os.Process import android.util.AttributeSet -import android.util.Log import android.view.LayoutInflater import android.view.View import android.widget.FrameLayout @@ -22,7 +21,6 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotCarConfigListenerManager import com.mogo.eagle.core.function.call.hmi.CallerHmiManager -import com.mogo.eagle.core.function.call.hmi.CallerHmiManager.showTurnLight import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.function.hmi.ui.utils.KeyBoardUtil import com.mogo.eagle.core.function.msgbox.MsgBoxConfig @@ -100,14 +98,15 @@ class AutoPilotAndCheckView @JvmOverloads constructor( sopLayout.setOnClickListener { clickListener?.showSOPSettingView() } + managerLayout.setOnClickListener { + //录包管理页面 + clickListener?.showBadCaseManagerView() + } viewCheckStatus.setOnClickListener { clickListener?.go2CheckPage() } ivDebugPanel.setOnClickListener { clickListener?.showDebugPanelView() - - - } ivDebugFeedback.onClick { clickListener?.showFeedbackView() @@ -225,6 +224,7 @@ class AutoPilotAndCheckView @JvmOverloads constructor( fun showDebugPanelView() fun showFeedbackView() fun showSOPSettingView() + fun showBadCaseManagerView() } override fun onAutopilotCarConfig(carConfigResp: MessagePad.CarConfigResp) { diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml index e1b518dd22..9b31c7183f 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml @@ -171,6 +171,34 @@ + + + + + + + + // 子包信息 + ) \ No newline at end of file diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagManagerEntity.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagManagerEntity.kt new file mode 100644 index 0000000000..70359b0a93 --- /dev/null +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagManagerEntity.kt @@ -0,0 +1,14 @@ +package com.mogo.eagle.core.data.badcase + +/** + * @author XuXinChao + * @description 包管理请求 + * @since: 2023/2/1 + */ +data class BagManagerEntity(var reqType: Int,// 请求类型:0-invalid 1-获取空间使用信息 2-遍历所有bag 3-上传cos 4-删除bag 5-为bag添加附加信息 + var keyReq: Long,// 要操作的包的key值,发送请求且reqType=(3,4,5)时有效 + var descReq: BagDescriptionEntity,// 更新包附加信息,发送请求且reqType=5时有效 + var spaceInfoResp: List,// 空间使用信息,获取响应且reqType=1时有效 + var bagsInfoResp: List,// 包信息列表,获取响应且reqType=2时有效 + var uploadCosResp: UploadCosStatEntity //反馈上传cos桶结果,获取响应且reqType=3时有效 + ) \ No newline at end of file diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagSpaceInfoEntity.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagSpaceInfoEntity.kt new file mode 100644 index 0000000000..ce7651e0f2 --- /dev/null +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagSpaceInfoEntity.kt @@ -0,0 +1,11 @@ +package com.mogo.eagle.core.data.badcase + +/** + * @author XuXinChao + * @description bag目录空间使用情况 + * @since: 2023/2/1 + */ +data class BagSpaceInfoEntity(var host: String,// 主机名 + var diskSpaceInfo: SpaceInfoEntity,// 硬盘空间信息 + var BagDirsSpaceInfo: List// /home/mogo/data/bags下各子空间信息 + ) \ No newline at end of file diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/SpaceInfoEntity.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/SpaceInfoEntity.kt new file mode 100644 index 0000000000..fdf174bf4e --- /dev/null +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/SpaceInfoEntity.kt @@ -0,0 +1,13 @@ +package com.mogo.eagle.core.data.badcase + +/** + * @author XuXinChao + * @description 车端BadCase存储空间使用情况 + * @since: 2023/2/1 + */ +data class SpaceInfoEntity( + var directory: String,// 路径名,为空表示总空间,否则表示对应的/home/mogo/data/bags下的子目录 + var total: Long,// 总空间 + var free: Long,// 可用空间 + var used: Long // 已用空间 + ) \ No newline at end of file diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/SubBagEntity.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/SubBagEntity.kt new file mode 100644 index 0000000000..c52c375ab5 --- /dev/null +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/SubBagEntity.kt @@ -0,0 +1,11 @@ +package com.mogo.eagle.core.data.badcase + +/** + * @author XuXinChao + * @description 各主机上报的包信息 + * @since: 2023/2/1 + */ +data class SubBagEntity(var key: Long,//bag key值 + var host: String,//主机名 + var size: Long //此子包的大小 + ) \ No newline at end of file diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/UploadCosStatEntity.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/UploadCosStatEntity.kt new file mode 100644 index 0000000000..ae8d276ace --- /dev/null +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/UploadCosStatEntity.kt @@ -0,0 +1,11 @@ +package com.mogo.eagle.core.data.badcase + +/** + * @author XuXinChao + * @description 上传cos桶状态 + * @since: 2023/2/1 + */ +data class UploadCosStatEntity(var key: Long, + var stat: Int,// 0-成功 1-执行中 2-copy过程失败 3-合并过程失败 4-上传过程失败 + var message: String// 失败时的具体描述 + ) \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotProvider.kt index edb38584ed..40e69e6be4 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotProvider.kt @@ -2,6 +2,7 @@ package com.mogo.eagle.core.function.api.autopilot import chassis.SpecialVehicleTaskCmdOuterClass import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters +import com.mogo.eagle.core.data.badcase.BagManagerEntity import com.mogo.eagle.core.data.trafficlight.TrafficLightResult import com.mogo.eagle.core.function.api.base.IMoGoFunctionServerProvider @@ -187,6 +188,12 @@ interface IMoGoAutopilotProvider : IMoGoFunctionServerProvider { */ fun getBadCaseConfig(reqType: Int,recordType: Int,topicsNeedToCache: List): Boolean + /** + * 获取Bag包管理信息 + * @param bagManagerEntity 包管理请求实体类 + */ + fun sendBagManagerCmd(bagManagerEntity: BagManagerEntity): Boolean + /** * 发送工控机所有节点重启命令 */ diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt index a0ada685ff..b1c5ccd203 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt @@ -100,6 +100,11 @@ interface IDevaToolsProvider : IProvider { */ fun showFeedbackWindow(ctx: Context) + /** + * 展示录包管理页面 + */ + fun showBadCaseManagerView(context: Context) + /** * 获取升级版本Urls */ diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotManager.kt index cfa4f96652..21ae85a9b2 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotManager.kt @@ -3,6 +3,7 @@ package com.mogo.eagle.core.function.call.autopilot import android.os.SystemClock import chassis.SpecialVehicleTaskCmdOuterClass import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters +import com.mogo.eagle.core.data.badcase.BagManagerEntity import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.constants.MogoServicePaths import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig @@ -269,6 +270,19 @@ object CallerAutoPilotManager { } } + /** + * 获取Bag包管理信息 + * @param bagManagerEntity 包管理请求实体类 + */ + fun sendBagManagerCmd(bagManagerEntity: BagManagerEntity): Boolean?{ + // 司机屏才能查询数据采集的配置 + if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){ + return providerApi?.sendBagManagerCmd(bagManagerEntity) + }else{ + return false + } + } + /** * 向左变道 */ diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt index 2e5e7a44e2..9c2fb1d3bd 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt @@ -134,6 +134,13 @@ object CallerDevaToolsManager { devaToolsProviderApi?.showFeedbackWindow(ctx) } + /** + * 展示录包管理页面 + */ + fun showBadCaseManagerView(context: Context){ + devaToolsProviderApi?.showBadCaseManagerView(context) + } + /** * 获取升级版本Urls */ diff --git a/gradle.properties b/gradle.properties index 3e8a59fb97..ae4ebc51b8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -63,7 +63,7 @@ BIZCONFIG_VERSION=1.3.2 SERVICE_BIZ_VERSION=1.2.4 ################ 外部依赖引用 ################ # loglib -LOGLIB_VERSION=1.5.9 +LOGLIB_VERSION=1.5.11 ######## MogoAiCloudSDK Version ######## # 网络请求LOGLIB_VERSION MOGO_NETWORK_VERSION=1.4.3.32 From 1b01fe21ddff0b809c95801b4b88053a5483bf86 Mon Sep 17 00:00:00 2001 From: renwj Date: Fri, 3 Feb 2023 17:31:45 +0800 Subject: [PATCH 09/81] =?UTF-8?q?[dev=5Farch=5Fopt=5F3.0][leakfix]?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E7=94=B1=E4=BA=8E=E5=8C=BF=E5=90=8DRunnable?= =?UTF-8?q?=E5=AF=B9=E8=B1=A1=E5=BC=95=E7=94=A8=E5=A4=96=E9=83=A8=E7=B1=BB?= =?UTF-8?q?=E5=BC=95=E7=94=A8=E9=80=A0=E6=88=90=E7=9A=84=E5=86=85=E5=AD=98?= =?UTF-8?q?=E6=B3=84=E6=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 3 + .../com/mogo/launcher/lancet/MemoryLeakFix.kt | 94 +++++++++++++++++++ build.gradle | 2 +- config.gradle | 2 +- 4 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/mogo/launcher/lancet/MemoryLeakFix.kt diff --git a/app/build.gradle b/app/build.gradle index 98bc4c30e6..5c65028837 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -58,6 +58,9 @@ if (!isAndroidTestBuild()) { crash_fix { enable true } + memory_leak { + enable true + } } } } diff --git a/app/src/main/java/com/mogo/launcher/lancet/MemoryLeakFix.kt b/app/src/main/java/com/mogo/launcher/lancet/MemoryLeakFix.kt new file mode 100644 index 0000000000..4b9374ed5f --- /dev/null +++ b/app/src/main/java/com/mogo/launcher/lancet/MemoryLeakFix.kt @@ -0,0 +1,94 @@ +package com.mogo.launcher.lancet + +import android.app.Activity +import android.app.Dialog +import android.content.Context +import android.view.View +import androidx.annotation.* +import androidx.core.view.ViewCompat +import androidx.fragment.app.* +import com.knightboost.lancet.api.* +import com.knightboost.lancet.api.annotations.* +import com.knightboost.lancet.api.annotations.Weaver +import com.mogo.eagle.core.utilcode.kotlin.* +import java.lang.ref.* +import java.lang.reflect.Modifier +import java.util.concurrent.ConcurrentHashMap + +@Keep +@Weaver +@Group("memory_leak") +class MemoryLeakFix { + + @Insert + @ImplementedInterface("java.lang.Runnable") + @TargetMethod(methodName = "run") + fun runProxy() { + if (AccessSyntheticUtils.isTargetAlive(This.get())) { + Origin.callVoid() + } + } +} + +internal class AccessSyntheticUtils { + + companion object { + + private val fields = ConcurrentHashMap>() + + @JvmStatic + fun isTargetAlive(obj: Any): Boolean { + try { + val clazz = obj.javaClass + if (!clazz.isAnonymousClass) { + return true + } + val key = clazz.name + return (fields[key] ?: clazz.declaredFields.find { + it.isSynthetic && + ((it.modifiers and Modifier.STATIC) == 0) && + (View::class.java.isAssignableFrom(it.type) or + Context::class.java.isAssignableFrom(it.type) or + Fragment::class.java.isAssignableFrom(it.type) or + android.app.Fragment::class.java.isAssignableFrom(it.type) or + Dialog::class.java.isAssignableFrom(it.type) + ) + }?.let { + it.isAccessible = true + val wf = WeakReference(it.get(obj), ReferenceQueue()) + fields[key] = wf + wf + })?.also { + if (it.isEnqueued) { + //对像被垃圾回收了 + fields.remove(key) + } + }?.get()?.let { t -> + when(t) { + is View -> { + ViewCompat.isAttachedToWindow(t) + } + is Activity -> { + !t.isFinishing && !t.isDestroyed + } + is Fragment -> { + !t.isDetached + } + is android.app.Fragment -> { + !t.isDetached + } + is Dialog -> { + t.window?.decorView?.let { v -> ViewCompat.isAttachedToWindow(v) } ?: false + } + else -> { + true + } + } + } ?: true + } catch (t: Throwable) { + t.printStackTrace() + } + return true + } + } +} \ No newline at end of file diff --git a/build.gradle b/build.gradle index 0eb109a8a4..d602936fe2 100644 --- a/build.gradle +++ b/build.gradle @@ -38,7 +38,7 @@ buildscript { classpath 'com.mogo.cloud:systrace:1.0.1' classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18' classpath 'com.mogo.sticky:service:1.0.8' - classpath 'io.github.knight-zxw:lancet-plugin:0.0.1' + classpath 'io.github.knight-zxw:lancet-plugin:0.0.4' // classpath ("com.tencent.matrix:matrix-gradle-plugin:0.6.6") { changing = true } } diff --git a/config.gradle b/config.gradle index 248a9c1ae9..ee629f5b6b 100644 --- a/config.gradle +++ b/config.gradle @@ -241,7 +241,7 @@ ext { //========================= LancetX =================== - lancetx_runtime : "io.github.knight-zxw:lancet-runtime:0.0.1", + lancetx_runtime : "io.github.knight-zxw:lancet-runtime:0.0.4", //========================= autosize ====================== androidautoSize : 'com.github.JessYanCoding:AndroidAutoSize:v1.2.1', From 082bc80870eec1ed5ea32d5a06a4cef7f81efea4 Mon Sep 17 00:00:00 2001 From: renwj Date: Mon, 6 Feb 2023 12:03:38 +0800 Subject: [PATCH 10/81] =?UTF-8?q?[dev=5Farch=5Fopt=5F3.0][leakfix]?= =?UTF-8?q?=E7=94=9F=E5=91=BD=E5=91=A8=E6=9C=9F=E5=AF=B9=E8=B1=A1=E9=94=80?= =?UTF-8?q?=E6=AF=81=E6=97=B6=EF=BC=8C=E7=9B=B4=E6=8E=A5=E5=B0=86=E5=8C=BF?= =?UTF-8?q?=E5=90=8D=E5=86=85=E9=83=A8=E7=B1=BB=E5=BC=95=E7=94=A8=E7=9A=84?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E7=BD=AEnull?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/launcher/lancet/MemoryLeakFix.kt | 50 ++++++++++++++++++- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/mogo/launcher/lancet/MemoryLeakFix.kt b/app/src/main/java/com/mogo/launcher/lancet/MemoryLeakFix.kt index 4b9374ed5f..5357e485f6 100644 --- a/app/src/main/java/com/mogo/launcher/lancet/MemoryLeakFix.kt +++ b/app/src/main/java/com/mogo/launcher/lancet/MemoryLeakFix.kt @@ -7,10 +7,14 @@ import android.view.View import androidx.annotation.* import androidx.core.view.ViewCompat import androidx.fragment.app.* +import androidx.lifecycle.* +import androidx.lifecycle.Lifecycle.Event +import androidx.lifecycle.Lifecycle.Event.ON_DESTROY import com.knightboost.lancet.api.* import com.knightboost.lancet.api.annotations.* import com.knightboost.lancet.api.annotations.Weaver import com.mogo.eagle.core.utilcode.kotlin.* +import io.netty.util.internal.ConcurrentSet import java.lang.ref.* import java.lang.reflect.Modifier import java.util.concurrent.ConcurrentHashMap @@ -35,6 +39,7 @@ internal class AccessSyntheticUtils { companion object { private val fields = ConcurrentHashMap>() + private val observers = ConcurrentSet() @JvmStatic fun isTargetAlive(obj: Any): Boolean { @@ -64,31 +69,72 @@ internal class AccessSyntheticUtils { fields.remove(key) } }?.get()?.let { t -> - when(t) { + var lifecycle: Lifecycle? = null + val ret = when (t) { is View -> { + lifecycle = t.lifecycleOwner.lifecycle ViewCompat.isAttachedToWindow(t) } is Activity -> { + lifecycle = t.findViewById(android.R.id.content)?.lifecycleOwner?.lifecycle !t.isFinishing && !t.isDestroyed } is Fragment -> { + lifecycle = t.lifecycle !t.isDetached } is android.app.Fragment -> { + lifecycle = t.view?.lifecycleOwner?.lifecycle !t.isDetached } is Dialog -> { - t.window?.decorView?.let { v -> ViewCompat.isAttachedToWindow(v) } ?: false + t.window?.decorView?.let { + v -> + lifecycle = v.lifecycleOwner.lifecycle + ViewCompat.isAttachedToWindow(v) + } ?: false } else -> { true } } + if (!ret) { + assignFinalFieldNull(obj, t.javaClass) + } else { + val l = lifecycle + if (l != null && !observers.contains(key)) { + observers.add(key) + l.addObserver(object : LifecycleEventObserver { + override fun onStateChanged(source: LifecycleOwner, event: Event) { + if (event == ON_DESTROY) { + assignFinalFieldNull(obj, t.javaClass) + observers.remove(key) + } + } + }) + } + } + ret } ?: true } catch (t: Throwable) { t.printStackTrace() } return true } + + @JvmStatic + private fun assignFinalFieldNull(obj: Any, fieldType: Class<*>) { + try { + obj.javaClass.declaredFields.find { + it.isSynthetic && + ((it.modifiers and Modifier.STATIC) == 0) && it.type == fieldType + }?.also { + it.isAccessible = true + it.set(obj, null) + } + } catch (t: Throwable) { + t.printStackTrace() + } + } } } \ No newline at end of file From 7fdd6dae5752927bff721a59b41333971c756ca2 Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Tue, 7 Feb 2023 14:51:42 +0800 Subject: [PATCH 11/81] =?UTF-8?q?[adas=20lib]=E8=83=BD=E5=90=A6=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E8=87=AA=E9=A9=BE=E4=BB=A5=E5=8F=8A=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E5=91=BD=E4=BB=A4=E4=B8=8B=E5=8F=91=E5=90=8E=E6=88=90=E5=8A=9F?= =?UTF-8?q?=E6=88=96=E5=A4=B1=E8=B4=A5=E7=BB=9F=E8=AE=A1=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/manager/OCHAdasAbilityManager.java | 36 +-- .../adas/client/adapter/ConfigAdapter.java | 5 +- .../zhidao/adas/client/base/BaseAdapter.java | 4 + .../com/zhidao/adas/client/bean/Config.java | 17 +- .../zhidao/adas/client/ui/MainActivity.java | 56 +--- .../adas/client/ui/VersionFragment.java | 35 +++ .../zhidao/adas/client/utils/RandomColor.java | 29 ++ .../src/main/res/values/colors.xml | 5 + .../zhidao/adas/magic/ui/MainActivity.java | 4 +- .../autopilot/MoGoAutopilotProvider.kt | 3 + .../autopilot/adapter/MoGoAdasListenerImpl.kt | 6 +- .../IMoGoAutopilotActionsListener.kt | 3 +- .../IMoGoStartAutopilotFailedListener.kt | 1 - .../CallerAutopilotActionsListenerManager.kt | 5 +- .../zhidao/support/adas/high/AdasChannel.java | 28 +- .../zhidao/support/adas/high/AdasOptions.java | 17 + .../support/adas/high/OnAdasListener.java | 6 +- .../adas/high/bean/AutopilotAbility.java | 41 --- .../adas/high/bean/AutopilotStatistics.java | 1 - .../high/common/AutopilotAbilityManager.java | 215 ++++++++++++- .../adas/high/common/AutopilotReview.java | 30 -- .../support/adas/high/common/Constants.java | 4 - .../support/adas/high/common/Define.java | 3 +- .../support/adas/high/common/MogoReport.java | 149 +++++---- .../support/adas/high/msg/ReportMessage.java | 26 +- .../adas/high/msg/VehicleStateMessage.java | 292 +++++++++++++++++- .../adas/high/thread/DispatchHandler.java | 46 ++- 27 files changed, 802 insertions(+), 265 deletions(-) create mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/utils/RandomColor.java delete mode 100644 libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/bean/AutopilotAbility.java diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/OCHAdasAbilityManager.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/OCHAdasAbilityManager.java index fda4e3fa53..168e6cccc3 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/OCHAdasAbilityManager.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/OCHAdasAbilityManager.java @@ -11,11 +11,8 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotActionsListene import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotStatisticsListenerManager; import com.mogo.eagle.core.utilcode.mogo.logger.Logger; import com.mogo.och.common.module.callback.OchAdasStartFailureCallback; -import com.zhidao.support.adas.high.bean.AutopilotAbility; import com.zhidao.support.adas.high.bean.AutopilotStatistics; -import chassis.Chassis; -import system_master.SystemStatusInfo; /** * Created on 2022/10/9 @@ -77,36 +74,9 @@ public class OCHAdasAbilityManager implements IMoGoAutopilotActionsListener, IMo } @Override - public void onAutopilotAbility(@Nullable AutopilotAbility ability) { - isAutopilotAbility = true; - autopilotAbilityReason = null; - if (ability.gear == null || ability.gear == Chassis.GearPosition.GEAR_P || - ability.gear == Chassis.GearPosition.GEAR_R) { - isAutopilotAbility = false; - autopilotAbilityReason = "挡位不正常"; - } - - if (DebugConfig.getProductFlavor() == "fPadLenovoOchBus" && - ability.gear == Chassis.GearPosition.GEAR_N){ //bus档位不正常 - isAutopilotAbility = false; - autopilotAbilityReason = "挡位不正常"; - } - - if (isAutopilotAbility) - if (ability.brake > 0) { - isAutopilotAbility = false; - autopilotAbilityReason = "制动踏板被踩下"; - } - if (isAutopilotAbility) - if (ability.statusInfo.getSysState() == SystemStatusInfo.SystemState.SYS_STARTING) { - isAutopilotAbility = false; - autopilotAbilityReason = "系统正在启动"; - } - if (isAutopilotAbility) - if (ability.statusInfo.getSysState() == SystemStatusInfo.SystemState.SYS_EXITING) { - isAutopilotAbility = false; - autopilotAbilityReason = "系统正在关闭"; - } + public void onAutopilotAbility(boolean isAutopilotAbility, String unableAutopilotReason) { + this.isAutopilotAbility = isAutopilotAbility; + this.autopilotAbilityReason = unableAutopilotReason; Logger.d(TAG, "是否可以启动自动驾驶=" + isAutopilotAbility + " 原因=" + autopilotAbilityReason); } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/ConfigAdapter.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/ConfigAdapter.java index 7381bc5116..fa494393dc 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/ConfigAdapter.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/ConfigAdapter.java @@ -36,7 +36,10 @@ public class ConfigAdapter extends BaseAdapter } viewHolder.name.setText(data.name); viewHolder.value.setText(data.value); - + if (data.color == -1) { + data.color = R.color.colorSlateGray; + } + viewHolder.value.setTextColor(mContext.getResources().getColor(data.color)); } @Override diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseAdapter.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseAdapter.java index 333d6198e1..ca5e419fc4 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseAdapter.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseAdapter.java @@ -48,6 +48,10 @@ public abstract class BaseAdapter extends Recycler notifyDataSetChanged(); } + public List getData() { + return mDatas; + } + public void setOnItemClickListener(OnItemClickListener listener) { mItemClick = listener; } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Config.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Config.java index 9f18c1fd2b..960c40a65c 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Config.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Config.java @@ -1,11 +1,26 @@ package com.zhidao.adas.client.bean; +import java.util.Objects; + public class Config { public final String name; - public final String value; + public String value; + public int color = -1; public Config(String name, String value) { this.name = name; this.value = value; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Config config = (Config) o; + return Objects.equals(name, config.name); + } + + public void cover(Config config) { + this.value = config.value; + } } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java index 22b6f1188c..8bd87f3cf1 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java @@ -88,7 +88,6 @@ import com.zhidao.support.adas.high.AdasOptions; import com.zhidao.support.adas.high.OnAdasConnectStatusListener; import com.zhidao.support.adas.high.OnAdasListener; import com.zhidao.support.adas.high.OnMultiDeviceListener; -import com.zhidao.support.adas.high.bean.AutopilotAbility; import com.zhidao.support.adas.high.bean.AutopilotStatistics; import com.zhidao.support.adas.high.bean.VersionCompatibility; import com.zhidao.support.adas.high.common.ByteUtil; @@ -114,7 +113,6 @@ import java.util.Locale; import java.util.concurrent.ScheduledExecutorService; import bag_manager.BagManagerOuterClass; -import chassis.Chassis; import chassis.VehicleStateOuterClass; import io.netty.channel.Channel; import mogo.telematics.pad.MessagePad; @@ -171,8 +169,6 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas private ListPopupWindow listPopupWindow; private FloatWindow floatWindow; private View include_title; - private boolean isAutopilotAbility = true; - private String autopilotAbilityReason; private List specialVehicleBeanList;//特种车辆 // @Override // protected void onStart() { @@ -822,47 +818,12 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas } @Override - public void onAutopilotAbility(AutopilotAbility ability) { - isAutopilotAbility = true; - autopilotAbilityReason = null; - if (ability.gear == null || ability.gear == Chassis.GearPosition.GEAR_P || ability.gear == Chassis.GearPosition.GEAR_R) { - isAutopilotAbility = false; - autopilotAbilityReason = "挡位不正常"; + public void onAutopilotAbility(boolean isAutopilotAbility, String unableAutopilotReason) { + if (fromFragment instanceof VersionFragment) { + VersionFragment fragment = (VersionFragment) fromFragment; + fragment.autopilotAbility(isAutopilotAbility, unableAutopilotReason); } - if (isAutopilotAbility) - if (ability.brake > 0) { - isAutopilotAbility = false; - autopilotAbilityReason = "制动踏板被踩下"; - } - if (isAutopilotAbility) - if (ability.statusInfo == null) { - isAutopilotAbility = false; - autopilotAbilityReason = "系统Topic不正常"; - } - if (isAutopilotAbility) - if (ability.statusInfo.getSysState() == SystemStatusInfo.SystemState.SYS_STARTING) { - isAutopilotAbility = false; - autopilotAbilityReason = "系统正在启动"; - } - if (isAutopilotAbility) - if (ability.statusInfo.getSysState() == SystemStatusInfo.SystemState.SYS_EXITING) { - isAutopilotAbility = false; - autopilotAbilityReason = "系统正在关闭"; - } - if (isAutopilotAbility) - if (ability.statusInfo.getSysState() == SystemStatusInfo.SystemState.SYS_FAULT) { - isAutopilotAbility = false; - autopilotAbilityReason = "系统异常"; - } - if (isAutopilotAbility) - for (SystemStatusInfo.HealthInfo healthInfo : ability.statusInfo.getHealthInfoList()) { - if (healthInfo.getState() == SystemStatusInfo.HealthState.FAULT) { - isAutopilotAbility = false; - autopilotAbilityReason = healthInfo.getName() + " 节点异常"; - break; - } - } - Log.i(TAG, "是否可以启动自动驾驶=" + isAutopilotAbility + " 原因=" + autopilotAbilityReason); + Log.i(TAG, "是否可以启动自动驾驶=" + isAutopilotAbility + " 原因=" + unableAutopilotReason); } @Override @@ -967,7 +928,12 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas BasicInfoReq info = new BasicInfoReq(header, basicInfoReq, sdf); DataDistribution.getInstance().addData(info); AdasManager.getInstance().sendBasicInfoResp("", 0, com.zhidao.support.adas.high.common.Constants.TERMINAL_ROLE.DEBUG); - showToastCenter("收到车机基础信息请求:" + info.toString()); + runOnUiThread(new Runnable() { + @Override + public void run() { + showToastCenter("收到车机基础信息请求:" + info.toString()); + } + }); } @Override diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/VersionFragment.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/VersionFragment.java index 23e8c12b62..7018f37cc2 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/VersionFragment.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/VersionFragment.java @@ -30,6 +30,7 @@ import com.zhidao.adas.client.adapter.InterfaceAdapter; import com.zhidao.adas.client.base.BaseFragment; import com.zhidao.adas.client.bean.Config; import com.zhidao.adas.client.bean.InterfaceModel; +import com.zhidao.adas.client.utils.RandomColor; import com.zhidao.support.adas.high.AdasManager; import com.zhidao.support.adas.high.bean.VersionCompatibility; import com.zhidao.support.adas.high.common.Constants; @@ -213,10 +214,44 @@ public class VersionFragment extends BaseFragment { } list.add(new Config("ADAS LIB版本:", AdasManager.getInstance().getAdasVersion())); list.add(new Config("APP构建时间:", BuildConfig.BUILD_TIME)); + list.add(getAutopilotAbilityConfig("")); adapter.setData(list); } + private Config getAutopilotAbilityConfig(String value) { + return new Config("能否启动自动驾驶:", value); + } + public void autopilotAbility(boolean isAutopilotAbility, String unableAutopilotReason) { + List list = adapter.getData(); + if (list != null) { + Config temp = getAutopilotAbilityConfig(isAutopilotAbility + ",原因:" + unableAutopilotReason); + int index = list.indexOf(temp); + if (index < 0) { + list.add(temp); + if (getActivity() != null) + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + adapter.notifyItemInserted(list.size() - 1); + } + }); + } else { + Config config = list.get(index); + config.cover(temp); + config.color = RandomColor.randomColor(); + if (getActivity() != null) + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + adapter.notifyItemChanged(index); + } + }); + } + } + + + } @Override protected void onRefreshView() { showVersion(); diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/utils/RandomColor.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/utils/RandomColor.java new file mode 100644 index 0000000000..1b36a27c04 --- /dev/null +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/utils/RandomColor.java @@ -0,0 +1,29 @@ +package com.zhidao.adas.client.utils; + +import com.zhidao.adas.client.R; + +import java.util.Random; + + +public class RandomColor { + //随机颜色,且不与上一次重复 + private static Random randomColor; + private static int tempColorIndex; + private static int[] colors = {R.color.color1, R.color.color2, R.color.color3, R.color.color4, R.color.color5}; + + public static int randomColor() { + randomColorTemp(); + return colors[tempColorIndex]; + } + + private static void randomColorTemp() { + if (randomColor == null) + randomColor = new Random(); + int colorInt = randomColor.nextInt(colors.length); + if (tempColorIndex == colorInt) { + randomColorTemp(); + } else { + tempColorIndex = colorInt; + } + } +} diff --git a/app_ipc_monitoring/src/main/res/values/colors.xml b/app_ipc_monitoring/src/main/res/values/colors.xml index bfe52b115c..dfe8bd49f3 100644 --- a/app_ipc_monitoring/src/main/res/values/colors.xml +++ b/app_ipc_monitoring/src/main/res/values/colors.xml @@ -17,4 +17,9 @@ #FF00FF #DAA520 #1E90FF + #FFC0CB + #FF8F00 + #FFE500 + #B9ED3E + #2EEDEB diff --git a/app_mogo_magic_ring/src/main/java/com/zhidao/adas/magic/ui/MainActivity.java b/app_mogo_magic_ring/src/main/java/com/zhidao/adas/magic/ui/MainActivity.java index 5cfd2d55ab..7bfea7ad7a 100644 --- a/app_mogo_magic_ring/src/main/java/com/zhidao/adas/magic/ui/MainActivity.java +++ b/app_mogo_magic_ring/src/main/java/com/zhidao/adas/magic/ui/MainActivity.java @@ -44,7 +44,6 @@ import com.zhidao.support.adas.high.AdasManager; import com.zhidao.support.adas.high.AdasOptions; import com.zhidao.support.adas.high.OnAdasConnectStatusListener; import com.zhidao.support.adas.high.OnAdasListener; -import com.zhidao.support.adas.high.bean.AutopilotAbility; import com.zhidao.support.adas.high.bean.AutopilotStatistics; import com.zhidao.support.adas.high.bean.VersionCompatibility; import com.zhidao.support.adas.high.common.Constants.IPC_CONNECTION_STATUS; @@ -818,10 +817,11 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas } @Override - public void onAutopilotAbility(AutopilotAbility ability) { + public void onAutopilotAbility(boolean isAutopilotAbility, String unableAutopilotReason) { } + @Override public void onStartAutopilotFailed(MogoReportMsg.MogoReportMessage message) { diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt index 601891ddd6..6fc053e4f9 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt @@ -109,6 +109,7 @@ class MoGoAutopilotProvider : .setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.FIXATION) .setIpcFixationIP(AdasManager.getInstance().getIPCFixationIPList(mContext)) .setClient(false) + .setIdentityMode(FunctionBuildConfig.appIdentityMode) // .setSubscribeInterfaceOptions(subscribeInterfaceOptions)// .build() @@ -199,6 +200,7 @@ class MoGoAutopilotProvider : val options = AdasOptions .Builder() .setClient(true) + .setIdentityMode(FunctionBuildConfig.appIdentityMode) .build() AdasManager.getInstance() .create(options, MoGoAdasMsgConnectStatusListenerImpl()) @@ -226,6 +228,7 @@ class MoGoAutopilotProvider : .setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.FIXATION) .setIpcFixationIP(AdasManager.getInstance().getIPCFixationIPList(mContext)) .setClient(false)// 乘客端直连工控机改为false + .setIdentityMode(FunctionBuildConfig.appIdentityMode) .build() AdasManager.getInstance().create(options, MoGoAdasMsgConnectStatusListenerImpl()) //////////////////////////////////注意先后顺序,AdasManager.getInstance().create后才可以设置监听///////////////////////////////////////////// diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt index dc82a8841c..9f328d96ae 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt @@ -57,7 +57,6 @@ import com.mogo.eagle.core.function.call.obucombine.CallerObuDcCombineListenerMa import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.zhidao.support.adas.high.AdasManager import com.zhidao.support.adas.high.OnAdasListener -import com.zhidao.support.adas.high.bean.AutopilotAbility import com.zhidao.support.adas.high.bean.AutopilotStatistics import com.zhidao.support.adas.high.common.ProtocolStatus import com.zhjt.service.chain.ChainLog @@ -466,10 +465,9 @@ class MoGoAdasListenerImpl : OnAdasListener { /** * 是否可以启动自动驾驶 - * 使用方法查看:app_ipc_monitoring/uiMainActivity/onAutopilotAbility */ - override fun onAutopilotAbility(ability: AutopilotAbility?) { - invokeAutopilotAbility(ability) + override fun onAutopilotAbility(isAutopilotAbility: Boolean, unableAutopilotReason: String?) { + invokeAutopilotAbility(isAutopilotAbility, unableAutopilotReason) } /** diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotActionsListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotActionsListener.kt index ed661bbed4..0d6f64c173 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotActionsListener.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotActionsListener.kt @@ -1,6 +1,5 @@ package com.mogo.eagle.core.function.api.autopilot -import com.zhidao.support.adas.high.bean.AutopilotAbility interface IMoGoAutopilotActionsListener { @@ -8,5 +7,5 @@ interface IMoGoAutopilotActionsListener { /** * pnc actions 决策 驾驶的意图 */ - fun onAutopilotAbility(ability: AutopilotAbility?) + fun onAutopilotAbility(isAutopilotAbility: Boolean, unableAutopilotReason: String?) } \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoStartAutopilotFailedListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoStartAutopilotFailedListener.kt index 8a8a83a4c3..f1f75862f6 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoStartAutopilotFailedListener.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoStartAutopilotFailedListener.kt @@ -1,6 +1,5 @@ package com.mogo.eagle.core.function.api.autopilot -import com.zhidao.support.adas.high.bean.AutopilotAbility import mogo_msg.MogoReportMsg diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutopilotActionsListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutopilotActionsListenerManager.kt index 5310098bda..b4cf3fa996 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutopilotActionsListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutopilotActionsListenerManager.kt @@ -3,7 +3,6 @@ package com.mogo.eagle.core.function.call.autopilot import androidx.annotation.Nullable import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotActionsListener import com.mogo.eagle.core.function.call.base.CallerBase -import com.zhidao.support.adas.high.bean.AutopilotAbility import java.util.concurrent.ConcurrentHashMap @@ -51,10 +50,10 @@ object CallerAutopilotActionsListenerManager : CallerBase() { } @Synchronized - fun invokeAutopilotAbility(ability: AutopilotAbility?) { + fun invokeAutopilotAbility(isAutopilotAbility: Boolean, unableAutopilotReason: String?) { M_AUTOPILOT_ACTIONS_LISTENER.forEach { val listener = it.value - listener.onAutopilotAbility(ability) + listener.onAutopilotAbility(isAutopilotAbility, unableAutopilotReason) } } } \ No newline at end of file diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java index e00a25d351..c2f55a34f4 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java @@ -12,6 +12,8 @@ import static com.zhidao.support.adas.high.chain.AdasChain.CHAIN_LINK_ADAS; import static com.zhidao.support.adas.high.chain.AdasChain.CHAIN_LINK_LOG_CONNECT_STATUS; import static com.zhidao.support.adas.high.chain.AdasChain.CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT; +import android.os.Handler; +import android.os.Message; import android.os.SystemClock; import android.text.TextUtils; @@ -79,6 +81,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec private RawUnpack rawUnpack;//业务数据拆包 private RawPack rawPack;//数据打包 private DispatchHandler defaultDispatchHandler;//默认分发线程分发 + private DispatchHandler statusQueryRespDispatchHandler;//状态查询应答分发线程分发 private final Map dispatchHandlers = new HashMap<>();//其他分发线程 private Timer checkCompatibilityTimer;//检查版本兼容性定时器 连接成功后5秒内等待工控机发送配置信息 private int seqSpecialVehicle = 0;//特种车辆命令发送次数 @@ -181,6 +184,12 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec //启用线程分发 defaultDispatchHandler = new DispatchHandler(MessagePad.MessageType.MsgTypeDefault, this);//默认分发线程 不要添加到Map中 initOtherDispatchHandler(); + AutopilotAbilityManager.getInstance().setOnAutopilotAbilityListener(new AutopilotAbilityManager.OnAutopilotAbilityListener() { + @Override + public void onStatusQuery() { + statusQueryRespDispatchHandler.start(); + } + }); } /** @@ -231,8 +240,9 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec // dispatchHandlers.put(MessagePad.MessageType.MsgTypeWarn, new DispatchHandler(MessagePad.MessageType.MsgTypeWarn, this)); //到站提醒 // dispatchHandlers.put(MessagePad.MessageType.MsgTypeArrivalNotification, new DispatchHandler(MessagePad.MessageType.MsgTypeArrivalNotification, this)); - //状态查询应答 -// dispatchHandlers.put(MessagePad.MessageType.MsgTypeStatusQueryResp, new DispatchHandler(MessagePad.MessageType.MsgTypeStatusQueryResp, this)); + //状态查询应答 TODO 此线程更新频率目前为3秒,但是由于会在此接口中做一些其他数据处理,所以单独开启线程 + statusQueryRespDispatchHandler = new DispatchHandler(MessagePad.MessageType.MsgTypeStatusQueryResp, this); + dispatchHandlers.put(MessagePad.MessageType.MsgTypeStatusQueryResp, statusQueryRespDispatchHandler); //数据采集配置 // dispatchHandlers.put(MessagePad.MessageType.MsgTypeRecordDataConfigResp, new DispatchHandler(MessagePad.MessageType.MsgTypeRecordDataConfigResp, this)); //Planning决策状态 @@ -396,6 +406,20 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec } } + @Override + public void onHandler(MessagePad.MessageType type, Handler handler) { + if (type == MessagePad.MessageType.MsgTypeStatusQueryResp) { + AutopilotAbilityManager.getInstance().setHandler(handler); + } + } + + @Override + public void onHandleMessage(MessagePad.MessageType type, Message msg) { + if (type == MessagePad.MessageType.MsgTypeStatusQueryResp) { + AutopilotAbilityManager.getInstance().onHandleMessage(msg); + } + } + /** * 分发和解析 * diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasOptions.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasOptions.java index a3b82d5391..e39583f367 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasOptions.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasOptions.java @@ -1,5 +1,6 @@ package com.zhidao.support.adas.high; +import com.zhidao.support.adas.high.common.AutopilotAbilityManager; import com.zhidao.support.adas.high.subscribe.SubscribeInterfaceOptions; import java.util.HashSet; @@ -124,6 +125,17 @@ public class AdasOptions { return this; } + /** + * 身份/车型 + * + * @param identityMode 车型 + * @return + */ + public Builder setIdentityMode(int identityMode) { + options.setIdentityMode(identityMode); + return this; + } + public AdasOptions build() { return options; } @@ -141,6 +153,7 @@ public class AdasOptions { options.ipcAssignIP = null; options.ipcFixationIP = null; options.subscribeInterfaceOptions = null; + options.setIdentityMode(0x00); return options; } @@ -183,4 +196,8 @@ public class AdasOptions { public void setSubscribeInterfaceOptions(SubscribeInterfaceOptions subscribeInterfaceOptions) { this.subscribeInterfaceOptions = subscribeInterfaceOptions; } + + public void setIdentityMode(int identityMode) { + AutopilotAbilityManager.getInstance().setIdentityMode(identityMode); + } } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java index 85d276ef55..fc37b60c33 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java @@ -1,6 +1,5 @@ package com.zhidao.support.adas.high; -import com.zhidao.support.adas.high.bean.AutopilotAbility; import com.zhidao.support.adas.high.bean.AutopilotStatistics; import com.zhidao.support.adas.high.common.ProtocolStatus; @@ -201,9 +200,10 @@ public interface OnAdasListener { /** * 是否有能力启动自动驾驶 * - * @param ability 是否可以启动自动驾驶 + * @param isAutopilotAbility 是否能启动自动驾驶 + * @param unableAutopilotReason 不能启动自动驾驶原因 */ - void onAutopilotAbility(AutopilotAbility ability); + void onAutopilotAbility(boolean isAutopilotAbility, String unableAutopilotReason); /** * 启动自动驾驶失败回调 diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/bean/AutopilotAbility.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/bean/AutopilotAbility.java deleted file mode 100644 index c9e3dc9fa1..0000000000 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/bean/AutopilotAbility.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.zhidao.support.adas.high.bean; - -import chassis.Chassis; -import system_master.SystemStatusInfo; - -/** - * 自动驾驶能力 能否启动自动驾驶 - * 未赋值表示接口通讯异常或者工控机相关节点异常 如果回调持续都是未赋值的状态表示此问题是持久性的 - */ -public class AutopilotAbility { - /** - * 刹车踏板开度 0~100 - * -1表示未赋值 - * 值为0时表示 制动踏板未踩下 - */ - public final float brake; - /** - * 挡位 - * null表示未赋值 - * 挡位处于P挡和R挡时不能启动自动驾驶 - */ - public final Chassis.GearPosition gear; - /** - * 状态查询结果 - * null表示未赋值 - * 不能启动自动驾驶的判断 - * statusInfo.getHealthInfoList().get().getState()== SystemStatusInfo.HealthState.FAULT - * statusInfo.getSysState()== SystemStatusInfo.SystemState.SYS_STARTING - * statusInfo.getSysState()== SystemStatusInfo.SystemState.SYS_EXITING - * statusInfo.getSysState()== SystemStatusInfo.SystemState.SYS_FAULT - */ - public final SystemStatusInfo.StatusInfo statusInfo; - - public AutopilotAbility(float brake, Chassis.GearPosition gear, SystemStatusInfo.StatusInfo statusInfo) { - this.brake = brake; - this.gear = gear; - this.statusInfo = statusInfo; - - - } -} diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/bean/AutopilotStatistics.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/bean/AutopilotStatistics.java index c6acda417b..cba060b13e 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/bean/AutopilotStatistics.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/bean/AutopilotStatistics.java @@ -15,7 +15,6 @@ public class AutopilotStatistics { * 0 成功 * 1 失败 * 2 取消 - * 3 超时 * {@link com.zhidao.support.adas.high.common.Constants.AUTOPILOT_START_STATUS} */ @Define.AutopilotStartStatus diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotAbilityManager.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotAbilityManager.java index 02d90a102d..da5124b491 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotAbilityManager.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotAbilityManager.java @@ -1,37 +1,64 @@ package com.zhidao.support.adas.high.common; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; + import com.zhidao.support.adas.high.AdasManager; import com.zhidao.support.adas.high.OnAdasListener; -import com.zhidao.support.adas.high.bean.AutopilotAbility; +import java.util.List; import java.util.Timer; import java.util.TimerTask; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import chassis.Chassis; -import chassis.VehicleStateOuterClass; +import chassis.ChassisStatesOuterClass; import system_master.SystemStatusInfo; /** * 是否可以启动自动驾驶能力检测 * 目前监控了底盘的一些状态和查询节点状态应答的数据 * 没有使用监控事件报告的原因是因为,部分异常没进行正常恢复通知,例如收到了异常监控数据,但是异常恢复之后没有恢复的通知 - * + *

* 此定时器不能停止 鹰眼中存在UI更新依赖循环查询系统状态 */ public class AutopilotAbilityManager { private static final String TAG = AutopilotAbilityManager.class.getSimpleName(); + private static final int WHAT_TIMEOUT = 0; + private static final int DEFAULT_TIMEOUT = 1500; private static final long DEFAULT_DETECTION_TIME = 3 * 1000L;//默认检测时间 + private static final String[] NODE_INFO_STATE = {"未知状态 ", "依赖未就绪 ", "启动中 ", "运行 ", "停止 ", "无法启动状态 ", "人为启动状态 ", "人为关闭状态 "}; private static volatile AutopilotAbilityManager INSTANCE; - private OnAdasListener listener; private volatile Timer timer; + private final Pattern pattern = Pattern.compile("\\d+.\\d+.\\d+"); + private ChassisStatesOuterClass.ChassisStates chassisStates; + private Handler handler; + private OnAutopilotAbilityListener onAutopilotAbilityListener; + /** + * 身份/车型 + */ + private int identityMode; - private VehicleStateOuterClass.VehicleState vehicleState; + public interface OnAutopilotAbilityListener { + void onStatusQuery();//查询是被调用 + } + + + public void setIdentityMode(int identityMode) { + this.identityMode = identityMode; + } public void setOnAdasListener(OnAdasListener listener) { this.listener = listener; } + public void setOnAutopilotAbilityListener(OnAutopilotAbilityListener onAutopilotAbilityListener) { + this.onAutopilotAbilityListener = onAutopilotAbilityListener; + } + private AutopilotAbilityManager() { } @@ -47,19 +74,140 @@ public class AutopilotAbilityManager { } public void setStatusInfo(SystemStatusInfo.StatusInfo statusInfo) { - if (listener != null) { - float brake = -1; - Chassis.GearPosition gear = null; - if (vehicleState != null) { - brake = vehicleState.getBrake(); - gear = vehicleState.getGear(); - } - listener.onAutopilotAbility(new AutopilotAbility(brake, gear, statusInfo)); + if (handler != null) { + if (handler.hasMessages(WHAT_TIMEOUT)) + handler.removeMessages(WHAT_TIMEOUT); } + onCallback(statusInfo); } - public void setVehicleState(VehicleStateOuterClass.VehicleState vehicleState) { - this.vehicleState = vehicleState; + public void setChassisStates(ChassisStatesOuterClass.ChassisStates chassisStates) { + this.chassisStates = chassisStates; + } + + private void onCallback(SystemStatusInfo.StatusInfo statusInfo) { + //金旅、开沃小巴乘客端 不能启动自动驾驶 + if (isBus(identityMode) && isPassenger(identityMode)) { + return; + } + boolean isAutopilotAbility = true;//是否能启动自动驾驶 + String unableAutopilotReason = null;//不能启动自动驾驶原因 + //检测节点状态相关 + if (statusInfo != null) { + int version = -1; + if (statusInfo.hasMasterVersion()) { + //截取Master Version + String masterVersion = statusInfo.getMasterVersion(); + if (!TextUtils.isEmpty(masterVersion)) { + try { + Matcher matcher = pattern.matcher(masterVersion); + if (matcher.find()) { + String group = matcher.group(); + if (!TextUtils.isEmpty(group)) { + String v = group.split("\\.")[0]; + version = Integer.parseInt(v); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + if (version > 1) { + isAutopilotAbility = statusInfo.getAutoPilotReady(); + if (!isAutopilotAbility) { + SystemStatusInfo.NodeFaultList nodeFaultList = statusInfo.getAutoPilotUnreadyList(); + if (nodeFaultList.getSum() > 0) { + List list = nodeFaultList.getNodeList(); + StringBuilder builder = new StringBuilder(); + for (SystemStatusInfo.NodeInfo info : list) { + builder.append(info.getNodeName()); + int state = info.getState(); + if (state < NODE_INFO_STATE.length) { + builder.append(NODE_INFO_STATE[state]); + } else { + builder.append("未知 "); + } + } + unableAutopilotReason = builder.toString(); + } else { + unableAutopilotReason = "未知"; + } + } + } else { + SystemStatusInfo.SystemState systemState = statusInfo.getSysState(); + if (systemState != SystemStatusInfo.SystemState.SYS_RUNNING && systemState != SystemStatusInfo.SystemState.PILOT_READY) { + isAutopilotAbility = false; + if (systemState == SystemStatusInfo.SystemState.SYS_STARTING) { + unableAutopilotReason = "系统正在启动"; + } else if (systemState == SystemStatusInfo.SystemState.SYS_EXITING) { + unableAutopilotReason = "系统正在关闭"; + } else if (systemState == SystemStatusInfo.SystemState.SYS_FAULT) { + unableAutopilotReason = "系统异常"; + } else if (systemState == SystemStatusInfo.SystemState.AUTO_PILOT_STARTING) { + unableAutopilotReason = "正在开始自动驾驶"; + } else if (systemState == SystemStatusInfo.SystemState.AUTO_PILOT_RUNNING) { + unableAutopilotReason = "自动驾驶运行中"; + } else if (systemState == SystemStatusInfo.SystemState.REMOTE_PILOT_STARTING) { + unableAutopilotReason = "平行驾驶启动中"; + } else if (systemState == SystemStatusInfo.SystemState.REMOTE_PILOT_RUNNING) { + unableAutopilotReason = "平行驾驶运行中"; + } else { + unableAutopilotReason = "未知"; + } + } + } + } else { + isAutopilotAbility = false;//是否能启动自动驾驶 + unableAutopilotReason = "SSM状态查询超时无响应";//不能启动自动驾驶原因 + } + //检测底盘相关 + if (chassisStates != null) { + if (isAutopilotAbility) { + if (chassisStates.hasBrakeSystemStates()) { + float brake = chassisStates.getBrakeSystemStates().getBrakePedalResponsePosition(); + if (brake > 0) { + isAutopilotAbility = false; + unableAutopilotReason = "制动踏板被踩下"; + } + } + } + if (isAutopilotAbility) { + /** + * 档位状态判断 目前判断的车型包括 东风Taxi 红旗Taxi 金旅Bus + */ + if (chassisStates.hasGearSystemStates()) { + Chassis.GearPosition gear = chassisStates.getGearSystemStates().getGearPosition(); + //金旅Bus和清扫车 档位不正常 + if (isBus(identityMode)) { + if (gear == Chassis.GearPosition.GEAR_N) { + isAutopilotAbility = false; + unableAutopilotReason = "挡位不正常"; + } + } else { + //东风Taxi和红旗 司机端和乘客端 档位不正常 + if (gear == Chassis.GearPosition.GEAR_P || gear == Chassis.GearPosition.GEAR_R) { + isAutopilotAbility = false; + unableAutopilotReason = "挡位不正常"; + } + } + } + } + + //TODO 关于手刹:不同车型的实现不同所以目前没法使用此字段 +// if (isAutopilotAbility) { +// //电子驻车制动系统 +// if (chassisStates.hasEpbSystemStates()) { +// ChassisStatesOuterClass.EPBSystemStates epb = chassisStates.getEpbSystemStates(); +// if (epb.hasEpbEnableState()){ +// epb.getEpbWorkState(); +// } +// } +// } + } + if (listener != null) { + listener.onAutopilotAbility(isAutopilotAbility, unableAutopilotReason); + } } public synchronized void start() { @@ -68,7 +216,15 @@ public class AutopilotAbilityManager { timer.schedule(new TimerTask() { @Override public void run() { + if (onAutopilotAbilityListener != null) { + onAutopilotAbilityListener.onStatusQuery(); + } AdasManager.getInstance().sendStatusQueryReq(); + if (handler != null) { + if (handler.hasMessages(WHAT_TIMEOUT)) + handler.removeMessages(WHAT_TIMEOUT); + handler.sendEmptyMessageDelayed(WHAT_TIMEOUT, DEFAULT_TIMEOUT); + } } }, 2000L, DEFAULT_DETECTION_TIME);//延迟执行,避免刚连接成功后底盘信息无法及时同步 } @@ -79,8 +235,35 @@ public class AutopilotAbilityManager { timer.cancel(); timer = null; } - this.vehicleState = null; + handler = null; + this.chassisStates = null; + } + + public void setHandler(Handler handler) { + this.handler = handler; } + public void onHandleMessage(Message msg) { + if (msg.what == WHAT_TIMEOUT) { + onCallback(null); + } + } + + + private boolean isDriver(int appIdentityMode) { + return (appIdentityMode & 0x01) != 0x01; + } + + private boolean isPassenger(int appIdentityMode) { + return (appIdentityMode & 0x01) == 0x01; + } + + private boolean isBus(int appIdentityMode) { + return (appIdentityMode & 0xA0) == 0xA0; + } + + private boolean isTaxi(int appIdentityMode) { + return (appIdentityMode & 0xA0) != 0xA0; + } } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotReview.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotReview.java index c1825605ab..6cc2224baa 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotReview.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotReview.java @@ -16,13 +16,6 @@ import mogo_msg.MogoReportMsg; * 自动驾驶状态检查/统计 */ public class AutopilotReview { - /** - * 默认启动自驾超时时间 - */ - private static final long DEFAULT_TIMEOUT = 15 * 1000L; - - - private Timer timer; /** * 下发的启动自动驾驶命令 */ @@ -45,7 +38,6 @@ public class AutopilotReview { } private void onCallback(@Define.AutopilotStartStatus int status) { - stopTimer(); long usedTime = SystemClock.elapsedRealtime() - startTime; if (listener != null) { listener.onReview(new AutopilotStatistics(status, usedTime, startReq, failedMessage)); @@ -55,27 +47,6 @@ public class AutopilotReview { failedMessage = null; } - - private void startTimer() { - if (timer == null) { - timer = new Timer(); - timer.schedule(new TimerTask() { - @Override - public void run() { - //超时 - onCallback(Constants.AUTOPILOT_START_STATUS.TIMEOUT); - } - }, DEFAULT_TIMEOUT); - } - } - - private void stopTimer() { - if (timer != null) { - timer.cancel(); - timer = null; - } - } - /** * 自动驾命令 * @@ -86,7 +57,6 @@ public class AutopilotReview { //启动自动驾驶 startReq = req; startTime = SystemClock.elapsedRealtime(); - startTimer(); } else { onCallback(Constants.AUTOPILOT_START_STATUS.CANCEL); } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Constants.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Constants.java index 55b42ed75a..2d700e797c 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Constants.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Constants.java @@ -126,10 +126,6 @@ public class Constants { * 取消 */ int CANCEL = 2; - /** - * 超时 - */ - int TIMEOUT = 3; } } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Define.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Define.java index 4ea9eec593..4ef4b6830c 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Define.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Define.java @@ -49,8 +49,7 @@ public final class Define { @IntDef(flag = true, value = {Constants.AUTOPILOT_START_STATUS.SUCCESSFUL, Constants.AUTOPILOT_START_STATUS.FAILED, - Constants.AUTOPILOT_START_STATUS.CANCEL, - Constants.AUTOPILOT_START_STATUS.TIMEOUT}) + Constants.AUTOPILOT_START_STATUS.CANCEL}) @Retention(RetentionPolicy.SOURCE) public @interface AutopilotStartStatus { } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MogoReport.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MogoReport.java index 0ba915d384..3365f70734 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MogoReport.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MogoReport.java @@ -2,7 +2,7 @@ package com.zhidao.support.adas.high.common; /** * 监控事件报告中定义的事件以及解释 - * 根据MAP2.10.0消息定义编写 + * 根据MAP2.11.0消息定义编写 */ public class MogoReport { public static final String RESULT_AUTOPILOT_SYSTEM_UNSTARTED = "RESULT_AUTOPILOT_SYSTEM_UNSTARTED"; @@ -12,33 +12,15 @@ public class MogoReport { public static final String RESULT_REMOTEPILOT_INFERIOR = "RESULT_REMOTEPILOT_INFERIOR"; public static final String RESULT_SHOW_WARNING = "RESULT_SHOW_WARNING"; -// private static final String RESULT_DISCONNECTED_WITH_PAD = "RESULT_DISCONNECTED_WITH_PAD"; -// private static final String RESULT_PAD_CANNOT_CONNECT_TELEMATICS = "RESULT_PAD_CANNOT_CONNECT_TELEMATICS"; -// private static final String RESULT_PAD_INFO_LOST = "RESULT_PAD_INFO_LOST"; -// private static final String RESULT_PAD_CANNOT_GET_AUTOPILOT_STATUS = "RESULT_PAD_CANNOT_GET_AUTOPILOT_STATUS"; -// private static final String RESULT_PAD_CANNOT_GET_GNS_CHASSIS_STATUS = "RESULT_PAD_CANNOT_GET_GNS_CHASSIS_STATUS"; -// private static final String RESULT_PAD_CANNOT_GET_OBSTACLE_INFO = "RESULT_PAD_CANNOT_GET_OBSTACLE_INFO"; -// private static final String RESULT_NO_CONNECTION_TO_AICLOUD = "RESULT_NO_CONNECTION_TO_AICLOUD"; -// private static final String RESULT_AICLOUD_INFO_LOST = "RESULT_AICLOUD_INFO_LOST"; -// private static final String RESULT_CANNOT_CHANGE_LIGHT = "RESULT_CANNOT_CHANGE_LIGHT"; public enum Result { AUTOPILOT_SYSTEM_UNSTARTED(RESULT_AUTOPILOT_SYSTEM_UNSTARTED, "自动驾驶系统启动过程中出错,pad可能无法连接,云端监控可能无法上报"), AUTOPILOT_DISABLE(RESULT_AUTOPILOT_DISABLE, "无法启动自动驾驶"), - AUTOPILOT_INFERIOR(RESULT_AUTOPILOT_INFERIOR, "自动驾驶部分功能受影响,演示模式可以考虑强行启动,需联系人员排查问题。\n例如定位偏移,camera无数据,算法严重丢帧,属于自动驾驶可以启动,但是效果受影响。"), + AUTOPILOT_INFERIOR(RESULT_AUTOPILOT_INFERIOR, "自动驾驶部分功能受严重影响,演示模式可以考虑强行启动,非演示模式下建议停止自动驾驶,联系人员排查问题。\n例如定位偏移,camera无数据,算法非常严重的丢帧,属于自动驾驶可以启动,但是效果受影响。"), REMOTEPILOT_DISABLE(RESULT_REMOTEPILOT_DISABLE, "无法启动远程驾驶"), REMOTEPILOT_INFERIOR(RESULT_REMOTEPILOT_INFERIOR, "远程驾驶部分功能受影响。例如网络高延迟"), SHOW_WARNING(RESULT_SHOW_WARNING, "一般为过渡状态,存在不确定因素,有可能对自动驾驶有微弱影响,需要在pad端显示为黄色告警。\n如果偶尔上报该result可忽略,如果频繁上报需联系人员进行排查。 目前仅有RTK无法确认状态事件。"); -// DISCONNECTED_WITH_PAD(RESULT_DISCONNECTED_WITH_PAD, "未检测到来自pad的链接,如果只报了这个result,可以通过后台/远程驾驶启动自动驾驶"), -// PAD_CANNOT_CONNECT_TELEMATICS(RESULT_PAD_INFO_LOST, "Pad无法连接到工控机"), -// PAD_INFO_LOST(RESULT_PAD_CANNOT_CONNECT_TELEMATICS, "Pad工控机之间指令信息丢失"), -// PAD_CANNOT_GET_AUTOPILOT_STATUS(RESULT_PAD_CANNOT_GET_AUTOPILOT_STATUS, "Pad端无法拿到自动驾驶状态信息"), -// PAD_CANNOT_GET_GNS_CHASSIS_STATUS(RESULT_PAD_CANNOT_GET_GNS_CHASSIS_STATUS, "Pad端无法拿到自车状态和底盘状态信息"), -// PAD_CANNOT_GET_OBSTACLE_INFO(RESULT_PAD_CANNOT_GET_OBSTACLE_INFO, "Pad端无法拿到障碍物信息"), -// NO_CONNECTION_TO_AICLOUD(RESULT_NO_CONNECTION_TO_AICLOUD, "无法和云端通信"), -// AICLOUD_INFO_LOST(RESULT_AICLOUD_INFO_LOST, "云端工控机之间信息丢失"), -// CANNOT_CHANGE_LIGHT(RESULT_CANNOT_CHANGE_LIGHT, "变灯失败"); /** * 消息result code @@ -69,25 +51,6 @@ public class MogoReport { return REMOTEPILOT_INFERIOR.desc; case RESULT_SHOW_WARNING: return SHOW_WARNING.desc; - -// case RESULT_DISCONNECTED_WITH_PAD: -// return DISCONNECTED_WITH_PAD.desc; -// case RESULT_PAD_CANNOT_CONNECT_TELEMATICS: -// return PAD_CANNOT_CONNECT_TELEMATICS.desc; -// case RESULT_PAD_INFO_LOST: -// return PAD_INFO_LOST.desc; -// case RESULT_PAD_CANNOT_GET_AUTOPILOT_STATUS: -// return PAD_CANNOT_GET_AUTOPILOT_STATUS.desc; -// case RESULT_PAD_CANNOT_GET_GNS_CHASSIS_STATUS: -// return PAD_CANNOT_GET_GNS_CHASSIS_STATUS.desc; -// case RESULT_PAD_CANNOT_GET_OBSTACLE_INFO: -// return PAD_CANNOT_GET_OBSTACLE_INFO.desc; -// case RESULT_NO_CONNECTION_TO_AICLOUD: -// return NO_CONNECTION_TO_AICLOUD.desc; -// case RESULT_AICLOUD_INFO_LOST: -// return AICLOUD_INFO_LOST.desc; -// case RESULT_CANNOT_CHANGE_LIGHT: -// return CANNOT_CHANGE_LIGHT.desc; default: return resultCode; @@ -104,6 +67,7 @@ public class MogoReport { public static final String ACTION_CHECK_GEAR = "ACTION_CHECK_GEAR"; public static final String ACTION_CHECK_NETWORK = "ACTION_CHECK_NETWORK"; public static final String ACTION_TRY_AGAIN_LATER = "ACTION_TRY_AGAIN_LATER"; + public static final String ACTION_REMOTEPILOT_REQUEST = "ACTION_REMOTEPILOT_REQUEST"; public enum Action { @@ -114,7 +78,8 @@ public class MogoReport { REBOOT_VEHICLE(ACTION_REBOOT_VEHICLE, "重启车辆"), CHECK_GEAR(ACTION_CHECK_GEAR, "检查车辆档位等影响自动驾驶的因素"), CHECK_NETWORK(ACTION_CHECK_NETWORK, "检查网络连接和路由器等影响通信的因素"), - TRY_AGAIN_LATER(ACTION_TRY_AGAIN_LATER, "请稍后重试"); + TRY_AGAIN_LATER(ACTION_TRY_AGAIN_LATER, "请稍后重试"), + REMOTEPILOT_REQUEST(ACTION_REMOTEPILOT_REQUEST, "请求远程驾驶"); /** * 消息Action code @@ -303,6 +268,20 @@ public class MogoReport { String TASK_CONFIG_EMPTY = "ERECORD_TASK_CONFIG_EMPTY";//配置为空 String TASK_QUEUE_EMPTY = "ERECORD_TASK_QUEUE_EMPTY";//数据队列为空 } + + /** + * 平行驾驶相关异常 + */ + interface EPARALLEL { + String AICLOUD_CONNECTION_ERROR = "EPARALLEL_AICLOUD_CONNECTION_ERROR";//平行驾驶长连接异常 + } + + /** + * 车辆处于困境,等待平行驾驶接管 + */ + interface EVEHICLE { + String IN_TROUBLE = "EVEHICLE_IN_TROUBLE";//planning 检测到车处于困境,把困境状态汇报给 SSM,ssm 发出该事件,等待驾舱端开始平行驾驶 + } } /** @@ -344,9 +323,10 @@ public class MogoReport { } /** - * 系统状态 常规信息 + * 系统状态 */ interface ISYS { + /*******常规信息*******/ String STARTING = "ISYS_STARTING";//系统启动中 String RUNNING = "ISYS_RUNNING";//所有Xavier启动完成 String EXITING = "ISYS_EXITING";//系统退出中 @@ -362,19 +342,14 @@ public class MogoReport { String SYSTEM_IN_IDLE = "ISYS_SYSTEM_IN_IDLE";//系统进入空闲状态 String SYSTEM_OUT_IDLE = "ISYS_SYSTEM_OUT_IDLE";//系统退出空闲状态 - String FUNC_YY_START = "ISYS_FUNC_YY_START";//产品状态检查开始 - String FUNC_YY_FINISH = "ISYS_FUNC_YY_FINISH";//产品状态达成(第一次ready) - String FUNC_YY_TIMEOUT = "ISYS_FUNC_YY_TIMEOUT";//产品状态检查超时 - String FUNC_YY_ABORT = "ISYS_FUNC_YY_ABORT";//产品状态检查中止 - String FUNC_YY_UNREADY = "ISYS_FUNC_YY_UNREADY";//产品状态未就绪 - String FUNC_YY_READY = "ISYS_FUNC_YY_READY";//产品状态就绪 - + /*******轨迹下载相关*******/ String INIT_TRAJECTORY_START = "ISYS_INIT_TRAJECTORY_START";//轨迹管理_轨迹开始下载 String INIT_TRAJECTORY_SUCCESS = "ISYS_INIT_TRAJECTORY_SUCCESS";//轨迹管理_轨迹下载成功 String INIT_TRAJECTORY_FAILURE = "ISYS_INIT_TRAJECTORY_FAILURE";//轨迹管理_轨迹下载失败,本地无对应轨迹 String INIT_TRAJECTORY_WARNING = "ISYS_INIT_TRAJECTORY_WARNING";//轨迹管理_轨迹下载失败,本地有对应轨迹,认为成功 String INIT_TRAJECTORY_TIMEOUT = "ISYS_INIT_TRAJECTORY_TIMEOUT";//轨迹管理_轨迹下载超时 + /*******配置更新相关*******/ String CONFIG_UPDATE_HADMAP = "ISYS_CONFIG_UPDATE_HADMAP";//需要重启升级高精地图 String CONFIG_UPDATE_AI_MODEL = "ISYS_CONFIG_UPDATE_AI_MODEL";//需要重启升级AI模型 String CONFIG_UPDATE_SLAM_MAP = "ISYS_CONFIG_UPDATE_SLAM_MAP";//需要重启升级SLAM地图 @@ -390,13 +365,65 @@ public class MogoReport { interface ISSM { String INIT = "ISSM_INIT";//SSM系统上电初始化 String RESTARTED = "ISSM_RESTARTED";//SSM系统发生重启 - String MODE_XX_START = "ISSM_MODE_XX_START";//SSM变更模式开始 - String MODE_XX_FINISH = "ISSM_MODE_XX_FINISH";//SSM变更模式完成(第一次ready - String MODE_XX_ABORT = "ISSM_MODE_XX_ABORT";//SSM变更模式中止 - String MODE_XX_TIMEOUT = "ISSM_MODE_XX_TIMEOUT";//SSM变更模式超时 - String MODE_XX_READY = "ISSM_MODE_XX_READY";//SSM模式就绪 - String MODE_XX_UNREADY = "ISSM_MODE_XX_UNREADY";//SSM未就绪 +// String MODE_XX_START = "ISSM_MODE_XX_START";//SSM变更模式开始 +// String MODE_XX_FINISH = "ISSM_MODE_XX_FINISH";//SSM变更模式完成(第一次ready +// String MODE_XX_ABORT = "ISSM_MODE_XX_ABORT";//SSM变更模式中止 +// String MODE_XX_TIMEOUT = "ISSM_MODE_XX_TIMEOUT";//SSM变更模式超时 +// String MODE_XX_READY = "ISSM_MODE_XX_READY";//SSM模式就绪 +// String MODE_XX_UNREADY = "ISSM_MODE_XX_UNREADY";//SSM未就绪 + + //以上6组被注释掉的字段 中的MODE_XX分别替换成MODE_RUN、MODE_IDLE、MODE_STOP + + String MODE_RUN_START = "ISSM_MODE_RUN_START";//SSM变更模式开始 + String MODE_RUN_FINISH = "ISSM_MODE_RUN_FINISH";//SSM变更模式完成(第一次ready + String MODE_RUN_ABORT = "ISSM_MODE_RUN_ABORT";//SSM变更模式中止 + String MODE_RUN_TIMEOUT = "ISSM_MODE_RUN_TIMEOUT";//SSM变更模式超时 + String MODE_RUN_READY = "ISSM_MODE_RUN_READY";//SSM模式就绪 + String MODE_RUN_UNREADY = "ISSM_MODE_RUN_UNREADY";//SSM未就绪 + + String MODE_IDLE_START = "ISSM_MODE_IDLE_START";//SSM变更模式开始 + String MODE_IDLE_FINISH = "ISSM_MODE_IDLE_FINISH";//SSM变更模式完成(第一次ready + String MODE_IDLE_ABORT = "ISSM_MODE_IDLE_ABORT";//SSM变更模式中止 + String MODE_IDLE_TIMEOUT = "ISSM_MODE_IDLE_TIMEOUT";//SSM变更模式超时 + String MODE_IDLE_READY = "ISSM_MODE_IDLE_READY";//SSM模式就绪 + String MODE_IDLE_UNREADY = "ISSM_MODE_IDLE_UNREADY";//SSM未就绪 + + String MODE_STOP_START = "ISSM_MODE_STOP_START";//SSM变更模式开始 + String MODE_STOP_FINISH = "ISSM_MODE_STOP_FINISH";//SSM变更模式完成(第一次ready + String MODE_STOP_ABORT = "ISSM_MODE_STOP_ABORT";//SSM变更模式中止 + String MODE_STOP_TIMEOUT = "ISSM_MODE_STOP_TIMEOUT";//SSM变更模式超时 + String MODE_STOP_READY = "ISSM_MODE_STOP_READY";//SSM模式就绪 + String MODE_STOP_UNREADY = "ISSM_MODE_STOP_UNREADY";//SSM未就绪 + +// String FUNC_YY_START = "ISSM_FUNC_YY_START";//产品状态检查开始 +// String FUNC_YY_FINISH = "ISSM_FUNC_YY_FINISH";//产品状态达成(第一次ready) +// String FUNC_YY_TIMEOUT = "ISSM_FUNC_YY_TIMEOUT";//产品状态检查超时 +// String FUNC_YY_ABORT = "ISSM_FUNC_YY_ABORT";//产品状态检查中止 +// String FUNC_YY_UNREADY = "ISSM_FUNC_YY_UNREADY";//产品状态未就绪 +// String FUNC_YY_READY = "ISSM_FUNC_YY_READY";//产品状态就绪 + + //以上6组被注释掉的字段 中的FUNC_YY分别替换成FUNC_COLD_START、FUNC_AUTO_PILOT、FUNC_REMOTE_PILOT + String FUNC_COLD_START_START = "ISSM_FUNC_COLD_START_START";//产品状态检查开始 + String FUNC_COLD_START_FINISH = "ISSM_FUNC_COLD_START_FINISH";//产品状态达成(第一次ready) + String FUNC_COLD_START_TIMEOUT = "ISSM_FUNC_COLD_START_TIMEOUT";//产品状态检查超时 + String FUNC_COLD_START_ABORT = "ISSM_FUNC_COLD_START_ABORT";//产品状态检查中止 + String FUNC_COLD_START_UNREADY = "ISSM_FUNC_COLD_START_UNREADY";//产品状态未就绪 + String FUNC_COLD_START_READY = "ISSM_FUNC_COLD_START_READY";//产品状态就绪 + + String FUNC_AUTO_PILOT_START = "ISSM_FUNC_AUTO_PILOT_START";//产品状态检查开始 + String FUNC_AUTO_PILOT_FINISH = "ISSM_FUNC_AUTO_PILOT_FINISH";//产品状态达成(第一次ready) + String FUNC_AUTO_PILOT_TIMEOUT = "ISSM_FUNC_AUTO_PILOT_TIMEOUT";//产品状态检查超时 + String FUNC_AUTO_PILOT_ABORT = "ISSM_FUNC_AUTO_PILOT_ABORT";//产品状态检查中止 + String FUNC_AUTO_PILOT_UNREADY = "ISSM_FUNC_AUTO_PILOT_UNREADY";//产品状态未就绪 + String FUNC_AUTO_PILOT_READY = "ISSM_FUNC_AUTO_PILOT_READY";//产品状态就绪 + + String FUNC_REMOTE_PILOT_START = "ISSM_FUNC_REMOTE_PILOT_START";//产品状态检查开始 + String FUNC_REMOTE_PILOT_FINISH = "ISSM_FUNC_REMOTE_PILOT_FINISH";//产品状态达成(第一次ready) + String FUNC_REMOTE_PILOT_TIMEOUT = "ISSM_FUNC_REMOTE_PILOT_TIMEOUT";//产品状态检查超时 + String FUNC_REMOTE_PILOT_ABORT = "ISSM_FUNC_REMOTE_PILOT_ABORT";//产品状态检查中止 + String FUNC_REMOTE_PILOT_UNREADY = "ISSM_FUNC_REMOTE_PILOT_UNREADY";//产品状态未就绪 + String FUNC_REMOTE_PILOT_READY = "ISSM_FUNC_REMOTE_PILOT_READY";//产品状态就绪 } interface IAGENT { @@ -427,6 +454,20 @@ public class MogoReport { String TASK_AUTO = "IRECORDER_TASK_AUTO";//自动录包任务创建 String TASK_CMD = "IRECORDER_TASK_CMD";//指令录包任务创建 } + + /** + * 平行驾驶相关 + */ + interface IPARALLEL { + String AICLOUD_CONNECTION_OK = "IPARALLEL_AICLOUD_CONNECTION_OK";//长连接连接恢复后, 5s 内如果长连状态一直 ok 的话,会触发该事件 建议鹰眼展示该事件 + } + + /** + * 车辆处于困境相关 + */ + interface IVEHICLE { + String NOT_IN_TROUBLE = "IVEHICLE_NOT_IN_TROUBLE";//车辆脱离困境,恢复正常,可继续开始自动驾驶了 触发频率:处于困境中,触发一次; 脱困后,触发一次 云端驾舱会接入该事件 建议鹰眼也接入,展示困境状态/脱困状态 + } } } } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/ReportMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/ReportMessage.java index 7baa2838cd..e146fca77c 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/ReportMessage.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/ReportMessage.java @@ -10,7 +10,8 @@ import com.zhidao.support.adas.high.common.CupidLogUtils; import com.zhidao.support.adas.high.common.MogoReport; import com.zhidao.support.adas.high.protocol.RawData; -import java.util.List; +import java.util.HashSet; +import java.util.Set; import mogo_msg.MogoReportMsg; @@ -19,9 +20,28 @@ import mogo_msg.MogoReportMsg; */ public class ReportMessage extends MyAbstractMessageHandler { private final AutopilotReview autopilotReview; + private final Set startAutopilotFailCode = new HashSet();//启动自驾失败Code public ReportMessage(AutopilotReview autopilotReview) { this.autopilotReview = autopilotReview; + initStartAutopilotFailCode(); + } + + private void initStartAutopilotFailCode() { + //ssm_master的失败事件 + startAutopilotFailCode.add(MogoReport.Code.Error.ESYS.AUTOPILOT_FAILED);//在尝试启动自动驾驶,但是超过指定时间后底盘未进入,会发送此事件 + startAutopilotFailCode.add(MogoReport.Code.Error.ESYS.ROUTING_REQ_TIMEOUT);//算路请求响应超时或轨迹加载超时 + startAutopilotFailCode.add(MogoReport.Code.Error.ESYS.PLANNING_CHANGE_FAILIED);//planning切换失败(仅df hq有此事件) + startAutopilotFailCode.add(MogoReport.Code.Error.ESYS.CHECK_TRAJECTORY_FAILURE);//轨迹下载检查不可用 + //controller的失败事件 EMAP_ENTRY_AUTOPILOT_XXX 底盘启动失败 + startAutopilotFailCode.add(MogoReport.Code.Error.EMAP.ENTRY_AUTOPILOT_FOR_CANADAPTER_TIMEOUT);//can_adapter消息超时未进入自驾 + startAutopilotFailCode.add(MogoReport.Code.Error.EMAP.ENTRY_AUTOPILOT_FOR_PLANNING_TIMEOUT);//PLANNING消息超时未进自驾 + startAutopilotFailCode.add(MogoReport.Code.Error.EMAP.ENTRY_AUTOPILOT_FOR_LOCATION_TIMEOUT);//定位消息超时未进自驾 + startAutopilotFailCode.add(MogoReport.Code.Error.EMAP.ENTRY_AUTOPILOT_FOR_BRAKE);//制动踏板干预未进自驾 + startAutopilotFailCode.add(MogoReport.Code.Error.EMAP.ENTRY_AUTOPILOT_FOR_ACCEL);//加速踏板干预未进自驾 + startAutopilotFailCode.add(MogoReport.Code.Error.EMAP.ENTRY_AUTOPILOT_FOR_STEER);//方向盘干预未进自驾 + startAutopilotFailCode.add(MogoReport.Code.Error.EMAP.ENTRY_AUTOPILOT_FOR_GEAR_SWITCH);//档位切换干预未进自驾 + startAutopilotFailCode.add(MogoReport.Code.Error.EMAP.ENTRY_AUTOPILOT_FOR_OTHER_CTL);//其他干预未进自驾,请检查仪表盘和开关项(如双闪,制动灯灯等 可在msg中补充原因信息) } @Override @@ -36,8 +56,8 @@ public class ReportMessage extends MyAbstractMessageHandler { } AdasChannel.calculateTimeConsumingBusiness("监控事件报告", nowTime); //分发自动驾驶启动失败相关回调 - List results = mogoReportMessage.getResultList(); - if (!results.isEmpty() && results.contains(MogoReport.RESULT_AUTOPILOT_DISABLE)) { + String code = mogoReportMessage.getCode(); + if (startAutopilotFailCode.contains(code)) { if (adasListener != null) { adasListener.onStartAutopilotFailed(mogoReportMessage);//启动自动驾驶失败回调 } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/VehicleStateMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/VehicleStateMessage.java index ccfc0ec84d..00381802e6 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/VehicleStateMessage.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/VehicleStateMessage.java @@ -9,7 +9,10 @@ import com.zhidao.support.adas.high.common.AutopilotAbilityManager; import com.zhidao.support.adas.high.common.CupidLogUtils; import com.zhidao.support.adas.high.protocol.RawData; +import chassis.Chassis; +import chassis.ChassisStatesOuterClass; import chassis.VehicleStateOuterClass; +import common.HeaderOuterClass; /** * 底盘信息, 透传底盘状态,pb参考底盘 @@ -20,7 +23,7 @@ public class VehicleStateMessage extends MyAbstractMessageHandler { public void handlerMsg(RawData raw, OnAdasListener adasListener) throws InvalidProtocolBufferException { VehicleStateOuterClass.VehicleState vehicleState = VehicleStateOuterClass.VehicleState.parser().parseFrom(raw.originalData.toByteArray(), raw.getOffsetValue(), raw.getPackageLengthValue() - raw.getOffsetValue()); AdasChannel.calculateTimeConsumingOnDispatchRaw("底盘信息", raw.receiveTime); - AutopilotAbilityManager.getInstance().setVehicleState(vehicleState); + compatibility(vehicleState); long nowTime = 0; if (CupidLogUtils.isEnableLog()) nowTime = SystemClock.elapsedRealtime(); @@ -30,4 +33,291 @@ public class VehicleStateMessage extends MyAbstractMessageHandler { AdasChannel.calculateTimeConsumingBusiness("底盘信息", nowTime); // CupidLogUtils.e("底盘信息--->" + vehicleState.toString()); } + + /** + * 将老地盘数据转换成新地盘数据 + * 字段注释中 鹰眼已用 的 已和底盘相关开发 确认过,其他字段均为确认对应关系 + * 新底盘中未找到字段: + * parking_brake longitude_driving_mode eps_steering_mode + * steering_sign location_missing trajectory_missing + * chassis_status_missing pilot_mode_condition_met vehicletakeoverstatus + * fuel_value robo_taxi_state robo_bus_state + * robo_bus_jinlv_m1_state + */ + private ChassisStatesOuterClass.ChassisStates compatibility(VehicleStateOuterClass.VehicleState vehicleState) throws InvalidProtocolBufferException { + /**************老地盘转换成新地盘PB***************/ + ChassisStatesOuterClass.ChassisStates.Builder builder = ChassisStatesOuterClass.ChassisStates.newBuilder(); + //工控机所用Header + if (vehicleState.hasHeader()) { + builder.setHeader(HeaderOuterClass.Header.parseFrom(vehicleState.getHeader().toByteArray())); + } + setBCMSystemStates(builder, vehicleState); + setSteerSystemStates(builder, vehicleState); + setGearSystemStates(builder, vehicleState); + setVehicleMotionStates(builder, vehicleState); + setDrivingSystemStates(builder, vehicleState); + setBrakeSystemStates(builder, vehicleState); + setChassisAutopilotAssistanceInformation(builder, vehicleState); + //电子驻车制动系统 + if (vehicleState.hasEpb()) { + Chassis.EPBWorkStatus old = vehicleState.getEpb(); + ChassisStatesOuterClass.EPBWorkStates epb = null; + if (old == Chassis.EPBWorkStatus.EPBSTATUS_NONE) { + epb = ChassisStatesOuterClass.EPBWorkStates.EPB_STATE_NONE; + } else if (old == Chassis.EPBWorkStatus.EPBSTATUS_LOCKED) { + epb = ChassisStatesOuterClass.EPBWorkStates.EPB_STATE_LOCKED; + } else if (old == Chassis.EPBWorkStatus.EPBSTATUS_RELEASED) { + epb = ChassisStatesOuterClass.EPBWorkStates.EPB_STATE_RELEASED; + } else if (old == Chassis.EPBWorkStatus.EPBSTATUS_LOCKED_FAIL) { + epb = ChassisStatesOuterClass.EPBWorkStates.EPB_STATE_LOCKED_FAIL; + } else if (old == Chassis.EPBWorkStatus.EPBSTATUS_RELEASE_FAIL) { + epb = ChassisStatesOuterClass.EPBWorkStates.EPB_STATE_RELEASE_FAIL; + } else if (old == Chassis.EPBWorkStatus.EPBSTATUS_FAULT) { + epb = ChassisStatesOuterClass.EPBWorkStates.EPB_STATE_FAULT; + } + if (epb != null) { + builder.setEpbSystemStates(ChassisStatesOuterClass.EPBSystemStates.newBuilder() + .setEpbWorkState(epb)); + } + } + // 整车故障状态 + if (vehicleState.hasVehiclefaultlevel()) { + Chassis.VehicleFaultLevel vehicleFaultLevel = vehicleState.getVehiclefaultlevel(); + ChassisStatesOuterClass.VehicleFaultLevels vehicleFaultLevels = null; + if (vehicleFaultLevel == Chassis.VehicleFaultLevel.None_Fault) { + vehicleFaultLevels = ChassisStatesOuterClass.VehicleFaultLevels.NONE_FAULT; + } else if (vehicleFaultLevel == Chassis.VehicleFaultLevel.General_Fault) { + vehicleFaultLevels = ChassisStatesOuterClass.VehicleFaultLevels.GENERAL_FAULT; + } else if (vehicleFaultLevel == Chassis.VehicleFaultLevel.Serious_Fault) { + vehicleFaultLevels = ChassisStatesOuterClass.VehicleFaultLevels.SERIOUS_FAULT; + } else if (vehicleFaultLevel == Chassis.VehicleFaultLevel.Critical_Fault) { + vehicleFaultLevels = ChassisStatesOuterClass.VehicleFaultLevels.CRITICAL_FAULT; + } + if (vehicleFaultLevels != null) { + builder.setVehicleChassisFaultInformation(ChassisStatesOuterClass.VehicleChassisFaultInformation.newBuilder() + .setVehiclefaultlevel(vehicleFaultLevels)); + } + } + //电量 + if (vehicleState.hasBmsSoc()) { + builder.setBmsSystemStates(ChassisStatesOuterClass.BMSSystemStates.newBuilder().setBmsSoc(vehicleState.getBmsSoc())); + } + //清扫车(福田)清扫控制系统状态 + if (vehicleState.hasSweeperFutianCleanSystemState()) { + byte[] bytes = vehicleState.getSweeperFutianCleanSystemState().toByteArray(); + builder.setTaskSystemStates(ChassisStatesOuterClass.TaskSystemStates.newBuilder() + .setSweeperFutianTaskSystemStates(ChassisStatesOuterClass.SweeperFuTianTaskSystemStates.parseFrom(bytes)));//鹰眼已用 清扫车专用 + } + ChassisStatesOuterClass.ChassisStates chassisStates = builder.build(); + AutopilotAbilityManager.getInstance().setChassisStates(chassisStates); + return chassisStates; + } + + + private void setChassisAutopilotAssistanceInformation(ChassisStatesOuterClass.ChassisStates.Builder builder, VehicleStateOuterClass.VehicleState vehicleState) { + ChassisStatesOuterClass.ChassisAutopilotAssistanceInformation.Builder chassisAutopilotAssistanceInformation = null; + if (vehicleState.hasPilotMode()) { + chassisAutopilotAssistanceInformation = ChassisStatesOuterClass.ChassisAutopilotAssistanceInformation.newBuilder(); + chassisAutopilotAssistanceInformation.setChassisPilotModeState(vehicleState.getPilotMode()); + } + if (vehicleState.hasEmergencyStopSwitch()) { + if (chassisAutopilotAssistanceInformation == null) { + chassisAutopilotAssistanceInformation = ChassisStatesOuterClass.ChassisAutopilotAssistanceInformation.newBuilder(); + } + // 急停开关状态 + chassisAutopilotAssistanceInformation.setEmergencyStopSwitchState(vehicleState.getEmergencyStopSwitch()); + } + if (chassisAutopilotAssistanceInformation != null) { + builder.setChassisAutopilotAssistanceInformation(chassisAutopilotAssistanceInformation); + } + } + + /** + * 档位 + */ + private void setGearSystemStates(ChassisStatesOuterClass.ChassisStates.Builder builder, VehicleStateOuterClass.VehicleState vehicleState) { + ChassisStatesOuterClass.GearSystemStates.Builder gearSystemStates = null; + if (vehicleState.hasGear()) { + gearSystemStates = ChassisStatesOuterClass.GearSystemStates.newBuilder(); + //挂挡档位数据 + gearSystemStates.setGearPosition(vehicleState.getGear());//鹰眼已用 + } + if (vehicleState.hasGearSwitchInference()) { + if (gearSystemStates == null) { + gearSystemStates = ChassisStatesOuterClass.GearSystemStates.newBuilder(); + } + //档位干预 + gearSystemStates.setGearSwitchInferenceState(vehicleState.getGearSwitchInference()); + } + if (gearSystemStates != null) { + builder.setGearSystemStates(gearSystemStates); + } + } + + /** + * 油门 + */ + private void setDrivingSystemStates(ChassisStatesOuterClass.ChassisStates.Builder builder, VehicleStateOuterClass.VehicleState vehicleState) { + ChassisStatesOuterClass.DrivingSystemStates.Builder drivingSystemStates = null; + if (vehicleState.hasThrottle()) { + drivingSystemStates = ChassisStatesOuterClass.DrivingSystemStates.newBuilder(); + //油门 + drivingSystemStates.setThrottleResponsePosition(vehicleState.getThrottle());//鹰眼已用 + } + if (vehicleState.hasAccelInference()) { + if (drivingSystemStates == null) { + drivingSystemStates = ChassisStatesOuterClass.DrivingSystemStates.newBuilder(); + } + //加速踏板干预 + drivingSystemStates.setAccelerationPedalInferenceState(vehicleState.getAccelInference()); + } + if (drivingSystemStates != null) { + builder.setDrivingSystemStates(drivingSystemStates); + } + } + + /** + * 刹车 + */ + private void setBrakeSystemStates(ChassisStatesOuterClass.ChassisStates.Builder builder, VehicleStateOuterClass.VehicleState vehicleState) { + ChassisStatesOuterClass.BrakeSystemStates.Builder brakeSystemStates = null; + if (vehicleState.hasBrake()) { + brakeSystemStates = ChassisStatesOuterClass.BrakeSystemStates.newBuilder(); + //刹车 + brakeSystemStates.setBrakePedalResponsePosition(vehicleState.getBrake());//鹰眼已用 + } + if (vehicleState.hasBrakeInference()) { + if (brakeSystemStates == null) { + brakeSystemStates = ChassisStatesOuterClass.BrakeSystemStates.newBuilder(); + } + //刹车干预 + brakeSystemStates.setBrakePedalInferenceState(vehicleState.getBrakeInference()); + } + if (brakeSystemStates != null) { + builder.setBrakeSystemStates(brakeSystemStates); + } + } + + /** + * 方向盘 + */ + private void setSteerSystemStates(ChassisStatesOuterClass.ChassisStates.Builder builder, VehicleStateOuterClass.VehicleState vehicleState) { + ChassisStatesOuterClass.SteerSystemStates.Builder steerSystemStates = null; + if (vehicleState.hasSteering()) { + steerSystemStates = ChassisStatesOuterClass.SteerSystemStates.newBuilder(); + //方向盘转向角数据 + steerSystemStates.setSteeringWheelAngle(vehicleState.getSteering());//鹰眼已用 + } + if (vehicleState.hasSteerInference()) { + if (steerSystemStates == null) { + steerSystemStates = ChassisStatesOuterClass.SteerSystemStates.newBuilder(); + } + //方向盘干预 + steerSystemStates.setSteeringWheelInferenceState(vehicleState.getSteerInference()); + } + if (vehicleState.hasSteeringSpd()) { + if (steerSystemStates == null) { + steerSystemStates = ChassisStatesOuterClass.SteerSystemStates.newBuilder(); + } + steerSystemStates.setSteeringWheelSpeed(vehicleState.getSteeringSpd()); + } + if (vehicleState.hasLeftFrontWheelAngle()) { + if (steerSystemStates == null) { + steerSystemStates = ChassisStatesOuterClass.SteerSystemStates.newBuilder(); + } + steerSystemStates.setFrontLeftWheelAngle(vehicleState.getLeftFrontWheelAngle()); + } + if (vehicleState.hasRightFrontWheelAngle()) { + if (steerSystemStates == null) { + steerSystemStates = ChassisStatesOuterClass.SteerSystemStates.newBuilder(); + } + steerSystemStates.setFrontRightWheelAngle(vehicleState.getRightFrontWheelAngle()); + } + if (steerSystemStates != null) { + builder.setSteerSystemStates(steerSystemStates); + } + } + + private void setVehicleMotionStates(ChassisStatesOuterClass.ChassisStates.Builder builder, VehicleStateOuterClass.VehicleState vehicleState) { + ChassisStatesOuterClass.VehicleMotionStates.Builder vehicleMotionStates = null; + if (vehicleState.hasSpeed()) { + vehicleMotionStates = ChassisStatesOuterClass.VehicleMotionStates.newBuilder(); + vehicleMotionStates.setSpeed(vehicleState.getSpeed()); + } + if (vehicleState.hasAccel()) { + if (vehicleMotionStates == null) { + vehicleMotionStates = ChassisStatesOuterClass.VehicleMotionStates.newBuilder(); + } + //加速度 + vehicleMotionStates.setAcceleration(vehicleState.getAccel());//鹰眼已用 + } + if (vehicleMotionStates != null) { + builder.setVehicleMotionStates(vehicleMotionStates); + } + } + + /** + * 车身控制模块 + */ + private void setBCMSystemStates(ChassisStatesOuterClass.ChassisStates.Builder builder, VehicleStateOuterClass.VehicleState vehicleState) { + ChassisStatesOuterClass.BCMSystemStates.Builder bcmSystemStates = null; + if (vehicleState.hasLight()) { + bcmSystemStates = ChassisStatesOuterClass.BCMSystemStates.newBuilder(); + //转向灯数据 + bcmSystemStates.setTurnLightState(vehicleState.getLight());//鹰眼已用 + } + if (vehicleState.hasBrakeLightStatus()) { + if (bcmSystemStates == null) { + bcmSystemStates = ChassisStatesOuterClass.BCMSystemStates.newBuilder(); + } + //刹车灯数据 + bcmSystemStates.setBrakeLightState(vehicleState.getBrakeLightStatus() ? 1 : 0);//鹰眼已用 + } + if (vehicleState.hasHorn()) { + if (bcmSystemStates == null) { + bcmSystemStates = ChassisStatesOuterClass.BCMSystemStates.newBuilder(); + } + //鸣笛 + bcmSystemStates.setHornState(vehicleState.getHorn() ? 1 : 0); + } + if (vehicleState.hasHighbeam()) { + if (bcmSystemStates == null) { + bcmSystemStates = ChassisStatesOuterClass.BCMSystemStates.newBuilder(); + } + //远光灯 + bcmSystemStates.setHighbeamState(vehicleState.getHighbeam() ? 1 : 0); + } + if (vehicleState.hasLowbeam()) { + if (bcmSystemStates == null) { + bcmSystemStates = ChassisStatesOuterClass.BCMSystemStates.newBuilder(); + } + //近光灯 + bcmSystemStates.setLowbeamState(vehicleState.getLowbeam() ? 1 : 0); + } + if (vehicleState.hasFoglight()) { + if (bcmSystemStates == null) { + bcmSystemStates = ChassisStatesOuterClass.BCMSystemStates.newBuilder(); + } + //雾灯 新底盘分前后雾灯 老地盘只有一个 所以同时赋值 + bcmSystemStates.setFrontFoglightState(vehicleState.getFoglight() ? 1 : 0); + bcmSystemStates.setBackFoglightState(vehicleState.getFoglight() ? 1 : 0); + } + if (vehicleState.hasClearanceLamps()) { + if (bcmSystemStates == null) { + bcmSystemStates = ChassisStatesOuterClass.BCMSystemStates.newBuilder(); + } + //示廓灯 + bcmSystemStates.setClearanceLampsState(vehicleState.getClearanceLamps() ? 1 : 0); + } + if (vehicleState.hasWarnLight()) { + if (bcmSystemStates == null) { + bcmSystemStates = ChassisStatesOuterClass.BCMSystemStates.newBuilder(); + } + //报警灯 + bcmSystemStates.setAlarmLightState(vehicleState.getWarnLight() ? 1 : 0); + } + if (bcmSystemStates != null) { + builder.setBcmSystemStates(bcmSystemStates); + } + } } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/thread/DispatchHandler.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/thread/DispatchHandler.java index b33334ba03..0ed67b9cc9 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/thread/DispatchHandler.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/thread/DispatchHandler.java @@ -22,11 +22,16 @@ import mogo.telematics.pad.MessagePad; public class DispatchHandler { private final MessagePad.MessageType messageType; private final OnDispatchHandlerListener listener; + private static final int WHAT_DISPATCH = 999999; private HandlerThread mThread; private BaseHandler mBaseHandler; public interface OnDispatchHandlerListener { - void onDispatchRaw(MessagePad.MessageType name, RawData raw); + void onHandler(MessagePad.MessageType type, Handler handler); + + void onHandleMessage(MessagePad.MessageType type, Message msg); + + void onDispatchRaw(MessagePad.MessageType type, RawData raw); } @@ -35,6 +40,16 @@ public class DispatchHandler { this.messageType = messageType; } + public void start() { + if (mThread == null) { + String name = "Dispatch-" + messageType.name().replace("MsgType", ""); + mThread = new HandlerThread(name); + mThread.start(); + initHandler(mThread.getLooper()); + listener.onHandler(messageType, mBaseHandler); + } + } + public void stop() { if (mBaseHandler != null) { mBaseHandler.removeCallbacksAndMessages(null); @@ -47,14 +62,10 @@ public class DispatchHandler { } public void sendRawMessage(RawData raw) { - if (mThread == null) { - String name = "Dispatch-" + messageType.name().replace("MsgType", ""); - mThread = new HandlerThread(name); - mThread.start(); - initHandler(mThread.getLooper()); - } + start(); Message msg = Message.obtain(); msg.obj = raw; + msg.what = WHAT_DISPATCH; mBaseHandler.sendMessage(msg); } @@ -67,16 +78,19 @@ public class DispatchHandler { * @param msg */ protected void handleMessage(Message msg) { - //TODO 计算耗时 临时测试 - if (CupidLogUtils.isEnableLog()) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - if (mThread != null) { - MessageQueue queue = mThread.getLooper().getQueue(); - CupidLogUtils.i("TimeConsuming", mThread.getName() + " 当前消息队列是否处于空闲状态=" + queue.isIdle()); + if (msg.what == WHAT_DISPATCH) { + //TODO 计算耗时 临时测试 + if (CupidLogUtils.isEnableLog()) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (mThread != null) { + MessageQueue queue = mThread.getLooper().getQueue(); + CupidLogUtils.i("TimeConsuming", mThread.getName() + " 当前消息队列是否处于空闲状态=" + queue.isIdle()); + } } - - } - listener.onDispatchRaw(messageType, (RawData) msg.obj); + listener.onDispatchRaw(messageType, (RawData) msg.obj); + } else { + listener.onHandleMessage(messageType, msg); + } } /** From 4f4a337c1b067cb604a84f73dc1fa7c3f6ea65e2 Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Tue, 7 Feb 2023 18:07:42 +0800 Subject: [PATCH 12/81] =?UTF-8?q?[dev=5Frobotaxi-d-app-module=5F2132=5F221?= =?UTF-8?q?223=5F2.13.2]=20=E4=BC=98=E5=8C=96=E9=AD=94=E6=96=B9=E7=9A=84?= =?UTF-8?q?=E6=8C=89=E9=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/main/MainLauncherActivity.java | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java index 012b4f7f38..57da422786 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java @@ -10,10 +10,8 @@ import android.os.Bundle; import android.os.Handler; import android.os.Process; import android.text.TextUtils; -import android.util.Log; import android.view.KeyEvent; import android.widget.FrameLayout; - import androidx.annotation.Nullable; import com.alibaba.android.arouter.launcher.ARouter; @@ -25,7 +23,6 @@ import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider; import com.mogo.eagle.core.function.api.setting.IMoGoSkinModeChangeListener; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; -import com.mogo.eagle.core.function.call.hmi.CallerHmiManager; import com.mogo.eagle.core.function.call.setting.CallerSkinModeListenerManager; import com.mogo.eagle.core.function.hmi.R; import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; @@ -76,6 +73,11 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis private long pressEDownTime = 0; private long pressEUpTime = 0; + private int clickTime = 300; //单击 + private int clickTimeInterval = 330; + private int longPressTime = 670; + private int longPressTimeInterval = 700; + @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -219,7 +221,7 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis if (event.getAction() == KeyEvent.ACTION_DOWN) { pressADownTime = System.currentTimeMillis(); CallerLogger.INSTANCE.d(M_F + "MoFangManager", "dispatchKeyEvent A down pressADownTime = " + pressADownTime + "---" + (pressADownTime - startPressTime) + "----isCombinationKey = " + isCombinationKey + "--pressBDownTime = " + pressBDownTime); - if ((pressADownTime - startPressTime) > 360 && (pressADownTime - startPressTime) < 1300 && pressBDownTime > 0) { + if ((pressADownTime - startPressTime) > clickTimeInterval && (pressADownTime - startPressTime) < longPressTime && pressBDownTime > 0) { if (isShowToast) { ToastUtils.showShort("方块 A 按AB组合 +1 "); } @@ -228,7 +230,7 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis } if (isCombinationKey != 3 && isCombinationKey != 1) { - if ((pressADownTime - startPressTime) > 1320) { + if ((pressADownTime - startPressTime) > longPressTimeInterval) { if (isShowToast) { ToastUtils.showShort("方块 长按A -2 "); } @@ -239,7 +241,7 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis } else if (event.getAction() == KeyEvent.ACTION_UP) { pressAUpTime = System.currentTimeMillis(); CallerLogger.INSTANCE.d(M_F + "MoFangManager", "dispatchKeyEvent A up pressAUpTime = " + pressAUpTime + "---" + (pressAUpTime - startPressTime) + "--pressBDownTime = " + pressBDownTime); - if ((pressAUpTime - startPressTime) < 350 && isCombinationKey != 3) { + if ((pressAUpTime - startPressTime) < clickTime && isCombinationKey != 3) { isCombinationKey = 1; if (isShowToast) { ToastUtils.showShort("方块 单击A -1 "); @@ -260,7 +262,7 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis if (event.getAction() == KeyEvent.ACTION_DOWN) { pressBDownTime = System.currentTimeMillis(); CallerLogger.INSTANCE.d(M_F + "MoFangManager", "dispatchKeyEvent B down pressBDownTime = " + pressBDownTime + "--差-" + (pressBDownTime - startPressTime) + "---isCombinationKey = " + isCombinationKey + "--pressADownTime = " + pressADownTime); - if ((pressBDownTime - startPressTime) > 360 && (pressBDownTime - startPressTime) < 1300 && pressADownTime > 0) { + if ((pressBDownTime - startPressTime) > clickTimeInterval && (pressBDownTime - startPressTime) < longPressTime && pressADownTime > 0) { if (isShowToast) { ToastUtils.showShort("方块 B 按AB组合 +1 "); } @@ -268,7 +270,7 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis isCombinationKey = 3; } if (isCombinationKey != 3 && isCombinationKey != 1) { - if ((pressBDownTime - startPressTime) > 1320) { + if ((pressBDownTime - startPressTime) > longPressTimeInterval) { if (isShowToast) { ToastUtils.showShort("方块 长按B 无操作 "); } @@ -278,7 +280,7 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis } else if (event.getAction() == KeyEvent.ACTION_UP) { pressBUpTime = System.currentTimeMillis(); CallerLogger.INSTANCE.d(M_F + "MoFangManager", "dispatchKeyEvent B up pressBUpTime = " + pressBUpTime + "--差-" + (pressBUpTime - startPressTime) + "--pressADownTime = " + pressADownTime); - if ((pressBUpTime - startPressTime) < 350 && isCombinationKey != 3) { + if ((pressBUpTime - startPressTime) < clickTime && isCombinationKey != 3) { if (isShowToast) { ToastUtils.showShort("方块 单击B 0 "); } @@ -300,7 +302,7 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis if (event.getAction() == KeyEvent.ACTION_DOWN) { pressCDownTime = System.currentTimeMillis(); CallerLogger.INSTANCE.d(M_F + "MoFangManager", "dispatchKeyEvent 方块 长按C 无操作 time dif = " + (pressCDownTime - startPressTime)); - if ((pressCDownTime - startPressTime) > 1320) { + if ((pressCDownTime - startPressTime) > longPressTimeInterval) { if (isShowToast) { ToastUtils.showShort("方块 长按C 无操作 "); } @@ -309,7 +311,7 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis pressCUpTime = System.currentTimeMillis(); isPressEnd = false; CallerLogger.INSTANCE.d(M_F + "MoFangManager", "dispatchKeyEvent 方块 单击C ← 向左变道 time dif = " + (pressCUpTime - startPressTime)); - if ((pressCUpTime - startPressTime) < 350) { + if ((pressCUpTime - startPressTime) < clickTime) { if (isShowToast) { ToastUtils.showShort("方块 单击C ← 向左变道 "); } @@ -321,7 +323,7 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis if (event.getAction() == KeyEvent.ACTION_DOWN) { pressDDownTime = System.currentTimeMillis(); CallerLogger.INSTANCE.d(M_F + "MoFangManager", "dispatchKeyEvent 方块 长按D 无操作 time dif = " + (pressDDownTime - startPressTime)); - if ((pressDDownTime - startPressTime) > 1320) { + if ((pressDDownTime - startPressTime) > longPressTimeInterval) { if (isShowToast) { ToastUtils.showShort("方块 长按D 无操作 "); } @@ -330,7 +332,7 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis pressDUpTime = System.currentTimeMillis(); isPressEnd = false; CallerLogger.INSTANCE.d(M_F + "MoFangManager", "dispatchKeyEvent 方块 单击D → 向右变道 time dif = " + (pressDUpTime - startPressTime)); - if ((pressDUpTime - startPressTime) < 350) { + if ((pressDUpTime - startPressTime) < clickTime) { if (isShowToast) { ToastUtils.showShort("方块 单击D → 向右变道 "); } @@ -342,7 +344,7 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis if (event.getAction() == KeyEvent.ACTION_DOWN) { pressEDownTime = System.currentTimeMillis(); CallerLogger.INSTANCE.d(M_F + "MoFangManager", "dispatchKeyEvent 方块 长按E 鸣笛 time dif = " + (pressEDownTime - startPressTime)); - if ((pressEDownTime - startPressTime) > 1320) { + if ((pressEDownTime - startPressTime) > longPressTimeInterval) { if (isShowToast) { ToastUtils.showShort("方块 长按E 鸣笛 "); } @@ -362,7 +364,7 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis pressEUpTime = System.currentTimeMillis(); isPressEnd = false; CallerLogger.INSTANCE.d(M_F + "MoFangManager", "方块 单击E 开启自动驾驶 time dif = " + (pressEUpTime - startPressTime)); - if ((pressEUpTime - startPressTime) < 350) { + if ((pressEUpTime - startPressTime) < clickTime) { if (isShowToast) { ToastUtils.showShort("方块 单击E 开启自动驾驶 "); } From 044050a4e68d64922a2bae01fb1d161f315f4dca Mon Sep 17 00:00:00 2001 From: renwj Date: Tue, 7 Feb 2023 19:26:37 +0800 Subject: [PATCH 13/81] =?UTF-8?q?[2.14.0][build]=20=E6=89=93=E5=8C=85?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E9=97=AE=E9=A2=98=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 5c65028837..aef8e583f4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -58,9 +58,9 @@ if (!isAndroidTestBuild()) { crash_fix { enable true } - memory_leak { - enable true - } +// memory_leak { +// enable true +// } } } } From 87543b969678ce358c5d646f7338a8b1f6e48bcd Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Tue, 7 Feb 2023 20:15:48 +0800 Subject: [PATCH 14/81] =?UTF-8?q?[2.14.0]BadCase=E4=B8=89=E6=9C=9F-?= =?UTF-8?q?=E5=BD=95=E5=8C=85=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/och/taxi/ui/TaxiFragment.java | 6 + .../autopilot/MoGoAutopilotProvider.kt | 40 +- .../autopilot/adapter/MoGoAdasListenerImpl.kt | 5 +- .../badcase/BadCaseManager.kt | 24 +- .../badcase/biz/BadCaseManagerView.kt | 363 +++++++++++++++++- .../badcase/biz/BagUploadDialog.java | 39 +- .../badcase/biz/CaseListDialog.java | 5 + .../badcase/biz/CaseTopicListDialog.java | 5 + .../badcase/biz/InitiativeBadCaseWindow.kt | 32 +- .../badcase/biz/PassiveBadCaseWindow.kt | 14 + .../biz/adapter/BagManagerListAdapter.kt | 106 ++++- .../badcase/consts/BadCaseConfig.kt | 5 + .../src/main/res/drawable/progress_bar_ct.xml | 18 + .../res/drawable/progress_bar_drawable.xml | 31 ++ .../drawable/space_warning_progress_bg.xml | 38 ++ .../src/main/res/layout/dialog_bag_upload.xml | 7 +- .../main/res/layout/dialog_space_warning.xml | 7 +- .../src/main/res/layout/item_bag_manager.xml | 40 +- .../res/layout/layout_badcase_manager.xml | 16 +- .../core/function/hmi/ui/MoGoHmiFragment.kt | 40 ++ .../eagle/core/data/badcase/BagInfoEntity.kt | 20 +- .../core/data/badcase/BagManagerEntity.kt | 15 +- .../autopilot/IMoGoAutopilotRecordListener.kt | 6 + .../CallerAutopilotRecordListenerManager.kt | 12 + 24 files changed, 812 insertions(+), 82 deletions(-) create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/drawable/progress_bar_ct.xml create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/drawable/progress_bar_drawable.xml create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/drawable/space_warning_progress_bg.xml diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java index 2fb5dbf217..b712b1425f 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java @@ -36,6 +36,8 @@ import org.greenrobot.eventbus.ThreadMode; import java.lang.ref.WeakReference; import java.util.List; +import bag_manager.BagManagerOuterClass; + /** * @author congtaowang * @since 2021/1/18 @@ -438,6 +440,10 @@ public class TaxiFragment extends BaseTaxiTabFragment0){ + selectedBagSize = 0 + for(selectBagInfo in bagManagerEntity.bagsInfoResp){ + selectBagInfo.selectStatus = true + selectedBagSize += selectBagInfo.totalSize + bagManagerList.add(selectBagInfo) + } + selectedBagNum = bagManagerEntity.bagsInfoResp.size + //显示选择包的个数和大小 + tvSelectedBagSize.text = "已选${selectedBagNum}个包,共${selectedBagSize/(1000*1024*1024)}G" + tvSelectedBagSize.visibility = View.VISIBLE + bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) + } + } + //取消选中 + tvCancelSelect.setOnClickListener { + if(bagManagerEntity.bagsInfoResp.size>0){ + for(cancelBagInfo in bagManagerEntity.bagsInfoResp){ + cancelBagInfo.selectStatus = false + bagManagerList.remove(cancelBagInfo) + } + selectedBagNum = 0 + selectedBagSize = 0 + tvSelectedBagSize.visibility = View.GONE + bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) + } + } + + + //上传Cos桶 + tvUploadCloud.setOnClickListener { + if(bagManagerList.size>0){ + bagManagerEntity.reqType = 3 + bagManagerEntity.keyReq = bagManagerList[0].key + CallerAutoPilotManager.sendBagManagerCmd(bagManagerEntity) + + bagUploadDialog = BagUploadDialog(context) + bagUploadDialog?.setListener { //删除选择 + bagManagerList.clear() + if (bagManagerEntity.bagsInfoResp.size > 0) { + for (cancelBagInfo in bagManagerEntity.bagsInfoResp) { + cancelBagInfo.selectStatus = false + bagManagerList.remove(cancelBagInfo) + } + selectedBagNum = 0 + selectedBagSize = 0 + tvSelectedBagSize.visibility = View.GONE + bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) + } + } + bagUploadDialog?.setAllUpload(selectedBagNum,selectedBagSize) + bagUploadDialog?.show() + + }else{ + ToastUtils.showShort("请先选择要上传的Bag包") + } + + } + //删除Bag包 + tvDeleteSelect.setOnClickListener { + if(bagManagerList.size>0){ + bagManagerEntity.reqType = 4 + bagManagerEntity.keyReq = bagManagerList[0].key + CallerAutoPilotManager.sendBagManagerCmd(bagManagerEntity) + }else{ + ToastUtils.showShort("请先选择要删除的Bag包") + } + + } + + bagManagerListAdapter = BagManagerListAdapter() + bagManagerListAdapter?.setListener(object :BagManagerListAdapter.BagClickListener{ + override fun onClick(bagInfoEntity: BagInfoEntity, isChecked: Boolean) { + if(isChecked){ + bagInfoEntity.selectStatus = true + bagManagerList.add(bagInfoEntity) + selectedBagNum++ + selectedBagSize += bagInfoEntity.totalSize + tvSelectedBagSize.text = "已选${selectedBagNum}个包,共${selectedBagSize/(1000*1024*1024)}G" + tvSelectedBagSize.visibility = View.VISIBLE + }else{ + bagInfoEntity.selectStatus = false + bagManagerList.remove(bagInfoEntity) + selectedBagNum-- + selectedBagSize -= bagInfoEntity.totalSize + if(selectedBagNum == 0){ + tvSelectedBagSize.visibility = View.GONE + }else{ + tvSelectedBagSize.text = "已选${selectedBagNum}个包,共${selectedBagSize/(1000*1024*1024)}G" + tvSelectedBagSize.visibility = View.VISIBLE + } + } + + } + + override fun uploadBI(bagInfoEntity: BagInfoEntity) { + //展示上报弹窗 + val initiativeBadCaseWindow = InitiativeBadCaseWindow(context as Activity) + initiativeBadCaseWindow.setClickListener(object: InitiativeBadCaseWindow.ClickListener{ + override fun closeWindow() { + initiativeBadCaseWindow.hideFloatWindow() + } + }) + initiativeBadCaseWindow.showReportBIWindow(bagInfoEntity) + } + + override fun editDescription(key: Long, description: BagDescriptionEntity) { + //编辑Bag包描述信息 + bagManagerEntity.reqType = 5 + bagManagerEntity.keyReq = key + bagManagerEntity.descReq = description + CallerAutoPilotManager.sendBagManagerCmd(bagManagerEntity) + } + + override fun bagAudio(key: Long, audioUrl: String) { + DownloadManager.getInstance().init(context) + val downUrl = audioUrl.replace("http://petchfile-1255510688.cos.ap-beijing.myqcloud.com/","") + DownloadManager.getInstance().download(downUrl, + audioSavePath,"${key}.wav") + //延迟播放 + Handler().postDelayed({ + //音频文件播放 + Audition.getInstance().playOrStop("${audioSavePath}${key}.wav") + }, 1500) + } + + }) + val linearLayoutManager = LinearLayoutManager(context) + rvBagList.layoutManager = linearLayoutManager + rvBagList.adapter = bagManagerListAdapter //音频文件播放 // Audition.getInstance().playOrStop("/mnt/sdcard/mogo/test.wav") - - //音频下载 +// +// 音频下载 // DownloadManager.getInstance().init(context) // DownloadManager.getInstance().download("CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav", // "/mnt/sdcard/mogo/","test13.wav") + + val descriptionEntityOne = BagDescriptionEntity("包信息描述1",false, + "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",false) + val bagInfoEntityOne = BagInfoEntity() + bagInfoEntityOne.key = 12341 + bagInfoEntityOne.totalSize = 1*1024*1024*1000 + bagInfoEntityOne.timestamp = System.currentTimeMillis().toString() + bagInfoEntityOne.bagPath = "" + bagInfoEntityOne.mergeStat = false + bagInfoEntityOne.uploadStat = false + bagInfoEntityOne.description = descriptionEntityOne + + val descriptionEntityTwo = BagDescriptionEntity("包信息描述2",true, + "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",true) + val bagInfoEntityTwo = BagInfoEntity() + bagInfoEntityTwo.key = 12342 + bagInfoEntityTwo.totalSize = 2*1024*1024*1000 + bagInfoEntityTwo.timestamp = System.currentTimeMillis().toString() + bagInfoEntityTwo.bagPath = "" + bagInfoEntityTwo.mergeStat = false + bagInfoEntityTwo.uploadStat = false + bagInfoEntityTwo.description = descriptionEntityTwo + + val descriptionEntityThree = BagDescriptionEntity("包信息描述3",true, + "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",true) + val bagInfoEntityThree = BagInfoEntity() + bagInfoEntityThree.key = 12343 + bagInfoEntityThree.totalSize = 1*1024*1024*1000 + bagInfoEntityThree.timestamp = System.currentTimeMillis().toString() + bagInfoEntityThree.bagPath = "" + bagInfoEntityThree.mergeStat = false + bagInfoEntityThree.uploadStat = false + bagInfoEntityThree.description = descriptionEntityThree + + val descriptionEntityFour = BagDescriptionEntity("包信息描述1",true, + "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",true) + val bagInfoEntityFour = BagInfoEntity() + bagInfoEntityFour.key = 12344 + bagInfoEntityFour.totalSize = 10*1024*1024*1000L + bagInfoEntityFour.timestamp = System.currentTimeMillis().toString() + bagInfoEntityFour.bagPath = "" + bagInfoEntityFour.mergeStat = false + bagInfoEntityFour.uploadStat = false + bagInfoEntityFour.description = descriptionEntityFour + + bagManagerEntity.bagsInfoResp.add(bagInfoEntityOne) + bagManagerEntity.bagsInfoResp.add(bagInfoEntityTwo) + bagManagerEntity.bagsInfoResp.add(bagInfoEntityThree) + bagManagerEntity.bagsInfoResp.add(bagInfoEntityFour) + + bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) + } fun setOnClickListener(clickListener: ClickListener) { @@ -57,4 +272,146 @@ internal class BadCaseManagerView @JvmOverloads constructor( fun onClose() } + override fun onBagManagerResult(bagManager: BagManagerOuterClass.BagManager) { + super.onBagManagerResult(bagManager) + UiThreadHandler.post { + //获取空间使用信息 + if(bagManager.reqType == 1){ + //遍历各个主机的硬盘空间信息 + if(bagManager.spaceInfoRespCount>0){ + for(spaceInfo in bagManager.spaceInfoRespList){ + spaceInfo.diskSpaceInfo?.let { + spaceTotal += it.total + spaceUsed += it.used + spaceFree += it.free + } + } + //展示空间使用情况 + //已使用空间 + tvUsedSpaceContent.text = "${(spaceUsed/(1000*1024*1024L))}G" + //可使用空间 + tvFreeSpaceContent.text = "${(spaceFree/(1000*1024*1024L))}G" + //进度条展示空间 + pbSpacePercent.progress = (spaceUsed*100/spaceTotal).toInt() + } + } + //遍历所有bag + else if(bagManager.reqType == 2){ + if(bagManager.bagsInfoRespCount>0){ + for(bagInfo in bagManager.bagsInfoRespList){ + bagInfo?.let { + val descriptionEntity = BagDescriptionEntity(it.description.description,it.description.hasAudio,it.description.audioUrl,it.description.reportBI) + val bagInfoEntity = BagInfoEntity() + bagInfoEntity.key = it.key + bagInfoEntity.totalSize = it.totalSize + bagInfoEntity.timestamp = it.timestamp + bagInfoEntity.bagPath = it.bagPath + bagInfoEntity.mergeStat = it.mergeStat + bagInfoEntity.uploadStat = it.uploadStat + bagInfoEntity.description = descriptionEntity + for(subBag in it.subBagsList){ + val subBagEntity = SubBagEntity(subBag.key,subBag.host,subBag.size) + bagInfoEntity.subBags.add(subBagEntity) + } + bagManagerEntity.bagsInfoResp.add(bagInfoEntity) + } + } + //更新List + bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) + } + + // 开启定时查询速度 + Timer().schedule(timerTaskRefresh, Date(), 60*1000) + } + //上传Cos + else if(bagManager.reqType == 3){ + //此处应循环上传Cos + val uploadIterator = bagManagerEntity.bagsInfoResp.iterator() + while(uploadIterator.hasNext()){ + val uploadBagInfo = uploadIterator.next() + if(uploadBagInfo.key == bagManager.keyReq){ + bagManagerList.remove(uploadBagInfo) + if(bagManagerList.size>0){ + var remainSize = 0L + for(bagInfo in bagManagerList){ + remainSize += bagInfo.totalSize + } + bagUploadDialog?.updateRemainUpload(bagManagerList.size,remainSize) + //执行下一个上传Bag命令 + bagManagerEntity.reqType = 3 + bagManagerEntity.keyReq = bagManagerList[0].key + CallerAutoPilotManager.sendBagManagerCmd(bagManagerEntity) + } + } + } + } + //删除Bag + else if(bagManager.reqType == 4){ + //收到此回调就删除对应key的Bag + val iterator = bagManagerEntity.bagsInfoResp.iterator() + while(iterator.hasNext()){ + val deleteBagInfo = iterator.next() + if(deleteBagInfo.key == bagManager.keyReq){ + iterator.remove() +// bagManagerEntity.bagsInfoResp.remove(deleteBagInfo) + bagManagerList.remove(deleteBagInfo) + //更新列表 + bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) + if(bagManagerList.size>0){ + //继续执行删除命令 + bagManagerEntity.reqType = 4 + bagManagerEntity.keyReq = bagManagerList[0].key + CallerAutoPilotManager.sendBagManagerCmd(bagManagerEntity) + } + } + } + } + //修改bag附加信息 + else if(bagManager.reqType == 5){ + //更新Bag包上报状态 + for(bagInfo in bagManagerEntity.bagsInfoResp){ + if(bagInfo.key == bagManager.keyReq){ + bagInfo.description?.let { + it.reportBI = bagManager.descReq.reportBI + it.description = bagManager.descReq.description + it.hasAudio = bagManager.descReq.hasAudio + it.audioUrl = bagManager.descReq.audioUrl + } + //更新List + bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) + } + } + } + } + + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + CallerAutopilotRecordListenerManager.addListener(TAG, this) + bagManagerEntity.reqType = 2 + //遍历所有bag + CallerAutoPilotManager.sendBagManagerCmd(bagManagerEntity) + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + CallerAutopilotRecordListenerManager.removeListener(TAG) + try { + timerTaskRefresh.cancel() + } catch (e: Exception) { + e.printStackTrace() + } + } + + private val timerTaskRefresh = object : TimerTask() { + override fun run() { + UiThreadHandler.post { + //获取空间使用信息,每隔1分钟获取一次 + bagManagerEntity.reqType = 1 + CallerAutoPilotManager.sendBagManagerCmd(bagManagerEntity) + } + } + } + } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BagUploadDialog.java b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BagUploadDialog.java index edfad1faeb..52045bd0c4 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BagUploadDialog.java +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BagUploadDialog.java @@ -4,6 +4,7 @@ import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.view.WindowManager; +import android.widget.ProgressBar; import android.widget.TextView; import androidx.annotation.NonNull; @@ -20,6 +21,14 @@ public class BagUploadDialog extends Dialog { private TextView tvCancelUpload;//取消上传 private TextView tvCancel;//取消 private TextView tvUploadDetail;//上传详情 + private ProgressBar viewUploadProgress;//上传进度条 + + private int totalNum; + private Long totalSize; + private int remainNum; + private Long remainSize; + + private BagUploadListener uploadListener; public BagUploadDialog(@NonNull Context context) { super(context, R.style.bad_case_dialog); @@ -42,12 +51,16 @@ public class BagUploadDialog extends Dialog { tvCancelUpload = findViewById(R.id.tvCancelUpload); tvCancel = findViewById(R.id.tvCancel); tvUploadDetail = findViewById(R.id.tvUploadDetail); + viewUploadProgress = findViewById(R.id.viewUploadProgress); } private void initEvent(){ //取消上传 tvCancelUpload.setOnClickListener(v -> { - + if(uploadListener!=null){ + uploadListener.cancelUpload(); + } + dismiss(); }); //取消 tvCancel.setOnClickListener(v -> { @@ -64,4 +77,28 @@ public class BagUploadDialog extends Dialog { public void onDetachedFromWindow() { super.onDetachedFromWindow(); } + + public void setListener(BagUploadListener listener){ + uploadListener = listener; + } + + public void setAllUpload(int totalNum,Long totalSize){ + this.totalNum = totalNum; + this.totalSize = totalSize; + } + + public void updateRemainUpload(int remainNum,Long remainSize){ + this.remainNum = remainNum; + this.remainSize = remainSize; + //更新进度条和进度文字 + tvUploadDetail.setText("共计"+totalNum+"个包 ("+(totalSize/(1000*1024*1024L))+"G) 已上传"+(totalNum-remainNum)+"个包 (" + +((totalSize-remainSize)/(1000*1024*1024L))+"G) 剩余"+remainNum+"个包 ("+ (remainSize/(1000*1024*1024L))+"G)"); + viewUploadProgress.setProgress((totalNum-remainNum)*100/totalNum); + } + + interface BagUploadListener{ + //取消上传 + void cancelUpload(); + } + } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/CaseListDialog.java b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/CaseListDialog.java index 9756927f7f..7b35d26999 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/CaseListDialog.java +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/CaseListDialog.java @@ -20,6 +20,7 @@ import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig; import java.util.ArrayList; +import bag_manager.BagManagerOuterClass; import mogo.telematics.pad.MessagePad; import record_cache.RecordPanelOuterClass; @@ -116,4 +117,8 @@ public class CaseListDialog extends Dialog implements IMoGoAutopilotRecordListen caseListAdapter.notifyDataSetChanged(); }); } + + @Override + public void onBagManagerResult(@NonNull BagManagerOuterClass.BagManager bagManager) { + } } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/CaseTopicListDialog.java b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/CaseTopicListDialog.java index 08ad929554..9bc755aefa 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/CaseTopicListDialog.java +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/CaseTopicListDialog.java @@ -28,6 +28,7 @@ import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig; import java.util.ArrayList; import java.util.List; +import bag_manager.BagManagerOuterClass; import mogo.telematics.pad.MessagePad; import record_cache.RecordPanelOuterClass; @@ -203,4 +204,8 @@ public class CaseTopicListDialog extends Dialog implements IMoGoAutopilotRecordL @Override public void onAutopilotRecordResult(@NonNull RecordPanelOuterClass.RecordPanel recordPanel) { } + + @Override + public void onBagManagerResult(@NonNull BagManagerOuterClass.BagManager bagManager) { + } } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt index 50f692b8ba..c28171471a 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt @@ -13,6 +13,9 @@ import android.widget.ImageView import android.widget.TextView import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.eagle.core.data.app.AppConfigInfo +import com.mogo.eagle.core.data.badcase.BagDescriptionEntity +import com.mogo.eagle.core.data.badcase.BagInfoEntity +import com.mogo.eagle.core.data.badcase.BagManagerEntity import com.mogo.eagle.core.data.badcase.RecordCaseEntity import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotCarStateListener import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener @@ -89,6 +92,8 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList private var longitude: Double?=null private var latitude: Double?=null + private var bagManagerEntity: BagManagerEntity = BagManagerEntity() + private var mInViewX = 0f private var mInViewY = 0f private var mDownInScreenX = 0f @@ -285,7 +290,7 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList itx["filename"] = recordFileName?:"" //bag包文件地址 itx["filesize"] = "0" //bag包文件大小 itx["key"] = recordKey?:"" //key - itx["reason"] = uploadReason.toString()?:"" //采集原因 + itx["reason"] = uploadReason.toString() //采集原因 itx["duration"] = BadCaseConfig.totalDuration.toString() //采集时长,固定为20S itx["startTime"] = System.currentTimeMillis().toString() //上报时间(时间戳格式) itx["channel"] = "1" //渠道 @@ -301,6 +306,15 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList TipToast.shortTip("上报失败") } else { TipToast.shortTip("上报成功") + //将上报BI的结果同步给工控机记录保存 + recordKey?.let { + val hasAudio = downloadUrl != null + val descReqEntity = BagDescriptionEntity(uploadReason.toString(),hasAudio,downloadUrl.toString(),true) + bagManagerEntity.reqType = 5 + bagManagerEntity.keyReq = it.toLong() + bagManagerEntity.descReq = descReqEntity + CallerAutoPilotManager.sendBagManagerCmd(bagManagerEntity) + } BadCaseConfig.windowNum-- clickListener?.closeWindow() } @@ -351,6 +365,22 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList } } + fun showReportBIWindow(bagInfoEntity: BagInfoEntity){ + if (mFloatLayout.parent == null) { + val metrics = DisplayMetrics() + // 默认固定位置,靠屏幕右边缘的中间 + mWindowManager!!.defaultDisplay.getMetrics(metrics) + mWindowParams!!.x = metrics.widthPixels + mWindowParams!!.y = metrics.heightPixels - BarUtils.getStatusBarHeight()-950 + mWindowManager!!.addView(mFloatLayout, mWindowParams) + //已经录包无需再次启动录包,只要将录包信息同步到弹窗 + bagInfoEntity.let { + recordKey = it.key.toString() + recordFileName = it.bagPath + } + } + } + fun hideFloatWindow() { //注销采集结果回调监听 CallerAutopilotRecordListenerManager.removeListener(this.hashCode().toString()) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/PassiveBadCaseWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/PassiveBadCaseWindow.kt index cfb42c46b6..451465b1f1 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/PassiveBadCaseWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/PassiveBadCaseWindow.kt @@ -16,10 +16,13 @@ import android.widget.TextView import com.google.android.flexbox.FlexboxLayout import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.eagle.core.data.app.AppConfigInfo +import com.mogo.eagle.core.data.badcase.BagDescriptionEntity +import com.mogo.eagle.core.data.badcase.BagManagerEntity import com.mogo.eagle.core.data.msgbox.MsgBoxBean import com.mogo.eagle.core.data.msgbox.MsgCategory import com.mogo.eagle.core.data.msgbox.RecordBagMsg import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotCarStateListener +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotCarStatusListenerManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger @@ -61,6 +64,8 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene private var audioStatus = false private var audioFileName:String?=null //录音文件名称 + private var bagManagerEntity: BagManagerEntity = BagManagerEntity() + private var uploadReason: String = String() //上报原因,标签 private var recordKey: String?=null //录制bag包key private var recordFileName: String?=null //录制文件包名 @@ -265,6 +270,15 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene TipToast.shortTip("上报失败") } else { TipToast.shortTip("上报成功") + //将上报BI的结果同步给工控机记录保存 + recordKey?.let { + val hasAudio = downloadUrl != null + val descReqEntity = BagDescriptionEntity(uploadReason,hasAudio,downloadUrl.toString(),true) + bagManagerEntity.reqType = 5 + bagManagerEntity.keyReq = it.toLong() + bagManagerEntity.descReq = descReqEntity + CallerAutoPilotManager.sendBagManagerCmd(bagManagerEntity) + } BadCaseConfig.windowNum-- clickListener?.closeWindow() } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt index 2fb6b559c8..ae037f522d 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt @@ -1,5 +1,7 @@ package com.zhjt.mogo_core_function_devatools.badcase.biz.adapter +import android.text.Editable +import android.text.TextWatcher import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -7,7 +9,11 @@ import android.widget.CheckBox import android.widget.EditText import android.widget.ImageView import android.widget.TextView +import androidx.core.widget.addTextChangedListener import androidx.recyclerview.widget.RecyclerView +import com.mogo.eagle.core.data.badcase.BagDescriptionEntity +import com.mogo.eagle.core.data.badcase.BagInfoEntity +import com.mogo.eagle.core.utilcode.util.TimeUtils import com.zhjt.mogo_core_function_devatools.R import kotlinx.coroutines.NonDisposableHandle import kotlinx.coroutines.NonDisposableHandle.parent @@ -19,7 +25,13 @@ import kotlinx.coroutines.NonDisposableHandle.parent */ class BagManagerListAdapter: RecyclerView.Adapter() { - private var data:List ?= null + private var data:List ?= null + private var bagClickListener: BagClickListener ?= null + + fun setData(data: List?){ + this.data = data + notifyDataSetChanged() + } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BagManagerListHolder { val view = LayoutInflater.from(parent.context) @@ -28,7 +40,84 @@ class BagManagerListAdapter: RecyclerView.Adapter + bagClickListener?.onClick(bagInfoEntity,isChecked) + } + holder.etBagNameEdit.addTextChangedListener(object:TextWatcher{ + override fun beforeTextChanged( + s: CharSequence?, + start: Int, + count: Int, + after: Int + ) { + + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + + } + + override fun afterTextChanged(s: Editable?) { + bagInfoEntity.description?.let { desc-> + val descriptionStr = s.toString() + if(desc.description != descriptionStr){ + desc.description = descriptionStr + bagClickListener?.editDescription(bagInfoEntity.key,desc) + } + } + } + + }) + + bagInfoEntity.description?.let { des-> + if(des.reportBI){ + //已上报 + holder.tvBagReportStatus.text = "已上报" + holder.tvBagReportStatus.setBackgroundResource(R.drawable.bag_reported_button_bg) + }else{ + //未上报 + holder.tvBagReportStatus.text = "上报" + holder.tvBagReportStatus.setBackgroundResource(R.drawable.bag_report_button_bg) + holder.tvBagReportStatus.setOnClickListener { + bagClickListener?.uploadBI(bagInfoEntity) + } + } + if(des.description.isEmpty()){ + holder.etBagNameEdit.setText(bagInfoEntity.key.toString()) + }else{ + holder.etBagNameEdit.setText(des.description) + } + } + + + if(bagInfoEntity.description?.hasAudio == true){ + holder.ivBagAudio.visibility = View.VISIBLE + holder.ivBagAudio.setOnClickListener { + bagInfoEntity.description?.let { description-> + bagClickListener?.bagAudio(bagInfoEntity.key,description.audioUrl) + } + } + }else{ + holder.ivBagAudio.visibility = View.INVISIBLE + } + + holder.tvBagSize.text = "${bagInfoEntity.totalSize/(1000*1024*1024)}G" + holder.tvBagTime.text = + it[position].timestamp?.let { it1 -> TimeUtils.millis2String(it1.toLong(),TimeUtils.getHourMinSecondFormat()) } + + + } } override fun getItemCount() = data?.size ?: 0 @@ -42,4 +131,19 @@ class BagManagerListAdapter: RecyclerView.Adapter = ArrayList() + //Bag包管理列表 + @JvmField + var bagManagerList: ArrayList = ArrayList() } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/progress_bar_ct.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/progress_bar_ct.xml new file mode 100644 index 0000000000..e5075f161d --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/progress_bar_ct.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/progress_bar_drawable.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/progress_bar_drawable.xml new file mode 100644 index 0000000000..353d7da364 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/progress_bar_drawable.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/space_warning_progress_bg.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/space_warning_progress_bg.xml new file mode 100644 index 0000000000..645b1b3df2 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/space_warning_progress_bg.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_bag_upload.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_bag_upload.xml index 7af9702d7a..ac59ac7c64 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_bag_upload.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_bag_upload.xml @@ -66,7 +66,7 @@ android:gravity="center" /> - - + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_marginTop="18dp" + android:layout_marginBottom="18dp" + > \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/layout_badcase_manager.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/layout_badcase_manager.xml index 88e48b03c6..78c13df55d 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/layout_badcase_manager.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/layout_badcase_manager.xml @@ -51,7 +51,7 @@ android:layout_marginTop="100dp" android:progressDrawable="@drawable/space_percent_bg" android:max="100" - android:progress="30" + android:progress="10" /> @@ -104,7 +104,7 @@ android:layout_height="80dp" app:layout_constraintLeft_toLeftOf="@id/viewManagerTitleLine" app:layout_constraintTop_toBottomOf="@id/viewUsedSpace" - android:layout_marginTop="30dp" + android:layout_marginTop="50dp" android:background="@drawable/select_all_button_bg" android:text="一键全选" android:textColor="#FFFFFFFF" @@ -119,7 +119,7 @@ app:layout_constraintTop_toTopOf="@id/tvSelectAll" app:layout_constraintBottom_toBottomOf="@id/tvSelectAll" app:layout_constraintLeft_toRightOf="@id/tvSelectAll" - android:layout_marginStart="20dp" + android:layout_marginStart="30dp" android:background="@drawable/cancel_select_button_bg" android:text="取消" android:textColor="#FFFFFFFF" @@ -144,7 +144,7 @@ android:layout_height="120dp" app:layout_constraintLeft_toLeftOf="@id/pbSpacePercent" app:layout_constraintBottom_toBottomOf="parent" - android:layout_marginBottom="50dp" + android:layout_marginBottom="120dp" android:background="@drawable/upload_cloud_button_bg" android:text="上云" android:textColor="#FFFFFFFF" @@ -174,6 +174,8 @@ app:layout_constraintRight_toRightOf="@id/pbSpacePercent" app:layout_constraintTop_toBottomOf="@id/tvSelectAll" app:layout_constraintBottom_toTopOf="@id/tvUploadCloud" + android:layout_marginTop="20dp" + android:layout_marginBottom="20dp" /> \ 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/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt index 08656d1ff9..ff7c2dbe2a 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt @@ -19,12 +19,14 @@ import android.view.animation.* import android.widget.* import androidx.core.view.* import androidx.lifecycle.lifecycleScope +import bag_manager.BagManagerOuterClass import com.alibaba.android.arouter.facade.annotation.Route import com.alibaba.android.arouter.launcher.ARouter import com.mogo.commons.context.ContextHolderUtil import com.mogo.commons.mvp.BaseFragment import com.mogo.commons.mvp.MvpFragment import com.mogo.commons.voice.* +import com.mogo.eagle.core.data.badcase.BagManagerEntity import com.mogo.eagle.core.data.bindingcar.AdUpgradeStateHelper import com.mogo.eagle.core.data.bindingcar.IPCUpgradeStateInfo import com.mogo.eagle.core.data.camera.CameraEntity @@ -103,6 +105,7 @@ import com.mogo.eagle.core.utilcode.util.* import com.mogo.eagle.core.utilcode.util.TimeUtils import com.mogo.eagle.core.utilcode.util.TimeUtils.millis2String import com.zhidao.support.adas.high.common.MogoReport.Code.Error.EMAP.* +import com.zhjt.mogo_core_function_devatools.badcase.biz.SpaceWarningDialog import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig import com.zhjt.service_biz.BizConfig import kotlinx.android.synthetic.main.fragment_hmi.* @@ -183,6 +186,8 @@ class MoGoHmiFragment : MvpFragment(), private var busOperationStatus: IOchBusView? = null + private var bagManagerEntity: BagManagerEntity = BagManagerEntity() + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } @@ -313,6 +318,17 @@ class MoGoHmiFragment : MvpFragment(), setProxyTrafficLightView(viewTrafficLightVr) setProxyLimitingSpeedView(viewLimitingVelocity) setViewNotificationProvider(this) + + // 开启定时查询速度 + Timer().schedule(timerTaskRefresh, Date(), 60*1000) + } + + private val timerTaskRefresh = object : TimerTask() { + override fun run() { + //请求磁盘空间使用情况 + bagManagerEntity.reqType = 1 + CallerAutoPilotManager.sendBagManagerCmd(bagManagerEntity) + } } override fun getNotificationView(): IViewNotification? = @@ -381,10 +397,34 @@ class MoGoHmiFragment : MvpFragment(), } } + override fun onBagManagerResult(bagManager: BagManagerOuterClass.BagManager) { + super.onBagManagerResult(bagManager) + //判断磁盘是否已满,展示预警弹窗 + UiThreadHandler.post{ + bagManager.spaceInfoRespCount + if(bagManager.spaceInfoRespCount>0){ + for(spaceInfo in bagManager.spaceInfoRespList){ + for(bagSpaceInfo in spaceInfo.bagDirsSpaceInfoList){ + if(bagSpaceInfo.free == 0L){ + //磁盘空间已满 + val spaceWarningDialog = SpaceWarningDialog(requireContext()) + spaceWarningDialog.show() + } + } + } + } + } + } + override fun onDestroyView() { super.onDestroyView() CallerAutopilotRecordListenerManager.removeListener(TAG) CallerAutoPilotStatusListenerManager.removeListener(TAG) + try { + timerTaskRefresh.cancel() + } catch (e: Exception) { + e.printStackTrace() + } } diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagInfoEntity.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagInfoEntity.kt index 49af795a50..3af98f90a9 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagInfoEntity.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagInfoEntity.kt @@ -5,12 +5,14 @@ package com.mogo.eagle.core.data.badcase * @description 单个key值对应的包信息 * @since: 2023/2/1 */ -data class BagInfoEntity(var key: Long,// bag key值 - var totalSize: Long,// 所有子包或合并后的包的总大小 - var timestamp: String,// 时间戳 - var bagPath: String,// bag所在路径 - var mergeStat: Boolean,// 合并状态 - var uploadStat: Boolean,// 上传cos桶状态 - var description: BagDescriptionEntity,// 包描述信息 - var subBags: List // 子包信息 - ) \ No newline at end of file +class BagInfoEntity(){ + var key: Long = 0// bag key值 + var totalSize: Long = 0// 所有子包或合并后的包的总大小 + var timestamp: String ?= null// 时间戳 + var bagPath: String ?= null// bag所在路径 + var mergeStat: Boolean = false// 合并状态 + var uploadStat: Boolean = false// 上传cos桶状态 + var description: BagDescriptionEntity ?= null// 包描述信息 + var subBags: ArrayList =ArrayList()// 子包信息 + var selectStatus: Boolean = false //Bag包勾选状态,默认为未勾选 +} \ No newline at end of file diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagManagerEntity.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagManagerEntity.kt index 70359b0a93..21bf91c857 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagManagerEntity.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagManagerEntity.kt @@ -5,10 +5,11 @@ package com.mogo.eagle.core.data.badcase * @description 包管理请求 * @since: 2023/2/1 */ -data class BagManagerEntity(var reqType: Int,// 请求类型:0-invalid 1-获取空间使用信息 2-遍历所有bag 3-上传cos 4-删除bag 5-为bag添加附加信息 - var keyReq: Long,// 要操作的包的key值,发送请求且reqType=(3,4,5)时有效 - var descReq: BagDescriptionEntity,// 更新包附加信息,发送请求且reqType=5时有效 - var spaceInfoResp: List,// 空间使用信息,获取响应且reqType=1时有效 - var bagsInfoResp: List,// 包信息列表,获取响应且reqType=2时有效 - var uploadCosResp: UploadCosStatEntity //反馈上传cos桶结果,获取响应且reqType=3时有效 - ) \ No newline at end of file +class BagManagerEntity(){ + var reqType: Int = 1// 请求类型:0-invalid 1-获取空间使用信息 2-遍历所有bag 3-上传cos 4-删除bag 5-为bag添加附加信息 + var keyReq: Long =0// 要操作的包的key值,发送请求且reqType=(3,4,5)时有效 + var descReq: BagDescriptionEntity ?= null// 更新包附加信息,发送请求且reqType=5时有效 + var spaceInfoResp: List = ArrayList()// 空间使用信息,获取响应且reqType=1时有效 + val bagsInfoResp: MutableList = ArrayList()// 包信息列表,获取响应且reqType=2时有效 + var uploadCosResp: UploadCosStatEntity ?=null//反馈上传cos桶结果,获取响应且reqType=3时有效 +} \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotRecordListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotRecordListener.kt index e622e30726..4cca4b7e3d 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotRecordListener.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotRecordListener.kt @@ -1,5 +1,6 @@ package com.mogo.eagle.core.function.api.autopilot +import bag_manager.BagManagerOuterClass import mogo.telematics.pad.MessagePad import record_cache.RecordPanelOuterClass @@ -20,4 +21,9 @@ interface IMoGoAutopilotRecordListener { */ fun onAutopilotRecordConfig(config: MessagePad.RecordDataConfig){} + /** + * 录包任务管理应答 + */ + fun onBagManagerResult(bagManager: BagManagerOuterClass.BagManager){} + } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutopilotRecordListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutopilotRecordListenerManager.kt index b1280cb09a..1059c60836 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutopilotRecordListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutopilotRecordListenerManager.kt @@ -1,6 +1,7 @@ package com.mogo.eagle.core.function.call.autopilot import androidx.annotation.Nullable +import bag_manager.BagManagerOuterClass import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener import com.mogo.eagle.core.function.call.base.CallerBase import mogo.telematics.pad.MessagePad @@ -78,5 +79,16 @@ object CallerAutopilotRecordListenerManager : CallerBase() { } } + /** + * 录包任务管理应答 + */ + fun invokeBagManagerResult(bagManager: BagManagerOuterClass.BagManager){ + M_AUTOPILOT_RECORD_LISTENERS.forEach{ + val tag = it.key + val listener = it.value + listener.onBagManagerResult(bagManager) + } + } + } \ No newline at end of file From fbd15b4db06ee1755b72a1e84affcaae4c25bec3 Mon Sep 17 00:00:00 2001 From: zhongchao Date: Tue, 7 Feb 2023 21:08:34 +0800 Subject: [PATCH 15/81] [2.13.3] add func btn of roma style change --- .../och/bus/fragment/BaseBusTabFragment.java | 17 ++---- .../ui/TaxiPassengerBaseFragment.java | 8 +-- .../mogo/och/taxi/ui/BaseTaxiTabFragment.java | 8 +-- .../hmi/ui/setting/DebugSettingView.kt | 52 +++++++++++++------ .../main/res/layout/view_debug_setting.xml | 12 +++++ .../core/data/config/FunctionBuildConfig.kt | 9 ++++ 6 files changed, 72 insertions(+), 34 deletions(-) diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java index 5471b06c29..150b401a24 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java @@ -4,9 +4,7 @@ import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS import static com.mogo.och.bus.constant.BusConst.TIMER_START_AUTOPILOT_INTERVAL; import android.animation.ObjectAnimator; -import android.content.Intent; import android.os.Bundle; -import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -21,12 +19,9 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.constraintlayout.widget.Group; -import com.mogo.commons.AbsMogoApplication; -import com.mogo.commons.debug.DebugConfig; import com.mogo.commons.mvp.IView; import com.mogo.commons.mvp.MvpFragment; import com.mogo.commons.mvp.Presenter; -import com.mogo.commons.voice.AIAssist; import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.eagle.core.data.config.HmiBuildConfig; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener; @@ -39,24 +34,20 @@ import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager; import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager; import com.mogo.eagle.core.function.hmi.ui.widget.TrafficDataView; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.map.MogoMapUIController; -import com.mogo.map.MogoMarkerManager; import com.mogo.map.listener.IMogoMapListener; import com.mogo.map.uicontroller.VisualAngleMode; import com.mogo.module.common.MogoApisHandler; import com.mogo.eagle.core.utilcode.mogo.view.OnPreventFastClickListener; import com.mogo.och.bus.R; import com.mogo.och.bus.bean.BusRoutesResult; -import com.mogo.och.bus.constant.BusConst; import com.mogo.och.bus.model.BusOrderModel; import com.mogo.och.bus.util.BDRouteDataTestUtils; import com.mogo.och.bus.view.SlidePanelView; import com.mogo.och.common.module.utils.SoundPoolHelper; import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.ThreadMode; import java.util.Objects; @@ -143,14 +134,16 @@ public abstract class BaseBusTabFragment //切换地图的远近视图 if (MogoMapUIController.getInstance().getCurrentMapVisualAngle().isLongSight() || MogoMapUIController.getInstance().getCurrentMapVisualAngle().isRoma()) { - CallerVisualAngleManager.INSTANCE.updateLongSightLevel(false); + if(FunctionBuildConfig.isRomaMode){ + CallerVisualAngleManager.INSTANCE.updateLongSightLevel(false); + } Objects.requireNonNull(CallerMapUIServiceManager.INSTANCE.getMapUIController()).setLockMode(true); MogoMapUIController.getInstance().changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null); mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_medium); } else if (MogoMapUIController.getInstance().getCurrentMapVisualAngle().isMediumSight()) { - CallerVisualAngleManager.INSTANCE.updateLongSightLevel(true); if (FunctionBuildConfig.isRomaMode) { - MogoMapUIController.getInstance().setRomaMode(1); + CallerVisualAngleManager.INSTANCE.updateLongSightLevel(true); + MogoMapUIController.getInstance().setRomaMode(FunctionBuildConfig.romaModeStyle); } else { Objects.requireNonNull(CallerMapUIServiceManager.INSTANCE.getMapUIController()).setLockMode(false); MogoMapUIController.getInstance().changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null); diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java index be3d5debb4..0b0504f76e 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java @@ -130,14 +130,16 @@ public class TaxiPassengerBaseFragment extends MvpFragment + btnDrawFusion.setOnCheckedChangeListener { _, isChecked -> FunctionBuildConfig.isFusionColor = isChecked } @@ -587,7 +590,11 @@ class DebugSettingView @JvmOverloads constructor( // 演示模式 tbIsDemoMode.setOnCheckedChangeListener { _, _ -> FunctionBuildConfig.isDemoMode = !FunctionBuildConfig.isDemoMode - CallerHmiManager.updateStatusBarLeftView(FunctionBuildConfig.isDemoMode, "demoMode", DemoModeView(context)) + CallerHmiManager.updateStatusBarLeftView( + FunctionBuildConfig.isDemoMode, + "demoMode", + DemoModeView(context) + ) CallerAutoPilotManager.setDemoMode(FunctionBuildConfig.isDemoMode) if (!FunctionBuildConfig.isDemoMode) { //关闭美化模式时,通知工控机 @@ -645,7 +652,7 @@ class DebugSettingView @JvmOverloads constructor( } tbDrawRomaMode.isChecked = FunctionBuildConfig.isRomaMode - //云端感知绘制 + //漫游模式开启控制 tbDrawRomaMode.setOnCheckedChangeListener { _, isChecked -> FunctionBuildConfig.isRomaMode = isChecked if (!FunctionBuildConfig.isRomaMode) { @@ -653,6 +660,19 @@ class DebugSettingView @JvmOverloads constructor( } } + tbRomaModeStyle.isChecked = FunctionBuildConfig.romaModeStyle == 1 + //漫游模式选择 + tbRomaModeStyle.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + FunctionBuildConfig.romaModeStyle = 1 + } else { + FunctionBuildConfig.romaModeStyle = 0 + } + if (FunctionBuildConfig.romaModeStyle != 1) { + tbRomaModeStyle.isChecked = false + } + } + //重启工控机所有节点 btnIpcReboot.onClick { CallerAutoPilotManager.sendIpcReboot() @@ -1865,9 +1885,9 @@ class DebugSettingView @JvmOverloads constructor( mTrajectoryInfoSize = 0 mRouteInfoSize = 0 - if(FunctionBuildConfig.isDemoMode){ + if (FunctionBuildConfig.isDemoMode) { tbIsDemoMode.text = "关闭美化模式" - }else{ + } else { tbIsDemoMode.text = "开启美化模式" } @@ -1956,7 +1976,7 @@ class DebugSettingView @JvmOverloads constructor( when (type) { BIZ_BEAUTY_MODE -> { tbIsDemoMode.isClickable = !lock - val (left,top,right,bottom) = tbIsDemoMode.currentPadding() + val (left, top, right, bottom) = tbIsDemoMode.currentPadding() if (lock) { tbIsDemoMode.background = resources.getDrawable(R.drawable.radio_button_lock_background) @@ -1964,11 +1984,11 @@ class DebugSettingView @JvmOverloads constructor( tbIsDemoMode.background = resources.getDrawable(R.drawable.radio_button_normal_background_right) } - tbIsDemoMode.setPadding(left,top,right,bottom) + tbIsDemoMode.setPadding(left, top, right, bottom) } BIZ_RAIN_MODE -> { tbIsRainMode.isClickable = !lock - val (left,top,right,bottom) = tbIsRainMode.currentPadding() + val (left, top, right, bottom) = tbIsRainMode.currentPadding() if (lock) { tbIsRainMode.background = resources.getDrawable(R.drawable.radio_button_lock_background) @@ -1976,21 +1996,21 @@ class DebugSettingView @JvmOverloads constructor( tbIsRainMode.background = resources.getDrawable(R.drawable.radio_button_normal_background_right) } - tbIsRainMode.setPadding(left,top,right,bottom) + tbIsRainMode.setPadding(left, top, right, bottom) } BIZ_WARNING_UPLOAD -> { tbReportWarning.isClickable = !lock - val (left,top,right,bottom) = tbReportWarning.currentPadding() + val (left, top, right, bottom) = tbReportWarning.currentPadding() if (lock) { tbReportWarning.background = resources.getDrawable(R.drawable.radio_button_lock_background) } else { tbReportWarning.background = null } - tbReportWarning.setPadding(left,top,right,bottom) + tbReportWarning.setPadding(left, top, right, bottom) } BIZ_BAG_RECORD -> { - val (left,top,right,bottom) = btnRecordBag.currentPadding() + val (left, top, right, bottom) = btnRecordBag.currentPadding() if (lock) { btnRecordBag.isClickable = false btnRecordBag.background = @@ -2000,10 +2020,10 @@ class DebugSettingView @JvmOverloads constructor( btnRecordBag.requestFocus() btnRecordBag.background = null } - btnRecordBag.setPadding(left,top,right,bottom) + btnRecordBag.setPadding(left, top, right, bottom) } BIZ_FULL_LOG -> { - val (left,top,right,bottom) = tbLogCatch.currentPadding() + val (left, top, right, bottom) = tbLogCatch.currentPadding() if (lock) { tbLogCatch.isClickable = false tbLogCatch.background = @@ -2013,7 +2033,7 @@ class DebugSettingView @JvmOverloads constructor( tbLogCatch.requestFocus() tbLogCatch.background = null } - tbLogCatch.setPadding(left,top,right,bottom) + tbLogCatch.setPadding(left, top, right, bottom) } } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml index bef611254c..42d78ba369 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml @@ -278,6 +278,18 @@ android:textOn="关闭漫游模式" android:textSize="@dimen/dp_24" /> + + Date: Tue, 7 Feb 2023 22:52:34 +0800 Subject: [PATCH 16/81] [2.14.0] wait to finish --- .../core/function/v2x/LineUploadManager.kt | 75 +++++++++++++++++++ .../eagle/core/function/v2x/V2XProvider.kt | 9 ++- .../v2x/events/network/V2XRefreshModel.java | 2 +- .../function/v2x/road/V2XEventServiceApi.kt | 10 ++- .../eagle/core/data/v2x/LineUploadData.kt | 6 ++ 5 files changed, 98 insertions(+), 4 deletions(-) create mode 100644 core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/LineUploadManager.kt create mode 100644 core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/v2x/LineUploadData.kt diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/LineUploadManager.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/LineUploadManager.kt new file mode 100644 index 0000000000..9538562e7d --- /dev/null +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/LineUploadManager.kt @@ -0,0 +1,75 @@ +package com.mogo.eagle.core.function.v2x + +import android.content.Context +import com.mogo.cloud.passport.MoGoAiCloudClientConfig +import com.mogo.commons.constants.HostConst +import com.mogo.eagle.core.data.v2x.LineUploadData +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager +import com.mogo.eagle.core.function.v2x.events.network.V2XRefreshModel +import com.mogo.eagle.core.function.v2x.road.V2XEventServiceApi +import com.mogo.eagle.core.network.MoGoRetrofitFactory +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.Disposable +import io.reactivex.schedulers.Schedulers +import kotlin.properties.Delegates + +class LineUploadManager private constructor(context: Context) { + + companion object { + + private const val TAG = "LineUploadManager" + + @Volatile + private var lineUploadManager: LineUploadManager? = null + + @Synchronized + fun getInstance(context: Context): LineUploadManager? { + if (lineUploadManager == null) { + synchronized(V2XRefreshModel::class.java) { + if (lineUploadManager == null) { + lineUploadManager = LineUploadManager(context) + } + } + } + return lineUploadManager + } + } + + private var mContext: Context? = null + private var disposable: Disposable? = null + + init { + mContext = context + } + + private var lineId: Long? by Delegates.observable( + CallerAutoPilotStatusListenerManager + .getAutoPilotStatusInfo().autopilotControlParameters?.autoPilotLine?.lineId + ) { _, _, newValue -> + CallerLogger.d(TAG, " old line : $lineId , new line : $newValue") + lineId = newValue +// uploadLine() + } + + private fun uploadLine() { + lineId?.let { + val lineUploadData = LineUploadData(it, MoGoAiCloudClientConfig.getInstance().sn) + disposable = MoGoRetrofitFactory.getInstance(HostConst.getHost()) //todo 改域名 + .create(V2XEventServiceApi::class.java) + .uploadLineId(lineUploadData) + .retry(3) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { data -> + CallerLogger.d(TAG, " uploadLine : $data") + } + } + } + + fun onDestroy() { + mContext = null + disposable?.dispose() + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/V2XProvider.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/V2XProvider.kt index 460656b069..b2345e8b84 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/V2XProvider.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/V2XProvider.kt @@ -19,12 +19,17 @@ class V2XProvider : IV2XEventProvider { override val functionName: String get() = "V2XProvider" + + private var mContext:Context? = null + override fun init(context: Context) { + mContext = context CallerTrafficLightManager.getTrafficLightProvider().initTrafficLightServer(context) VipCarManager.INSTANCE.initServer(context) SpeedLimitDataManager.getInstance().start() TrafficLightDispatcher.INSTANCE.initServer(context) SpeedLimitDispatcher.INSTANCE.initLimit(context) + LineUploadManager.getInstance(context) if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode) && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { //不处理 @@ -47,7 +52,9 @@ class V2XProvider : IV2XEventProvider { } else { V2XEventManager.onDestroy() } - + mContext?.let { + LineUploadManager.getInstance(it)?.onDestroy() + } // RedLightWarningManager.INSTANCE.onDestroy() } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/network/V2XRefreshModel.java b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/network/V2XRefreshModel.java index 5f0d5a63e8..e2e061f259 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/network/V2XRefreshModel.java +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/network/V2XRefreshModel.java @@ -27,7 +27,7 @@ import okhttp3.RequestBody; public class V2XRefreshModel { private Context mContext; - private static V2XRefreshModel mV2XRefreshModel; + private static volatile V2XRefreshModel mV2XRefreshModel; private V2XRefreshModel() { } diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/road/V2XEventServiceApi.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/road/V2XEventServiceApi.kt index 5b73866375..e08ffaead1 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/road/V2XEventServiceApi.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/road/V2XEventServiceApi.kt @@ -1,11 +1,17 @@ package com.mogo.eagle.core.function.v2x.road +import com.mogo.eagle.core.data.BaseData +import com.mogo.eagle.core.data.v2x.LineUploadData import io.reactivex.Observable -import retrofit2.http.GET -import retrofit2.http.Query +import retrofit2.http.* interface V2XEventServiceApi { @GET("/eagleEye-mis/config/queryV2NInformation") fun queryAllV2XEventsByLineId(@Query("lineId") lineId: String, @Query("sn") sn: String): Observable + + @Headers("Content-type:application/json;charset=UTF-8" ) + @POST( "" ) + fun uploadLineId(@Body lineId: LineUploadData): Observable + } \ No newline at end of file diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/v2x/LineUploadData.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/v2x/LineUploadData.kt new file mode 100644 index 0000000000..8700029ed9 --- /dev/null +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/v2x/LineUploadData.kt @@ -0,0 +1,6 @@ +package com.mogo.eagle.core.data.v2x + +/** + * 路线上报 + */ +data class LineUploadData(val lineId:Long,val sn:String) \ No newline at end of file From 0b40392b2527b14724eece124c0fdf199dd10f06 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Wed, 8 Feb 2023 14:53:37 +0800 Subject: [PATCH 17/81] =?UTF-8?q?[2.14.0]BadCase=E4=B8=89=E6=9C=9F-?= =?UTF-8?q?=E5=BD=95=E5=8C=85=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autopilot/MoGoAutopilotProvider.kt | 61 +++--- .../badcase/biz/BadCaseManagerView.kt | 190 +++++++++++------- .../badcase/biz/BagUploadDialog.java | 29 ++- .../badcase/biz/SpaceWarningDialog.java | 12 +- .../biz/adapter/BagManagerListAdapter.kt | 169 +++++++++------- .../res/drawable-xhdpi/icon_bag_audio.png | Bin 0 -> 1658 bytes .../src/main/res/drawable/icon_bag_edit.png | Bin 0 -> 926 bytes .../src/main/res/layout/dialog_bag_upload.xml | 6 +- .../src/main/res/layout/item_bag_manager.xml | 10 +- .../main/res/layout/item_bag_time_title.xml | 16 ++ .../res/layout/layout_badcase_manager.xml | 4 +- .../core/function/hmi/ui/MoGoHmiFragment.kt | 4 +- .../drawable-xhdpi/debug_icon_bag_manager.png | Bin 0 -> 17440 bytes .../main/res/layout/view_auto_pilot_check.xml | 3 +- .../eagle/core/data/badcase/BagInfoEntity.kt | 2 + 15 files changed, 304 insertions(+), 202 deletions(-) create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/drawable-xhdpi/icon_bag_audio.png create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_bag_edit.png create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_time_title.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/debug_icon_bag_manager.png diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt index f44ee28a01..c89509c59e 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt @@ -599,38 +599,39 @@ class MoGoAutopilotProvider : // 包信息列表,获取响应且reqType=2时有效 for(bagsInfoRespEntity in bagManagerEntity.bagsInfoResp){ - // 包描述信息 - val bagDescription = BagManagerOuterClass.BagDescription - .newBuilder() - - bagsInfoRespEntity.description?.let { - bagDescription.description = it.description - bagDescription.hasAudio = it.hasAudio - bagDescription.audioUrl = it.audioUrl - bagDescription.setReportBI(it.reportBI) - } - - val bagsInfoResp = BagManagerOuterClass.BagInfo - .newBuilder() - .setKey(bagsInfoRespEntity.key) - .setTotalSize(bagsInfoRespEntity.totalSize) - .setTimestamp(bagsInfoRespEntity.timestamp) - .setBagPath(bagsInfoRespEntity.bagPath) - .setMergeStat(bagsInfoRespEntity.mergeStat) - .setUploadStat(bagsInfoRespEntity.uploadStat) - .setDescription(bagDescription.build()) - - // 子包信息 - for(subBagEntity in bagsInfoRespEntity.subBags){ - val subBag = BagManagerOuterClass.SubBag + if(bagsInfoRespEntity.itemType == 0){ + // 包描述信息 + val bagDescription = BagManagerOuterClass.BagDescription .newBuilder() - .setKey(subBagEntity.key) - .setHost(subBagEntity.host) - .setSize(subBagEntity.size) - .build() - bagsInfoResp.addSubBags(subBag) + bagsInfoRespEntity.description?.let { + bagDescription.description = it.description + bagDescription.hasAudio = it.hasAudio + bagDescription.audioUrl = it.audioUrl + bagDescription.setReportBI(it.reportBI) + } + + val bagsInfoResp = BagManagerOuterClass.BagInfo + .newBuilder() + .setKey(bagsInfoRespEntity.key) + .setTotalSize(bagsInfoRespEntity.totalSize) + .setTimestamp(bagsInfoRespEntity.timestamp) + .setBagPath(bagsInfoRespEntity.bagPath) + .setMergeStat(bagsInfoRespEntity.mergeStat) + .setUploadStat(bagsInfoRespEntity.uploadStat) + .setDescription(bagDescription.build()) + + // 子包信息 + for(subBagEntity in bagsInfoRespEntity.subBags){ + val subBag = BagManagerOuterClass.SubBag + .newBuilder() + .setKey(subBagEntity.key) + .setHost(subBagEntity.host) + .setSize(subBagEntity.size) + .build() + bagsInfoResp.addSubBags(subBag) + } + bagManager.addBagsInfoResp(bagsInfoResp) } - bagManager.addBagsInfoResp(bagsInfoResp) } //反馈上传cos桶结果,获取响应且reqType=3时有效 diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt index ffca422d84..79e5aaa59e 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt @@ -6,7 +6,6 @@ import android.graphics.Color import android.graphics.drawable.ColorDrawable import android.os.Handler import android.util.AttributeSet -import android.util.Log import android.view.LayoutInflater import android.view.View import androidx.constraintlayout.widget.ConstraintLayout @@ -75,11 +74,13 @@ internal class BadCaseManagerView @JvmOverloads constructor( if(bagManagerEntity.bagsInfoResp.size>0){ selectedBagSize = 0 for(selectBagInfo in bagManagerEntity.bagsInfoResp){ - selectBagInfo.selectStatus = true - selectedBagSize += selectBagInfo.totalSize - bagManagerList.add(selectBagInfo) + if(selectBagInfo.itemType == 0){ + selectBagInfo.selectStatus = true + selectedBagSize += selectBagInfo.totalSize + bagManagerList.add(selectBagInfo) + selectedBagNum++ + } } - selectedBagNum = bagManagerEntity.bagsInfoResp.size //显示选择包的个数和大小 tvSelectedBagSize.text = "已选${selectedBagNum}个包,共${selectedBagSize/(1000*1024*1024)}G" tvSelectedBagSize.visibility = View.VISIBLE @@ -109,12 +110,14 @@ internal class BadCaseManagerView @JvmOverloads constructor( CallerAutoPilotManager.sendBagManagerCmd(bagManagerEntity) bagUploadDialog = BagUploadDialog(context) - bagUploadDialog?.setListener { //删除选择 + bagUploadDialog?.setListener { //删除选择,取消上传 bagManagerList.clear() if (bagManagerEntity.bagsInfoResp.size > 0) { for (cancelBagInfo in bagManagerEntity.bagsInfoResp) { - cancelBagInfo.selectStatus = false - bagManagerList.remove(cancelBagInfo) + if(cancelBagInfo.itemType == 0){ + cancelBagInfo.selectStatus = false + bagManagerList.remove(cancelBagInfo) + } } selectedBagNum = 0 selectedBagSize = 0 @@ -122,9 +125,8 @@ internal class BadCaseManagerView @JvmOverloads constructor( bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) } } - bagUploadDialog?.setAllUpload(selectedBagNum,selectedBagSize) bagUploadDialog?.show() - + bagUploadDialog?.setAllUpload(selectedBagNum,selectedBagSize) }else{ ToastUtils.showShort("请先选择要上传的Bag包") } @@ -211,56 +213,78 @@ internal class BadCaseManagerView @JvmOverloads constructor( // DownloadManager.getInstance().download("CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav", // "/mnt/sdcard/mogo/","test13.wav") - val descriptionEntityOne = BagDescriptionEntity("包信息描述1",false, - "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",false) - val bagInfoEntityOne = BagInfoEntity() - bagInfoEntityOne.key = 12341 - bagInfoEntityOne.totalSize = 1*1024*1024*1000 - bagInfoEntityOne.timestamp = System.currentTimeMillis().toString() - bagInfoEntityOne.bagPath = "" - bagInfoEntityOne.mergeStat = false - bagInfoEntityOne.uploadStat = false - bagInfoEntityOne.description = descriptionEntityOne - - val descriptionEntityTwo = BagDescriptionEntity("包信息描述2",true, - "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",true) - val bagInfoEntityTwo = BagInfoEntity() - bagInfoEntityTwo.key = 12342 - bagInfoEntityTwo.totalSize = 2*1024*1024*1000 - bagInfoEntityTwo.timestamp = System.currentTimeMillis().toString() - bagInfoEntityTwo.bagPath = "" - bagInfoEntityTwo.mergeStat = false - bagInfoEntityTwo.uploadStat = false - bagInfoEntityTwo.description = descriptionEntityTwo - - val descriptionEntityThree = BagDescriptionEntity("包信息描述3",true, - "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",true) - val bagInfoEntityThree = BagInfoEntity() - bagInfoEntityThree.key = 12343 - bagInfoEntityThree.totalSize = 1*1024*1024*1000 - bagInfoEntityThree.timestamp = System.currentTimeMillis().toString() - bagInfoEntityThree.bagPath = "" - bagInfoEntityThree.mergeStat = false - bagInfoEntityThree.uploadStat = false - bagInfoEntityThree.description = descriptionEntityThree - - val descriptionEntityFour = BagDescriptionEntity("包信息描述1",true, - "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",true) - val bagInfoEntityFour = BagInfoEntity() - bagInfoEntityFour.key = 12344 - bagInfoEntityFour.totalSize = 10*1024*1024*1000L - bagInfoEntityFour.timestamp = System.currentTimeMillis().toString() - bagInfoEntityFour.bagPath = "" - bagInfoEntityFour.mergeStat = false - bagInfoEntityFour.uploadStat = false - bagInfoEntityFour.description = descriptionEntityFour - - bagManagerEntity.bagsInfoResp.add(bagInfoEntityOne) - bagManagerEntity.bagsInfoResp.add(bagInfoEntityTwo) - bagManagerEntity.bagsInfoResp.add(bagInfoEntityThree) - bagManagerEntity.bagsInfoResp.add(bagInfoEntityFour) - - bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) +// val descriptionEntityOne = BagDescriptionEntity("包信息描述1",false, +// "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",false) +// val bagInfoEntityOne = BagInfoEntity() +// bagInfoEntityOne.key = 12341 +// bagInfoEntityOne.totalSize = 1*1024*1024*1000 +// bagInfoEntityOne.timestamp = "20230208125414" +// bagInfoEntityOne.bagPath = "" +// bagInfoEntityOne.mergeStat = false +// bagInfoEntityOne.uploadStat = false +// bagInfoEntityOne.description = descriptionEntityOne +// +// val descriptionEntityTwo = BagDescriptionEntity("包信息描述2",true, +// "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",true) +// val bagInfoEntityTwo = BagInfoEntity() +// bagInfoEntityTwo.key = 12342 +// bagInfoEntityTwo.totalSize = 2*1024*1024*1000 +// bagInfoEntityTwo.timestamp = "20230208125414" +// bagInfoEntityTwo.bagPath = "" +// bagInfoEntityTwo.mergeStat = false +// bagInfoEntityTwo.uploadStat = false +// bagInfoEntityTwo.description = descriptionEntityTwo +// +// val descriptionEntityThree = BagDescriptionEntity("包信息描述3",true, +// "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",true) +// val bagInfoEntityThree = BagInfoEntity() +// bagInfoEntityThree.key = 12343 +// bagInfoEntityThree.totalSize = 1*1027*1000 +// bagInfoEntityThree.timestamp = "20230208125414" +// bagInfoEntityThree.bagPath = "" +// bagInfoEntityThree.mergeStat = false +// bagInfoEntityThree.uploadStat = false +// bagInfoEntityThree.description = descriptionEntityThree +// +// val descriptionEntityFour = BagDescriptionEntity("包信息描述4",true, +// "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",true) +// val bagInfoEntityFour = BagInfoEntity() +// bagInfoEntityFour.key = 12344 +// bagInfoEntityFour.totalSize = 10*1024*1024*1000L +// bagInfoEntityFour.timestamp = "20230208125414" +// bagInfoEntityFour.bagPath = "" +// bagInfoEntityFour.mergeStat = false +// bagInfoEntityFour.uploadStat = false +// bagInfoEntityFour.description = descriptionEntityFour +// +// val list: MutableList = ArrayList() +// list.add(bagInfoEntityOne) +// list.add(bagInfoEntityTwo) +// list.add(bagInfoEntityThree) +// list.add(bagInfoEntityFour) +// for(entity in list){ +// entity.timestamp?.let { +// val month = it.substring(4,6) +// val day = it.substring(6,8) +// val time = "${month}月${day}日" +// var containTime = false +// for(bag in bagManagerEntity.bagsInfoResp){ +// if(bag.timeStr == time){ +// containTime = true +// } +// } +// if(!containTime || bagManagerEntity.bagsInfoResp.size ==0){ +// //增加时间的 +// val bagInfoEntity = BagInfoEntity() +// bagInfoEntity.itemType = 1 +// bagInfoEntity.timeStr = time +// bagManagerEntity.bagsInfoResp.add(bagInfoEntity) +// } +// bagManagerEntity.bagsInfoResp.add(entity) +// } +// } +// +// bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) } @@ -300,20 +324,40 @@ internal class BadCaseManagerView @JvmOverloads constructor( if(bagManager.bagsInfoRespCount>0){ for(bagInfo in bagManager.bagsInfoRespList){ bagInfo?.let { - val descriptionEntity = BagDescriptionEntity(it.description.description,it.description.hasAudio,it.description.audioUrl,it.description.reportBI) - val bagInfoEntity = BagInfoEntity() - bagInfoEntity.key = it.key - bagInfoEntity.totalSize = it.totalSize - bagInfoEntity.timestamp = it.timestamp - bagInfoEntity.bagPath = it.bagPath - bagInfoEntity.mergeStat = it.mergeStat - bagInfoEntity.uploadStat = it.uploadStat - bagInfoEntity.description = descriptionEntity - for(subBag in it.subBagsList){ - val subBagEntity = SubBagEntity(subBag.key,subBag.host,subBag.size) - bagInfoEntity.subBags.add(subBagEntity) + it.timestamp?.let { time -> + val descriptionEntity = BagDescriptionEntity(it.description.description,it.description.hasAudio,it.description.audioUrl,it.description.reportBI) + val bagInfoEntity = BagInfoEntity() + bagInfoEntity.key = it.key + bagInfoEntity.totalSize = it.totalSize + bagInfoEntity.timestamp = it.timestamp + bagInfoEntity.bagPath = it.bagPath + bagInfoEntity.mergeStat = it.mergeStat + bagInfoEntity.uploadStat = it.uploadStat + bagInfoEntity.description = descriptionEntity + for(subBag in it.subBagsList){ + val subBagEntity = SubBagEntity(subBag.key,subBag.host,subBag.size) + bagInfoEntity.subBags.add(subBagEntity) + } + + val month = time.substring(4,6) + val day = time.substring(6,8) + val time = "${month}月${day}日" + var containTime = false + for(bag in bagManagerEntity.bagsInfoResp){ + if(bag.timeStr == time){ + containTime = true + } + } + if(!containTime || bagManagerEntity.bagsInfoResp.size ==0){ + //增加时间的 + val bagInfoEntity = BagInfoEntity() + bagInfoEntity.itemType = 1 + bagInfoEntity.timeStr = time + bagManagerEntity.bagsInfoResp.add(bagInfoEntity) + } + + bagManagerEntity.bagsInfoResp.add(bagInfoEntity) } - bagManagerEntity.bagsInfoResp.add(bagInfoEntity) } } //更新List diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BagUploadDialog.java b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BagUploadDialog.java index 52045bd0c4..95154416e3 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BagUploadDialog.java +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BagUploadDialog.java @@ -1,5 +1,6 @@ package com.zhjt.mogo_core_function_devatools.badcase.biz; +import android.annotation.SuppressLint; import android.app.Dialog; import android.content.Context; import android.os.Bundle; @@ -11,6 +12,8 @@ import androidx.annotation.NonNull; import com.zhjt.mogo_core_function_devatools.R; +import java.text.DecimalFormat; + /** * @author XuXinChao * @description Bag包上传进度展示弹窗 @@ -23,12 +26,13 @@ public class BagUploadDialog extends Dialog { private TextView tvUploadDetail;//上传详情 private ProgressBar viewUploadProgress;//上传进度条 - private int totalNum; - private Long totalSize; - private int remainNum; - private Long remainSize; + private int totalNum = 0; + private Long totalSize = 0L; + private int remainNum = 0; + private Long remainSize = 0L; private BagUploadListener uploadListener; + private DecimalFormat format = new DecimalFormat("0.0"); public BagUploadDialog(@NonNull Context context) { super(context, R.style.bad_case_dialog); @@ -82,17 +86,26 @@ public class BagUploadDialog extends Dialog { uploadListener = listener; } - public void setAllUpload(int totalNum,Long totalSize){ + @SuppressLint("SetTextI18n") + public void setAllUpload(int totalNum, Long totalSize){ this.totalNum = totalNum; this.totalSize = totalSize; + //更新进度条和进度文字 + String totalStr = format.format((totalSize/(1000*1024*1024.0))); + tvUploadDetail.setText("共计"+totalNum+"个包 ("+totalStr+"G) 已上传"+(0)+"个包 (" + +0+"G) 剩余"+totalNum+"个包 ("+ totalStr+"G)"); } - public void updateRemainUpload(int remainNum,Long remainSize){ + @SuppressLint("SetTextI18n") + public void updateRemainUpload(int remainNum, Long remainSize){ this.remainNum = remainNum; this.remainSize = remainSize; //更新进度条和进度文字 - tvUploadDetail.setText("共计"+totalNum+"个包 ("+(totalSize/(1000*1024*1024L))+"G) 已上传"+(totalNum-remainNum)+"个包 (" - +((totalSize-remainSize)/(1000*1024*1024L))+"G) 剩余"+remainNum+"个包 ("+ (remainSize/(1000*1024*1024L))+"G)"); + String updateTotalStr = format.format((totalSize/(1000*1024*1024.0))); + String updateUploadStr = format.format(((totalSize-remainSize)/(1000*1024*1024.0))); + String updateRemainStr = format.format((remainSize/(1000*1024*1024.0))); + tvUploadDetail.setText("共计"+totalNum+"个包 ("+updateTotalStr+"G) 已上传"+(totalNum-remainNum)+"个包 (" + +updateUploadStr+"G) 剩余"+remainNum+"个包 ("+ updateRemainStr +"G)"); viewUploadProgress.setProgress((totalNum-remainNum)*100/totalNum); } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/SpaceWarningDialog.java b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/SpaceWarningDialog.java index 68fb89106d..0b1656014a 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/SpaceWarningDialog.java +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/SpaceWarningDialog.java @@ -1,7 +1,7 @@ package com.zhjt.mogo_core_function_devatools.badcase.biz; +import android.app.Activity; import android.app.Dialog; -import android.content.Context; import android.os.Bundle; import android.view.WindowManager; import android.widget.TextView; @@ -20,9 +20,11 @@ public class SpaceWarningDialog extends Dialog { private TextView tvCleanDisk;//清理磁盘 private TextView tvCancel;//取消 + private Activity mActivity; - public SpaceWarningDialog(@NonNull Context context) { - super(context, R.style.bad_case_dialog); + public SpaceWarningDialog(@NonNull Activity activity) { + super(activity, R.style.bad_case_dialog); + mActivity = activity; } @Override @@ -47,7 +49,9 @@ public class SpaceWarningDialog extends Dialog { //清理磁盘 tvCleanDisk.setOnClickListener(v -> { //跳转录包管理页面 - CallerDevaToolsManager.INSTANCE.showBadCaseManagerView(getContext()); + if(mActivity!=null){ + CallerDevaToolsManager.INSTANCE.showBadCaseManagerView(mActivity); + } dismiss(); }); //取消 diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt index ae037f522d..a5bc9e11d0 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt @@ -9,119 +9,140 @@ import android.widget.CheckBox import android.widget.EditText import android.widget.ImageView import android.widget.TextView -import androidx.core.widget.addTextChangedListener import androidx.recyclerview.widget.RecyclerView import com.mogo.eagle.core.data.badcase.BagDescriptionEntity import com.mogo.eagle.core.data.badcase.BagInfoEntity -import com.mogo.eagle.core.utilcode.util.TimeUtils import com.zhjt.mogo_core_function_devatools.R -import kotlinx.coroutines.NonDisposableHandle -import kotlinx.coroutines.NonDisposableHandle.parent +import java.text.DecimalFormat /** * @author XuXinChao * @description Bag包管理列表适配器 * @since: 2022/12/19 */ -class BagManagerListAdapter: RecyclerView.Adapter() { +class BagManagerListAdapter: RecyclerView.Adapter() { private var data:List ?= null private var bagClickListener: BagClickListener ?= null + private val format = DecimalFormat("0.0") fun setData(data: List?){ this.data = data notifyDataSetChanged() } - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BagManagerListHolder { - val view = LayoutInflater.from(parent.context) - .inflate(R.layout.item_bag_manager, parent, false) - return BagManagerListHolder(view) + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + if(viewType == 1){ + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_bag_time_title,parent,false) + return BagTimeTitleHolder(view) + }else{ + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_bag_manager, parent, false) + return BagManagerListHolder(view) + } } - override fun onBindViewHolder(holder: BagManagerListHolder, position: Int) { - data?.let { - val bagInfoEntity = it[position] -// if(bagInfoEntity.description?.description.isNullOrEmpty()){ -// holder.cbBagSelect.text = bagInfoEntity.key.toString() -// }else{ -// holder.cbBagSelect.text = bagInfoEntity.description?.description -// } - holder.cbBagSelect.setOnCheckedChangeListener(null) - holder.cbBagSelect.isChecked = bagInfoEntity.selectStatus - holder.cbBagSelect.tag = bagInfoEntity - holder.cbBagSelect.setOnCheckedChangeListener { _, isChecked -> - bagClickListener?.onClick(bagInfoEntity,isChecked) + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + when(holder){ + is BagTimeTitleHolder ->{ + data?.let { + holder.tvBagTimeTitle.text = it[position].timeStr + } } + is BagManagerListHolder->{ + data?.let { + val bagInfoEntity = it[position] + holder.cbBagSelect.setOnCheckedChangeListener(null) + holder.cbBagSelect.isChecked = bagInfoEntity.selectStatus + holder.cbBagSelect.tag = bagInfoEntity + holder.cbBagSelect.setOnCheckedChangeListener { _, isChecked -> + bagClickListener?.onClick(bagInfoEntity,isChecked) + } - holder.etBagNameEdit.addTextChangedListener(object:TextWatcher{ - override fun beforeTextChanged( - s: CharSequence?, - start: Int, - count: Int, - after: Int - ) { + holder.etBagNameEdit.addTextChangedListener(object:TextWatcher{ + override fun beforeTextChanged( + s: CharSequence?, + start: Int, + count: Int, + after: Int + ) { - } + } - override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { - } + } - override fun afterTextChanged(s: Editable?) { - bagInfoEntity.description?.let { desc-> - val descriptionStr = s.toString() - if(desc.description != descriptionStr){ - desc.description = descriptionStr - bagClickListener?.editDescription(bagInfoEntity.key,desc) + override fun afterTextChanged(s: Editable?) { + bagInfoEntity.description?.let { desc-> + val descriptionStr = s.toString() + if(desc.description != descriptionStr){ + desc.description = descriptionStr + bagClickListener?.editDescription(bagInfoEntity.key,desc) + } + } + } + + }) + + bagInfoEntity.description?.let { des-> + if(des.reportBI){ + //已上报 + holder.tvBagReportStatus.text = "已上报" + holder.tvBagReportStatus.setBackgroundResource(R.drawable.bag_reported_button_bg) + }else{ + //未上报 + holder.tvBagReportStatus.text = "上报" + holder.tvBagReportStatus.setBackgroundResource(R.drawable.bag_report_button_bg) + holder.tvBagReportStatus.setOnClickListener { + bagClickListener?.uploadBI(bagInfoEntity) + } + } + if(des.description.isEmpty()){ + holder.etBagNameEdit.setText(bagInfoEntity.key.toString()) + }else{ + holder.etBagNameEdit.setText(des.description) } } - } - }) - bagInfoEntity.description?.let { des-> - if(des.reportBI){ - //已上报 - holder.tvBagReportStatus.text = "已上报" - holder.tvBagReportStatus.setBackgroundResource(R.drawable.bag_reported_button_bg) - }else{ - //未上报 - holder.tvBagReportStatus.text = "上报" - holder.tvBagReportStatus.setBackgroundResource(R.drawable.bag_report_button_bg) - holder.tvBagReportStatus.setOnClickListener { - bagClickListener?.uploadBI(bagInfoEntity) + if(bagInfoEntity.description?.hasAudio == true){ + holder.ivBagAudio.visibility = View.VISIBLE + holder.ivBagAudio.setOnClickListener { + bagInfoEntity.description?.let { description-> + bagClickListener?.bagAudio(bagInfoEntity.key,description.audioUrl) + } + } + }else{ + holder.ivBagAudio.visibility = View.INVISIBLE + } + //大小 + val bagSize = format.format(bagInfoEntity.totalSize/(1000*1024*1024.0)) + holder.tvBagSize.text = "${bagSize}G" + + //时间 + bagInfoEntity.timestamp?.let { time-> + val hour = time.substring(8,10) + val min = time.substring(10,12) + val second = time.substring(12,14) + holder.tvBagTime.text = "${hour}:${min}:${second}" } } - if(des.description.isEmpty()){ - holder.etBagNameEdit.setText(bagInfoEntity.key.toString()) - }else{ - holder.etBagNameEdit.setText(des.description) - } } - - - if(bagInfoEntity.description?.hasAudio == true){ - holder.ivBagAudio.visibility = View.VISIBLE - holder.ivBagAudio.setOnClickListener { - bagInfoEntity.description?.let { description-> - bagClickListener?.bagAudio(bagInfoEntity.key,description.audioUrl) - } - } - }else{ - holder.ivBagAudio.visibility = View.INVISIBLE - } - - holder.tvBagSize.text = "${bagInfoEntity.totalSize/(1000*1024*1024)}G" - holder.tvBagTime.text = - it[position].timestamp?.let { it1 -> TimeUtils.millis2String(it1.toLong(),TimeUtils.getHourMinSecondFormat()) } - - } } override fun getItemCount() = data?.size ?: 0 + override fun getItemViewType(position: Int): Int { + return data!![position].itemType + } + + class BagTimeTitleHolder(itemView: View): RecyclerView.ViewHolder(itemView){ + var tvBagTimeTitle: TextView = itemView.findViewById(R.id.tvBagTimeTitle) + } + class BagManagerListHolder(itemView: View) : RecyclerView.ViewHolder(itemView){ var cbBagSelect: CheckBox = itemView.findViewById(R.id.cbBagSelect) var etBagNameEdit: EditText = itemView.findViewById(R.id.etBagNameEdit) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable-xhdpi/icon_bag_audio.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable-xhdpi/icon_bag_audio.png new file mode 100644 index 0000000000000000000000000000000000000000..2959045ff30d8eae9d56d7b4a4279a7cf5a9ba42 GIT binary patch literal 1658 zcmV-=28H>FP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91ET97b1ONa40RR91EC2ui0Q_#}qW}N}SA`GeR^%0?HI5u*qa< z7-2woZ1O4yV?#E!ZnWzP>#qNQ+TQi9TX%1Fhwe}Qp2z<<-#zy~_x$HH2z?+)l7h%Q zi`YbLAWrsTiRyL4wQe?3d4RYgC@6?!5040_k$5|C9kEto8@4s}J7O9noA?;9Uc|n# zbq7vP4a9r(LfMTU_RS&HcOpmp`Ww3$MDH#hqiy6BhKOSpUK+{ZyTm3lh zZ_!pwp!q5L8<7hC>Smf8am+r}`%N!}Z!^ER4yQXm)v1(3PsH&C)Bcejp7`HA5G5rgVDUl|BErLP z|NaB)-g6jt?^+Z(DjF{^R-R$bXGf?o@T+pCz7cER-;BLKlw!?$TX5A}qtKr}X9hAS zjTe2@7q8*cl^Y7ViUwoMV!$R9%6?TkIyw+SF?#KKEjTl;JY9uPw|$59cBgE|3-77v z8KP}#wWH+M3R$M1Vq(As4F=t+@`4&NBmp0;Ux8ssuFrVM(Fz=|IH%Az&X|UT_*l_* zielMrZ&S!sGz<)wk2Shb?$eVoJ8wF8Q8YHS;FrUHDEy8wj6zDvNYU45X+e|aoSCT_X zu4#t(HO^bG23O2Ck&qCFx8HmjuPvJ=4>N37B1Q~P!kzjiSgmc~cx9kWAtAwtkBb)d z<`x@T0|3l3tmy=M_WTvp)ZT$aR!#KU4;}eavACk6BM}$B;kG%daCtyHaTnys6 z$UHiJ$~p$j_XesdeZm;5UA+WTGAE$m#XRgP`dGYbkAt)4F5~YTw?%Vs{2;`}xI%zC z_~Gn!SH{MGV`DpI9{XO(T8?2&fZ5@qg4xKQJ5%Hbp`ju27;W_Wzy1Co9PTtSZ`P9( z9-Z=*dp1~_U0()%5Pn-4NdT6UV=czvw9R^x)7gQIo4-L>d8Jqsqzmy489BeDPIGQ72Nv10bfKR(~FM^1Pq zKAuLpn)9t<#wq}iLp~|%LXdKRlgu4*UV6%7C*{av7r|o&&`p91S%$fp?(>+;v_zk44rwV!AGr~m)}07*qoM6N<$ Ef}msa`v3p{ literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_bag_edit.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_bag_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..09ffe565d777f8880887c16cb1f22af8aee20211 GIT binary patch literal 926 zcmV;P17ZA$P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91AfN*P1ONa40RR91AOHXW0IY^$^8f$?2uVaiR9Fecmq}<8K@^6klNgbp zsKot{gC2x{7lR-X#FH2zi6SV9pdg3{qKFGf@Zfd`UPKf@RFEKoh~OnIAPk5L4lV@I zgNJ|~H6}>ZaT&kA=T#`1nPGYnAN=#G-e2{o=H{{L39ClXX2mmi$&oZz%`5C`zHk;J{P>T zByzvN7Pmm!?FwRJnHPX)D;SbGHUbJ^tNetmqdgTowpbz40uY@6^f=2#!7?x%xY&2v zFM#YT=*+AD#HN9#K=uW!@V0yw{nsMQR7h9Iy9hqVq9aRE%$w%!0Tt!#57xsqHI zX|~((^p{vnI~K&g1WeM(224aN+wR1jCwA6&x&1CKPrt+C;uXL|t?ZH~u*(;>1gAaz zNCiGs0p~sOy%oeyc>J*_Zv`eR0O5X5{BTqpuFvE9qrB@gCVl}-(m~_?wv}h66O^Za zKtZ!JJ{N5>CQ$)hCjQa9ZoX|2$M3P2+yxLsllp!5LnH*TflQCzWi`yM;AIGU_&yjEc%yw^D^cB?x2mdtMvQ3#u8_L5D-A>^_73D& z?QkWrEMg5=h@{a_0Ywv-lSU}U+<7*($j*k>Ri9)X;5gT(1)uiQ%=9a|nM4m6qrBl! z+D+pBVdb}CE25VQ^zNR;=XtHgNWTEO!`1Wi2YsMk8!-a?0000007*qoM6N<$f(+h` ASO5S3 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_bag_upload.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_bag_upload.xml index ac59ac7c64..0f76ebdba2 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_bag_upload.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_bag_upload.xml @@ -73,10 +73,10 @@ app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" - android:layout_marginTop="275px" + android:layout_marginTop="270px" style="?android:attr/progressBarStyleHorizontal" android:max="100" - android:progress="40" + android:progress="0" android:progressDrawable="@drawable/progress_bar_drawable" /> @@ -87,7 +87,7 @@ app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" - android:layout_marginTop="378px" + android:layout_marginTop="370px" android:textColor="#FF06D1ED" android:textSize="43px" android:gravity="center" diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_manager.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_manager.xml index feb1231767..eb969081db 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_manager.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_manager.xml @@ -26,9 +26,9 @@ app:layout_constraintLeft_toRightOf="@id/cbBagSelect" app:layout_constraintRight_toLeftOf="@id/tvBagTime" android:layout_marginStart="15dp" - android:layout_marginEnd="20dp" + android:layout_marginEnd="30dp" android:background="@null" - android:drawableEnd="@drawable/icon_dev_status_un_fold" + android:drawableEnd="@drawable/icon_bag_edit" android:textColor="#FFFFFFFF" android:textSize="32dp" android:maxLines="1" @@ -57,9 +57,9 @@ app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintRight_toLeftOf="@id/tvBagReportStatus" - android:src="@drawable/icon_dev_status_un_fold" + android:src="@drawable/icon_bag_audio" android:visibility="invisible" - android:layout_marginEnd="20dp" + android:layout_marginEnd="30dp" /> + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/layout_badcase_manager.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/layout_badcase_manager.xml index 78c13df55d..3db62e3e3f 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/layout_badcase_manager.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/layout_badcase_manager.xml @@ -174,8 +174,8 @@ app:layout_constraintRight_toRightOf="@id/pbSpacePercent" app:layout_constraintTop_toBottomOf="@id/tvSelectAll" app:layout_constraintBottom_toTopOf="@id/tvUploadCloud" - android:layout_marginTop="20dp" - android:layout_marginBottom="20dp" + android:layout_marginTop="30dp" + android:layout_marginBottom="30dp" /> \ 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/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt index ff7c2dbe2a..f8dd7bd27d 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt @@ -1,6 +1,7 @@ package com.mogo.eagle.core.function.hmi.ui import android.animation.Animator +import android.app.Activity import android.content.* import android.graphics.* import android.graphics.drawable.* @@ -401,13 +402,12 @@ class MoGoHmiFragment : MvpFragment(), super.onBagManagerResult(bagManager) //判断磁盘是否已满,展示预警弹窗 UiThreadHandler.post{ - bagManager.spaceInfoRespCount if(bagManager.spaceInfoRespCount>0){ for(spaceInfo in bagManager.spaceInfoRespList){ for(bagSpaceInfo in spaceInfo.bagDirsSpaceInfoList){ if(bagSpaceInfo.free == 0L){ //磁盘空间已满 - val spaceWarningDialog = SpaceWarningDialog(requireContext()) + val spaceWarningDialog = SpaceWarningDialog(context as Activity) spaceWarningDialog.show() } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/debug_icon_bag_manager.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/debug_icon_bag_manager.png new file mode 100644 index 0000000000000000000000000000000000000000..8dc2dff73f1e0769f569aaa51277933fffafa463 GIT binary patch literal 17440 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 + android:background="@drawable/debug_icon_bag_manager" + /> =ArrayList()// 子包信息 var selectStatus: Boolean = false //Bag包勾选状态,默认为未勾选 + var itemType: Int = 0 //0是正常Bag包,1为时间Title + var timeStr: String = "" } \ No newline at end of file From 61b81add48ab4f7c208dd70d489841f4269c00f0 Mon Sep 17 00:00:00 2001 From: zhongchao Date: Wed, 8 Feb 2023 16:03:21 +0800 Subject: [PATCH 18/81] [2.13.2-sop] fix bug of thread in visual and update map version --- .../eagle/core/function/call/map/CallerVisualAngleManager.kt | 1 + gradle.properties | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerVisualAngleManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerVisualAngleManager.kt index a3c5cd7144..a078973f73 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerVisualAngleManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerVisualAngleManager.kt @@ -242,6 +242,7 @@ object CallerVisualAngleManager { PriorityQueue() } + @Volatile private var mLevel:Boolean = false fun updateLongSightLevel(level:Boolean){ diff --git a/gradle.properties b/gradle.properties index 3e8a59fb97..ed28d6f760 100644 --- a/gradle.properties +++ b/gradle.properties @@ -85,7 +85,7 @@ MOGO_LOCATION_VERSION=1.4.3.32 MOGO_TELEMATIC_VERSION=1.4.3.32 ######## MogoAiCloudSDK Version ######## # 自研地图 -MAP_SDK_VERSION=2.9.0.14_test_06 +MAP_SDK_VERSION=2.10.0.2 MAP_SDK_OPERATION_VERSION=1.1.4.1 # websocket WEBSOCKET_VERSION=1.1.7 From 0d13d80aa5f1cbb1add7881af549f75225064471 Mon Sep 17 00:00:00 2001 From: zhongchao Date: Thu, 9 Feb 2023 15:06:21 +0800 Subject: [PATCH 19/81] [2.14.0] add func of line id upload --- .../passenger/model/BusPassengerModel.java | 5 ++ .../mogo/och/bus/presenter/BusPresenter.java | 5 ++ .../sweeper/presenter/SweeperPresenter.java | 5 ++ .../passenger/model/TaxiPassengerModel.java | 4 + .../com/mogo/och/taxi/model/TaxiModel.java | 5 ++ ZD_README/README_VersionHistory.md | 2 - .../com/mogo/launcher/stageone/APMStartup.kt | 3 - .../mogo/launcher/stageone/HttpDnsStartUp.kt | 2 +- config.gradle | 2 - .../dispatch/DispatchAutoPilotManager.java | 5 ++ .../mogo-core-function-hmi/build.gradle | 2 - .../hmi/ui/widget/SteeringWheelView.java | 5 ++ .../core/function/main/MainActivity.java | 5 ++ .../routeoverlay/MogoRouteOverlayManager.java | 5 ++ .../core/function/smp/SmallMapFragment.java | 5 ++ .../core/function/v2x/LineUploadManager.kt | 58 +++++++++----- .../eagle/core/function/v2x/V2XProvider.kt | 13 +++- .../function/v2x/road/V2XEventServiceApi.kt | 3 +- .../autopilot/IMoGoAutopilotStatusListener.kt | 7 +- .../CallerAutoPilotStatusListenerManager.kt | 14 ++++ .../com/mogo/commons/constants/HostConst.java | 1 + gradle.properties | 2 - modules.txt | 1 - settings.gradle | 2 - test/crashreport-bugly/.gitignore | 1 - test/crashreport-bugly/build.gradle | 67 ---------------- test/crashreport-bugly/consumer-rules.pro | 0 test/crashreport-bugly/gradle.properties | 3 - test/crashreport-bugly/proguard-rules.pro | 21 ----- .../src/main/AndroidManifest.xml | 5 -- .../bugly/BuglyCrashReportProvider.java | 76 ------------------ test/crashreport-upgrade/.gitignore | 1 - test/crashreport-upgrade/build.gradle | 63 --------------- test/crashreport-upgrade/consumer-rules.pro | 0 test/crashreport-upgrade/gradle.properties | 3 - test/crashreport-upgrade/proguard-rules.pro | 24 ------ .../src/main/AndroidManifest.xml | 22 ------ .../upgrade/UpgradeReportConstants.java | 15 ---- .../upgrade/UpgradeReportProvider.java | 78 ------------------- .../src/main/res/xml/provider_paths.xml | 7 -- 40 files changed, 121 insertions(+), 426 deletions(-) delete mode 100644 test/crashreport-bugly/.gitignore delete mode 100644 test/crashreport-bugly/build.gradle delete mode 100644 test/crashreport-bugly/consumer-rules.pro delete mode 100644 test/crashreport-bugly/gradle.properties delete mode 100644 test/crashreport-bugly/proguard-rules.pro delete mode 100644 test/crashreport-bugly/src/main/AndroidManifest.xml delete mode 100644 test/crashreport-bugly/src/main/java/com/mogo/test/crashreport/bugly/BuglyCrashReportProvider.java delete mode 100644 test/crashreport-upgrade/.gitignore delete mode 100644 test/crashreport-upgrade/build.gradle delete mode 100644 test/crashreport-upgrade/consumer-rules.pro delete mode 100644 test/crashreport-upgrade/gradle.properties delete mode 100644 test/crashreport-upgrade/proguard-rules.pro delete mode 100644 test/crashreport-upgrade/src/main/AndroidManifest.xml delete mode 100644 test/crashreport-upgrade/src/main/java/com/mogo/test/crashreport/upgrade/UpgradeReportConstants.java delete mode 100644 test/crashreport-upgrade/src/main/java/com/mogo/test/crashreport/upgrade/UpgradeReportProvider.java delete mode 100644 test/crashreport-upgrade/src/main/res/xml/provider_paths.xml diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java index 117ca80f85..46dd3a6b50 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java @@ -333,6 +333,11 @@ public class BusPassengerModel { private final IMoGoAutopilotStatusListener mGoAutopilotStatusListener = new IMoGoAutopilotStatusListener(){ + @Override + public void onAutopilotRouteLineId(long lineId) { + + } + @Override public void onAutopilotIpcConnectStatusChanged(int status, @Nullable String reason) { } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java index 3f09f3ab14..f657813645 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java @@ -267,6 +267,11 @@ public class BusPresenter extends Presenter onAutopilotStatusResponse(info); } + @Override + public void onAutopilotRouteLineId(long lineId) { + + } + @Override public void onAutopilotGuardian(MogoReportMsg.MogoReportMessage guardianInfo) { BusTrajectoryManager.getInstance().onAutopilotGuardian(guardianInfo); diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java index 6f3e5c5281..a00b559fe2 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java @@ -162,6 +162,11 @@ public class SweeperPresenter extends Presenter } + @Override + public void onAutopilotRouteLineId(long lineId) { + + } + @Override public void onAutopilotStatusResponse(@NotNull AutopilotStatusInfo autopilotStatusInfo) { if (autopilotStatusInfo == null) return; diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java index 37c153bc23..e185cc829f 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java @@ -498,6 +498,10 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback private final IMoGoAutopilotStatusListener mGoAutopilotStatusListener = new IMoGoAutopilotStatusListener(){ + @Override + public void onAutopilotRouteLineId(long lineId) { + + } @Override public void onAutopilotIpcConnectStatusChanged(int status, @Nullable String reason) { diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java index 1acf8e307c..cee492c584 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java @@ -1146,6 +1146,11 @@ public class TaxiModel { private final IMoGoAutopilotStatusListener mGoAutopilotStatusListener = new IMoGoAutopilotStatusListener() { + @Override + public void onAutopilotRouteLineId(long lineId) { + + } + @Override public void onAutopilotIpcConnectStatusChanged(int status, @Nullable String reason) { } diff --git a/ZD_README/README_VersionHistory.md b/ZD_README/README_VersionHistory.md index aa6e59dedd..73cb553140 100644 --- a/ZD_README/README_VersionHistory.md +++ b/ZD_README/README_VersionHistory.md @@ -79,9 +79,7 @@ skinsupportimpl : "com.mogo.skin:skin-support-impl:${MOGO_COMMONS_V skinsupportnoop : "com.mogo.skin:skin-support-noop:${MOGO_COMMONS_VERSION}", skinsupportlight : "com.mogo.skin:skin-light:${MOGO_COMMONS_VERSION}", crashreport : "com.mogo.test:crashreport:${MOGO_COMMONS_VERSION}", -crashreportbugly : "com.mogo.test:crashreport-bugly:${MOGO_COMMONS_VERSION}", crashreportnoop : "com.mogo.test:crashreport-noop:${MOGO_COMMONS_VERSION}", -crashreportupgrade : "com.mogo.test:crashreport-upgrade:${MOGO_COMMONS_VERSION}", skinsupportbase : "com.mogo.skin:skin-support-base:${MOGO_COMMONS_VERSION}", skinsupportappcompat : "com.mogo.skin:skin-support-appcompat:${MOGO_COMMONS_VERSION}", skinsupportcardview : "com.mogo.skin:skin-support-cardview:${MOGO_COMMONS_VERSION}", diff --git a/app/src/main/java/com/mogo/launcher/stageone/APMStartup.kt b/app/src/main/java/com/mogo/launcher/stageone/APMStartup.kt index b3a3d8345a..33d13a30a7 100644 --- a/app/src/main/java/com/mogo/launcher/stageone/APMStartup.kt +++ b/app/src/main/java/com/mogo/launcher/stageone/APMStartup.kt @@ -3,13 +3,10 @@ package com.mogo.launcher.stageone import android.content.Context import com.rousetime.android_startup.AndroidStartup import com.alibaba.android.arouter.launcher.ARouter -import com.mogo.test.crashreport.upgrade.UpgradeReportConstants import com.mogo.test.crashreport.CrashReportConstants class APMStartup : AndroidStartup() { override fun create(context: Context): Boolean? { - // bugly - ARouter.getInstance().build(UpgradeReportConstants.PATH).navigation() // apm ARouter.getInstance().build(CrashReportConstants.PATH).navigation() return true diff --git a/app/src/main/java/com/mogo/launcher/stageone/HttpDnsStartUp.kt b/app/src/main/java/com/mogo/launcher/stageone/HttpDnsStartUp.kt index dd5ef2f13b..13cc882668 100644 --- a/app/src/main/java/com/mogo/launcher/stageone/HttpDnsStartUp.kt +++ b/app/src/main/java/com/mogo/launcher/stageone/HttpDnsStartUp.kt @@ -113,7 +113,7 @@ class HttpDnsStartUp : AndroidStartup() { // 使用中台长链接 clientConfig.isUseOriginSocket = true // 设置是否输出网络日志 - clientConfig.isShowNetDebugLog = false + clientConfig.isShowNetDebugLog = true // 设置是否是直播推流的主播 clientConfig.isAnchor = true when (DebugConfig.getCarMachineType()) { diff --git a/config.gradle b/config.gradle index ee629f5b6b..2f1b8ba59f 100644 --- a/config.gradle +++ b/config.gradle @@ -149,10 +149,8 @@ ext { mogologlib : "com.mogo.module:module-loglib:${LOGLIB_VERSION}", kotlingradleplugin : "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlin_version}", crashreport : "com.mogo.test:crashreport:${CRASHREPORT_VERSION}", - crashreportbugly : "com.mogo.test:crashreport-bugly:${CRASHREPORT_BUGLY_VERSION}", crashreportapmbyte : "com.mogo.test:crashreport-apmbyte:${CRASHREPORT_APMBYTE_VERSION}", crashreportnoop : "com.mogo.test:crashreport-noop:${CRASHREPORT_NOOP_VERSION}", - crashreportupgrade : "com.mogo.test:crashreport-upgrade:${CRASHREPORT_UPGRADE_VERSION}", apm_insight : 'com.volcengine:apm_insight:1.4.9.cn-rc.5', apm_insight_crash : 'com.volcengine:apm_insight_crash:1.4.6-rc.14', cicle_indicator : 'me.relex:circleindicator:2.1.6', diff --git a/core/function-impl/mogo-core-function-dispatch/src/main/java/com/zhjt/dispatch/DispatchAutoPilotManager.java b/core/function-impl/mogo-core-function-dispatch/src/main/java/com/zhjt/dispatch/DispatchAutoPilotManager.java index 72a42c653c..7774d55b64 100644 --- a/core/function-impl/mogo-core-function-dispatch/src/main/java/com/zhjt/dispatch/DispatchAutoPilotManager.java +++ b/core/function-impl/mogo-core-function-dispatch/src/main/java/com/zhjt/dispatch/DispatchAutoPilotManager.java @@ -350,4 +350,9 @@ public class DispatchAutoPilotManager implements IMogoOnMessageListener implement } + @Override + public void onAutopilotRouteLineId(long lineId) { + + } + private void updateConnectInfoView(@NonNull AutopilotStatusInfo autoPilotStatusInfo) { if (!isFloatingLayerHidden) {// 遮罩层显示的时候 mConnAdapter.updateData(autoPilotStatusInfo); diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/MogoRouteOverlayManager.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/MogoRouteOverlayManager.java index 74ebc44c12..68c36320b3 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/MogoRouteOverlayManager.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/MogoRouteOverlayManager.java @@ -124,4 +124,9 @@ public class MogoRouteOverlayManager implements @Override public void onAutopilotStatusRespByQuery(@NonNull SystemStatusInfo.StatusInfo status) {} + + @Override + public void onAutopilotRouteLineId(long lineId) { + + } } diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapFragment.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapFragment.java index c8b5804dd4..5fe40afaf7 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapFragment.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapFragment.java @@ -196,4 +196,9 @@ public class SmallMapFragment extends BaseFragment public void onAutopilotStatusRespByQuery(@NonNull SystemStatusInfo.StatusInfo status) { } + + @Override + public void onAutopilotRouteLineId(long lineId) { + + } } diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/LineUploadManager.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/LineUploadManager.kt index 9538562e7d..9f70f2a4ff 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/LineUploadManager.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/LineUploadManager.kt @@ -1,20 +1,27 @@ package com.mogo.eagle.core.function.v2x import android.content.Context +import android.util.Log import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.commons.constants.HostConst +import com.mogo.commons.constants.HostConst.DATA_CENTER_HOST +import com.mogo.commons.debug.DebugConfig +import com.mogo.eagle.core.data.BaseResponse import com.mogo.eagle.core.data.v2x.LineUploadData +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.v2x.events.network.V2XRefreshModel import com.mogo.eagle.core.function.v2x.road.V2XEventServiceApi import com.mogo.eagle.core.network.MoGoRetrofitFactory +import com.mogo.eagle.core.network.apiCall +import com.mogo.eagle.core.network.request import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable import io.reactivex.schedulers.Schedulers import kotlin.properties.Delegates -class LineUploadManager private constructor(context: Context) { +class LineUploadManager private constructor(context: Context) : IMoGoAutopilotStatusListener { companion object { @@ -43,33 +50,44 @@ class LineUploadManager private constructor(context: Context) { mContext = context } - private var lineId: Long? by Delegates.observable( - CallerAutoPilotStatusListenerManager - .getAutoPilotStatusInfo().autopilotControlParameters?.autoPilotLine?.lineId - ) { _, _, newValue -> - CallerLogger.d(TAG, " old line : $lineId , new line : $newValue") - lineId = newValue -// uploadLine() + fun init(){ + Log.d("emArrow","LineUploadManager addListener") + CallerAutoPilotStatusListenerManager.addListener(TAG, this) } - private fun uploadLine() { - lineId?.let { - val lineUploadData = LineUploadData(it, MoGoAiCloudClientConfig.getInstance().sn) - disposable = MoGoRetrofitFactory.getInstance(HostConst.getHost()) //todo 改域名 - .create(V2XEventServiceApi::class.java) - .uploadLineId(lineUploadData) - .retry(3) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { data -> - CallerLogger.d(TAG, " uploadLine : $data") - } + private fun getHost(): String { + return when (DebugConfig.getNetMode()) { + DebugConfig.NET_MODE_DEV, DebugConfig.NET_MODE_QA -> "http://dzt-test.zhidaozhixing.com/" + DebugConfig.NET_MODE_RELEASE -> "http://dzt.zhidaozhixing.com/" + else -> "http://dzt.zhidaozhixing.com/" } } + override fun onAutopilotRouteLineId(lineId: Long) { + super.onAutopilotRouteLineId(lineId) + if (lineId > 0) { + uploadLine(lineId) + } + } + + private fun uploadLine(lineId: Long) { + val lineUploadData = LineUploadData(lineId, MoGoAiCloudClientConfig.getInstance().sn) + disposable = MoGoRetrofitFactory.getInstance(DATA_CENTER_HOST) + .create(V2XEventServiceApi::class.java) + .uploadLineId(lineUploadData) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe ({ data -> + Log.d("emArrow", " uploadLine : $data") + },{ + Log.d("emArrow", "e : ${it.message}") + }) + } + fun onDestroy() { mContext = null disposable?.dispose() + CallerAutoPilotStatusListenerManager.removeListener(TAG) } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/V2XProvider.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/V2XProvider.kt index b2345e8b84..db01053a32 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/V2XProvider.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/V2XProvider.kt @@ -29,7 +29,10 @@ class V2XProvider : IV2XEventProvider { SpeedLimitDataManager.getInstance().start() TrafficLightDispatcher.INSTANCE.initServer(context) SpeedLimitDispatcher.INSTANCE.initLimit(context) - LineUploadManager.getInstance(context) + + if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){ + LineUploadManager.getInstance(context)?.init() + } if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode) && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { //不处理 @@ -52,9 +55,13 @@ class V2XProvider : IV2XEventProvider { } else { V2XEventManager.onDestroy() } - mContext?.let { - LineUploadManager.getInstance(it)?.onDestroy() + + if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){ + mContext?.let { + LineUploadManager.getInstance(it)?.onDestroy() + } } + // RedLightWarningManager.INSTANCE.onDestroy() } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/road/V2XEventServiceApi.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/road/V2XEventServiceApi.kt index e08ffaead1..d24d0cdce1 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/road/V2XEventServiceApi.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/road/V2XEventServiceApi.kt @@ -1,6 +1,7 @@ package com.mogo.eagle.core.function.v2x.road import com.mogo.eagle.core.data.BaseData +import com.mogo.eagle.core.data.BaseResponse import com.mogo.eagle.core.data.v2x.LineUploadData import io.reactivex.Observable import retrofit2.http.* @@ -11,7 +12,7 @@ interface V2XEventServiceApi { fun queryAllV2XEventsByLineId(@Query("lineId") lineId: String, @Query("sn") sn: String): Observable @Headers("Content-type:application/json;charset=UTF-8" ) - @POST( "" ) + @POST( "/yycp-data-center-service/carTrack/receiveCarTrack/") fun uploadLineId(@Body lineId: LineUploadData): Observable } \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotStatusListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotStatusListener.kt index 73aa0a4baa..4bb3e99cfe 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotStatusListener.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotStatusListener.kt @@ -45,7 +45,12 @@ interface IMoGoAutopilotStatusListener { /** * 工控机主动查询 AdasManager#sendStatusQueryReq(),后会收到如下回调 */ - fun onAutopilotStatusRespByQuery(status: SystemStatusInfo.StatusInfo) { } + fun onAutopilotStatusRespByQuery(status: SystemStatusInfo.StatusInfo) {} + + /** + * 自动驾驶路线ID回调 + */ + fun onAutopilotRouteLineId(lineId: Long){} companion object { /** diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotStatusListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotStatusListenerManager.kt index 60056dc1a2..0e42e27b27 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotStatusListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotStatusListenerManager.kt @@ -1,15 +1,18 @@ package com.mogo.eagle.core.function.call.autopilot +import android.util.Log import androidx.annotation.Nullable import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.call.base.CallerBase +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.util.GsonUtils import mogo.telematics.pad.MessagePad import mogo_msg.MogoReportMsg import system_master.* import java.util.concurrent.ConcurrentHashMap +import kotlin.properties.Delegates /** * @author xiaoyuzhou @@ -22,6 +25,16 @@ object CallerAutoPilotStatusListenerManager : CallerBase() { @Volatile private var mAutopilotStatusInfo: AutopilotStatusInfo = AutopilotStatusInfo() + private var lineId: Long? by Delegates.observable(0) { _, _, newValue -> + if(newValue == null){ + return@observable + } + M_AUTOPILOT_STATUS_LISTENERS.forEach { + val listener = it.value + listener.onAutopilotRouteLineId(newValue) + } + } + // 存储所有注册了监听的对象,invokeXXXX进行遍历回调,将信息同步 private val M_AUTOPILOT_STATUS_LISTENERS: ConcurrentHashMap = ConcurrentHashMap() @@ -209,6 +222,7 @@ object CallerAutoPilotStatusListenerManager : CallerBase() { */ fun updateAutopilotControlParameters(autopilotControlParameters: AutopilotControlParameters? = null) { mAutopilotStatusInfo.autopilotControlParameters = autopilotControlParameters + lineId = autopilotControlParameters?.autoPilotLine?.lineId invokeAutoPilotStatus(mAutopilotStatusInfo) } } \ No newline at end of file diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/constants/HostConst.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/constants/HostConst.java index d4168cb1d5..42298f91dc 100644 --- a/foudations/mogo-commons/src/main/java/com/mogo/commons/constants/HostConst.java +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/constants/HostConst.java @@ -12,6 +12,7 @@ public class HostConst { public static final String CAMERA_STREAM_HOST = "http://dzt-smartTransportationAiCloud.zhidaozhixing.com"; public static final String OPEN_CAMERA_STREAM_HOST = "http://10.0.16.6:18080"; + public static final String DATA_CENTER_HOST = "http://dzt-data-center.zhidaozhixing.com"; public static final String CITY_HOST = "http://dzt-city.zhidaozhixing.com"; public static final String SOCKET_CENTER_DOMAIN = "socketRegion"; diff --git a/gradle.properties b/gradle.properties index ae4ebc51b8..05094db3c7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -131,10 +131,8 @@ MOGO_MODULE_V2X_VERSION=2.1.16.10 MOGO_MODULE_OBU_MOGO_VERSION=2.1.16.10 # bugly CRASHREPORT_VERSION=2.1.16.10 -CRASHREPORT_BUGLY_VERSION=2.1.16.10 CRASHREPORT_NOOP_VERSION=2.1.16.10 CRASHREPORT_APMBYTE_VERSION=2.1.16.10 -CRASHREPORT_UPGRADE_VERSION=2.1.16.10 ## tts TTS_BASE_VERSION=2.1.16.10 TTS_DI_VERSION=2.1.16.10 diff --git a/modules.txt b/modules.txt index b952d62967..c4137f974f 100644 --- a/modules.txt +++ b/modules.txt @@ -19,7 +19,6 @@ :test:crashreport :test:crashreport-apm :test:crashreport-noop -:test:crashreport-upgrade :core:function-impl:mogo-core-function-obu-mogo :core:function-impl:mogo-core-function-check :services:mogo-service diff --git a/settings.gradle b/settings.gradle index f0b654ad1f..044d6a962e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -76,9 +76,7 @@ include ':tts:tts-pad' // 测试DEBUG include ':test:crashreport' -//include ':test:crashreport-bugly' include ':test:crashreport-noop' -include ':test:crashreport-upgrade' include ':test:crashreport-apmbyte' //OCH 业务模块 diff --git a/test/crashreport-bugly/.gitignore b/test/crashreport-bugly/.gitignore deleted file mode 100644 index 42afabfd2a..0000000000 --- a/test/crashreport-bugly/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/test/crashreport-bugly/build.gradle b/test/crashreport-bugly/build.gradle deleted file mode 100644 index aa854f978a..0000000000 --- a/test/crashreport-bugly/build.gradle +++ /dev/null @@ -1,67 +0,0 @@ -plugins { - id 'com.android.library' - id 'kotlin-android' - id 'kotlin-android-extensions' - id 'kotlin-kapt' - id 'com.alibaba.arouter' -} - - -android { - compileSdkVersion rootProject.ext.android.compileSdkVersion - // buildToolsVersion rootProject.ext.android.buildToolsVersion - defaultConfig { - minSdkVersion rootProject.ext.android.minSdkVersion - targetSdkVersion rootProject.ext.android.targetSdkVersion - versionCode Integer.valueOf(VERSION_CODE) - versionName getValueFromRootProperties("${project.name.replace("-", "_").toUpperCase()}_VERSION") - - ndk { - // 设置支持的SO库架构 - abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a' - } - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - consumerProguardFiles 'consumer-rules.pro' - - //ARouter apt 参数 - kapt { - useBuildCache = false - arguments { - arg("AROUTER_MODULE_NAME", project.getName()) - } - } - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } -} - -dependencies { - implementation fileTree(dir: "libs", include: ["*.jar"]) - implementation rootProject.ext.dependencies.androidxappcompat - - implementation rootProject.ext.dependencies.arouter - kapt rootProject.ext.dependencies.aroutercompiler - - if (Boolean.valueOf(USE_MAVEN_PACKAGE)) { - api rootProject.ext.dependencies.crashreport - implementation rootProject.ext.dependencies.mogo_core_utils - implementation rootProject.ext.dependencies.mogocommons - } else { - api project(":test:crashreport") - implementation project(':core:mogo-core-utils') - implementation project(":foudations:mogo-commons") - } - - implementation 'com.tencent.bugly:crashreport_upgrade:latest.release' - //其中latest.release指代最新Bugly SDK版本号,也可以指定明确的版本号,例如2.1.9 - implementation 'com.tencent.bugly:nativecrashreport:latest.release' - //其中latest.release指代最新Bugly NDK版本号,也可以指定明确的版本号,例如3.0 -} - -apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString() \ No newline at end of file diff --git a/test/crashreport-bugly/consumer-rules.pro b/test/crashreport-bugly/consumer-rules.pro deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/test/crashreport-bugly/gradle.properties b/test/crashreport-bugly/gradle.properties deleted file mode 100644 index 6b451eda5d..0000000000 --- a/test/crashreport-bugly/gradle.properties +++ /dev/null @@ -1,3 +0,0 @@ -GROUP=com.mogo.test -POM_ARTIFACT_ID=crashreport-bugly -VERSION_CODE=1 diff --git a/test/crashreport-bugly/proguard-rules.pro b/test/crashreport-bugly/proguard-rules.pro deleted file mode 100644 index 481bb43481..0000000000 --- a/test/crashreport-bugly/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/test/crashreport-bugly/src/main/AndroidManifest.xml b/test/crashreport-bugly/src/main/AndroidManifest.xml deleted file mode 100644 index d9f7357150..0000000000 --- a/test/crashreport-bugly/src/main/AndroidManifest.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - / - \ No newline at end of file diff --git a/test/crashreport-bugly/src/main/java/com/mogo/test/crashreport/bugly/BuglyCrashReportProvider.java b/test/crashreport-bugly/src/main/java/com/mogo/test/crashreport/bugly/BuglyCrashReportProvider.java deleted file mode 100644 index 549dee35e9..0000000000 --- a/test/crashreport-bugly/src/main/java/com/mogo/test/crashreport/bugly/BuglyCrashReportProvider.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.mogo.test.crashreport.bugly; - -import android.content.Context; -import android.text.TextUtils; - -import com.alibaba.android.arouter.facade.annotation.Route; -import com.mogo.cloud.passport.MoGoAiCloudClientConfig; -import com.mogo.commons.debug.DebugConfig; -import com.mogo.eagle.core.utilcode.util.AppUtils; -import com.mogo.test.crashreport.CrashReportConstants; -import com.mogo.test.crashreport.ITestCrashReportProvider; -import com.tencent.bugly.Bugly; -import com.tencent.bugly.crashreport.CrashReport; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; - - -/** - * @author congtaowang - * @since 2020/9/9 - * - * 描述 - */ -//@Route(path = CrashReportConstants.PATH) -public class BuglyCrashReportProvider implements ITestCrashReportProvider { - - private static final String TAG = "BuglyCrashReportProvider"; - - @Override - public void init(Context context) { - String packageName = context.getPackageName(); - String processName = getProcessName(android.os.Process.myPid()); - CrashReport.UserStrategy strategy = new CrashReport.UserStrategy(context); - strategy.setUploadProcess(processName == null || processName.equals(packageName)); - //该用户本次启动后的异常日志用户ID都将是 sn - CrashReport.setUserId(MoGoAiCloudClientConfig.getInstance().getSn()); - String productFlavor = DebugConfig.getProductFlavor(); - strategy.setAppChannel(productFlavor); - Bugly.init(context, CrashReportConstants.buglyAppID, true, strategy); - Bugly.putUserData(context, "serial", MoGoAiCloudClientConfig.getInstance().getSn()); - String mapSDKVersion = AppUtils.getCustomMapSDKVersion(context); - Bugly.putUserData(context, "MAP_SDK_VERSION", mapSDKVersion); - } - - /** - * 获取进程号对应的进程名 - * - * @param pid 进程号 - * @return 进程名 - */ - private static String getProcessName(int pid) { - BufferedReader reader = null; - try { - reader = new BufferedReader(new FileReader("/proc/" + pid + "/cmdline")); - String processName = reader.readLine(); - if (!TextUtils.isEmpty(processName)) { - processName = processName.trim(); - } - return processName; - } catch (Throwable throwable) { - throwable.printStackTrace(); - } finally { - try { - if (reader != null) { - reader.close(); - } - } catch (IOException exception) { - exception.printStackTrace(); - } - } - return null; - } -} - diff --git a/test/crashreport-upgrade/.gitignore b/test/crashreport-upgrade/.gitignore deleted file mode 100644 index 42afabfd2a..0000000000 --- a/test/crashreport-upgrade/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/test/crashreport-upgrade/build.gradle b/test/crashreport-upgrade/build.gradle deleted file mode 100644 index 75b79de321..0000000000 --- a/test/crashreport-upgrade/build.gradle +++ /dev/null @@ -1,63 +0,0 @@ -plugins { - id 'com.android.library' - id 'kotlin-android' - id 'kotlin-android-extensions' - id 'kotlin-kapt' - id 'com.alibaba.arouter' -} - -android { - compileSdkVersion rootProject.ext.android.compileSdkVersion - defaultConfig { - minSdkVersion rootProject.ext.android.minSdkVersion - targetSdkVersion rootProject.ext.android.targetSdkVersion - versionCode Integer.valueOf(VERSION_CODE) - versionName getValueFromRootProperties("${project.name.replace("-", "_").toUpperCase()}_VERSION") - - ndk { - // 设置支持的SO库架构 - abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a' - } - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - consumerProguardFiles 'consumer-rules.pro' - - //ARouter apt 参数 - kapt { - useBuildCache = false - arguments { - arg("AROUTER_MODULE_NAME", project.getName()) - } - } - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } -} - -dependencies { - implementation fileTree(dir: "libs", include: ["*.jar"]) - implementation rootProject.ext.dependencies.androidxappcompat - - implementation rootProject.ext.dependencies.arouter - kapt rootProject.ext.dependencies.aroutercompiler - - if (Boolean.valueOf(USE_MAVEN_PACKAGE)) { - api rootProject.ext.dependencies.crashreport - implementation rootProject.ext.dependencies.mogo_core_utils - implementation rootProject.ext.dependencies.mogocommons - } else { - api project(":test:crashreport") - implementation project(':core:mogo-core-utils') - implementation project(":foudations:mogo-commons") - } - - implementation 'com.tencent.bugly:crashreport_upgrade:latest.release' - //其中latest.release指代最新版本号,也可以指定明确的版本号,例如1.2.0 -} - -apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString() \ No newline at end of file diff --git a/test/crashreport-upgrade/consumer-rules.pro b/test/crashreport-upgrade/consumer-rules.pro deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/test/crashreport-upgrade/gradle.properties b/test/crashreport-upgrade/gradle.properties deleted file mode 100644 index bcb33e8a94..0000000000 --- a/test/crashreport-upgrade/gradle.properties +++ /dev/null @@ -1,3 +0,0 @@ -GROUP=com.mogo.test -POM_ARTIFACT_ID=crashreport-upgrade -VERSION_CODE=1 diff --git a/test/crashreport-upgrade/proguard-rules.pro b/test/crashreport-upgrade/proguard-rules.pro deleted file mode 100644 index 68dec0863c..0000000000 --- a/test/crashreport-upgrade/proguard-rules.pro +++ /dev/null @@ -1,24 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile --dontwarn com.tencent.bugly.** --keep public class com.tencent.bugly.**{*;} --keep class android.support.**{*;} diff --git a/test/crashreport-upgrade/src/main/AndroidManifest.xml b/test/crashreport-upgrade/src/main/AndroidManifest.xml deleted file mode 100644 index 9f5b88a7f2..0000000000 --- a/test/crashreport-upgrade/src/main/AndroidManifest.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/test/crashreport-upgrade/src/main/java/com/mogo/test/crashreport/upgrade/UpgradeReportConstants.java b/test/crashreport-upgrade/src/main/java/com/mogo/test/crashreport/upgrade/UpgradeReportConstants.java deleted file mode 100644 index 8e2b0380b8..0000000000 --- a/test/crashreport-upgrade/src/main/java/com/mogo/test/crashreport/upgrade/UpgradeReportConstants.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.mogo.test.crashreport.upgrade; - - -/** - * @author donghongyu - * @since 2020/9/9 - *

- * 描述 - */ -public class UpgradeReportConstants { - - public static final String PATH = "/upgradereport/api"; - - public static final String NAME = "UpgradeReportApi"; -} diff --git a/test/crashreport-upgrade/src/main/java/com/mogo/test/crashreport/upgrade/UpgradeReportProvider.java b/test/crashreport-upgrade/src/main/java/com/mogo/test/crashreport/upgrade/UpgradeReportProvider.java deleted file mode 100644 index 4dc27958a7..0000000000 --- a/test/crashreport-upgrade/src/main/java/com/mogo/test/crashreport/upgrade/UpgradeReportProvider.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.mogo.test.crashreport.upgrade; - -import android.content.Context; -import android.text.TextUtils; - -import com.alibaba.android.arouter.facade.annotation.Route; -import com.alibaba.android.arouter.facade.template.IProvider; -import com.mogo.commons.debug.DebugConfig; -import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; -import com.mogo.eagle.core.utilcode.util.AppUtils; -import com.mogo.test.crashreport.CrashReportConstants; -import com.tencent.bugly.Bugly; -import com.tencent.bugly.crashreport.CrashReport; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; - - -/** - * @author donghongyu - * @since 2020/9/9 - *

- * 升级模块 - */ -@Route(path = UpgradeReportConstants.PATH) -public class UpgradeReportProvider implements IProvider { - - private static final String TAG = "UpgradeReportProvider"; - - @Override - public void init(Context context) { - String packageName = context.getPackageName(); - String processName = getProcessName(android.os.Process.myPid()); - CrashReport.UserStrategy strategy = new CrashReport.UserStrategy(context); - strategy.setUploadProcess(processName == null || processName.equals(packageName)); - - String productFlavor = DebugConfig.getProductFlavor(); - strategy.setAppChannel(productFlavor); - Bugly.init(context, CrashReportConstants.buglyAppID, true, strategy); - String sn = SharedPrefsMgr.getInstance(context).getString("sn"); - if (sn != null && !sn.isEmpty()) { - Bugly.putUserData(context, "serial", sn); - } - String mapSDKVersion = AppUtils.getCustomMapSDKVersion(context); - Bugly.putUserData(context, "MAP_SDK_VERSION", mapSDKVersion); - } - - /** - * 获取进程号对应的进程名 - * - * @param pid 进程号 - * @return 进程名 - */ - private static String getProcessName(int pid) { - BufferedReader reader = null; - try { - reader = new BufferedReader(new FileReader("/proc/" + pid + "/cmdline")); - String processName = reader.readLine(); - if (!TextUtils.isEmpty(processName)) { - processName = processName.trim(); - } - return processName; - } catch (Throwable throwable) { - throwable.printStackTrace(); - } finally { - try { - if (reader != null) { - reader.close(); - } - } catch (IOException exception) { - exception.printStackTrace(); - } - } - return null; - } -} - diff --git a/test/crashreport-upgrade/src/main/res/xml/provider_paths.xml b/test/crashreport-upgrade/src/main/res/xml/provider_paths.xml deleted file mode 100644 index 1b4e49502c..0000000000 --- a/test/crashreport-upgrade/src/main/res/xml/provider_paths.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file From 5b467bffde0fb273ab43ac9ee25aa3594e48a7e3 Mon Sep 17 00:00:00 2001 From: zhongchao Date: Thu, 9 Feb 2023 15:30:15 +0800 Subject: [PATCH 20/81] [2.14.0] remove unuse code --- .../core/function/v2x/LineUploadManager.kt | 23 ++++--------------- .../CallerAutoPilotStatusListenerManager.kt | 2 -- 2 files changed, 4 insertions(+), 21 deletions(-) diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/LineUploadManager.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/LineUploadManager.kt index 9f70f2a4ff..77fce2fd51 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/LineUploadManager.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/LineUploadManager.kt @@ -3,23 +3,16 @@ package com.mogo.eagle.core.function.v2x import android.content.Context import android.util.Log import com.mogo.cloud.passport.MoGoAiCloudClientConfig -import com.mogo.commons.constants.HostConst import com.mogo.commons.constants.HostConst.DATA_CENTER_HOST -import com.mogo.commons.debug.DebugConfig -import com.mogo.eagle.core.data.BaseResponse import com.mogo.eagle.core.data.v2x.LineUploadData import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.v2x.events.network.V2XRefreshModel import com.mogo.eagle.core.function.v2x.road.V2XEventServiceApi import com.mogo.eagle.core.network.MoGoRetrofitFactory -import com.mogo.eagle.core.network.apiCall -import com.mogo.eagle.core.network.request -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable import io.reactivex.schedulers.Schedulers -import kotlin.properties.Delegates class LineUploadManager private constructor(context: Context) : IMoGoAutopilotStatusListener { @@ -50,19 +43,11 @@ class LineUploadManager private constructor(context: Context) : IMoGoAutopilotSt mContext = context } - fun init(){ - Log.d("emArrow","LineUploadManager addListener") + fun init() { + Log.d("emArrow", "LineUploadManager addListener") CallerAutoPilotStatusListenerManager.addListener(TAG, this) } - private fun getHost(): String { - return when (DebugConfig.getNetMode()) { - DebugConfig.NET_MODE_DEV, DebugConfig.NET_MODE_QA -> "http://dzt-test.zhidaozhixing.com/" - DebugConfig.NET_MODE_RELEASE -> "http://dzt.zhidaozhixing.com/" - else -> "http://dzt.zhidaozhixing.com/" - } - } - override fun onAutopilotRouteLineId(lineId: Long) { super.onAutopilotRouteLineId(lineId) if (lineId > 0) { @@ -77,9 +62,9 @@ class LineUploadManager private constructor(context: Context) : IMoGoAutopilotSt .uploadLineId(lineUploadData) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe ({ data -> + .subscribe({ data -> Log.d("emArrow", " uploadLine : $data") - },{ + }, { Log.d("emArrow", "e : ${it.message}") }) } diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotStatusListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotStatusListenerManager.kt index 0e42e27b27..e35b7565e3 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotStatusListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotStatusListenerManager.kt @@ -1,12 +1,10 @@ package com.mogo.eagle.core.function.call.autopilot -import android.util.Log import androidx.annotation.Nullable import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.call.base.CallerBase -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.util.GsonUtils import mogo.telematics.pad.MessagePad import mogo_msg.MogoReportMsg From a3e889ed8b2e41ec0494f9cd6d3d9a00518188c4 Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Thu, 9 Feb 2023 17:41:35 +0800 Subject: [PATCH 21/81] =?UTF-8?q?[dev=5Frobotaxi-d-app-module=5F2132=5F221?= =?UTF-8?q?223=5F2.13.2]=20=E7=BB=9F=E4=B8=80taxi=E5=92=8Cbus=20obu?= =?UTF-8?q?=E7=9A=84ip?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/function/obu/mogo/MoGoObuProvider.kt | 37 +++++-------------- 1 file changed, 9 insertions(+), 28 deletions(-) diff --git a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MoGoObuProvider.kt b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MoGoObuProvider.kt index a4de8e25d8..a4ab0a31ea 100644 --- a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MoGoObuProvider.kt +++ b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MoGoObuProvider.kt @@ -21,8 +21,7 @@ class MoGoObuProvider : IMoGoObuProvider { private val TAG = "MoGoObuProvider" private var mContext: Context? = null - private val busObuIp = "192.168.8.199" - private val taxiObuIp = "192.168.1.199" + private val taxiObuIp = "192.168.1.199" //taxi和bus网段统一 override val functionName: String get() = TAG @@ -44,32 +43,14 @@ class MoGoObuProvider : IMoGoObuProvider { } else { mContext = context mContext?.let { - if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { //bus 司机端 - val ipAddress = - SharedPrefsMgr.getInstance(context).getString(MoGoConfig.OBU_IP, busObuIp) - - //mogo obu - MogoPrivateObuNewManager.INSTANCE.connectObu( - it, - ipAddress, - CommonUtils.getIpAddressString() - ) - - //old obu - MogoPrivateObuManager.INSTANCE.init(context, ipAddress) - } else if (AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)) { //taxi 司机端和乘客端 - val ipAddress = - SharedPrefsMgr.getInstance(context).getString(MoGoConfig.OBU_IP, taxiObuIp) - //mogo obu - MogoPrivateObuNewManager.INSTANCE.connectObu( - it, - ipAddress, - CommonUtils.getIpAddressString() - ) - - //old obu - MogoPrivateObuManager.INSTANCE.init(context, ipAddress) - } + val ipAddress = + SharedPrefsMgr.getInstance(context).getString(MoGoConfig.OBU_IP, taxiObuIp) + //mogo obu + MogoPrivateObuNewManager.INSTANCE.connectObu( + it, + ipAddress, + CommonUtils.getIpAddressString() + ) } } } From 8d6bee790ae9fad0eae73ec2df1956520e45104c Mon Sep 17 00:00:00 2001 From: renwj Date: Thu, 9 Feb 2023 18:05:28 +0800 Subject: [PATCH 22/81] =?UTF-8?q?[2.14.2]=E4=BF=AE=E6=AD=A3lancetx?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E7=94=9F=E6=88=90=E7=B1=BB=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 6 +++--- build.gradle | 2 +- config.gradle | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index aef8e583f4..5c65028837 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -58,9 +58,9 @@ if (!isAndroidTestBuild()) { crash_fix { enable true } -// memory_leak { -// enable true -// } + memory_leak { + enable true + } } } } diff --git a/build.gradle b/build.gradle index d602936fe2..f2262f2a2e 100644 --- a/build.gradle +++ b/build.gradle @@ -38,7 +38,7 @@ buildscript { classpath 'com.mogo.cloud:systrace:1.0.1' classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18' classpath 'com.mogo.sticky:service:1.0.8' - classpath 'io.github.knight-zxw:lancet-plugin:0.0.4' + classpath 'io.github.knight-zxw:lancet-plugin:0.0.4_mogo' // classpath ("com.tencent.matrix:matrix-gradle-plugin:0.6.6") { changing = true } } diff --git a/config.gradle b/config.gradle index 2f1b8ba59f..c8a88d256e 100644 --- a/config.gradle +++ b/config.gradle @@ -239,7 +239,7 @@ ext { //========================= LancetX =================== - lancetx_runtime : "io.github.knight-zxw:lancet-runtime:0.0.4", + lancetx_runtime : "io.github.knight-zxw:lancet-runtime:0.0.4_mogo", //========================= autosize ====================== androidautoSize : 'com.github.JessYanCoding:AndroidAutoSize:v1.2.1', From 1f7da9bd2936a6fb3ba9752629b7031581a1c42d Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Fri, 10 Feb 2023 17:28:41 +0800 Subject: [PATCH 23/81] =?UTF-8?q?[dev=5Frobotaxi-d-app-module=5F2132=5F221?= =?UTF-8?q?223=5F2.13.2]=20=E5=8E=BB=E6=8E=89=E6=96=AD=E5=BC=80=E8=80=81ob?= =?UTF-8?q?u=E7=9A=84=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/function/hmi/ui/setting/SOPSettingView.kt | 11 ++++++----- .../function/obu/mogo/MogoPrivateObuNewManager.kt | 7 ------- 2 files changed, 6 insertions(+), 12 deletions(-) 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 6865374f1c..87f08bde14 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 @@ -188,11 +188,12 @@ class SOPSettingView @JvmOverloads constructor( tbObu.isChecked = CallerOBUManager.isConnected() tbObu.setOnCheckedChangeListener { _, isChecked -> if (!isChecked) { - if (AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)) { - CallerOBUManager.resetObuIpAddress("192.168.1.199") - } else if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { - CallerOBUManager.resetObuIpAddress("192.168.8.199") - } + CallerOBUManager.resetObuIpAddress("192.168.1.199") +// if (AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)) { +// CallerOBUManager.resetObuIpAddress("192.168.1.199") +// } else if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { +// CallerOBUManager.resetObuIpAddress("192.168.8.199") +// } } else { //断开链接 CallerOBUManager.disConnectObu() diff --git a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt index e22a0d3f7e..7bf199d550 100644 --- a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt +++ b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt @@ -106,13 +106,6 @@ class MogoPrivateObuNewManager private constructor() { mObuStatusInfo.obuStatus = true CallerObuListenerManager.invokeListener(mObuStatusInfo) mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU", true) } - - //断开老obu - try { - com.zhidao.support.obu.MogoObuManager.getInstance().disConnect() - } catch (e: Exception) { - e.printStackTrace() - } } } From 30cf22ab6cd9520cc3243a77e9f8d9060cab3a3f Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Fri, 10 Feb 2023 19:32:22 +0800 Subject: [PATCH 24/81] =?UTF-8?q?[Feat]=E6=96=B0=E5=A2=9E=E9=AB=98?= =?UTF-8?q?=E7=B2=BE=E5=9C=B0=E5=9B=BE=E7=BC=93=E5=AD=98=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/function/hmi/ui/MoGoHmiFragment.kt | 5 +- .../function/hmi/ui/map/OfflineMapDialog.kt | 170 ++++++++++++++++++ .../hmi/ui/tools/AutoPilotAndCheckView.kt | 3 + .../hmi/ui/widget/SystemVersionView.kt | 25 ++- .../res/drawable-xhdpi/download_fail_icon.png | Bin 0 -> 8253 bytes .../drawable-xhdpi/download_success_icon.png | Bin 0 -> 9547 bytes .../res/drawable-xhdpi/icon_be_updated.png | Bin 0 -> 7172 bytes .../main/res/drawable-xhdpi/icon_hd_map.png | Bin 0 -> 3196 bytes .../res/drawable/progressbar_corner_bg.xml | 43 +++++ .../main/res/layout/dialog_offline_map.xml | 135 ++++++++++++++ .../main/res/layout/view_system_version.xml | 24 ++- .../src/main/res/values/color.xml | 1 + .../src/main/res/values/strings.xml | 7 + .../api/hmi/warning/IMoGoWaringProvider.kt | 1 + .../function/call/hmi/CallerHmiManager.kt | 5 +- .../call/map/CallerMapUIServiceManager.kt | 9 + gradle.properties | 2 +- .../com/mogo/map/hdcache/IHdCacheListener.kt | 5 + .../uicontroller/IMogoMapUIController.java | 8 + .../java/com/mogo/map/AMapViewWrapper.java | 49 +++++ .../com/mogo/map/MogoMapUIController.java | 18 +- .../map/uicontroller/AMapUIController.java | 16 ++ .../java/com/mogo/map/utils/HDMapUtils.kt | 27 +++ 23 files changed, 539 insertions(+), 14 deletions(-) create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/map/OfflineMapDialog.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/download_fail_icon.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/download_success_icon.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_be_updated.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_hd_map.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/progressbar_corner_bg.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_offline_map.xml create mode 100644 libraries/mogo-map-api/src/main/java/com/mogo/map/hdcache/IHdCacheListener.kt create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/utils/HDMapUtils.kt diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt index f8dd7bd27d..582699cdbf 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt @@ -515,6 +515,10 @@ class MoGoHmiFragment : MvpFragment(), statusBarView?.updateMfStatus(tag, status) } + override fun updateHDDataCacheStatus(isCached: Boolean) { + toolsView?.updateHDDataCacheStatus(isCached) + } + /** * 设置 红绿灯 代理View */ @@ -1591,7 +1595,6 @@ class MoGoHmiFragment : MvpFragment(), } } - override fun setTurnLightFunction(isOpen: Boolean) { HmiBuildConfig.isShowTurnLightView = isOpen } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/map/OfflineMapDialog.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/map/OfflineMapDialog.kt new file mode 100644 index 0000000000..aa62c470b2 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/map/OfflineMapDialog.kt @@ -0,0 +1,170 @@ +package com.mogo.eagle.core.function.hmi.ui.map + +import android.annotation.SuppressLint +import android.content.Context +import android.view.View +import android.widget.ImageView +import android.widget.ProgressBar +import android.widget.TextView +import androidx.annotation.MainThread +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.content.ContextCompat +import androidx.core.content.res.ResourcesCompat +import androidx.core.view.marginTop +import com.mogo.eagle.core.function.call.hmi.CallerHmiManager +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.function.hmi.dialog.BaseFloatDialog +import com.mogo.map.hdcache.IHdCacheListener +import me.jessyan.autosize.utils.AutoSizeUtils + +/** + * 离线地图缓存 + */ +class OfflineMapDialog(context: Context): BaseFloatDialog(context) { + + private var roundRootLayout: ConstraintLayout? = null + private var offlineTitleView: TextView? = null + private var leftView: TextView? = null + private var rightView: TextView? = null + private var okView: TextView? = null + private var vertLineView: View? = null + private var horizontalLineView: View? = null + private var cacheTipView: TextView? = null + + private var progressBar: ProgressBar? = null + private var downloadPercentView: TextView? = null + private var downloadResultImg: ImageView? = null + + private var isLoading = false + private var isConfirm = true + private var isRetry = false + + init { + setContentView(R.layout.dialog_offline_map) + setCanceledOnTouchOutside(true) + + initView() + } + + private fun initView() { + roundRootLayout = findViewById(R.id.roundRootLayout) + offlineTitleView = findViewById(R.id.tv_cache_title) + progressBar = findViewById(R.id.progressBar) + downloadPercentView = findViewById(R.id.tvDownloadProgress) + leftView = findViewById(R.id.tv_cache_confirm) + rightView = findViewById(R.id.tv_cache_cancel) + okView = findViewById(R.id.tv_cache_ok) + vertLineView = findViewById(R.id.view_vertical_line) + horizontalLineView = findViewById(R.id.view_horizontal_line) + cacheTipView = findViewById(R.id.tv_cache_tips) + downloadResultImg = findViewById(R.id.iv_download_Status) + + leftView?.setOnClickListener { + when { + isConfirm -> { + cacheHDOfflineData() + showNewContent(isLoading = true, false) + } + else -> { + dismiss() + } + } + } + + rightView?.setOnClickListener { + when { + isRetry -> { + cacheHDOfflineData() + } + else -> { + dismiss() + } + } + } + + okView?.setOnClickListener { + dismiss() + } + } + + private fun cacheHDOfflineData() { + CallerMapUIServiceManager.cacheHDDataByCity(object : IHdCacheListener { + override fun onMapHdCacheProgress(cityId: Int, progress: Double) { + updateProgress(progress.toInt()) + } + }) + } + + @SuppressLint("SetTextI18n") + private fun updateProgress(progress: Int) { + if (this@OfflineMapDialog.isShowing) { + progressBar?.let { + if (it.visibility == View.VISIBLE) { + it.progress = if (progress in 1..5) 5 else progress + } + } + downloadPercentView?.text = "$progress%" + if (progress == 100) { + showNewContent(isLoading = false, true) + CallerHmiManager.updateHDDataCacheStatus(true) + } + } + } + + private fun change2NewStyle() { + roundRootLayout?.layoutParams?.width = AutoSizeUtils.dp2px(context, 1110f) + roundRootLayout?.layoutParams?.height = AutoSizeUtils.dp2px(context, 668f) + + val titleParams = offlineTitleView?.layoutParams as ConstraintLayout.LayoutParams + titleParams.topMargin = AutoSizeUtils.dp2px(context, 51f) + + val horizontalLineParams = horizontalLineView?.layoutParams as ConstraintLayout.LayoutParams + horizontalLineParams.topMargin = AutoSizeUtils.dp2px(context, 374f) + + progressBar?.visibility = View.VISIBLE + downloadPercentView?.visibility = View.VISIBLE + okView?.visibility = View.VISIBLE + + vertLineView?.visibility = View.GONE + leftView?.visibility = View.GONE + rightView?.visibility = View.GONE + cacheTipView?.visibility = View.INVISIBLE + } + + @SuppressLint("UseCompatLoadingForDrawables") + private fun showNewContent(isLoading: Boolean, isSuccess: Boolean) { + change2NewStyle() + when { + isLoading -> { + okView?.text = context.resources.getString(R.string.cancel) + offlineTitleView?.text = context.resources.getString(R.string.offline_downloading) + downloadResultImg?.visibility = View.GONE + } + else -> { + downloadResultImg?.visibility = View.VISIBLE + when { + isSuccess -> { + okView?.visibility = View.VISIBLE + okView?.text = context.resources.getString(R.string.ok_tip) + offlineTitleView?.text = context.resources.getString(R.string.offline_download_success) + progressBar?.visibility = View.GONE + downloadPercentView?.visibility = View.GONE + downloadResultImg?.background = ContextCompat.getDrawable(context, R.drawable.download_success_icon) + } + else -> { + offlineTitleView?.text = context.resources.getString(R.string.offline_download_failure) + okView?.visibility = View.GONE + progressBar?.visibility = View.GONE + downloadPercentView?.visibility = View.GONE + leftView?.visibility = View.VISIBLE + rightView?.visibility = View.VISIBLE + vertLineView?.visibility = View.VISIBLE + rightView?.text = context.resources.getString(R.string.retry) + downloadResultImg?.background = ContextCompat.getDrawable(context, R.drawable.download_fail_icon) + } + } + } + } + } +} \ 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/tools/AutoPilotAndCheckView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt index 7bc486bb84..aced13e3b1 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt @@ -201,6 +201,9 @@ class AutoPilotAndCheckView @JvmOverloads constructor( systemVersionView?.showAdUpgradeStatus(ipcUpgradeStateInfo) } + fun updateHDDataCacheStatus(isCached: Boolean) { + systemVersionView?.updateHDDataCacheStatus(isCached) + } override fun onAttachedToWindow() { super.onAttachedToWindow() diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt index 8044145aff..41a04ccee5 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt @@ -1,26 +1,21 @@ package com.mogo.eagle.core.function.hmi.ui.widget -import android.app.NotificationManager import android.content.Context import android.util.AttributeSet -import android.util.Log import android.view.LayoutInflater import android.view.View import androidx.constraintlayout.widget.ConstraintLayout -import androidx.core.app.NotificationCompat import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo import com.mogo.eagle.core.data.bindingcar.AdUpgradeStateHelper import com.mogo.eagle.core.data.bindingcar.IPCUpgradeStateInfo import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.api.bindingcar.IMoGoBindingCarListener -import com.mogo.eagle.core.function.api.devatools.IMogoDevaToolsUpgradeListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.bindingcar.CallerBindingCarListenerManager import com.mogo.eagle.core.function.call.bindingcar.CallerBindingcarManager -import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsUpgradeListenerManager -import com.mogo.eagle.core.function.call.hmi.CallerHmiManager -import com.mogo.eagle.core.function.call.hmi.CallerHmiManager.showUpgradeDialog +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.function.hmi.ui.map.OfflineMapDialog import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI import com.mogo.eagle.core.utilcode.util.AppUtils @@ -142,6 +137,12 @@ class SystemVersionView @JvmOverloads constructor( } + ivHDCache.setOnClickListener { + OfflineMapDialog(context).show() + } + + updateHDDataCacheStatus(CallerMapUIServiceManager.isCityDataCached()) + if(AdUpgradeStateHelper.isConfirmUpgrade()){ //将角标改为“下载中” ivAdStatus?.setImageResource(R.drawable.icon_downloading) @@ -246,6 +247,16 @@ class SystemVersionView @JvmOverloads constructor( } + fun updateHDDataCacheStatus(isCached: Boolean) { + if (isCached) { + ivHDCacheStatus?.setImageResource(R.drawable.icon_latest_version) + ivHDCache.isEnabled = false + } else { + ivHDCacheStatus?.setImageResource(R.drawable.icon_be_updated) + ivHDCache.isEnabled = true + } + } + /** * 展示当前鹰眼版本 */ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/download_fail_icon.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/download_fail_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..809d7ee41430fdcc7ad9423a11b4352f3d3c7257 GIT binary patch literal 8253 zcmYM3Wl$VGu)yzdEfm*M+}&M@9bO!Y9qv-R*g=6pvEp#pQ8=WyTXBctPI0HWJ3Rg$ z-g_T5n@x5ylbLLi{cWU%ngTWk83q6Vzy>MGYQE~C{{#)?we?Vj*S;#CyQYE+pnQ~K z|J9JS(g#_qssdPE`)B~*H#-2*e=e^=_9_4XA`A#XeAU4J#$X8lH(LZl{Qv%cj&9ME zvj6~9AxKtQ+Xr}LjOj|zn|_>aFqq)9plB$E`x*E_DuJF{%Lp0k4GvIPF}9hmFODKu zD&EM4Lg==vzFg(nX--aYnpamVQkGou#2^3$`PAI@H01eb%nUzSGr=h_&?>) zuF*StxFa+KFXHCTru`U5$iXUWamQ0HLYt_ zoE=2L2~{kId0Vq7uOr zL`0wpiG!FL%bpn29HDJ$zqqnm2Ze)D+-7x34#q}K_V+6)&y(Ro!N4M+&FH4Dd3nU- z;cnDW0|YBS1G+;^2Ec(y8nH37K>V-%rw6{(ri&tFke&xm8w!)uz^0S(C_bATAxSHR z0Np}tcDq@3Y{#QdQq91Qt>YLbfHUy^;+$Rz)$o&g*kn1v`wApQ$z$~ycq2j%DqtS9 zb9bj;Wo7QEufzqwlEPULgG1GfK^fx!E9HGEU?L3!%u?>HiQ|@;Hm19*O0eJ;PTGm# zXiTg~NM>`D6K6hQepwnx<~XfRin|EpyO;bfU+Z_b(yB0&U=zu6#wPVGm0gs9TfmFg zKH9U0n_P*GN}Vx^%oB}$s83OKME#%liNv0qwHWGn{FJ&286{H=%=(*MqyEb1U`qmv0bjW1MuFs~O;gT8)WRC%Y3t)`Os2QN~$7Q>08-Z*%4rO7AzB+!{xtEc}8&4Ryy@9OA&_|N!|k5)W@ za5sl4^5$k0NiLwU=j*|y?YRk%tJ$O6o1cRG2{Gu|_ZPR#5zWfCXR;SdO*+xDT(iEY zteCDp%sRog<5X0eP7^yjE!G(~Mq;`YQr`?y*+3D4s2}IyO&Eull+2;lV2{zDnenAZ zyd<6-z7fqnR5OS0`v=Knf{iE*U1po^X4>EXl(Ad=u9Fg|W@=e6U?&ZA#=}@{#A!u3 zR{6N%X(~VW{ZZ;Sc5I(Q`ddXJvY^pIkG}KudYuGKXjD*>2p4j2p30_R03Fd^OIl~p zPi-Wrkdy^1xdShyEct-nPhz z5G!Xlj33wgrS>z9f_F6-8q)}-Z^LiVL;tBIj^35v9(sTL^gPQh=gUkva8YwR-X1o( zZNQQ2m*nthJ#ewh0WZw_Qwq>7HH7!K_yvAn&vQst&ZI@KA0&Q1@Hg+_T0DbR$hBf4 zir6#)=jCsa@tFHpUn~Wu?;J=-ZQeU}x2 z*GB<-dOqW;*!8uh&Xrqn;7y7XZ6e$B?1~a`o{MN3J(j{754Edp` zduVAT%O&b`0K3NN_g~hB!(OErPR3(t1^ci(P1lvYk>WPG`$dNn5hVql&jtXI@#@;J zv%!~eRgVzMChH%$k)#u$_2s$VC!CKfyg8k}l{q!VpRY@>ogG6Xt^DpVw}K#%zuF!C z9WbnhCYaEpGNqVi0>NU)96zsx*IUy2bS(hB?N5ANX(>ot)SoeUNp{vLv6Xv2+8Kpd zF^HCVD7(!m#TO+r%w(!{My}iisP^-7;&j@9X6~{qK|J&eB8u!v&HSGfP$LPV46DhK z9M!lb&Z?KKv!EW1=BGMn7whIKq3hT5kVOw{fs)2m=S1}p@f@uHwPMG~1i}NvQ4%Wme7ysaOpRlkWTeIy1JVw-ufZS!)~Hqs18$1J*<>=(`|LwF?d9 z{GnK9Y-=>vS^-$(qqK4dW$r zz3}0vXC!tLLu$(8RP;w9Ho5GloA|bXtqB4XLWba*PeiMK(yAuptK`?Sf(poM0%9|K zpa=9pYFxQkYQKa(xGri0rT_fltf(MRUBVyWAB;`zRw(C&HSRNnZ?dp3Un|^g9RTHF zIYUi1@p9Bm^J5RiE))|+DB5>*v`I&~nw=|cny_2%zTJ+86tj}I`av!+x*`%a7we^u z7PI(f<-1A2F3XXNLsWB13)^K4*+_dF8h@7K#qCQ_;B|lZ;hn#{Y#Qoa*LP)HS$;Jl z41jF%MG4@as)Xu73A>`r#S)i@q()Q;2?~2P++)Wtt%T5A6jYPn_D@rK*#6TjQ&gTx z`xu36zs(@Ajl}crgHFYcdeK>3py%WJRGER#>_qw|NRiLj{@2;!((Lx1bQ%^uqU=d2|Ly+eN1rZ!t$+B1F#NZa=u-1x z4@e*o6>xV)vmL`*u)I=R`*ggZ@1vXVSRXQR*F=nYQLYuK;wR02)jM0%`w>=Pyps@q z+bTow<9xZ`1RUnVo!5tNQ6x7ihkYlsgida``BPvI+P&}(xwZ9cwHr%vZ2cCgPeoA6 zuc?~yGxd_gUyM#)H92GJrL^Db4;@>Uum-%)5@ttuRn~1f^0~F^0U3L{{|$}0^_dDU zEiNjyxB91x^s=Dp_)Ra#VVT8Pko#%w z&Y%yUIIY`mHhA|_JW4gaPJ=MOAc0r{DZ9T;9^ajlRr%!l8zvA0>x7ck#i5F3%8G88 zH3{Dd&+-&r77WOe--^O5+En3uq4ZrzDiq8RbM@OR>oIKxx$*I4PeZc9hM824Y{o`+ zD?x%Zw1x?3+yt63eV$1-!@2W^U*<{OJxNGi06hYsNk;Cvot%tWMl>&u}n;hiYlA$RLaHZ9>!DheSf_De7qTzyJP{fct&ERTkM zzg8n8pwA93{S2FU=IwF>UDFH1T|GT#X127J`~~X)O@Wc=BmkoPD1_*A{b77+PN}Mj zhZ*0EE&mwOu#+9E(+TD1)uz`+YoHC0srVBqCURv8KFni9&<{>*_BVML^zh}rJG#*WoxdK(%w5-wvXLpa4F0WzsUiP z`#AL9y?^u(0I#eHeM8$**v5k>yU(G7_4qIJ;Nz*NjFajl5QAeYQ&lApVIhq04DSwc z&^Jpf#(#6GwuVM^(jQH4iC_#U5Nv$f1js;Gs~sQ=bKZ!qQIkiU!lN%cSo$%Wt#xi6 zX=juY$0f10I+}RBF9br;}qknIV&!D3|$*a81zLC#B$7 z;(VQ%C1diWhrcLwNpJpYeu?A(|ERR>%|c*G;ZdB+ju2a!U-~_wL?`8~=b#afg(5`` z%`m0;Gq6F2AEgD5OEn^cRZ5zk{Z&#WU1v9HI>)s~yy^4zoxD*M8%(a0NsEuK0wo6b zGDEsZ^~hi(rzZ)ce-uLfyHOA~B(`XjC$mtAFEW$!wYd@_R+6&td~tgRjJ#1wCiQFbKU#FNcD~hCriH5ypE!5OyKZJ+KlKh z5I(H3#4w-sv$S}1he_IzYat5u0In8;#+p_>*Lh->B^eB(1e2dVCEad3o7%F$alC`? zM2lpiHb85vm+FtMad!vP-O%=>^=Nu{dFo^IY37~ofU;0@qvltco#6dW^-cTQ8Do_r( zcRQP8sH*)2Tzrpzy;(Bf(SS9)e5l9^6$W(L2&N{)FIGc`ovz}nj4RF-g4r_jXx2*S z(|CGqR zJN9T?QOZGsAL~p6`#OnF>cE5k@&WL@$pCT_azVydj9eY5*NF>G{BpJqX9CWDj0JvY z-j_nq{y2?=cy<0kfp#$8!>Pm&SAC*o4S$F>{&foZL#XOBOlGlMr5cJ0yG?NIskb2a z09)kME{R{A5iysNg(CsA+fWGEN~J;1BsQNHd*V<$7ousxwSg>MWYb7RAHKyyuGdE5 zGMK@N*svl|8Hmgfbf=U!ZpH5Xkvc*VO*jGYS0%s2FRtfDoI-Q3%pa`Y zW_F$bU=FxH&h0FoszxiwQzS#1BtZ~($p@#J?&ryHArw`2jCyy}k|^cuh*>}Bwpvhl zYVgMf?GbYI_~wL@V(;_Q;7-ywem32v0t>H&UU(n&5uy0aIU8~ID_hvazdkdnW&fdp z>7P^svN9+9JVM;L)dOk_2I`Zp433Bd3ODm{2Ov8*hUz>u7N`oKf+wJA^EP^TaPDWM z?EIfXI>#0w0w|Fpga`RhKdtt6`WBEyHe;H2Er@1+CUW5?MEyCZdKG!2fy_%qr2xp% zp7!oyoE3rkkGaa{XIbt9qxHS?XKuxBIaWhb*rLoTP(bfJ$$qw&+8a^5%%HYR%6J2j z9C1X;7tEAqorNxFfoW0S8KU@qVLTl5Ul{MDw6l=EEf>4^FLli4YmGw}o@uAkeffykl= zKjE^CMyuyfhMh{mbrB09D$F$bkA)>(1C1KU)Jm7>&^+e1@~RbFU1fO zOx;cu2BHzNY0DJe{Y25q;;Ds7X8Yd^`Ia**I}Sxx|tHp!du@#8&juBy?I>R~_3oUp zWY8@~5`-Sug$C}uH$Kdc>9hklm6ipN@lsBX*6Qba>r`QNpPDI4A=8G6cbOIR6abUd zB)&S`*)mAy+8loLn2`GP*DcJpt8z^VQYlRmp9}zVK3ujIoBU2jvxy%Gp)aorByOga z&cX~twhh#e;6MXw^x33$&Pp+msJ*3v=Q1>IwTAJ-+Dm>-zHFw6`{gsr_|tNlAqv1b zhH=208AR6ymzd9A#8&EWot7je#OZE0>Bh;AV%X(RFq_d=_@|pKK_T>k;mm6_=WaL) zD&{O(<$FKzpJQI3ijRbdWUHXt^kO{@%rc_MfmI zlgh9lc^&1G3uBPAKd)(;=_*dG$0Iv$PabYcEh19eP7Pzipu*QmM|nd0JFZlGm}+Zl z1>%V4RwsQ*x;|LGroD?DQ+n^UM?iljbb}QBO6ErB-Jsf7jA< zRP?t@fNIzUD$m|`37J!+avM4PQnQfT_z8!z-W>CWh#xa$-NPxxnd(-8B?gg&v0;z; z!p>lkq>>z>J!_gGjkfMLH>ZsXs2y&gpY_U63sh= z{rauTc>Ci^JTc7w;rip{a8MGX$>>}c?&>J%T3)K{%B~E@a8|V?*UCO$j8b&PcVHI@ zn4OB#7pV01=i4KbdDKaAtK0=qmrA(tmlb}~T$a11j)}bfJd{jsu|h-Z=y)aU&Ef*l zjLUq#E{G#3+NaPenM-6KbW!>PfqP$8N?T`w_xEeByX>Rd`QUqC=EE*c)`uHO-AzSD zm6OQ?K|^VXX6b(fPQzI7qz|Pyh%H;ic_1UN9}&7U8bEyRip9}+`{HXvF!fzs5+}&`8JE631jSW zS_^jCKZp4qQSJ+s9gqf6`uYM>R8+R=Brqo1DqT~9t+bR4-9CF9M>0s>A zFTNLM%d;~@R4->|xevDE?UHqJ&{{2TXX@3WuD8vN{=^0M{C4$eM-4eNZ=V!Ud^8%S zB0;TcM{l;6C3C1<25an_v*_mEPSGxoY|xJr5L^wjfoCmiUKjazoc`e@*542Hb^&!v zQ~I0fbb|Cj7V_!fPXPFl3C$}X98j$zZkZPH*c05CREB$}YwR#ZYv7^(7*+IE^e;9? z$qOZHu}NG+U?Qx{^&WdSpDf5sl=9`8*lfT1gLyZ~U*D1)(n--o!2ZxQsYhWZ9+$bf zoUl1d$Y(}o(VXDfSyW&%YxOGe19rxi#5~;`aUN#3jVZ#O`%;udzvnM{>Gn-(pCK(} zhlkHbQF5M7A_V#Bbx1v@QU@E@zs_Xt&y^q^miU9dAJzd z!<^|3;gi+3JFgo2mMNug$K`+|ypS?CNox#&iJE_Mrp0!Cbu+J>Eh{D{Kw@l)qPbqL$ zZO^WfYClQ(_+{o%xJEN3uiX`0-lgc8eL*LIL87L%2M}QO2I@!0nDUXAZ@&7LtevB0 zILV+m8{|dTt)1vhm6@+xv%|(M1bRbXA%&U2&h)G{#wM3ZP*nd_XkegS%V?8=G zF+$jpZ_&3aY3^{6AKJr>A0Z7ms`Iu9OgG2l}#^L zdnNbu#8#ypUgg4x9UrQff@E7k=gvxVc%49)|2RbvT2W!Tc`am974nLYwcl6SC%-#6 zzGD`cZ?D$}T6KNQYlEyjA58>2G@^IO?n)7o8sBe<4>B~!RI)p}g^_ut_SK&7zmkF&n||_uCY^H4{14(6x%IJ} zBtndUvBH*QRLFt?hr6>c{Q~=3DPj^vw!qd2qGCnmuwuE7S$V3P6aMA~_4Kck?Vo4= zM5j~wxkd7nNai*$9X%6qAQ#kAZz+^e5ha7S6o~6c!o80z3$#jB2 zwY0IUH7W(x>IC+w0vw{)%!Y~PtA!o$)JGOPn6C7QlUErt%t}^#PR#LLcG-GY*u`;>V(=*7H?g$RABB2_>NTb=^=w=%x`d6!mS5a(YT5dos z+FW7_F~q|D-^x~FwaYe|JD^4v3$+vDd_K4R2|E6b3nUhjzVVic^nVLmlqV$QAclj4 z(twUP^m)K$1Ru z8||!N^%({F`_sqnKc3&7AaEH*E{h9&_X@o@3i|_6h@l3V@Y7|%#KhT^5s4sdv$Eq0 z)yjo3KuIE6eEp=e{;&7Iv16uW-Fdjr8(50Z9#dz}Jjv{Ih8pg)NBHaUA5X%`Jz7vK zwDa*Cb{j*OoXUdm2vWznr|Esf05(JB)4smxJ1u&~q91D9$OL93xv zd<-%Fc7JSm4ltrknx!fBAB}otP266Qq+}D>q$c}gfOV7TVlTT)Z~oD&2S1Us^2y;t z`8x!}aYr!a{+{hSRXUONx6|mo-ZYQ-j!=W=CkBapj`?Zhx_HI8$L#E91CFs$ODcVc zwX$Dh*-_{#x9R$>&{&>cBUWZBsNOr!@!Qc*FUb8Fm?Twi!8xM44vSo2=`$&d>wVJ* zjZ?tK1R6@YS$4mfs1i*~+;Uk!AiuVpuJ2z<7yDlQ>_Zu9_k|2NpLR~bcO<-tQ@0^K t|HI{dX`G(Um4KONevXsk>Hgk*kU@rSiy@vY<$tAnker%qxr|xJ{{WTDsO|s& literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/download_success_icon.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/download_success_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f6f1197a934c28a588dbdf678769c3f667b40c34 GIT binary patch literal 9547 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_offline_map.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_offline_map.xml new file mode 100644 index 0000000000..6ae72b0a13 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_offline_map.xml @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_system_version.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_system_version.xml index ce0064ad18..3972c865ff 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_system_version.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_system_version.xml @@ -82,7 +82,6 @@ android:visibility="gone" /> - + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml index 333b277f12..dc18d3181a 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml @@ -74,4 +74,5 @@ #FF282F62 #FFFFFF + #E63B4577 \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml index 90c260be7e..3ef5be5b45 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml @@ -53,4 +53,11 @@ 是否绑定车机? 蘑菇星云 + 离线地图缓存提醒 + 是否缓存最新版本离线地图? + 离线地图下载中 + 离线地图下载成功 + 离线地图下载失败 + 确定 + 重试 diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt index eb8e799ed2..122866ef06 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt @@ -312,4 +312,5 @@ interface IMoGoWaringProvider : IMoGoHmiViewProxy { */ fun updateMfStatus(tag: String, status: Boolean) + fun updateHDDataCacheStatus(isCached: Boolean) } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt index 1c8aa2182e..38c385b3e9 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt @@ -498,6 +498,7 @@ object CallerHmiManager : CallerBase() { waringProviderApi?.updateMfStatus(tag, status) } - - + fun updateHDDataCacheStatus(isCached: Boolean) { + waringProviderApi?.updateHDDataCacheStatus(isCached) + } } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt index 2c2698f641..571b02d4b9 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt @@ -5,6 +5,7 @@ import com.mogo.eagle.core.data.constants.MogoServicePaths import com.mogo.eagle.core.function.api.map.IMogoMapService import com.mogo.eagle.core.function.api.map.marker.IMogoMarkerService import com.mogo.eagle.core.function.call.base.CallerBase +import com.mogo.map.hdcache.IHdCacheListener import com.mogo.map.listener.IMogoHosListenerRegister import com.mogo.map.location.IMogoLocationClient import com.mogo.map.marker.IMogoMarkerManager @@ -42,4 +43,12 @@ object CallerMapUIServiceManager { fun getMarkerService(): IMogoMarkerService? { return serviceProvider?.markerService } + + fun cacheHDDataByCity(listener: IHdCacheListener) { + serviceProvider?.mapUIController?.cacheHDDataByCity(listener) + } + + fun isCityDataCached(): Boolean { + return serviceProvider?.mapUIController?.isCityDataCached ?: true + } } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 05094db3c7..8dcee00caa 100644 --- a/gradle.properties +++ b/gradle.properties @@ -85,7 +85,7 @@ MOGO_LOCATION_VERSION=1.4.3.32 MOGO_TELEMATIC_VERSION=1.4.3.32 ######## MogoAiCloudSDK Version ######## # 自研地图 -MAP_SDK_VERSION=2.9.0.14_test_06 +MAP_SDK_VERSION=2.10.0.2 MAP_SDK_OPERATION_VERSION=1.1.4.1 # websocket WEBSOCKET_VERSION=1.1.7 diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/hdcache/IHdCacheListener.kt b/libraries/mogo-map-api/src/main/java/com/mogo/map/hdcache/IHdCacheListener.kt new file mode 100644 index 0000000000..4761e40fff --- /dev/null +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/hdcache/IHdCacheListener.kt @@ -0,0 +1,5 @@ +package com.mogo.map.hdcache + +interface IHdCacheListener { + fun onMapHdCacheProgress(cityId: Int, progress: Double) +} \ No newline at end of file diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java index 09ebf694d4..eaa04ac0c6 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java @@ -10,6 +10,7 @@ import androidx.annotation.RawRes; import com.mogo.eagle.core.data.map.CenterLine; import com.mogo.eagle.core.data.map.MogoLatLng; +import com.mogo.map.hdcache.IHdCacheListener; import org.json.JSONObject; @@ -340,4 +341,11 @@ public interface IMogoMapUIController { */ void setAllGesturesEnabled(boolean isEnable); + void cacheHDDataByCity(IHdCacheListener listener); + + /** + * 当前城市离线数据是否已缓存 + * @return + */ + boolean isCityDataCached(); } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java index e1266b96c7..6e65bd6ca2 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java @@ -26,6 +26,7 @@ import android.util.Log; import android.view.MotionEvent; import android.view.View; +import androidx.annotation.MainThread; import androidx.annotation.NonNull; import com.mogo.commons.constants.SharedPrefsConstants; @@ -46,7 +47,9 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.map.hdcache.IHdCacheListener; import com.mogo.map.listener.MogoMapListenerHandler; +import com.mogo.map.location.GDLocationClient; import com.mogo.map.navi.MogoCarLocationChangedListenerRegister; import com.mogo.map.uicontroller.CarCursorOption; import com.mogo.map.uicontroller.EnumMapUI; @@ -54,6 +57,7 @@ import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.map.uicontroller.MapCameraPosition; import com.mogo.map.uicontroller.MapControlResult; import com.mogo.map.uicontroller.VisualAngleMode; +import com.mogo.map.utils.HDMapUtils; import com.mogo.map.utils.MogoMapUtils; import com.mogo.map.utils.ObjectUtils; import com.mogo.map.utils.ResIdCache; @@ -70,6 +74,7 @@ import com.zhidaoauto.map.sdk.open.abs.log.ILog; import com.zhidaoauto.map.sdk.open.camera.CameraPosition; import com.zhidaoauto.map.sdk.open.camera.CameraUpdateFactory; import com.zhidaoauto.map.sdk.open.camera.LatLngBounds; +import com.zhidaoauto.map.sdk.open.data.CityInfo; import com.zhidaoauto.map.sdk.open.data.MapDataApi; import com.zhidaoauto.map.sdk.open.location.LocationClient; import com.zhidaoauto.map.sdk.open.location.LocationListener; @@ -126,6 +131,7 @@ public class AMapViewWrapper implements IMogoMapView, private boolean mIsDelayed = false; private final LocationListener mGpsLocationListener = location -> CallerMapLocationListenerManager.INSTANCE.invokeMapLocationChangeListener(ObjectUtils.fromLocation(location), 0, true); + private IHdCacheListener hdCacheListener; public AMapViewWrapper(MapAutoView mMapView) { CallerLogger.INSTANCE.i(M_MAP + TAG, "autoop--AMapViewWrapper: init"); @@ -1169,4 +1175,47 @@ public class AMapViewWrapper implements IMogoMapView, mMapView.getMapAutoViewHelper().setAllGesturesEnabled(isEnable); } } + + @Override + public void cacheHDDataByCity(IHdCacheListener listener) { + if (mMapView.getMapAutoViewHelper() != null) { + String gdCityCode = GDLocationClient.getInstance(getContext()).getLastCityCode(); + Integer id = HDMapUtils.getHDCityCode(gdCityCode); + if (id != null) { + hdCacheListener = listener; + mMapView.getMapAutoViewHelper().cacheHDDataByCity(id, (cityId, progress) -> { + if (Thread.currentThread() == Looper.getMainLooper().getThread()) { + if (hdCacheListener != null) { + hdCacheListener.onMapHdCacheProgress(cityId, progress * 100); + } + } else { + UiThreadHandler.post(() -> { + if (hdCacheListener != null) { + hdCacheListener.onMapHdCacheProgress(cityId, progress * 100); + } + }); + } + }); + } + } + } + + @Override + public boolean isCityDataCached() { + if (mMapView.getMapAutoViewHelper() != null) { + String gdCityCode = GDLocationClient.getInstance(getContext()).getLastCityCode(); + Integer id = HDMapUtils.getHDCityCode(gdCityCode); + if (id != null) { + List cityInfoList = mMapView.getMapAutoViewHelper().getAllCityCode(); + if (cityInfoList != null) { + for (CityInfo cityInfo : cityInfoList) { + if (id == cityInfo.getCityCode()) { + return cityInfo.isCache; + } + } + } + } + } + return true; + } } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java index 431623fe4e..edda8cd20b 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java @@ -3,14 +3,13 @@ package com.mogo.map; import android.graphics.Point; import android.graphics.Rect; import android.location.Location; -import android.util.Log; import android.view.View; import com.mogo.eagle.core.data.map.CenterLine; import com.mogo.eagle.core.data.map.MogoLatLng; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.map.hdcache.IHdCacheListener; import com.mogo.map.uicontroller.CarCursorOption; -import com.mogo.map.uicontroller.EnumMapUI; import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.map.uicontroller.MapCameraPosition; import com.mogo.map.uicontroller.MapControlResult; @@ -444,4 +443,19 @@ public class MogoMapUIController implements IMogoMapUIController { mDelegate.setAllGesturesEnabled(isEnable); } } + + @Override + public void cacheHDDataByCity(IHdCacheListener listener) { + if (mDelegate != null) { + mDelegate.cacheHDDataByCity(listener); + } + } + + @Override + public boolean isCityDataCached() { + if (mDelegate != null) { + return mDelegate.isCityDataCached(); + } + return true; + } } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java index 7b75cd8e64..7a4d26ad38 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java @@ -8,6 +8,7 @@ import android.view.View; import com.mogo.eagle.core.data.map.CenterLine; import com.mogo.eagle.core.data.map.MogoLatLng; +import com.mogo.map.hdcache.IHdCacheListener; import com.zhidaoauto.map.sdk.open.MapAutoApi; import org.json.JSONObject; @@ -375,4 +376,19 @@ public class AMapUIController implements IMogoMapUIController { mClient.setAllGesturesEnabled(isEnable); } } + + @Override + public void cacheHDDataByCity(IHdCacheListener listener) { + if (mClient != null) { + mClient.cacheHDDataByCity(listener); + } + } + + @Override + public boolean isCityDataCached() { + if (mClient != null) { + return mClient.isCityDataCached(); + } + return true; + } } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/utils/HDMapUtils.kt b/libraries/mogo-map/src/main/java/com/mogo/map/utils/HDMapUtils.kt new file mode 100644 index 0000000000..b15a5c2704 --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/utils/HDMapUtils.kt @@ -0,0 +1,27 @@ +package com.mogo.map.utils + +object HDMapUtils { + private val cityCodeMap by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + val map = HashMap() + map["0831"] = 5115// 宜宾市 + map["0512"] = 3205// 苏州市 + map["0872"] = 5329// 大理市 + map["0711"] = 4207// 鄂州市 + map["028"] = 5101// 成都市 + map["0931"] = 6201// 兰州市 + map["0535"] = 3706// 烟台市 + map["027"] = 4201// 武汉市 + map["010"] = 1101// 北京市 + map["0734"] = 4304// 衡阳市 + map + } + + /** + * gdCityCode: 高德CityCode + * return: 高精地图CityCode + */ + @JvmStatic + fun getHDCityCode(gdCityCode: String?): Int? { + return cityCodeMap[gdCityCode] + } +} \ No newline at end of file From 68c6a64d5cfb5b80a0316cca3725fc60145ca46a Mon Sep 17 00:00:00 2001 From: lianglihui Date: Mon, 13 Feb 2023 14:25:01 +0800 Subject: [PATCH 25/81] =?UTF-8?q?2134=20=E6=94=AF=E6=8C=81sop=20=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E7=9B=92=E5=AD=90=E5=B1=8F=E8=94=BD=E5=B7=A5=E6=8E=A7?= =?UTF-8?q?=E6=9C=BAerror=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/hmi/ui/msgbox/DriverMsgBoxBubbleView.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxBubbleView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxBubbleView.kt index fb8fabb4a4..510a89d1e9 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxBubbleView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxBubbleView.kt @@ -85,9 +85,13 @@ class DriverMsgBoxBubbleView @JvmOverloads constructor( if(isShowData){ CallerHmiManager.updateDriverMsgBoxTipView(true) if(category == MsgCategory.RECORD_BAG){ - //弹出被动录包弹窗 - CallerDevaToolsManager.onReceiveBadCaseRecord(msgBoxBean,context as Activity,true) - }else{ + if(!FunctionBuildConfig.isDemoMode){ + //弹出被动录包弹窗 + CallerDevaToolsManager.onReceiveBadCaseRecord(msgBoxBean,context as Activity,true) + } + } else if(category == MsgCategory.SYS_INFO){ + //todo 过滤MAP系统异常报警 + } else{ clMsgBubbleLayout.visibility = View.VISIBLE dataList.add(msgBoxBean) driverMsgBoxBubbleAdapter?.setData(dataList) From 94892eae529298bf30f85e71532709d5b43cb248 Mon Sep 17 00:00:00 2001 From: zhongchao Date: Mon, 13 Feb 2023 17:52:10 +0800 Subject: [PATCH 26/81] [2.13.2-sop] change the roma mode default to freedom --- .../java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt index e91ae1c911..d623504d63 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt @@ -85,7 +85,7 @@ object FunctionBuildConfig { */ @Volatile @JvmField - var romaModeStyle = 1 + var romaModeStyle = 0 /** * 是否开启感知物替换颜色功能 From 81e1f0c2654e2236c8b0b76c517dccf8ccd8d3fb Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Mon, 13 Feb 2023 18:32:46 +0800 Subject: [PATCH 27/81] =?UTF-8?q?[2.14.0][Opt]=E5=9C=B0=E5=9B=BE=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E5=8A=9F=E8=83=BD=E4=BA=A4=E4=BA=92=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/function/hmi/ui/widget/SystemVersionView.kt | 11 ++++++++--- .../src/main/res/values/strings.xml | 1 + .../src/main/java/com/mogo/map/utils/HDMapUtils.kt | 1 + 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt index 41a04ccee5..f3291ce9c3 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt @@ -51,6 +51,8 @@ class SystemVersionView @JvmOverloads constructor( private var previousProgress: Int = -1 //前一秒的下载进度,用于计算下载剩余时间 private var currentProgress: Int = -1 //当前已下载包体大小 + private var isHDCached = false + init { LayoutInflater.from(context).inflate(R.layout.view_system_version, this, true) initView() @@ -138,7 +140,11 @@ class SystemVersionView @JvmOverloads constructor( } ivHDCache.setOnClickListener { - OfflineMapDialog(context).show() + if (isHDCached) {// 已缓存 + ToastUtils.showShort(resources.getString(R.string.offline_had_downloaded)) + } else {// 未缓存 + OfflineMapDialog(context).show() + } } updateHDDataCacheStatus(CallerMapUIServiceManager.isCityDataCached()) @@ -250,11 +256,10 @@ class SystemVersionView @JvmOverloads constructor( fun updateHDDataCacheStatus(isCached: Boolean) { if (isCached) { ivHDCacheStatus?.setImageResource(R.drawable.icon_latest_version) - ivHDCache.isEnabled = false } else { ivHDCacheStatus?.setImageResource(R.drawable.icon_be_updated) - ivHDCache.isEnabled = true } + isHDCached = isCached } /** diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml index 3ef5be5b45..6bae6b18ef 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml @@ -58,6 +58,7 @@ 离线地图下载中 离线地图下载成功 离线地图下载失败 + 当前已为最新版本 确定 重试 diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/utils/HDMapUtils.kt b/libraries/mogo-map/src/main/java/com/mogo/map/utils/HDMapUtils.kt index b15a5c2704..72e8eadaa5 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/utils/HDMapUtils.kt +++ b/libraries/mogo-map/src/main/java/com/mogo/map/utils/HDMapUtils.kt @@ -3,6 +3,7 @@ package com.mogo.map.utils object HDMapUtils { private val cityCodeMap by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { val map = HashMap() + // TODO:("高精地图自己去做") map["0831"] = 5115// 宜宾市 map["0512"] = 3205// 苏州市 map["0872"] = 5329// 大理市 From 1829d191debf77cd119d6ae5339ddd0cf813d38d Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Mon, 13 Feb 2023 18:33:41 +0800 Subject: [PATCH 28/81] =?UTF-8?q?[2.14.0]=E6=B6=88=E6=81=AF=E7=9B=92?= =?UTF-8?q?=E5=AD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/hmi/ui/msgbox/DriverMsgBoxListView.kt | 1 + .../hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxListView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxListView.kt index 76c87a28ab..937864de91 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxListView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxListView.kt @@ -250,6 +250,7 @@ class DriverMsgBoxListView @JvmOverloads constructor( notifyData() ipcReportList?.let { linearLayoutManager?.scrollToPositionWithOffset(it.indexOf(msgBoxBean),0) + driverMsgBoxListAdapter?.setReportShowData(msgBoxBean) } } } \ 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/msgbox/adapter/DriverMsgBoxListAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt index 1cbb3186d0..9987bfaa74 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt @@ -31,6 +31,7 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : RecyclerView.Adapter() { private var data: List? = null + private var reportBean: MsgBoxBean ?= null private val operation: Int = 1 private val notice: Int = 2 @@ -49,6 +50,10 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : notifyDataSetChanged() } + fun setReportShowData(reportClickBean: MsgBoxBean){ + reportBean = reportClickBean + } + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { when (viewType) { record -> { @@ -102,6 +107,7 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : } is MsgBoxIpcReportHolder -> { data?.let { it -> + val reportMsgBox = it[position] holder.tvReportTimeNormal.text = "时间:${TimeUtils.millis2String(it[position].timestamp)}" holder.tvReportTimeOpen.text = @@ -182,6 +188,12 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : holder.tvReportActionOpen.visibility = View.GONE } } + reportBean?.let { + if(reportMsgBox.timestamp == it.timestamp){ + holder.tvStatusSelect.performClick() + } + } + } } is MsgBoxOperation -> { From 5677d2c01135fa3fb428922d531b9d076dc63e83 Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Tue, 14 Feb 2023 10:08:52 +0800 Subject: [PATCH 29/81] =?UTF-8?q?[2.14.0]=20=E5=8F=B8=E6=9C=BA=E7=AB=AF?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8F=B72.14.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 8dcee00caa..3e288c6fbd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -93,8 +93,8 @@ WEBSOCKET_VERSION=1.1.7 applicationId=com.mogo.launcer applicationName=IntelligentPilot # RoboBus司机端:2.5.1;RoboTaxi司机端:2.5.1;RoboTaxi乘客端:1.0.0 -versionCode=2130200 -versionName=2.13.2 +versionCode=2140000 +versionName=2.14.0 ################# 新架构模块Maven版本管理 ################# MOGO_CORE_FUNCTION_AUTOPILOT_VERSION=0.0.58.10 From 392eff6182b95053d60866c15b63e49946e42848 Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Tue, 14 Feb 2023 10:31:52 +0800 Subject: [PATCH 30/81] =?UTF-8?q?[2.14.0]=20bus=E5=8F=B8=E6=9C=BA=E7=AB=AF?= =?UTF-8?q?=E5=A4=84=E7=90=86=E7=BC=96=E8=AF=91=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/mogo/och/bus/fragment/BusFragment.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BusFragment.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BusFragment.java index 1e9e003dfe..b8deed7471 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BusFragment.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BusFragment.java @@ -44,6 +44,8 @@ import org.greenrobot.eventbus.ThreadMode; import java.util.List; +import bag_manager.BagManagerOuterClass; + /** * 网约车小巴界面 @@ -536,4 +538,8 @@ public class BusFragment extends BaseBusTabFragment } } } + + @Override + public void onBagManagerResult(@NonNull BagManagerOuterClass.BagManager bagManager) { + } } From d8b5c2fb8d110be88c758d4ee37edb052cf7c2be Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Tue, 14 Feb 2023 17:49:48 +0800 Subject: [PATCH 31/81] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=BD=A6=E6=A8=A1?= =?UTF-8?q?=E5=81=B6=E7=8E=B0=E9=97=AA=E7=83=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bindingcar/network/BindingcarNetWorkManager.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/network/BindingcarNetWorkManager.java b/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/network/BindingcarNetWorkManager.java index b687adde48..8c73f63889 100644 --- a/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/network/BindingcarNetWorkManager.java +++ b/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/network/BindingcarNetWorkManager.java @@ -80,7 +80,9 @@ public class BindingcarNetWorkManager { if (info != null && info.getData() != null) { CallerLogger.INSTANCE.d(M_BINDING + TAG, "getBindingcarInfo onNext info.getData() =" + info.getData().toString()); //根据车辆类型切换不同的车辆模型,只针对红旗做处理 - updateCarVrIconRes(info.getData().getBrandId()); + if (!SharedPrefsMgr.getInstance(context).getString(SharedPrefsConstants.MAC_ADDRESS).equals(macAddress)) { + updateCarVrIconRes(info.getData().getBrandId()); + } switch (info.getData().getCompare()) { case "0": CallerHmiManager.INSTANCE.showBindingcarDialog(); @@ -93,6 +95,7 @@ public class BindingcarNetWorkManager { break; } SharedPrefsMgr.getInstance(context).putString(SharedPrefsConstants.CAR_INFO, GsonUtils.toJson(info.getData())); + SharedPrefsMgr.getInstance(context).putString(SharedPrefsConstants.MAC_ADDRESS, macAddress); } } From 689ea857371c6e20377ff6daa873956d9a6e3756 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Tue, 14 Feb 2023 18:41:08 +0800 Subject: [PATCH 32/81] =?UTF-8?q?[2.14.0]=E4=BF=AE=E5=A4=8D=E5=BD=95?= =?UTF-8?q?=E5=8C=85=E5=B7=A5=E5=85=B7=E4=B8=89=E6=9C=9FBug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/biz/BadCaseManagerView.kt | 84 +++---------------- .../badcase/biz/BagUploadDialog.java | 4 + 2 files changed, 15 insertions(+), 73 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt index 79e5aaa59e..da77d8f0f6 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt @@ -73,6 +73,8 @@ internal class BadCaseManagerView @JvmOverloads constructor( tvSelectAll.setOnClickListener { if(bagManagerEntity.bagsInfoResp.size>0){ selectedBagSize = 0 + selectedBagNum = 0 + bagManagerList.clear() for(selectBagInfo in bagManagerEntity.bagsInfoResp){ if(selectBagInfo.itemType == 0){ selectBagInfo.selectStatus = true @@ -213,79 +215,6 @@ internal class BadCaseManagerView @JvmOverloads constructor( // DownloadManager.getInstance().download("CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav", // "/mnt/sdcard/mogo/","test13.wav") -// val descriptionEntityOne = BagDescriptionEntity("包信息描述1",false, -// "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",false) -// val bagInfoEntityOne = BagInfoEntity() -// bagInfoEntityOne.key = 12341 -// bagInfoEntityOne.totalSize = 1*1024*1024*1000 -// bagInfoEntityOne.timestamp = "20230208125414" -// bagInfoEntityOne.bagPath = "" -// bagInfoEntityOne.mergeStat = false -// bagInfoEntityOne.uploadStat = false -// bagInfoEntityOne.description = descriptionEntityOne -// -// val descriptionEntityTwo = BagDescriptionEntity("包信息描述2",true, -// "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",true) -// val bagInfoEntityTwo = BagInfoEntity() -// bagInfoEntityTwo.key = 12342 -// bagInfoEntityTwo.totalSize = 2*1024*1024*1000 -// bagInfoEntityTwo.timestamp = "20230208125414" -// bagInfoEntityTwo.bagPath = "" -// bagInfoEntityTwo.mergeStat = false -// bagInfoEntityTwo.uploadStat = false -// bagInfoEntityTwo.description = descriptionEntityTwo -// -// val descriptionEntityThree = BagDescriptionEntity("包信息描述3",true, -// "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",true) -// val bagInfoEntityThree = BagInfoEntity() -// bagInfoEntityThree.key = 12343 -// bagInfoEntityThree.totalSize = 1*1027*1000 -// bagInfoEntityThree.timestamp = "20230208125414" -// bagInfoEntityThree.bagPath = "" -// bagInfoEntityThree.mergeStat = false -// bagInfoEntityThree.uploadStat = false -// bagInfoEntityThree.description = descriptionEntityThree -// -// val descriptionEntityFour = BagDescriptionEntity("包信息描述4",true, -// "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",true) -// val bagInfoEntityFour = BagInfoEntity() -// bagInfoEntityFour.key = 12344 -// bagInfoEntityFour.totalSize = 10*1024*1024*1000L -// bagInfoEntityFour.timestamp = "20230208125414" -// bagInfoEntityFour.bagPath = "" -// bagInfoEntityFour.mergeStat = false -// bagInfoEntityFour.uploadStat = false -// bagInfoEntityFour.description = descriptionEntityFour -// -// val list: MutableList = ArrayList() -// list.add(bagInfoEntityOne) -// list.add(bagInfoEntityTwo) -// list.add(bagInfoEntityThree) -// list.add(bagInfoEntityFour) -// for(entity in list){ -// entity.timestamp?.let { -// val month = it.substring(4,6) -// val day = it.substring(6,8) -// val time = "${month}月${day}日" -// var containTime = false -// for(bag in bagManagerEntity.bagsInfoResp){ -// if(bag.timeStr == time){ -// containTime = true -// } -// } -// if(!containTime || bagManagerEntity.bagsInfoResp.size ==0){ -// //增加时间的 -// val bagInfoEntity = BagInfoEntity() -// bagInfoEntity.itemType = 1 -// bagInfoEntity.timeStr = time -// bagManagerEntity.bagsInfoResp.add(bagInfoEntity) -// } -// bagManagerEntity.bagsInfoResp.add(entity) -// } -// } -// -// bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) - } fun setOnClickListener(clickListener: ClickListener) { @@ -303,6 +232,9 @@ internal class BadCaseManagerView @JvmOverloads constructor( if(bagManager.reqType == 1){ //遍历各个主机的硬盘空间信息 if(bagManager.spaceInfoRespCount>0){ + spaceTotal = 0 + spaceUsed = 0 + spaceFree = 0 for(spaceInfo in bagManager.spaceInfoRespList){ spaceInfo.diskSpaceInfo?.let { spaceTotal += it.total @@ -388,6 +320,12 @@ internal class BadCaseManagerView @JvmOverloads constructor( } } } + //上传Cos执行完成 + if(bagManagerList.size == 0 && selectedBagNum != 0){ + ToastUtils.showShort("上传命令完成") + bagUploadDialog?.uploadCompleted() + tvCancelSelect.performClick() + } } //删除Bag else if(bagManager.reqType == 4){ diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BagUploadDialog.java b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BagUploadDialog.java index 95154416e3..00dd1145b0 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BagUploadDialog.java +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BagUploadDialog.java @@ -109,6 +109,10 @@ public class BagUploadDialog extends Dialog { viewUploadProgress.setProgress((totalNum-remainNum)*100/totalNum); } + public void uploadCompleted(){ + dismiss(); + } + interface BagUploadListener{ //取消上传 void cancelUpload(); From f1c1fd34eb2ba7159c46186040e09652cd5af399 Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Tue, 14 Feb 2023 19:38:47 +0800 Subject: [PATCH 33/81] =?UTF-8?q?[dev=5Frobotaxi-d-app-module=5F2132=5F221?= =?UTF-8?q?223=5F2.13.2=5Fsop]=20=E4=BF=AE=E6=94=B9obu=E7=BA=A2=E7=BB=BF?= =?UTF-8?q?=E7=81=AF=E6=B6=88=E5=A4=B1=E7=9A=84=E7=8A=B6=E6=80=81=E5=9B=9E?= =?UTF-8?q?=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../obu/mogo/MogoPrivateObuNewManager.kt | 82 ++++--------------- .../core/TrafficLightDispatcher.kt | 10 ++- .../IMoGoObuTrafficLightDisapperListener.kt | 12 +++ .../api/obu/IMoGoObuTrafficLightListener.kt | 1 - .../CallerObuTrafficLightDisappearManager.kt | 61 ++++++++++++++ 5 files changed, 100 insertions(+), 66 deletions(-) create mode 100644 core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/obu/IMoGoObuTrafficLightDisapperListener.kt create mode 100644 core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuTrafficLightDisappearManager.kt diff --git a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt index 7bf199d550..c012b9f31e 100644 --- a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt +++ b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt @@ -18,6 +18,7 @@ import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager.Scene.Defa import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager.Scene.TooClose import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.function.call.obu.CallerObuListenerManager +import com.mogo.eagle.core.function.call.obu.CallerObuTrafficLightDisappearManager import com.mogo.eagle.core.function.call.obu.CallerObuTrafficLightListenerManager import com.mogo.eagle.core.function.call.v2x.CallObuLimitingSpeedListenerManager import com.mogo.eagle.core.function.obu.mogo.utils.TrafficDataConvertUtilsNew @@ -758,30 +759,35 @@ class MogoPrivateObuNewManager private constructor() { // 这里排除需要特殊定制的语音及文案外,其余的都可以使用 EventTypeEnumNew 提供的 var alertContent: String = "" var ttsContent: String = "" + var saveAppId: String = "" var changeVisualAngle = false when (appId) { - //交叉路口碰撞预警 + //前向碰撞预警 MogoObuConstants.V2X_WARNING_TYPE.FCW.toString() -> { alertContent = EventTypeEnumNew.getWarningContent(EventTypeEnumNew.TYPE_USECASE_ID_FCW.poiType) ttsContent = EventTypeEnumNew.getWarningTts(EventTypeEnumNew.TYPE_USECASE_ID_FCW.poiType) + saveAppId = EventTypeEnumNew.TYPE_USECASE_ID_FCW.poiType } //交叉路口碰撞预警 MogoObuConstants.V2X_WARNING_TYPE.ICW.toString() -> { alertContent = EventTypeEnumNew.getWarningContent(EventTypeEnumNew.TYPE_USECASE_ID_ICW.poiType) ttsContent = EventTypeEnumNew.getWarningTts(EventTypeEnumNew.TYPE_USECASE_ID_ICW.poiType) + saveAppId = EventTypeEnumNew.TYPE_USECASE_ID_ICW.poiType } //左转辅助预警 MogoObuConstants.V2X_WARNING_TYPE.LTA.toString() -> { alertContent = EventTypeEnumNew.getWarningContent(EventTypeEnumNew.TYPE_USECASE_ID_LTA.poiType) ttsContent = EventTypeEnumNew.getWarningTts(EventTypeEnumNew.TYPE_USECASE_ID_LTA.poiType) + saveAppId = EventTypeEnumNew.TYPE_USECASE_ID_LTA.poiType } //盲区预警 MogoObuConstants.V2X_WARNING_TYPE.BSW.toString() -> { ttsContent = EventTypeEnumNew.getWarningTts(EventTypeEnumNew.TYPE_USECASE_ID_BSW.poiType) alertContent = EventTypeEnumNew.getWarningContent(EventTypeEnumNew.TYPE_USECASE_ID_BSW.poiType) + saveAppId = EventTypeEnumNew.TYPE_USECASE_ID_BSW.poiType if ( direction == WarningDirectionEnum.ALERT_WARNING_LEFT || direction == WarningDirectionEnum.ALERT_WARNING_TOP_LEFT || @@ -805,6 +811,7 @@ class MogoPrivateObuNewManager private constructor() { MogoObuConstants.V2X_WARNING_TYPE.LCW.toString() -> { alertContent = EventTypeEnumNew.getWarningContent(EventTypeEnumNew.TYPE_USECASE_ID_LCW.poiType) ttsContent = EventTypeEnumNew.getWarningTts(EventTypeEnumNew.TYPE_USECASE_ID_LCW.poiType) + saveAppId = EventTypeEnumNew.TYPE_USECASE_ID_LCW.poiType if ( direction == WarningDirectionEnum.ALERT_WARNING_LEFT || direction == WarningDirectionEnum.ALERT_WARNING_TOP_LEFT || @@ -826,12 +833,14 @@ class MogoPrivateObuNewManager private constructor() { MogoObuConstants.V2X_WARNING_TYPE.DNPW.toString() -> { alertContent = EventTypeEnumNew.getWarningContent(EventTypeEnumNew.TYPE_USECASE_ID_DNPW.poiType) ttsContent = EventTypeEnumNew.getWarningTts(EventTypeEnumNew.TYPE_USECASE_ID_DNPW.poiType) + saveAppId = EventTypeEnumNew.TYPE_USECASE_ID_DNPW.poiType } //紧急制动预警 MogoObuConstants.V2X_WARNING_TYPE.EBW.toString() -> { alertContent = EventTypeEnumNew.getWarningContent(EventTypeEnumNew.TYPE_USECASE_ID_EBW.poiType) ttsContent = EventTypeEnumNew.getWarningTts(EventTypeEnumNew.TYPE_USECASE_ID_EBW.poiType) + saveAppId = EventTypeEnumNew.TYPE_USECASE_ID_EBW.poiType } //异常车辆提醒 @@ -840,6 +849,7 @@ class MogoPrivateObuNewManager private constructor() { ttsContent = EventTypeEnumNew.getWarningTts(EventTypeEnumNew.TYPE_USECASE_ID_AVW.poiType) alertContent = String.format(alertContent, direction.desc) ttsContent = String.format(ttsContent, direction.desc) + saveAppId = EventTypeEnumNew.TYPE_USECASE_ID_AVW.poiType } //车辆失控预警 @@ -848,11 +858,13 @@ class MogoPrivateObuNewManager private constructor() { ttsContent = EventTypeEnumNew.getWarningTts(EventTypeEnumNew.TYPE_USECASE_ID_CLW.poiType) alertContent = String.format(alertContent, direction.desc) ttsContent = String.format(ttsContent, direction.desc) + saveAppId = EventTypeEnumNew.TYPE_USECASE_ID_CLW.poiType } //车辆失控预警 MogoObuConstants.V2X_WARNING_TYPE.EVW.toString() -> { alertContent = EventTypeEnumNew.getWarningContent(EventTypeEnumNew.TYPE_USECASE_ID_EVW.poiType) ttsContent = EventTypeEnumNew.getWarningTts(EventTypeEnumNew.TYPE_USECASE_ID_EVW.poiType) + saveAppId = EventTypeEnumNew.TYPE_USECASE_ID_EVW.poiType } // 这里处理固定的提示信息,包括了<紧急车辆提醒> @@ -868,7 +880,7 @@ class MogoPrivateObuNewManager private constructor() { MogoObuConstants.STATUS.UPDATE -> { CallerLogger.d( "$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", - "new handleSdkObu appId2 = $appId --- level = $level ---ttsContent = $ttsContent --- alertContent = $alertContent --- direction = $direction" + "new handleSdkObu appId2 = $saveAppId --- level = $level ---ttsContent = $ttsContent --- alertContent = $alertContent --- direction = $direction" ) if (level == 2 || level == 3) { //不显示弹框,其它保留 @@ -876,7 +888,7 @@ class MogoPrivateObuNewManager private constructor() { MsgBoxBean( MsgBoxType.V2X, V2XMsg( - appId, + saveAppId, alertContent, ttsContent ) @@ -885,10 +897,10 @@ class MogoPrivateObuNewManager private constructor() { } ) CallerHmiManager.warningV2X( - appId, + saveAppId, alertContent, ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 - (appId + direction.direction),//使用当前事件类型+方向记录tag,当发生变化的时候关闭当前弹出新的 + (saveAppId + direction.direction),//使用当前事件类型+方向记录tag,当发生变化的时候关闭当前弹出新的 object : IMoGoWarningStatusListener { override fun onShow() { super.onShow() @@ -958,9 +970,7 @@ class MogoPrivateObuNewManager private constructor() { isShowGreenWave = false isShowRunRedLight = false isYellowLight = false -// lightCountDownRed = 1 -// lightCountDownGreen = 1 -// lightCountDownYellow = 1 + CallerObuTrafficLightDisappearManager.invokeObuTrafficLightDisappear() } } } @@ -971,11 +981,6 @@ class MogoPrivateObuNewManager private constructor() { private var isShowGreenWave = false private var isShowRunRedLight = false -// private var lightCountDownRed : Int = 1 -// private var lightCountDownGreen : Int = 1 -// private var lightCountDownYellow : Int = 1 - - /** * 修改红绿灯 */ @@ -1044,15 +1049,9 @@ class MogoPrivateObuNewManager private constructor() { if (minSpeedTemp == maxSpeedTemp) { minSpeedTemp -= 5 } - val adviceSpeed = "$minSpeedTemp - $maxSpeedTemp" val adviceSpeedTts = "$minSpeedTemp 到 $maxSpeedTemp" -// val adviceSpeed = -// "${Math.round(currentLight.suggestMinSpeed*3.6)} - ${Math.round(currentLight.suggestMaxSpeed*3.6)}" -// val adviceSpeedTts = -// "${Math.round(currentLight.suggestMinSpeed*3.6)} 到 ${Math.round(currentLight.suggestMaxSpeed*3.6)}" - ttsContent = String.format( EventTypeEnumNew.getWarningTts(EventTypeEnumNew.TYPE_USECASE_ID_IVP_GREEN.poiType), @@ -1100,87 +1099,42 @@ class MogoPrivateObuNewManager private constructor() { } // 红灯 2, 3 -> { -// if (!isGreenLight) { //只有不是是绿灯,才能展示跳转到红灯 if (!isRedLight) { CallerHmiManager.disableWarningV2X(appId.toString()) isRedLight = true } isGreenLight = false isYellowLight = false -// lightCountDownYellow = 1 -// lightCountDownGreen = 1 - CallerObuTrafficLightListenerManager.invokeObuTrafficLight(1) val red = currentLight.countDown.toInt() -// Log.e("lixp", " ----11--- red --------- = $red ----lightCountDownRed = $lightCountDownRed ----isGreenLight = $isGreenLight") -// //记录当前红灯的上一帧的值 10,9,10 -// if (lightCountDownRed == 1) { //最后一个灯态是1 -// lightCountDownRed = red -// } -// -// if (lightCountDownRed < red) { //10 9 -// return -// } -// lightCountDownRed = red -// Log.e("lixp", " ----22--- red --------- = $red ----lightCountDownRed = $lightCountDownRed ----isGreenLight = $isGreenLight") CallerHmiManager.changeCountdownRed(red) -// } } // 绿灯 4, 5, 6 -> { -// if (!isYellowLight) { //只有不是黄灯的时候,才能跳转到绿灯 if (!isGreenLight) { CallerHmiManager.disableWarningV2X(appId.toString()) isGreenLight = true } isRedLight = false isYellowLight = false -// lightCountDownRed = 1 -// lightCountDownYellow = 1 CallerObuTrafficLightListenerManager.invokeObuTrafficLight(3) val green = currentLight.countDown.toInt() -// Log.e("lixp", " ----11--- green --------- = $green ---lightCountDownGreen = $lightCountDownGreen ----isYellowLight = $isYellowLight") -// if (lightCountDownGreen == 1) { -// lightCountDownGreen = green -// } -// -// if (lightCountDownGreen < green) { -// return -// } -// lightCountDownGreen = green -// Log.d("lixp", " ----22--- green --------- = $green ---lightCountDownGreen = $lightCountDownGreen ----isYellowLight = $isYellowLight") CallerHmiManager.changeCountdownGreen(green) -// } } // 黄灯 7, 8 -> { -// if (!isRedLight) { //黄灯只能跳转绿灯 if (!isYellowLight) { isYellowLight = true } isRedLight = false isGreenLight = false -// lightCountDownRed = 1 -// lightCountDownGreen = 1 - CallerHmiManager.disableWarningV2X(appId.toString()) CallerObuTrafficLightListenerManager.invokeObuTrafficLight(2) val yellow = currentLight.countDown.toInt() -// Log.e("lixp", " -----11-- yellow --------- = $yellow ---lightCountDownYellow = $lightCountDownYellow ----isYellowLight = $isYellowLight") -// if (lightCountDownYellow == 1) { -// lightCountDownYellow = yellow -// } -// -// if (lightCountDownYellow < yellow) { -// return -// } -// lightCountDownYellow = yellow -// Log.d("lixp", " -----22-- yellow --------- = $yellow ---lightCountDownYellow = $lightCountDownYellow ----isYellowLight = $isYellowLight") CallerHmiManager.changeCountdownYellow(yellow) } } -// } } diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/TrafficLightDispatcher.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/TrafficLightDispatcher.kt index 03ca1b2c9d..3fa53c8834 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/TrafficLightDispatcher.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/TrafficLightDispatcher.kt @@ -5,10 +5,12 @@ import android.os.Handler import android.util.Log import com.mogo.eagle.core.data.trafficlight.TrafficLightResult import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener +import com.mogo.eagle.core.function.api.obu.IMoGoObuTrafficLightDisapperListener import com.mogo.eagle.core.function.api.obu.IMoGoObuTrafficLightListener import com.mogo.eagle.core.function.api.trafficlight.IMoGoTrafficLightListener import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager import com.mogo.eagle.core.function.call.hmi.CallerHmiManager +import com.mogo.eagle.core.function.call.obu.CallerObuTrafficLightDisappearManager import com.mogo.eagle.core.function.call.obu.CallerObuTrafficLightListenerManager import com.mogo.eagle.core.function.call.trafficlight.CallerTrafficLightListenerManager import com.mogo.eagle.core.function.v2x.trafficlight.TrafficLightHMIManager @@ -21,7 +23,7 @@ import perception.TrafficLightOuterClass.TrafficLight * @since: 2022/4/28 */ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLightListener, - IMoGoObuTrafficLightListener { + IMoGoObuTrafficLightListener, IMoGoObuTrafficLightDisapperListener { companion object { const val TAG = "TrafficLightDispatcher" @@ -50,6 +52,8 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight CallerAutopilotIdentifyListenerManager.addListener(TAG, this) //obu红绿灯数据 CallerObuTrafficLightListenerManager.registerObuTrafficLightListener(TAG, this) + //obu红绿灯数据消失 + CallerObuTrafficLightDisappearManager.registerObuTrafficLightListener(TAG, this) } /** @@ -153,6 +157,10 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight CallerHmiManager.showWarningTrafficLight(light, 3) } + override fun onObuLightDisapper() { + hasObuLightStatus = false + } + fun destroy() { //取消注册监听AI云获取红绿灯状态 CallerTrafficLightListenerManager.unRegisterTrafficLightListener(TAG) diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/obu/IMoGoObuTrafficLightDisapperListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/obu/IMoGoObuTrafficLightDisapperListener.kt new file mode 100644 index 0000000000..a5297714cd --- /dev/null +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/obu/IMoGoObuTrafficLightDisapperListener.kt @@ -0,0 +1,12 @@ +package com.mogo.eagle.core.function.api.obu + + +/** + * @author lixiaopeng + * @date 2022/1/30 10:28 下午 + * OBU 灯态信息 消失 + */ +interface IMoGoObuTrafficLightDisapperListener { + + fun onObuLightDisapper() +} \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/obu/IMoGoObuTrafficLightListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/obu/IMoGoObuTrafficLightListener.kt index 1b4be4e95c..de5b5aee6a 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/obu/IMoGoObuTrafficLightListener.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/obu/IMoGoObuTrafficLightListener.kt @@ -11,5 +11,4 @@ interface IMoGoObuTrafficLightListener { * @param light 灯的信息 */ fun onObuTrafficLight(light: Int){} - } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuTrafficLightDisappearManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuTrafficLightDisappearManager.kt new file mode 100644 index 0000000000..3302fafd29 --- /dev/null +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuTrafficLightDisappearManager.kt @@ -0,0 +1,61 @@ +package com.mogo.eagle.core.function.call.obu + +import com.mogo.eagle.core.function.api.obu.IMoGoObuTrafficLightDisapperListener +import com.mogo.eagle.core.function.api.obu.IMoGoObuTrafficLightListener +import java.util.concurrent.ConcurrentHashMap + +object CallerObuTrafficLightDisappearManager { + + private val M_OBU_TRAFFIC_LIGHT_LISTENER: ConcurrentHashMap = + ConcurrentHashMap() + + /** + * 添加监听 + * @param tag 标记,用来注销监听使用 + * @param listener 监听回调 + */ + fun registerObuTrafficLightListener( + tag: String, + listener: IMoGoObuTrafficLightDisapperListener + ) { + if (M_OBU_TRAFFIC_LIGHT_LISTENER.containsKey(tag)) { + return + } + M_OBU_TRAFFIC_LIGHT_LISTENER[tag] = listener + } + + /** + * 删除监听 + * @param tag 标记,用来注销监听使用 + */ + fun unRegisterObuTrafficLightListener(tag: String) { + if (!M_OBU_TRAFFIC_LIGHT_LISTENER.containsKey(tag)) { + return + } + M_OBU_TRAFFIC_LIGHT_LISTENER.remove(tag) + } + + /** + * 删除监听 + * @param listener 要删除的监听对象 + */ + fun unRegisterObuTrafficLightListener(listener: IMoGoObuTrafficLightListener) { + if (!M_OBU_TRAFFIC_LIGHT_LISTENER.containsValue(listener)) { + return + } + M_OBU_TRAFFIC_LIGHT_LISTENER.forEach { + if (it.value == listener) { + M_OBU_TRAFFIC_LIGHT_LISTENER.remove(it.key) + } + } + } + + fun invokeObuTrafficLightDisappear() { + M_OBU_TRAFFIC_LIGHT_LISTENER.forEach { + val tag = it.key + val listener = it.value + listener.onObuLightDisapper() + } + } + +} \ No newline at end of file From 76e5b8d72c052475c728d0b0ace748f12b703b4d Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Tue, 14 Feb 2023 19:43:39 +0800 Subject: [PATCH 34/81] [dev_robotaxi-d-app-module_2132_221223_2.13.2_sop] opt --- .../CallerObuTrafficLightDisappearManager.kt | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuTrafficLightDisappearManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuTrafficLightDisappearManager.kt index 3302fafd29..6985c8501a 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuTrafficLightDisappearManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuTrafficLightDisappearManager.kt @@ -39,16 +39,16 @@ object CallerObuTrafficLightDisappearManager { * 删除监听 * @param listener 要删除的监听对象 */ - fun unRegisterObuTrafficLightListener(listener: IMoGoObuTrafficLightListener) { - if (!M_OBU_TRAFFIC_LIGHT_LISTENER.containsValue(listener)) { - return - } - M_OBU_TRAFFIC_LIGHT_LISTENER.forEach { - if (it.value == listener) { - M_OBU_TRAFFIC_LIGHT_LISTENER.remove(it.key) - } - } - } +// fun unRegisterObuTrafficLightListener(listener: IMoGoObuTrafficLightListener) { +// if (!M_OBU_TRAFFIC_LIGHT_LISTENER.containsValue(listener)) { +// return +// } +// M_OBU_TRAFFIC_LIGHT_LISTENER.forEach { +// if (it.value == listener) { +// M_OBU_TRAFFIC_LIGHT_LISTENER.remove(it.key) +// } +// } +// } fun invokeObuTrafficLightDisappear() { M_OBU_TRAFFIC_LIGHT_LISTENER.forEach { From dc318d17329ab3cef3a1b9cf8dcfe233623bc35b Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Wed, 15 Feb 2023 01:13:53 +0800 Subject: [PATCH 35/81] =?UTF-8?q?[2.14.0]=E5=BD=95=E5=8C=85=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E4=BF=AE=E5=A4=8DBug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../biz/adapter/BagManagerListAdapter.kt | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt index a5bc9e11d0..0dbf9915b2 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt @@ -60,31 +60,36 @@ class BagManagerListAdapter: RecyclerView.Adapter() { bagClickListener?.onClick(bagInfoEntity,isChecked) } - holder.etBagNameEdit.addTextChangedListener(object:TextWatcher{ + val textWatcher: TextWatcher = object : TextWatcher { override fun beforeTextChanged( - s: CharSequence?, - start: Int, - count: Int, - after: Int + charSequence: CharSequence, + i: Int, + i1: Int, + i2: Int ) { - } - override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { - - } - - override fun afterTextChanged(s: Editable?) { + override fun onTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {} + override fun afterTextChanged(editable: Editable) { bagInfoEntity.description?.let { desc-> - val descriptionStr = s.toString() + val descriptionStr = editable.toString() if(desc.description != descriptionStr){ desc.description = descriptionStr bagClickListener?.editDescription(bagInfoEntity.key,desc) } } } + } + holder.etBagNameEdit.onFocusChangeListener = + View.OnFocusChangeListener { p0, hasFocus -> + val edit = p0 as EditText + if(hasFocus){ + edit.addTextChangedListener(textWatcher) + }else{ + edit.removeTextChangedListener(textWatcher) + } + } - }) bagInfoEntity.description?.let { des-> if(des.reportBI){ From b1bcb53f749accc9f7155dc6448b0674b2805791 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Wed, 15 Feb 2023 01:26:18 +0800 Subject: [PATCH 36/81] =?UTF-8?q?[2.14.0]=E5=A2=9E=E5=8A=A0=E5=BD=95?= =?UTF-8?q?=E5=8C=85=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/biz/BadCaseManagerView.kt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt index da77d8f0f6..801708f121 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt @@ -6,6 +6,7 @@ import android.graphics.Color import android.graphics.drawable.ColorDrawable import android.os.Handler import android.util.AttributeSet +import android.util.Log import android.view.LayoutInflater import android.view.View import androidx.constraintlayout.widget.ConstraintLayout @@ -228,6 +229,24 @@ internal class BadCaseManagerView @JvmOverloads constructor( override fun onBagManagerResult(bagManager: BagManagerOuterClass.BagManager) { super.onBagManagerResult(bagManager) UiThreadHandler.post { + Log.i(TAG,"onBagManagerResult Start") + Log.i(TAG,"keyReq="+bagManager.keyReq) + Log.i(TAG,"reqType="+bagManager.reqType) + Log.i(TAG,"descReq description="+bagManager.descReq.description + +" audioUrl="+bagManager.descReq.audioUrl + +" reportBI="+bagManager.descReq.reportBI + +" hasAudio="+bagManager.descReq.hasAudio) + for(logBag in bagManager.bagsInfoRespList){ + Log.i(TAG,"bagPath="+logBag.bagPath) + Log.i(TAG,"timestamp="+logBag.timestamp) + Log.i(TAG,"description="+logBag.description) + Log.i(TAG,"key="+logBag.key) + Log.i(TAG,"mergeStat="+logBag.mergeStat) + Log.i(TAG,"totalSize="+logBag.totalSize) + Log.i(TAG,"uploadStat="+logBag.uploadStat) + } + Log.i(TAG,"onBagManagerResult End") + //获取空间使用信息 if(bagManager.reqType == 1){ //遍历各个主机的硬盘空间信息 From 2c37831abbd482f8fa3bb569796840c885751cfc Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Wed, 15 Feb 2023 11:33:55 +0800 Subject: [PATCH 37/81] =?UTF-8?q?[dev=5Frobotaxi-d-app-module=5F2132=5F221?= =?UTF-8?q?223=5F2.13.2=5Fsop]=20=E4=BC=98=E5=8C=96=E8=BD=A6=E6=A8=A1?= =?UTF-8?q?=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eagle/core/function/bindingcar/BindingcarProvider.java | 2 +- .../bindingcar/network/BindingcarNetWorkManager.java | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/BindingcarProvider.java b/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/BindingcarProvider.java index f484c74f53..0f3a288a2d 100644 --- a/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/BindingcarProvider.java +++ b/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/BindingcarProvider.java @@ -94,7 +94,7 @@ public class BindingcarProvider implements IMoGoBindingcarProvider { @Override public void modifyCarInfo(BindingcarCallBack callBack) { - BindingcarNetWorkManager.getInstance().modifyBindingcar(mAddress, mWidevineIDWithMd5, callBack, getScreenType()); + BindingcarNetWorkManager.getInstance().modifyBindingcar(mContext, mAddress, mWidevineIDWithMd5, callBack, getScreenType()); } private void driverScreen(String macAddress, String widevineIDWithMd5) { diff --git a/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/network/BindingcarNetWorkManager.java b/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/network/BindingcarNetWorkManager.java index 8c73f63889..4f563ecc8a 100644 --- a/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/network/BindingcarNetWorkManager.java +++ b/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/network/BindingcarNetWorkManager.java @@ -115,7 +115,7 @@ public class BindingcarNetWorkManager { * 绑定和修改绑定车辆 * mac: 48:b0:2d:3a:9c:19 */ - public void modifyBindingcar(String macAddress, String widevineIDWithMd5, BindingcarCallBack callBack, int screenType) { + public void modifyBindingcar(Context context, String macAddress, String widevineIDWithMd5, BindingcarCallBack callBack, int screenType) { // String macAddress1 = "48:b0:2d:4d:33:40"; // String sn = "X2020220417KA94QIN"; BindingcarRequest request = new BindingcarRequest(macAddress, widevineIDWithMd5, screenType); @@ -133,7 +133,10 @@ public class BindingcarNetWorkManager { if (info != null) { callBack.callBackResult(info); CallerLogger.INSTANCE.d(M_BINDING + TAG, "modifyBindingcar onNext code = " + info.code + "---msg = " + info.msg + "--info.toString() = " + info.toString()); - updateCarVrIconRes(info.getData().getBrandId()); + if (!SharedPrefsMgr.getInstance(context).getString(SharedPrefsConstants.MAC_ADDRESS).equals(macAddress)) { + updateCarVrIconRes(info.getData().getBrandId()); + } + SharedPrefsMgr.getInstance(context).putString(SharedPrefsConstants.MAC_ADDRESS, macAddress); } } From f265c9d037add4c9cf44566d5e68b7723b944a75 Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Wed, 15 Feb 2023 17:14:36 +0800 Subject: [PATCH 38/81] =?UTF-8?q?[2.14.0][Opt]=E5=AF=B9=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E7=9B=92=E5=AD=90=E4=B8=ADV2X=E5=92=8C=E8=BF=90=E8=90=A5?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E7=9A=84=E5=8F=82=E6=95=B0=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/eagle/core/data/msgbox/OperationMsg.kt | 10 +++++++++- .../java/com/mogo/eagle/core/data/msgbox/V2XMsg.kt | 5 +++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/OperationMsg.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/OperationMsg.kt index 230e98dca5..75e7be26bd 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/OperationMsg.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/OperationMsg.kt @@ -1,8 +1,16 @@ package com.mogo.eagle.core.data.msgbox +import android.util.Log +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import java.io.Serializable /** * 运营消息:-1表示初始值 */ -data class OperationMsg(val timestamp : Long, val content: String, val type: Int = -1): Serializable +data class OperationMsg(val timestamp : Long, val content: String, val type: Int = -1): Serializable { + init { + if (content.isEmpty()) { + CallerLogger.e("MsgBox", Log.getStackTraceString(Throwable())) + } + } +} diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/V2XMsg.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/V2XMsg.kt index 374c545563..b4f98777f5 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/V2XMsg.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/V2XMsg.kt @@ -1,5 +1,7 @@ package com.mogo.eagle.core.data.msgbox +import android.util.Log +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import java.io.Serializable data class V2XMsg(var type: String = "", var content: String? = "", var tts: String? = ""): Serializable { @@ -9,5 +11,8 @@ data class V2XMsg(var type: String = "", var content: String? = "", var tts: Str init { timeStamp = System.currentTimeMillis() + if (content.isNullOrEmpty()) { + CallerLogger.e("MsgBox", Log.getStackTraceString(Throwable())) + } } } \ No newline at end of file From a52a6e5688a54fa9b3311541c8f1c51d44061ec1 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Thu, 16 Feb 2023 01:12:41 +0800 Subject: [PATCH 39/81] =?UTF-8?q?[2.14.0]=E5=BD=95=E5=8C=85=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E4=BB=BB=E5=8A=A1=E7=AE=A1=E7=90=86=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?Bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/biz/BadCaseManagerView.kt | 6 +- .../res/drawable-xhdpi/icon_bag_no_data.png | Bin 0 -> 17281 bytes .../res/layout/layout_badcase_manager.xml | 327 ++++++++++-------- .../core/function/hmi/ui/MoGoHmiFragment.kt | 57 ++- .../api/hmi/warning/IMoGoWaringProvider.kt | 5 + 5 files changed, 253 insertions(+), 142 deletions(-) create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/drawable-xhdpi/icon_bag_no_data.png diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt index 801708f121..31d0b57875 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt @@ -35,7 +35,7 @@ import java.util.* * @description BadCase录包管理页面 * @since: 2022/12/15 */ -internal class BadCaseManagerView @JvmOverloads constructor( +class BadCaseManagerView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 @@ -66,6 +66,8 @@ internal class BadCaseManagerView @JvmOverloads constructor( private fun initView(){ background = ColorDrawable(Color.parseColor("#F0151D41")) + clLayout.setOnClickListener { + } //关闭BadCase管理窗口 ivManagerClose.setOnClickListener { clickListener?.onClose() @@ -272,6 +274,8 @@ internal class BadCaseManagerView @JvmOverloads constructor( } //遍历所有bag else if(bagManager.reqType == 2){ + clBagHaveDataLayout.visibility = View.VISIBLE + clBagNoDataLayout.visibility = View.GONE if(bagManager.bagsInfoRespCount>0){ for(bagInfo in bagManager.bagsInfoRespList){ bagInfo?.let { diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable-xhdpi/icon_bag_no_data.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable-xhdpi/icon_bag_no_data.png new file mode 100644 index 0000000000000000000000000000000000000000..5f4ea0176bbdfed99a9cfa982a3e91b672f0dc9d GIT binary patch literal 17281 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

D zH*0CBvjpL*cYXUXTi(-21$-UsR{}!f;M=rSEGmdAXkB zjgr&!$(s=*qSN3mKD4-Z@Z z{Fx44EAFwdUs*GLgroPU*LqNr(UN0~>U;d5U?<+$=InXyMJfC6sh*?ptV%}YE*7Pn zsmkVmTFZK*NCl{vPA?Io=y&k0I3HCskG*i>Z4UYt-gFKD0oeNQzW@d~|6H4P9_kr* zej=JLzF>hGt9D%#ku}I8PbOU6*5IIJ2Zk82k|PQYHA+m_{C&!p&6T(Szh|x^2bDLT z{}{k7x66fBQRL`!@q3p-I{dnKyWGU5!HPPPA!b2(0sK}4EuSWAYDYBJm!7r;(tZWj$)r~%9p=GCjywY$>IqEYapiDzM%;| zu@R6G{&v!uT&yTfiwhyoUmq+oa?y_U?5Dcw!T-xhHw+IV9L43d4vpQIT!yni$o}$C z!I6ZCm;R4a2Bi>UitQe#`ll1#ej$WZU$OwMC>EiNcqw3KP$IM=_eV;Mgje3vCe=$_ z;Z7v#=Z*|7E&W4TAVW$v-7Au>K9+KUyl;7B2N@M+=q=i;jSLuXr#+b#>7|>tZDF_%8PIwJd@cr8dO)d_sVHmay z8dI*wKptkD?t^-w&*RS<+qWqp%MX`N$R$`a0cF7=`9Gj3#vW4iBgO_y9jggJP%@r` z)?;+M>Z16BMCY~eL;#DH=={G35CjD%x22Q}cWcD_<)tq!OUp;VHO=IkJ#f#W5reAn zSX%eHl3;E45>{CJKLQ2;`TnAL5l>+F4fEXjsm@&j>De~V%*~Bbn_WSlQ2jwgQQ?=N z|81|v&@p*@s57U>0=SUOa&$$-$ZZkJ}N zT}Am=Dg?0IgX<#ZY&xEfNwxE`PY1TY5;ns86!ZBp4dF+8$~L6gm}HeTTQB`| - + android:id="@+id/clLayout" + > - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintTop_toBottomOf="@id/viewManagerTitleLine" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toLeftOf="@id/viewManagerTitleLine" + android:visibility="gone" + > - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt index 582699cdbf..daed3fa99b 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt @@ -106,6 +106,7 @@ import com.mogo.eagle.core.utilcode.util.* import com.mogo.eagle.core.utilcode.util.TimeUtils import com.mogo.eagle.core.utilcode.util.TimeUtils.millis2String import com.zhidao.support.adas.high.common.MogoReport.Code.Error.EMAP.* +import com.zhjt.mogo_core_function_devatools.badcase.biz.BadCaseManagerView import com.zhjt.mogo_core_function_devatools.badcase.biz.SpaceWarningDialog import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig import com.zhjt.service_biz.BizConfig @@ -142,6 +143,10 @@ class MoGoHmiFragment : MvpFragment(), private var mSOPSettingViewFloat: WarningFloat.Builder? = null private var mSOPSettingView: SOPSettingView? = null + //BadCaseManagerView + private var mBadCaseManagerViewFloat: WarningFloat.Builder ?= null + private var mBadCaseManagerView: BadCaseManagerView?= null + //StatusView private var statusBarView: StatusBarView? = null @@ -564,7 +569,8 @@ class MoGoHmiFragment : MvpFragment(), override fun showBadCaseManagerView() { dismissToolsFloatView() - CallerDevaToolsManager.showBadCaseManagerView(it) +// CallerDevaToolsManager.showBadCaseManagerView(it) + toggleBagManagerView() } }) } @@ -839,6 +845,55 @@ class MoGoHmiFragment : MvpFragment(), } } + override fun toggleBagManagerView() { + activity?.let{ + if (mBadCaseManagerViewFloat != null) { + WarningFloat.dismiss(mBadCaseManagerViewFloat!!.config.floatTag, false) + mBadCaseManagerViewFloat = null + mBadCaseManagerView = null + } else { + if (mBadCaseManagerView == null) { + mBadCaseManagerView = BadCaseManagerView(it) + mBadCaseManagerView?.setOnClickListener(object: BadCaseManagerView.ClickListener{ + override fun onClose() { + toggleBagManagerView() + } + }) + } + mBadCaseManagerViewFloat = WarningFloat.with(it) + .setTag("mBadCaseManagerView") + .setLayout(mBadCaseManagerView!!) + .setSidePattern(LEFT) + .setGravity(Gravity.LEFT, offsetY = 70) + .setImmersionStatusBar(false) + .setWindowHeight(LayoutParams.MATCH_PARENT) + .setAnimator(object : DefaultAnimator() { + override fun enterAnim( + view: View, + params: LayoutParams, + windowManager: WindowManager, + sidePattern: SidePattern + ): Animator? = + super.enterAnim(view, params, windowManager, sidePattern) + ?.apply { + interpolator = OvershootInterpolator() + } + + override fun exitAnim( + view: View, + params: LayoutParams, + windowManager: WindowManager, + sidePattern: SidePattern + ): Animator? = + super.exitAnim(view, params, windowManager, sidePattern) + ?.setDuration(200) + }) + .show() + } + } + } + + /** * 展示VR下V2X预警 * diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt index 122866ef06..bc1a7dadbb 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt @@ -89,6 +89,11 @@ interface IMoGoWaringProvider : IMoGoHmiViewProxy { */ fun toggleSOPView() + /** + * 开关Bag包任务管理页面 + */ + fun toggleBagManagerView() + /** * 展示VR下V2X预警 * From 05d52ee1f2c4621f613aa81fcf63928b7c4092dc Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Thu, 16 Feb 2023 13:13:14 +0800 Subject: [PATCH 40/81] =?UTF-8?q?[1.9.0]=20=E4=B9=98=E5=AE=A2=E5=B1=8F?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E6=B3=A8=E5=86=8C=E8=87=AA=E9=A9=BE=E7=9B=91?= =?UTF-8?q?=E5=90=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../taxi/passenger/presenter/BaseTaxiPassengerPresenter.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java index 5eebed8920..188b6de7c2 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java @@ -15,6 +15,7 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; import com.mogo.eagle.core.function.call.map.CallerSmpManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.och.common.module.manager.OCHAdasAbilityManager; import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean; import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean; import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerADASStatusCallback; @@ -42,6 +43,7 @@ public class BaseTaxiPassengerPresenter extends Presenter Date: Thu, 16 Feb 2023 13:35:55 +0800 Subject: [PATCH 41/81] =?UTF-8?q?[2.14.0][adas=20lib]=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?AutoPilotReady=E5=AD=97=E6=AE=B5=E6=98=AF=E5=90=A6=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E5=88=A4=E6=96=AD=EF=BC=8C=E7=94=A8=E4=BA=8E=E6=8E=92?= =?UTF-8?q?=E9=99=A4MAP=E7=89=88=E6=9C=AC=E5=92=8CSSM=20Maser=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=B8=8D=E5=8C=B9=E9=85=8D=E5=AF=BC=E8=87=B4=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E5=87=BA=E9=94=99=E9=97=AE=E9=A2=98=EF=BC=8C=E7=BB=86?= =?UTF-8?q?=E5=8C=96=E4=BD=8D=E7=BD=AE=E5=8E=9F=E5=9B=A0=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adas/high/common/AutopilotAbilityManager.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotAbilityManager.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotAbilityManager.java index da5124b491..0e9ebd13de 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotAbilityManager.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotAbilityManager.java @@ -113,7 +113,8 @@ public class AutopilotAbilityManager { } } } - if (version > 1) { + //如果 maser version 大于1,还需要判断AutoPilotReady字段是否存在,以确保MAP版本和SSM Maser版本不陪配情况逻辑能正常执行 + if (version > 1 && statusInfo.hasAutoPilotReady()) { isAutopilotAbility = statusInfo.getAutoPilotReady(); if (!isAutopilotAbility) { SystemStatusInfo.NodeFaultList nodeFaultList = statusInfo.getAutoPilotUnreadyList(); @@ -126,12 +127,12 @@ public class AutopilotAbilityManager { if (state < NODE_INFO_STATE.length) { builder.append(NODE_INFO_STATE[state]); } else { - builder.append("未知 "); + builder.append("未知异常 "); } } unableAutopilotReason = builder.toString(); } else { - unableAutopilotReason = "未知"; + unableAutopilotReason = "未知异常节点"; } } } else { @@ -153,7 +154,7 @@ public class AutopilotAbilityManager { } else if (systemState == SystemStatusInfo.SystemState.REMOTE_PILOT_RUNNING) { unableAutopilotReason = "平行驾驶运行中"; } else { - unableAutopilotReason = "未知"; + unableAutopilotReason = "未知系统状态"; } } } From edcf37b6fb1080f63d3dd1f0c865db6a5865cadb Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Thu, 16 Feb 2023 16:07:31 +0800 Subject: [PATCH 42/81] =?UTF-8?q?[2.14.0][adas=20lib]=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E6=AC=A1=E5=90=AF=E5=8A=A8=E8=87=AA=E9=A9=BE?= =?UTF-8?q?=E8=B5=B7=E4=B8=8D=E6=9D=A5=E9=97=AE=E9=A2=98=EF=BC=8C=E5=A6=82?= =?UTF-8?q?=E6=9E=9C=E7=AC=AC=E4=B8=80=E6=AC=A1=E4=B8=8B=E5=8F=91=E4=BA=86?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E8=87=AA=E5=8A=A8=E9=A9=BE=E9=A9=B6=EF=BC=8C?= =?UTF-8?q?=E6=B2=A1=E8=B5=B7=E6=9D=A5=E6=88=96=E8=80=85=E5=AD=98=E5=9C=A8?= =?UTF-8?q?=E5=B9=B2=E9=A2=84=20=E6=AD=A4=E6=97=B6systemState=E6=98=AFAUTO?= =?UTF-8?q?=5FPILOT=5FSTARTING=20=E9=9C=80=E8=A6=81=E4=BA=8C=E6=AC=A1?= =?UTF-8?q?=E4=B8=8B=E5=8F=91=E5=90=AF=E5=8A=A8=E8=87=AA=E9=A9=BE=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=20=E6=89=80=E4=BB=A5=E9=9C=80=E8=A6=81=E6=8E=92?= =?UTF-8?q?=E9=99=A4=E6=AD=A4=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../support/adas/high/common/AutopilotAbilityManager.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotAbilityManager.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotAbilityManager.java index 0e9ebd13de..934654dd80 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotAbilityManager.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotAbilityManager.java @@ -146,7 +146,9 @@ public class AutopilotAbilityManager { } else if (systemState == SystemStatusInfo.SystemState.SYS_FAULT) { unableAutopilotReason = "系统异常"; } else if (systemState == SystemStatusInfo.SystemState.AUTO_PILOT_STARTING) { - unableAutopilotReason = "正在开始自动驾驶"; + //如果第一次下发了启动自动驾驶,没起来或者存在干预 此时systemState是AUTO_PILOT_STARTING 需要二次下发启动自驾命令 所以需要排除此状态 + isAutopilotAbility = true; + //unableAutopilotReason = "正在开始自动驾驶"; } else if (systemState == SystemStatusInfo.SystemState.AUTO_PILOT_RUNNING) { unableAutopilotReason = "自动驾驶运行中"; } else if (systemState == SystemStatusInfo.SystemState.REMOTE_PILOT_STARTING) { From b19f481b371ddd7ecd8b4a6c063b6b967a40571f Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Fri, 17 Feb 2023 06:54:29 +0800 Subject: [PATCH 43/81] =?UTF-8?q?[2.14.0]fix=E7=BA=A2=E7=BB=BF=E7=81=AFOBU?= =?UTF-8?q?=E6=A0=87=E8=AF=86Bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/call/obu/CallerObuTrafficLightListenerManager.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuTrafficLightListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuTrafficLightListenerManager.kt index a53d5b350e..70662d49e5 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuTrafficLightListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuTrafficLightListenerManager.kt @@ -22,7 +22,6 @@ object CallerObuTrafficLightListenerManager { if (M_OBU_TRAFFIC_LIGHT_LISTENER.containsKey(tag)) { return } - listener.onObuTrafficLight(mLight) M_OBU_TRAFFIC_LIGHT_LISTENER[tag] = listener } From 3e9a8f5bf2a94face0a7629d3fd43f52e84a80fb Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Fri, 17 Feb 2023 06:59:07 +0800 Subject: [PATCH 44/81] =?UTF-8?q?[2.14.0]fix=E7=82=B9=E5=87=BB=E5=A4=9A?= =?UTF-8?q?=E6=AC=A1=E4=B8=8A=E6=8A=A5=E5=90=8E=E4=B8=8A=E6=8A=A5=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E9=87=8D=E5=A4=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/biz/InitiativeBadCaseWindow.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt index c28171471a..2baf361247 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt @@ -155,6 +155,7 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList TipToast.shortTip("请选择至少一个Case") return@setOnClickListener } + uploadReason.clear() if(rbOne.isChecked){ uploadReason.append("严重画龙 ") } From 4b7ccffdcebb9a6d37bf004b53986f9a10cf79ec Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Fri, 17 Feb 2023 07:05:17 +0800 Subject: [PATCH 45/81] =?UTF-8?q?[2.14.0]fix=E5=BD=95=E5=8C=85=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E9=A1=B5=E9=9D=A2=E4=BF=AE=E6=94=B9Bag=E5=8C=85?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0=E5=85=89=E6=A0=87=E8=B7=B3=E8=B7=83=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/biz/BadCaseManagerView.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt index 31d0b57875..ffd635067f 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt @@ -59,6 +59,8 @@ class BadCaseManagerView @JvmOverloads constructor( private val audioSavePath = "/mnt/sdcard/mogo/" + private var isNameModify = false + init { LayoutInflater.from(context).inflate(R.layout.layout_badcase_manager, this, true) initView() @@ -187,6 +189,7 @@ class BadCaseManagerView @JvmOverloads constructor( override fun editDescription(key: Long, description: BagDescriptionEntity) { //编辑Bag包描述信息 + isNameModify = true bagManagerEntity.reqType = 5 bagManagerEntity.keyReq = key bagManagerEntity.descReq = description @@ -382,10 +385,13 @@ class BadCaseManagerView @JvmOverloads constructor( it.hasAudio = bagManager.descReq.hasAudio it.audioUrl = bagManager.descReq.audioUrl } - //更新List - bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) } } + if(!isNameModify){ + //更新List + bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) + } + isNameModify = false } } From c7e65d8c45309ed1111591e6f73ee4ce66e71b3b Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Fri, 17 Feb 2023 07:21:55 +0800 Subject: [PATCH 46/81] =?UTF-8?q?[2.14.0]fix=E4=B8=80=E5=A4=A9=E5=86=85?= =?UTF-8?q?=E7=9A=84bag=E5=85=A8=E9=83=A8=E5=88=A0=E9=99=A4=E5=90=8E?= =?UTF-8?q?=E8=BF=98=E4=BC=9A=E6=98=BE=E7=A4=BA=E5=BD=93=E5=A4=A9=E6=97=A5?= =?UTF-8?q?=E6=9C=9FBug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/biz/BadCaseManagerView.kt | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt index ffd635067f..5984fb2881 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt @@ -361,10 +361,9 @@ class BadCaseManagerView @JvmOverloads constructor( val deleteBagInfo = iterator.next() if(deleteBagInfo.key == bagManager.keyReq){ iterator.remove() -// bagManagerEntity.bagsInfoResp.remove(deleteBagInfo) bagManagerList.remove(deleteBagInfo) //更新列表 - bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) +// bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) if(bagManagerList.size>0){ //继续执行删除命令 bagManagerEntity.reqType = 4 @@ -373,6 +372,30 @@ class BadCaseManagerView @JvmOverloads constructor( } } } + //遍历列表,如当天Bag全部删除,同时把日期标题也删除更新列表 + val titleIterator = bagManagerEntity.bagsInfoResp.iterator() + while(titleIterator.hasNext()){ + val titleBagInfo = titleIterator.next() + if(titleBagInfo.itemType == 1){ + val bagIterator = bagManagerEntity.bagsInfoResp.iterator() + var hasBag = false + while(bagIterator.hasNext()){ + val bagBagInfo = bagIterator.next() + if(bagBagInfo.itemType == 0){ + bagBagInfo.timestamp?.let { + if(it.contains(titleBagInfo.timestamp.toString())){ + hasBag = true + } + } + } + } + if(!hasBag){ + bagIterator.remove() + } + } + } + //更新列表 + bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) } //修改bag附加信息 else if(bagManager.reqType == 5){ From 76f47c6da8660b30cab7e3c71425398a81fb5c3c Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Fri, 17 Feb 2023 07:35:57 +0800 Subject: [PATCH 47/81] =?UTF-8?q?[2.14.0]=E9=81=BF=E5=85=8DBag=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E5=87=BA=E7=8E=B0=E9=87=8D=E5=A4=8Dkey=E7=9A=84bag?= =?UTF-8?q?=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/biz/BadCaseManagerView.kt | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt index 5984fb2881..8150cf6c1b 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt @@ -280,6 +280,7 @@ class BadCaseManagerView @JvmOverloads constructor( clBagHaveDataLayout.visibility = View.VISIBLE clBagNoDataLayout.visibility = View.GONE if(bagManager.bagsInfoRespCount>0){ + bagManagerEntity.bagsInfoResp.clear() for(bagInfo in bagManager.bagsInfoRespList){ bagInfo?.let { it.timestamp?.let { time -> @@ -291,6 +292,7 @@ class BadCaseManagerView @JvmOverloads constructor( bagInfoEntity.bagPath = it.bagPath bagInfoEntity.mergeStat = it.mergeStat bagInfoEntity.uploadStat = it.uploadStat + bagInfoEntity.itemType = 0 bagInfoEntity.description = descriptionEntity for(subBag in it.subBagsList){ val subBagEntity = SubBagEntity(subBag.key,subBag.host,subBag.size) @@ -299,7 +301,7 @@ class BadCaseManagerView @JvmOverloads constructor( val month = time.substring(4,6) val day = time.substring(6,8) - val time = "${month}月${day}日" + val timeStr = "${month}月${day}日" var containTime = false for(bag in bagManagerEntity.bagsInfoResp){ if(bag.timeStr == time){ @@ -308,13 +310,21 @@ class BadCaseManagerView @JvmOverloads constructor( } if(!containTime || bagManagerEntity.bagsInfoResp.size ==0){ //增加时间的 - val bagInfoEntity = BagInfoEntity() - bagInfoEntity.itemType = 1 - bagInfoEntity.timeStr = time + val bagInfoTimeEntity = BagInfoEntity() + bagInfoTimeEntity.itemType = 1 + bagInfoTimeEntity.timeStr = timeStr + bagInfoTimeEntity.timestamp = time.substring(0,8) + bagManagerEntity.bagsInfoResp.add(bagInfoTimeEntity) + } + var containKey = false + for(bagInfoContain in bagManagerEntity.bagsInfoResp){ + if(bagInfoContain.key == bagInfoEntity.key){ + containKey = true + } + } + if(!containKey){ bagManagerEntity.bagsInfoResp.add(bagInfoEntity) } - - bagManagerEntity.bagsInfoResp.add(bagInfoEntity) } } } From 0844eec8fd1e45ffb597f7f6fba36ed9c8326081 Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Thu, 16 Feb 2023 17:08:56 +0800 Subject: [PATCH 48/81] =?UTF-8?q?[dev=5Frobotaxi-d-app-module=5F2132=5F221?= =?UTF-8?q?223=5F2.13.2=5Fsop]=20obu=E7=9A=84v2v=E5=92=8Cv2i=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=E5=BC=80=E5=85=B3=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/hmi/ui/setting/SOPSettingView.kt | 8 ++++++-- .../src/main/res/layout/view_sop_setting.xml | 1 + .../obu/mogo/MogoPrivateObuNewManager.kt | 20 +++++++++++-------- .../eagle/core/data/config/HmiBuildConfig.kt | 4 ++-- 4 files changed, 21 insertions(+), 12 deletions(-) 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 87f08bde14..a584348c3c 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 @@ -103,24 +103,28 @@ class SOPSettingView @JvmOverloads constructor( * 限速数据来源开关 */ tbRoadLimitSpeedSop.setOnCheckedChangeListener { _, isChecked -> - //默认关闭 + //默认开启 HmiBuildConfig.isShowObuLimitSpeedView = isChecked } /** * obu V2V开关 */ + tbObuV2vView.isChecked = HmiBuildConfig.isShowObuV2vView tbObuV2vView.setOnCheckedChangeListener { _, isChecked -> - //默认关闭 + //默认开启 HmiBuildConfig.isShowObuV2vView = isChecked +// Log.e("liyz", "---2222-- v2v = ${HmiBuildConfig.isShowObuV2vView}") } /** * obu V2i开关 */ + tbObuV2iView.isChecked = HmiBuildConfig.isShowObuV2iView tbObuV2iView.setOnCheckedChangeListener { _, isChecked -> //默认关闭 HmiBuildConfig.isShowObuV2iView = isChecked +// Log.d("liyz", "---2--- v2i = ${HmiBuildConfig.isShowObuV2iView}") } /** diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml index e9830e19b0..d6720d62b6 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml @@ -208,6 +208,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="@dimen/dp_20" + android:visibility="gone" android:background="@drawable/radio_button_normal_background_right" android:textColor="#000" android:textOff="获取路侧限速提醒" diff --git a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt index c012b9f31e..a36ed03ddd 100644 --- a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt +++ b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt @@ -164,7 +164,7 @@ class MogoPrivateObuNewManager private constructor() { */ override fun onMogoObuRvWarning(data: MogoObuRvWarningData) { super.onMogoObuRvWarning(data) -// if (HmiBuildConfig.isShowObuV2vView) { //TODO 临时需要关闭v2v开关 + if (HmiBuildConfig.isShowObuV2vView) { mObuStatusInfo.obuRvStatus = true CallerObuListenerManager.invokeListener(mObuStatusInfo) if (!data.warningMsg.warningData.isNullOrEmpty()) { @@ -218,7 +218,7 @@ class MogoPrivateObuNewManager private constructor() { } } } -// } + } } /** @@ -227,13 +227,13 @@ class MogoPrivateObuNewManager private constructor() { override fun onMogoObuSpatWarning(data: MogoObuSpatWarningData) { super.onMogoObuSpatWarning(data) if (data != null) { -// if (HmiBuildConfig.isShowObuV2iView) { + if (HmiBuildConfig.isShowObuV2iView) { handlerTrafficLight( data.warningType, data.status, data.lights ) -// } + } } } @@ -247,7 +247,7 @@ class MogoPrivateObuNewManager private constructor() { */ override fun onMogoObuRsiWarning(data: MogoObuRsiWarningData) { super.onMogoObuRsiWarning(data) -// if (HmiBuildConfig.isShowObuV2iView) { + if (HmiBuildConfig.isShowObuV2iView) { if (data != null && data.warningMsg != null && data.warningMsg.size > 0) { var alertContent = "" var ttsContent = "" @@ -493,7 +493,7 @@ class MogoPrivateObuNewManager private constructor() { } } } -// } + } } /** @@ -513,7 +513,7 @@ class MogoPrivateObuNewManager private constructor() { "$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", "onMogoObuRsmWarning ------> ${data.toString()}" ) -// if (HmiBuildConfig.isShowObuV2iView) { + if (HmiBuildConfig.isShowObuV2iView) { if (HmiBuildConfig.isShowObuWeaknessTrafficView) { // 交通参与者类型 0x0:未知 UNKNOWN | 1机动车 2:非机动车 NON_MOTOR | 3:行人 PEDESTRIAN 4:obu if (data != null && data.participant != null) { @@ -666,7 +666,7 @@ class MogoPrivateObuNewManager private constructor() { } } } -// } + } } /** @@ -1049,6 +1049,10 @@ class MogoPrivateObuNewManager private constructor() { if (minSpeedTemp == maxSpeedTemp) { minSpeedTemp -= 5 } + if (minSpeedTemp < 0) { + minSpeedTemp = 1 + } + val adviceSpeed = "$minSpeedTemp - $maxSpeedTemp" val adviceSpeedTts = "$minSpeedTemp 到 $maxSpeedTemp" diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/HmiBuildConfig.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/HmiBuildConfig.kt index f156f8b981..1f551208f2 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/HmiBuildConfig.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/HmiBuildConfig.kt @@ -105,14 +105,14 @@ object HmiBuildConfig { */ @JvmField @Volatile - var isShowObuV2vView = false + var isShowObuV2vView = true /** * 是否展示obu的v2i */ @JvmField @Volatile - var isShowObuV2iView = false + var isShowObuV2iView = true /** * 是否展示obu通过工控机展示的v2i From d03e03ac8b101af85e5b9fc5691bdc3f2740b01d Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Thu, 16 Feb 2023 17:47:03 +0800 Subject: [PATCH 49/81] =?UTF-8?q?[dev=5Frobotaxi-d-app-module=5F2132=5F221?= =?UTF-8?q?223=5F2.13.2=5Fsop]=20=E4=BF=AE=E6=94=B9obu=E7=9A=84=E5=BC=80?= =?UTF-8?q?=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eagle/core/function/hmi/ui/setting/SOPSettingView.kt | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) 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 a584348c3c..a3a612b656 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 @@ -191,13 +191,8 @@ class SOPSettingView @JvmOverloads constructor( //OBU控制总开关 tbObu.isChecked = CallerOBUManager.isConnected() tbObu.setOnCheckedChangeListener { _, isChecked -> - if (!isChecked) { + if (isChecked) { CallerOBUManager.resetObuIpAddress("192.168.1.199") -// if (AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)) { -// CallerOBUManager.resetObuIpAddress("192.168.1.199") -// } else if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { -// CallerOBUManager.resetObuIpAddress("192.168.8.199") -// } } else { //断开链接 CallerOBUManager.disConnectObu() From 4b42363318394679f0fc4a94b94c5738eb9b40b7 Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Fri, 17 Feb 2023 09:57:31 +0800 Subject: [PATCH 50/81] =?UTF-8?q?[dev=5Frobotaxi-d-app-module=5F2132=5F221?= =?UTF-8?q?223=5F2.13.2=5Fsop]=20=E4=BC=98=E5=8C=96obu=E7=BA=A2=E7=BB=BF?= =?UTF-8?q?=E7=81=AF=E7=9A=84=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/v2x/trafficlight/core/TrafficLightDispatcher.kt | 1 - .../function/call/obu/CallerObuTrafficLightListenerManager.kt | 3 --- 2 files changed, 4 deletions(-) diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/TrafficLightDispatcher.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/TrafficLightDispatcher.kt index 3fa53c8834..c2874fa8af 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/TrafficLightDispatcher.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/TrafficLightDispatcher.kt @@ -152,7 +152,6 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight * obu 红绿灯数据 */ override fun onObuTrafficLight(light: Int) { - super.onObuTrafficLight(light) hasObuLightStatus = true CallerHmiManager.showWarningTrafficLight(light, 3) } diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuTrafficLightListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuTrafficLightListenerManager.kt index 70662d49e5..a3759c6710 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuTrafficLightListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuTrafficLightListenerManager.kt @@ -8,8 +8,6 @@ object CallerObuTrafficLightListenerManager { private val M_OBU_TRAFFIC_LIGHT_LISTENER: ConcurrentHashMap = ConcurrentHashMap() - var mLight: Int = 0 - /** * 添加监听 * @param tag 标记,用来注销监听使用 @@ -52,7 +50,6 @@ object CallerObuTrafficLightListenerManager { } fun invokeObuTrafficLight(light: Int) { - this.mLight = light M_OBU_TRAFFIC_LIGHT_LISTENER.forEach { val tag = it.key val listener = it.value From 2d25a59b1c6e638663c1ca6925c0477c58779952 Mon Sep 17 00:00:00 2001 From: zhongchao Date: Fri, 17 Feb 2023 14:51:46 +0800 Subject: [PATCH 51/81] [2.14.0] fix bug of thread problem --- .../core/function/hmi/ui/MoGoHmiFragment.kt | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt index daed3fa99b..f7b4c5d0ba 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt @@ -1185,25 +1185,27 @@ class MoGoHmiFragment : MvpFragment(), * 控制展示限速标志及内容 */ override fun showLimitingVelocity(limitingSpeed: Int, limitSpeedSource: Int) { - // 控制 限速UI 展示 - if (HmiBuildConfig.isShowLimitingVelocityView) { - if (limitingSpeed > 0) { - mViewLimitingVelocity?.visibility = View.VISIBLE - mViewLimitingVelocity?.updateLimitingSpeed(limitingSpeed, limitSpeedSource) - tvLimitingSource?.visibility = View.VISIBLE - if (limitSpeedSource == 1) { - tvLimitingSource.text = "MAP" - } else if (limitSpeedSource == 2) { - tvLimitingSource.text = "RSU" + ThreadUtils.runOnUiThread { + // 控制 限速UI 展示 + if (HmiBuildConfig.isShowLimitingVelocityView) { + if (limitingSpeed > 0) { + mViewLimitingVelocity?.visibility = View.VISIBLE + mViewLimitingVelocity?.updateLimitingSpeed(limitingSpeed, limitSpeedSource) + tvLimitingSource?.visibility = View.VISIBLE + if (limitSpeedSource == 1) { + tvLimitingSource.text = "MAP" + } else if (limitSpeedSource == 2) { + tvLimitingSource.text = "RSU" + } + } else { + mViewLimitingVelocity?.visibility = View.INVISIBLE + mViewLimitingVelocity?.updateLimitingSpeed(0, limitSpeedSource) + tvLimitingSource?.visibility = View.INVISIBLE } } else { - mViewLimitingVelocity?.visibility = View.INVISIBLE - mViewLimitingVelocity?.updateLimitingSpeed(0, limitSpeedSource) - tvLimitingSource?.visibility = View.INVISIBLE + disableLimitingVelocity() + tvLimitingSource?.visibility = View.GONE } - } else { - disableLimitingVelocity() - tvLimitingSource?.visibility = View.GONE } } From 9b2c36c58326a9641ab859b5d70cdb6f4ff3cac7 Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Fri, 17 Feb 2023 15:10:03 +0800 Subject: [PATCH 52/81] =?UTF-8?q?[2.14.0][adas=20lib]=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?BUS=20R=E6=A1=A3=E4=B8=8D=E8=83=BD=E5=90=AF=E5=8A=A8=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E9=A9=BE=E9=A9=B6=E6=8B=A6=E6=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../support/adas/high/common/AutopilotAbilityManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotAbilityManager.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotAbilityManager.java index 934654dd80..ba31a11e45 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotAbilityManager.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotAbilityManager.java @@ -183,7 +183,7 @@ public class AutopilotAbilityManager { Chassis.GearPosition gear = chassisStates.getGearSystemStates().getGearPosition(); //金旅Bus和清扫车 档位不正常 if (isBus(identityMode)) { - if (gear == Chassis.GearPosition.GEAR_N) { + if (gear == Chassis.GearPosition.GEAR_N || gear == Chassis.GearPosition.GEAR_R) { isAutopilotAbility = false; unableAutopilotReason = "挡位不正常"; } From f7a48e863208d1b2214593d9babbe9d54fe8a961 Mon Sep 17 00:00:00 2001 From: zhongchao Date: Fri, 17 Feb 2023 15:28:00 +0800 Subject: [PATCH 53/81] [2.14.0]code opt of pnc view --- .../com/mogo/eagle/core/function/hmi/ui/pnc/PncActionsView.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/pnc/PncActionsView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/pnc/PncActionsView.kt index 1c178824d5..29fd379f52 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/pnc/PncActionsView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/pnc/PncActionsView.kt @@ -97,6 +97,9 @@ class PncActionsView @JvmOverloads constructor( tvHmiPncActions.text = actions } } + }else{ + this.background = null + tvHmiPncActions.text = "" } } From 253a62b54410772adcbcd8c716848d6a081f852c Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Fri, 17 Feb 2023 14:51:35 +0800 Subject: [PATCH 54/81] =?UTF-8?q?[dev=5Frobotaxi-d-app-module=5F2132=5F221?= =?UTF-8?q?223=5F2.13.2=5Fsop]=20=E5=88=A0=E9=99=A4=E8=80=81obu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.gradle | 2 - .../mogo-core-function-autopilot/build.gradle | 1 - .../mogo-core-function-hmi/build.gradle | 2 - .../hmi/ui/setting/DebugSettingView.kt | 3 +- .../function/main/MainMoGoApplication.java | 10 - .../mogo-core-function-obu-mogo/build.gradle | 1 - .../core/function/obu/mogo/MoGoObuProvider.kt | 10 +- .../obu/mogo/MogoPrivateObuManager.kt | 1009 ----------------- .../obu/mogo/MogoPrivateObuNewManager.kt | 34 +- .../obu/mogo/utils/TrafficDataConvertUtils.kt | 133 --- .../core/function/api/obu/IMoGoObuProvider.kt | 2 + .../function/call/obu/CallerOBUManager.kt | 7 + 12 files changed, 47 insertions(+), 1167 deletions(-) delete mode 100644 core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt delete mode 100644 core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/utils/TrafficDataConvertUtils.kt diff --git a/config.gradle b/config.gradle index c8a88d256e..444370d4a8 100644 --- a/config.gradle +++ b/config.gradle @@ -97,9 +97,7 @@ ext { // obu sdk obusdk : "com.zhidao.enterprise.smartv2x:smartv2x:1.0.0.3", - mogoobuold : 'com.zhidao.support.obu:mogoobu:1.0.0.33', mogoobu : 'com.mogo.support.obu:mogo-obu:1.0.6', - mogoami : 'com.zhidao.support.obu.ami:mogoami:1.0.0.24', // google googlezxing : "com.google.zxing:core:3.3.3", diff --git a/core/function-impl/mogo-core-function-autopilot/build.gradle b/core/function-impl/mogo-core-function-autopilot/build.gradle index ba162e7500..c7d18e5e1f 100644 --- a/core/function-impl/mogo-core-function-autopilot/build.gradle +++ b/core/function-impl/mogo-core-function-autopilot/build.gradle @@ -51,7 +51,6 @@ dependencies { kapt rootProject.ext.dependencies.aroutercompiler - implementation rootProject.ext.dependencies.mogoami implementation rootProject.ext.dependencies.mogoaicloudtelematic if (Boolean.valueOf(USE_MAVEN_PACKAGE)) { diff --git a/core/function-impl/mogo-core-function-hmi/build.gradle b/core/function-impl/mogo-core-function-hmi/build.gradle index 9f27ec4bdf..71c7d2d29a 100644 --- a/core/function-impl/mogo-core-function-hmi/build.gradle +++ b/core/function-impl/mogo-core-function-hmi/build.gradle @@ -71,8 +71,6 @@ dependencies { implementation rootProject.ext.dependencies.arouter kapt rootProject.ext.dependencies.aroutercompiler - implementation rootProject.ext.dependencies.mogoami - implementation rootProject.ext.dependencies.android_start_up implementation rootProject.ext.dependencies.cicle_indicator implementation rootProject.ext.dependencies.koomnative diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt index ccbd434483..be21f4d7f0 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt @@ -80,7 +80,6 @@ import com.mogo.map.uicontroller.VisualAngleMode.* import com.mogo.eagle.core.function.business.routeoverlay.* import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager import com.mogo.eagle.core.utilcode.kotlin.lifecycleOwner -import com.zhidao.easysocket.utils.L import com.zhidao.support.adas.high.other.permission.BackgrounderPermission import com.zhjt.mogo_core_function_devatools.env.* import kotlinx.android.synthetic.main.view_debug_setting.view.* @@ -1317,7 +1316,7 @@ class DebugSettingView @JvmOverloads constructor( * 设置是否输出OBU日志 true-打印日志,false-不打印日志 */ tbObuLog.setOnCheckedChangeListener { _, isChecked -> - L.setEnableLog(isChecked) + CallerOBUManager.setObuLog(isChecked) } /** diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java index d05a210dca..825cae187a 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java @@ -37,7 +37,6 @@ import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; import com.mogo.eagle.core.utilcode.util.ProcessUtils; import com.mogo.eagle.core.utilcode.util.SPUtils; import com.mogo.map.MapApiPath; -import com.zhidao.support.obu.ami.AmiClientManager; import java.io.File; import java.lang.reflect.Field; @@ -60,7 +59,6 @@ public abstract class MainMoGoApplication extends AbsMogoApplication { return; } start = System.currentTimeMillis(); - connectAmiIp(); // Crash 日志收集 initCrashConfig(); initLogConfig(); @@ -202,14 +200,6 @@ public abstract class MainMoGoApplication extends AbsMogoApplication { OverviewDb.Companion.getDb(this); } - /** - * 连接ami - */ - private void connectAmiIp() { - String ipAddress = SharedPrefsMgr.getInstance(AbsMogoApplication.getApp().getBaseContext()).getString(MoGoConfig.OBU_IP, "192.168.1.199"); - AmiClientManager.getInstance().setObuIp(ipAddress); - } - private void initModules() { CallerLogger.INSTANCE.d(M_HMI + TAG, "initModules"); //och模块 diff --git a/core/function-impl/mogo-core-function-obu-mogo/build.gradle b/core/function-impl/mogo-core-function-obu-mogo/build.gradle index 4c4e538ab2..7b8a0e75df 100644 --- a/core/function-impl/mogo-core-function-obu-mogo/build.gradle +++ b/core/function-impl/mogo-core-function-obu-mogo/build.gradle @@ -66,7 +66,6 @@ dependencies { implementation project(':core:mogo-core-function-call') } - implementation rootProject.ext.dependencies.mogoobuold implementation rootProject.ext.dependencies.mogoobu } diff --git a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MoGoObuProvider.kt b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MoGoObuProvider.kt index a4ab0a31ea..ebf56c32b4 100644 --- a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MoGoObuProvider.kt +++ b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MoGoObuProvider.kt @@ -75,19 +75,19 @@ class MoGoObuProvider : IMoGoObuProvider { ipAddress, CommonUtils.getIpAddressString() ) - - //连接old obu - MogoPrivateObuManager.INSTANCE.connectObu(it, ipAddress) } } } override fun disConnect() { - MogoPrivateObuManager.INSTANCE.disConnectObu() + MogoPrivateObuNewManager.INSTANCE.disConnectObu() } override fun isConnected(): Boolean { - return MogoPrivateObuManager.INSTANCE.isConnected() + return MogoPrivateObuNewManager.INSTANCE.isConnected() } + override fun setObuLibLog(isSet: Boolean) { + MogoPrivateObuNewManager.INSTANCE.setObuLog(isSet) + } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt deleted file mode 100644 index ea71e56e3f..0000000000 --- a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt +++ /dev/null @@ -1,1009 +0,0 @@ -package com.mogo.eagle.core.function.obu.mogo - -import android.content.Context -import android.util.Log -import com.alibaba.android.arouter.launcher.ARouter -import com.mogo.cloud.passport.MoGoAiCloudClientConfig -import com.mogo.commons.voice.AIAssist -import com.mogo.eagle.core.data.app.AppConfigInfo -import com.mogo.eagle.core.data.config.FunctionBuildConfig -import com.mogo.eagle.core.data.config.HmiBuildConfig -import com.mogo.eagle.core.data.constants.MogoServicePaths -import com.mogo.eagle.core.data.enums.WarningDirectionEnum -import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener -import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager -import com.mogo.eagle.core.function.call.hmi.CallerHmiManager -import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager -import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager -import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager.Scene.Default -import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager.Scene.TooClose -import com.mogo.eagle.core.function.call.obu.CallerObuListenerManager -import com.mogo.eagle.core.function.obu.mogo.utils.TrafficDataConvertUtils -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OBU -import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr -import com.mogo.eagle.core.data.enums.EventTypeEnum -import com.mogo.eagle.core.data.enums.EventTypeHelper -import com.mogo.eagle.core.data.msgbox.MsgBoxBean -import com.mogo.eagle.core.data.msgbox.MsgBoxType -import com.mogo.eagle.core.data.msgbox.V2XMsg -import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager -import com.mogo.service.IMogoServiceApis -import com.zhidao.support.obu.MogoObuManager -import com.zhidao.support.obu.OnMogoObuListener -import com.zhidao.support.obu.constants.ObuConstants -import com.zhidao.support.obu.model.* -import com.zhidao.support.obu.model.advance.Light -import org.json.JSONObject - -/** - * - * @author lixiaopeng - * @since 2021/8/8 - * @description OBU 管理 - */ -class MogoPrivateObuManager private constructor() { - companion object { - val INSTANCE: MogoPrivateObuManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { - MogoPrivateObuManager() - } - } - - private var mMogoServiceApis: IMogoServiceApis? = null - private var mContext: Context? = null - private var mObuStatusInfo = CallerObuListenerManager.getObuStatusInfo() - - fun init(context: Context, ipAddress: String) { - CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "obuManager初始化--") - mMogoServiceApis = ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS) - .navigation(context) as IMogoServiceApis - mContext = context - //连接obu设备 - connectObu(context, ipAddress) - //控制日志输出 - MogoObuManager.getInstance() - .init(MoGoAiCloudClientConfig.getInstance().getSn(), AppConfigInfo.toString()) - MogoObuManager.getInstance().registerListener(mogoObuListener) - } - - fun connectObu(context: Context, ipAddress: String) { - //自研obu初始化 - mObuStatusInfo.connectIP = ipAddress - mObuStatusInfo.obuSdkVersion = MogoObuManager.getInstance().versionName - if (!MogoObuManager.getInstance().isConnected) { - MogoObuManager.getInstance().connect(context, mObuStatusInfo.connectIP) - } else { - try { - MogoObuManager.getInstance().disConnect() - Thread.sleep(500) - } catch (e: Exception) { - e.printStackTrace() - } - MogoObuManager.getInstance().connect(context, mObuStatusInfo.connectIP) - } - } - - fun disConnectObu() { - try { - MogoObuManager.getInstance().disConnect() - } catch (e: Exception) { - e.printStackTrace() - } - - } - - fun isConnected(): Boolean { - return MogoObuManager.getInstance().isConnected - } - - private val mogoObuListener: OnMogoObuListener = object : OnMogoObuListener() { - // OBU连接成功 - override fun onConnected() { - CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onConnected ------> ") - mObuStatusInfo.obuStatus = true - CallerObuListenerManager.invokeListener(mObuStatusInfo) - mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU", true) } - - //断开mogo obu - com.mogo.support.obu.MogoObuManager.getInstance().disconnect() - } - - // OBU连接失败 - override fun onConnectFail(isNeedReconnect: Boolean) { - CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onConnectFail ------> ") - mObuStatusInfo.obuStatus = false - mObuStatusInfo.obuHvStatus = false - mObuStatusInfo.obuRvStatus = false - CallerObuListenerManager.invokeListener(mObuStatusInfo) - mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU", false) } - mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_HV", false) } - mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_RV", false) } - } - - // OBU断开连接 - override fun onDisconnect() { - CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onDisconnect ------> ") - mObuStatusInfo.obuStatus = false - mObuStatusInfo.obuHvStatus = false - mObuStatusInfo.obuRvStatus = false - CallerObuListenerManager.invokeListener(mObuStatusInfo) - mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU", false) } - mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_HV", false) } - mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_RV", false) } - } - - // 接收到的原始数据 - override fun onReceiveOriginData(data: String) { - super.onReceiveOriginData(data) - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "onReceiveOriginData ------> data = $data" - ) - - } - - // 发送的数据 - override fun onSendData(bytes: ByteArray) { - super.onSendData(bytes) - CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onSendData ------> ") - } - - // CV2X系统信息 - override fun onCvxAppInitIndInfo(info: CvxAppInitIndInfo) { - super.onCvxAppInitIndInfo(info) - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "onCvxAppInitIndInfo ------> $info" - ) - if (info != null) { - if (!info.stack_info.isNullOrEmpty()) { - mObuStatusInfo.stackInfo = info.stack_info - } - - if (!info.app_info.isNullOrEmpty()) { - mObuStatusInfo.appInfo = info.app_info - } - - if (!info.hli_info.isNullOrEmpty()) { - mObuStatusInfo.hliInfo = info.hli_info - } - CallerObuListenerManager.invokeListener(mObuStatusInfo) - } - } - - // (2) 车辆信息:CVX_HV_INFO_IND - override fun onCvxHvInfoIndInfo(info: CvxHvInfoIndInfo?) { - mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_HV", true) } - mObuStatusInfo.obuHvStatus = true - CallerObuListenerManager.invokeListener(mObuStatusInfo) - CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxHvInfoIndInfo ------> $info") - if (info != null && info.basic_info != null && info.basic_info.position != null) { - val movingObjectInfo = info.basic_info - val position = movingObjectInfo.position - val data = JSONObject() - try { - data.putOpt("lon", position.longitude) - data.putOpt("lat", position.latitude) - data.putOpt("speed", movingObjectInfo.speed) - data.putOpt("heading", movingObjectInfo.heading) - if (info.acceleration_set != null) { - data.putOpt("acceleration", info.acceleration_set.lateral) - data.putOpt("yawRate", info.acceleration_set.yaw_rate) - } - try { - data.putOpt("systemTime", System.currentTimeMillis()) - } catch (e: Exception) { - e.printStackTrace() - } - try { - data.putOpt("satelliteTime", System.currentTimeMillis()) - } catch (e: Exception) { - e.printStackTrace() - } - - // 使用与渠道配置一样的gps提供者提供的数据,app/productFlavors/fPadLenovo.gradle GPS_PROVIDER 0-Android系统,1-工控机,2-OBU - if (2 == FunctionBuildConfig.gpsProvider) { - // 同步给MAP地图 - CallerMapUIServiceManager.getMapUIController()?.syncLocation2Map(data) - // 同步更新经纬度和系统时间至 AutoPilotStatusListener - CallerAutoPilotStatusListenerManager.updateAutoPilotLatLon( - System.currentTimeMillis() / 1000.0, - position.longitude, - position.latitude - ) - } - - } catch (e: Exception) { - e.printStackTrace() - } - } - } - - // (3) 远车信息:CVX_RV_INFO_IND - override fun onCvxRvInfoIndInfo(info: CvxRvInfoIndInfo) { - CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxRvInfoIndInfo ------> $info") - mObuStatusInfo.obuRvStatus = true - CallerObuListenerManager.invokeListener(mObuStatusInfo) - mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_RV", true) } - // 更新数据 - TrafficDataConvertUtils.cvxRvInfoIndInfo2TrafficData(info)?.let { - CallerMapUIServiceManager.getMarkerService()?.updateITrafficLocationInfo(it) - } - } - - // (3) 道路事件预警信息:CVX_RTI_THREAT_IND - override fun onCvxRtiThreatIndInfo(info: CvxRtiThreatIndInfo?) { -// if (HmiBuildConfig.isShowObuV2iView) { - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "onCvxRtiThreatIndInfo ------> $info" - ) - - if (info != null && info.threat_info != null && info.ext_info != null) { - var alertContent = "" - var ttsContent = "" - var appId = info.threat_info.app_id.toString() - val status = info.status - val level = info.threat_info.threat_level - val direction = - getMessageDirection(if (info.ext_info != null) info.ext_info.pos_classification else -1) - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "onCvxRtiThreatIndInfo direction = $direction -- pos_classification = ${info.ext_info.pos_classification}" - ) - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "onCvxRtiThreatIndInfo appId = $appId --status = $status --level = $level -- handleDirection = $direction --rtiType = ${info.ext_info.rti_type} --direction = $direction -- pos_classification = ${info.ext_info.pos_classification} " - ) - when (appId) { - // 道路危险情况预警 - EventTypeEnum.TYPE_USECASE_ID_HLW.poiType, - EventTypeEnum.TYPE_USECASE_ID_IVS.poiType - -> { - when (info.ext_info.rti_type) { - //急转弯 - 0x2 -> { - // 特殊处理左、右方向的 - when (direction) { - WarningDirectionEnum.ALERT_WARNING_LEFT, - WarningDirectionEnum.ALERT_WARNING_TOP_LEFT, - WarningDirectionEnum.ALERT_WARNING_BOTTOM_LEFT -> { - appId = - EventTypeEnum.TYPE_USECASE_ID_ROAD_TURN_LEFT_SHARP.poiType - } - WarningDirectionEnum.ALERT_WARNING_RIGHT, - WarningDirectionEnum.ALERT_WARNING_TOP_RIGHT, - WarningDirectionEnum.ALERT_WARNING_BOTTOM_RIGHT -> { - appId = - EventTypeEnum.TYPE_USECASE_ID_ROAD_TURN_RIGHT_SHARP.poiType - } - } - } - //施工 - 0x7 -> { - appId = EventTypeEnum.FOURS_ROAD_WORK.poiType - } - //限速 - 0xA -> { - appId = EventTypeEnum.TYPE_USECASE_ID_SLW.poiType - } - //事故 - 0xC -> { - appId = - EventTypeEnum.TYPE_USECASE_ID_ROAD_COLLISION_WARNING.poiType - } - //拥堵 - 0xD -> { - appId = EventTypeEnum.TYPE_USECASE_ID_TJW.poiType - } - //行人 - 0xF -> { - appId = - EventTypeEnum.TYPE_USECASE_ID_ROAD_PEDESTRIAN_CROSSING.poiType - } - //禁止停车 - 0x13 -> { - appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_NO_PARKING.poiType - } - //学校 - 0x14 -> { - appId = - EventTypeEnum.TYPE_USECASE_ID_ROAD_PEDESTRIAN_SCHOOL.poiType - } - //桥梁 - 0x17 -> { - appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_HUMP_BRIDGE.poiType - } - //轻轨电车 - 0x18 -> { - appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_TRAMCAR.poiType - } - //人行横道 - 0x19 -> { - appId = - EventTypeEnum.TYPE_USECASE_ID_ROAD_PEDESTRIAN_CROSSING.poiType - } - //减速慢行 - 0x1A -> { - appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_GIVE_WAY.poiType - } - //事故易发路段 - 0x1B -> { - appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_COLLISION_WARNING.poiType - } - //环岛行驶 - 0x1C -> { - appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_ROUNDABOUTPNG.poiType - } - //环岛行驶 - 0x1D -> { - appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_TEST_SECTION.poiType - } - //驼峰桥 - 0x1E -> { - appId = EventTypeEnum.TYPE_USECASE_ID_ROAD_HUMP_BRIDGE.poiType - } - } - alertContent = EventTypeEnum.getWarningContent(appId) - ttsContent = EventTypeEnum.getWarningTts(appId) - } - // 前方拥堵提醒 - EventTypeEnum.TYPE_USECASE_ID_TJW.poiType -> { - ttsContent = EventTypeEnum.getWarningTts(appId) - if (info.threat_info != null) { - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "ttsContent = $ttsContent --alertContent = $alertContent ---info.threat_info.distance = ${info.threat_info.distance} " - ) - if (info.threat_info.distance.toInt() != 0) { - alertContent = String.format( - EventTypeEnum.getWarningContent(appId), - info.threat_info.distance.toInt() - ) - } else { - alertContent = "前方拥堵,减速慢行" - } - } - - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "ttsContent = $ttsContent --alertContent = $alertContent" - ) - } - } - - when (status) { - // 添加 - ObuConstants.STATUS.ADD -> { - //不显示弹框,其它保留 - CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "old onCvxRtiThreatIndInfo ------> appId = $appId --- alertContent = $alertContent --- ttsContent = $ttsContent ") - if (alertContent.isNullOrEmpty() || ttsContent.isNullOrEmpty()) { - Log.d("MsgBox-PriObuManager4", "alertContent或ttsContent为空!") - } - CallerMsgBoxManager.saveMsgBox( - MsgBoxBean( - MsgBoxType.OBU, - V2XMsg(appId, - alertContent, - ttsContent) - ) - ) - CallerHmiManager.warningV2X( - appId, - alertContent, - ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 - (appId + direction.direction).toString(),//使用当前事件类型+方向记录tag,当发生变化的时候关闭当前弹出新的 - object : IMoGoWarningStatusListener { - override fun onDismiss() { - // 关闭警告红边 - CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) - } - }, - true, - 5000L - ) - } - - ObuConstants.STATUS.UPDATE -> { - //显示警告红边 TODO 需要确定是什么值 -// CallerHmiManager.showWarning(direction) - - // 更新数据 - TrafficDataConvertUtils.cvxRtiThreatIndInfo2TrafficData(info)?.let { - CallerObuListenerManager.invokeTrackerWarningInfo(it) - CallerMapUIServiceManager.getMarkerService() - ?.updateITrafficThreatLevelInfo(it) - } - } - - // 删除 - ObuConstants.STATUS.DELETE -> { - // 关闭警告红边 - CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) - // 移除顶部弹窗 -// CallerHmiManager.disableWarningV2X((appId + direction.direction).toString()) - // 更新数据 - TrafficDataConvertUtils.cvxRtiThreatIndInfo2TrafficData(info)?.let { - CallerObuListenerManager.removeTrackerWarningInfo(it) - // 事件结束,还原车辆颜色 - it.threatLevel = 0x01 - CallerMapUIServiceManager.getMarkerService() - ?.updateITrafficThreatLevelInfo(it) - } - } - } - } -// } - } - - // (4) V2I预警信息:CVX_IVP_THREAT_IND,红绿灯 - override fun onCvxIvpThreatIndInfo(info: CvxIvpThreatIndInfo?) { - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "CvxIvpThreatIndInfo ------> $info" - ) - if (info != null && info.ext_info != null - && info.threat_info != null - && info.ext_info.lights != null - && info.ext_info.lights.isNotEmpty() - ) { -// if (HmiBuildConfig.isShowObuV2iView) { - handlerTrafficLight( - info.threat_info.app_id, - info.status, - info.ext_info.lights, - info.ext_info.index - ) -// } - } - } - - // (2) 弱势交通参与者预警信息:CVX_PTC_THREAT_IND - override fun onCvxPtcThreatIndInfo(info: CvxPtcThreatIndInfo?) { -// if (HmiBuildConfig.isShowObuV2iView) { - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "onCvxPtcInfoIndInfo ------> $info" - ) - // 交通参与者类型 0x0:未知 UNKNOWN | 0x1:非机动车 NON_MOTOR | 0x2:行人 PEDESTRIAN 0x3:RSU - if (info != null && (info.ptc_type == 1 || info.ptc_type == 2)) { - //v2i数据传输延迟 -// val hvMillTime = info.threat_info.hv_time.millisecond -// val hvSecondMillTime = (info.threat_info.hv_time.second) * 1000 -// val hvTime = hvMillTime + hvSecondMillTime -// val currentTime = TimeUtils.getNowMills() % 60000 -// val delayTime = currentTime - hvTime - -// CallerObuListenerManager.invokeDelayTime(delayTime) -// CallerLogger.d( -// "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", -// "onCvxPtcInfoIndInfo ---delayTime---> $delayTime" -// ) - - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "onCvxPtcInfoIndInfo ---status---> ${info.status}" - ) - var v2xType = "" - if (info.ptc_type == 1) { //摩托车 - v2xType = EventTypeEnum.TYPE_USECASE_ID_VRUCW_MOTORBIKE.poiType - } else if (info.ptc_type == 2) { //行人 - v2xType = EventTypeEnum.TYPE_USECASE_ID_VRUCW_PERSON.poiType - } - val ttsContent = EventTypeEnum.getWarningTts(v2xType) - val alertContent = EventTypeEnum.getWarningContent(v2xType) - val direction = - getMessageDirection(if (info.ext_info != null) info.ext_info.target_classification else -1) - val level = if (info.threat_info != null) info.threat_info.threat_level else -1 - - when (info.status) { - // 添加 - ObuConstants.STATUS.ADD -> { - // if (level == 2 || level == 3) { //不考虑level - //显示警告红边 - CallerHmiManager.showWarning(direction) - CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "old onCvxPtcThreatIndInfo ------> v2xType = $v2xType --- alertContent = $alertContent --- ttsContent = $ttsContent ") - if (alertContent.isNullOrEmpty() || ttsContent.isNullOrEmpty()) { - Log.d("MsgBox-PriObuManager5", "alertContent或ttsContent为空!") - } - CallerMsgBoxManager.saveMsgBox( - MsgBoxBean( - MsgBoxType.OBU, - V2XMsg(v2xType, - alertContent, - ttsContent) - ) - ) - CallerHmiManager.warningV2X( - v2xType, - alertContent, - ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 - (v2xType + direction.direction).toString(),//使用当前事件类型+方向记录tag,当发生变化的时候关闭当前弹出新的 - object : IMoGoWarningStatusListener { - override fun onDismiss() { - // 关闭警告红边 - CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) - } - }, - true, - 5000L - ) -// } - - // 更新数据 - TrafficDataConvertUtils.cvxPtcThreatIndInfo2TrafficData(info)?.let { - CallerObuListenerManager.invokeTrackerWarningInfo(it) - CallerMapUIServiceManager.getMarkerService() - ?.updateITrafficThreatLevelInfo(it) - } - } - - ObuConstants.STATUS.UPDATE -> { - } - - // 删除 - ObuConstants.STATUS.DELETE -> { - // 关闭警告红边 - CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) - // 更新数据 - TrafficDataConvertUtils.cvxPtcThreatIndInfo2TrafficData(info)?.let { - CallerObuListenerManager.removeTrackerWarningInfo(it) - // 事件结束,还原交通参与者颜色 - it.threatLevel = 0x01 - CallerMapUIServiceManager.getMarkerService() - ?.updateITrafficThreatLevelInfo(it) - } -// CallerHmiManager.disableWarningV2X(ObuConstants.USE_CASE_ID.VRUCW.toString()) - } - } - - } -// } - } - - // (5) 限速预警信息:CVX_SLW_THREAT_IND - override fun onCvxSlwThreatIndInfo(info: CvxSlwThreatIndInfo?) { - //todo 限速走高精地图 屏蔽OBU限速\ -// CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxSlwThreatIndInfo ------> $info") -// if (info != null) { -// when (info.status) { -// // 添加 -// ObuConstants.STATUS.ADD, -// ObuConstants.STATUS.UPDATE -// -> { -// if (info.ext_info != null) { -// // 计算为千米每小时 TODO 这里需要做一下向上取整数,40,60,80,120等 -// CallerLogger.d( -// "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", -// "info.ext_info.speed_limit_max ------> ${info.ext_info.speed_limit_max}" -// ) -// CallerHmiManager.showLimitingVelocity((Math.round(((info.ext_info.speed_limit_max * 60 * 60) / 1000) / 10) * 10).toInt()) -// } -// } -// // 删除 -// ObuConstants.STATUS.DELETE -> { -// CallerHmiManager.disableLimitingVelocity() -// } -// } -// } - } - - - // (1) V2V预警信息:CVX_V2V_THREAT_IND - override fun onCvxV2vThreatIndInfo(info: CvxV2vThreatIndInfo?) { -// if (HmiBuildConfig.isShowObuV2vView) { - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "onCvxV2vThreatIndInfo ------> $info" - ) - info?.let { - //预警信息,预警类型 threat_level 2、3 - info.threat_info?.let { - //预警方位 - val direction = - getMessageDirection(if (info.ext_info != null) info.ext_info.target_classification else -1) - //处理预警类型 - val appId = info.threat_info.app_id - val level = info.threat_info.threat_level - val status = info.status - if (info.ext_info != null) { - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "onCvxV2vThreatIndInfo target_classification = ${ - getMessageDirection(info.ext_info.target_classification) - } --- direction = $direction --- appId = $appId ---level = $level -- status = $status" - ) - } - - handleSdkObu(appId, direction, status, level, info) - } - } - } -// } - } - - /** - * 返回OBU监听 - */ - fun getMogoObuListener(): OnMogoObuListener { - return mogoObuListener - } - - /** - * 获取消息的方位 车辆相关 - */ - private fun getMessageDirection(targetClassification: Int): WarningDirectionEnum { - CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "预警红边:预警方向->$targetClassification") - return when (targetClassification) { - ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_IN_LANE, - ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_IN_LANE, - 0x04 -> WarningDirectionEnum.ALERT_WARNING_TOP //正前方 - - 0x03 -> WarningDirectionEnum.ALERT_WARNING_RIGHT //正右方 - - ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_IN_LANE, - 0x05 -> WarningDirectionEnum.ALERT_WARNING_BOTTOM //正后方 - - 0x02 -> WarningDirectionEnum.ALERT_WARNING_LEFT //正左方 - - ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_LEFT, - ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_FAR_LEFT, - ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_LEFT, - ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_FAR_LEFT, - ObuConstants.TARGET_CLASSIFICATION.TC_INTERSECTION_LEFT -> WarningDirectionEnum.ALERT_WARNING_TOP_LEFT //左前方 - - ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_FAR_RIGHT, - ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_FAR_RIGHT, - ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_RIGHT, - ObuConstants.TARGET_CLASSIFICATION.TC_INTERSECTION_RIGHT, - ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_RIGHT -> WarningDirectionEnum.ALERT_WARNING_TOP_RIGHT //右前方 - - ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_LEFT, - ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_FAR_LEFT -> WarningDirectionEnum.ALERT_WARNING_BOTTOM_LEFT //左后方 - - ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_RIGHT, - ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_FAR_RIGHT -> WarningDirectionEnum.ALERT_WARNING_BOTTOM_RIGHT //右后方 - - ObuConstants.TARGET_CLASSIFICATION.TC_UNCLASSIFIED -> WarningDirectionEnum.ALERT_WARNING_NON //未知 - else -> WarningDirectionEnum.ALERT_WARNING_ALL - } - } - - fun release() { - MogoObuManager.getInstance().unregisterListener() - } - - /** - * 处理红绿灯 - */ - private fun handlerTrafficLight(appId: Int, status: Int, lights: List, index: Int) { - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "handlerTrafficLight appId = $appId --- status = $status ---index = $index ---lights.size = ${lights.size} ---lights = $lights " - ) - when (status) { - // 添加 - ObuConstants.STATUS.ADD, - ObuConstants.STATUS.UPDATE - -> { - changeTrafficLightStatus(appId, lights, index) - } - // 删除 - ObuConstants.STATUS.DELETE -> { - // 移除顶部弹窗 - CallerHmiManager.disableWarningTrafficLight() -// CallerHmiManager.disableWarningV2X(appId.toString()) - } - } - } - - private var isRedLight = false - private var isGreenLight = false - - /** - * 修改红绿灯 - */ - @Synchronized - private fun changeTrafficLightStatus( - appId: Int, - lights: List, - index: Int - ) { - var ttsContent = "" - var alertContent = "" - //这里需要根据真实数据确定 index 取值方式 - if (index != -1 && lights.size >= index) { - val currentLight = lights[index] - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "currentLight = $currentLight ---currentLight.phase = ${currentLight.phase} ---rlvw_violation_type = ${currentLight.rlvw_violation_type} --- index = $index ---appId = $appId ---appId = $appId" - ) - // 闯红灯预警 - when (currentLight.rlvw_violation_type) { - 0x0 -> {//不可用 V2I_RLVW_VIOLATION_TYPE_UNAVAILABLE - } - 0x1 -> {//无违规 V2I_RLVW_VIOLATION_TYPE_NO_VIOLATION -// CallerHmiManager.disableWarningV2X(appId.toString()) - } - 0x2 -> {//闯红灯 V2I_RLVW_VIOLATION_TYPE_RUNNING_RED_LIGHT - ttsContent = EventTypeEnum.getWarningTts(appId.toString()) - alertContent = EventTypeEnum.getWarningContent(appId.toString()) - CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "old changeTrafficLightStatus ------> appId.toString() = ${appId.toString()} --- alertContent = $alertContent --- ttsContent = $ttsContent ") - if (alertContent.isNullOrEmpty() || ttsContent.isNullOrEmpty()) { - Log.d("MsgBox-PriObuManager1", "alertContent或ttsContent为空!") - } - CallerMsgBoxManager.saveMsgBox( - MsgBoxBean( - MsgBoxType.OBU, - V2XMsg(appId.toString(), alertContent, ttsContent) - ) - ) - CallerHmiManager.warningV2X( - appId.toString(), alertContent, ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 - appId.toString(), null, true, 5000L - ) - } - 0x3 -> {//闯黄灯 V2I_RLVW_VIOLATION_TYPE_RUNNING_YELLOW_LIGHT - } - } - - when (currentLight.phase) { - // 灯光不可用 - 0x0 -> { - CallerHmiManager.showWarningTrafficLight(0, 3) - } - // 红灯 - 0x1 -> { - if (!isRedLight) { -// CallerHmiManager.disableWarningV2X(appId.toString()) - isRedLight = true - } - isGreenLight = false - CallerHmiManager.showWarningTrafficLight(1, 3) - - val red = currentLight.count_down.toInt() - CallerHmiManager.changeCountdownRed(red) - CallerHmiManager.changeCountdownGreen(0) - CallerHmiManager.changeCountdownYellow(0) - - } - // 绿灯 - 0x2 -> { - if (!isGreenLight) { -// CallerHmiManager.disableWarningV2X(appId.toString()) - isGreenLight = true - } - isRedLight = false - CallerHmiManager.showWarningTrafficLight(3, 3) - val green = currentLight.count_down.toInt() - CallerHmiManager.changeCountdownGreen(green) - //防止数据出现问题的容错 - CallerHmiManager.changeCountdownRed(0) - CallerHmiManager.changeCountdownYellow(0) - // 拼接建议速度 - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "speed_min = ${currentLight.glosa_suggested_speed_min} --speed_max = ${currentLight.glosa_suggested_speed_max.toInt()}" - ) - val adviceSpeed = - "${currentLight.glosa_suggested_speed_min.toInt()} - ${currentLight.glosa_suggested_speed_max.toInt()}" - - val adviceSpeedTts = - "${currentLight.glosa_suggested_speed_min.toInt()}到${currentLight.glosa_suggested_speed_max.toInt()}" - - ttsContent = - String.format( - EventTypeEnum.getWarningTts(EventTypeEnum.TYPE_USECASE_ID_IVP_GREEN.poiType), - adviceSpeedTts - ) - - alertContent = - String.format( - EventTypeEnum.getWarningContent(EventTypeEnum.TYPE_USECASE_ID_IVP_GREEN.poiType), - adviceSpeed - ) - - val maxSpeed = currentLight.glosa_suggested_speed_max.toInt() - if (maxSpeed > 0) { - CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "old changeTrafficLightStatus ------> TYPE_USECASE_ID_IVP_GREEN --- alertContent = $alertContent --- ttsContent = $ttsContent ") - if (alertContent.isNullOrEmpty() || ttsContent.isNullOrEmpty()) { - Log.d("MsgBox-PriObuManager2", "alertContent或ttsContent为空!") - } - CallerMsgBoxManager.saveMsgBox( - MsgBoxBean( - MsgBoxType.OBU, - V2XMsg(EventTypeEnum.TYPE_USECASE_ID_IVP_GREEN.poiType, - alertContent, - ttsContent) - ) - ) - CallerHmiManager.warningV2X( - EventTypeEnum.TYPE_USECASE_ID_IVP_GREEN.poiType, - alertContent, - ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 - appId.toString(), - null, - true, - 5000L - ) - } - } - // 黄灯 - 0x3 -> { -// CallerHmiManager.disableWarningV2X(appId.toString()) - CallerHmiManager.showWarningTrafficLight(2, 2) - val yellow = currentLight.count_down.toInt() - CallerHmiManager.changeCountdownYellow(yellow) - CallerHmiManager.changeCountdownGreen(0) - CallerHmiManager.changeCountdownRed(0) - } - } - } - - } - - - //todo 二期优化此处内容,注解参数 - /** - * 构造对应展示数据和场景 根据obu的场景,add change delete确定是否展示 - * - * @param appId 使用WarningTypeEnum获取icon、提示内容、tts内容 - * - */ - private fun handleSdkObu( - appId: Int, - direction: WarningDirectionEnum, - status: Int, - level: Int, - info: CvxV2vThreatIndInfo - ) { - // 这里排除需要特殊定制的语音及文案外,其余的都可以使用 EventTypeEnum 提供的 - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "handleSdkObu appId = $appId --- handleDirection = $direction ---level = $level ---status = $status" - ) - var alertContent: String? = null - var ttsContent: String? = null - var changeVisualAngle = false - when (appId.toString()) { - // 变道预警,注意左后车辆/注意右后车辆 - EventTypeEnum.TYPE_USECASE_ID_LCW.poiType -> { - EventTypeHelper.getLCW(appId, direction) { alert, tts -> - alertContent = alert - ttsContent = tts - } - } - //车辆失控预警 - EventTypeEnum.TYPE_USECASE_ID_CLW.poiType -> { - EventTypeHelper.getCLW(appId, direction) { alert, tts -> - alertContent = alert - ttsContent = tts - } - } - //左转辅助 - EventTypeEnum.TYPE_USECASE_ID_LTA.poiType -> { - EventTypeHelper.getLTA(appId) { alert, tts -> - alertContent = alert - ttsContent = tts - } - } - //异常车辆提醒 - EventTypeEnum.TYPE_USECASE_ID_AVW.poiType -> { - EventTypeHelper.getAVW(appId, direction) { alert, tts -> - alertContent = alert - ttsContent = tts - } - } - //盲区预警 - EventTypeEnum.TYPE_USECASE_ID_BSW.poiType -> { - EventTypeHelper.getBSW(appId, direction) { alert, tts, visualAngle -> - alertContent = alert - ttsContent = tts - changeVisualAngle = visualAngle - } - } - //前车急刹预警 - EventTypeEnum.TYPE_USECASE_ID_EBW.poiType -> { - EventTypeHelper.getEBW(appId) { alert, tts -> - alertContent = alert - ttsContent = tts - } - } - //前向碰撞预警 - EventTypeEnum.TYPE_USECASE_ID_FCW.poiType -> { - EventTypeHelper.getFCW(appId) { alert, tts -> - alertContent = alert - ttsContent = tts - } - } - //逆向超车预警 - EventTypeEnum.TYPE_USECASE_ID_DNPW.poiType -> { - EventTypeHelper.getDNPW(appId) { alert, tts -> - alertContent = alert - ttsContent = tts - } - } - - // 这里处理固定的提示信息,包括了<紧急车辆提醒> - else -> { - ttsContent = EventTypeEnum.getWarningTts(appId.toString()) - alertContent = EventTypeEnum.getWarningContent(appId.toString()) - } - } - - when (status) { - // 添加,更新 add的时候,可能级别是2, - ObuConstants.STATUS.ADD, - ObuConstants.STATUS.UPDATE -> { - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "appId2 = $appId --- level = $level ---ttsContent = $ttsContent --- alertContent = $alertContent --- direction = $direction" - ) - if (level == 2 || level == 3) { - //不显示顶部弹框,其它保留 - CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "old handleSdkObu appId2 = $appId --- level = $level ---ttsContent = $ttsContent --- alertContent = $alertContent --- direction = $direction" - ) - if (alertContent.isNullOrEmpty() || ttsContent.isNullOrEmpty()) { - Log.d("MsgBox-PriObuManager3", "alertContent或ttsContent为空!") - } - CallerMsgBoxManager.saveMsgBox( - MsgBoxBean( - MsgBoxType.OBU, - V2XMsg(appId.toString(), - alertContent, - ttsContent) - ) - ) - CallerHmiManager.warningV2X( - appId.toString(), - alertContent, - ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 - (appId + direction.direction).toString(),//使用当前事件类型+方向记录tag,当发生变化的时候关闭当前弹出新的 - object : IMoGoWarningStatusListener { - - override fun onShow() { - super.onShow() - if (changeVisualAngle) { - CallerVisualAngleManager.changeVisualAngle(TooClose) - } - } - - override fun onDismiss() { - // 关闭警告红边 - CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) - if (changeVisualAngle) { - CallerVisualAngleManager.changeVisualAngle(Default()) - } - } - }, - true, - 5000L - ) - //显示警告红边 - CallerHmiManager.showWarning(direction) - } - //更新周边车辆进行预警颜色变换,车辆实时移动和变色 - TrafficDataConvertUtils.cvxV2vThreatIndInfo2TrafficData(info)?.let { - CallerObuListenerManager.invokeTrackerWarningInfo(it) - CallerMapUIServiceManager.getMarkerService()?.updateITrafficThreatLevelInfo(it) - } - } - // 删除 - ObuConstants.STATUS.DELETE -> { - // 关闭警告红边 - CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) - // 移除顶部弹窗 -// CallerHmiManager.disableWarningV2X((appId + direction.direction).toString()) - //更新周边车辆进行预警颜色变换,车辆实时移动和变色 - TrafficDataConvertUtils.cvxV2vThreatIndInfo2TrafficData(info)?.let { - CallerObuListenerManager.removeTrackerWarningInfo(it) - it.threatLevel = 0x01 - CallerMapUIServiceManager.getMarkerService()?.updateITrafficThreatLevelInfo(it) - } - } - } - } - - -} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt index a36ed03ddd..b2d7d2fcb6 100644 --- a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt +++ b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt @@ -1,7 +1,6 @@ package com.mogo.eagle.core.function.obu.mogo import android.content.Context -import android.util.Log import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.config.HmiBuildConfig import com.mogo.eagle.core.data.enums.* @@ -30,10 +29,12 @@ import com.mogo.support.obu.MogoObuManager import com.mogo.support.obu.OnMogoObuListener import com.mogo.support.obu.constants.MogoObuComType import com.mogo.support.obu.constants.MogoObuConstants +import com.mogo.support.obu.constants.MogoObuLogLevel import com.mogo.support.obu.constants.MogoObuTopicId import com.mogo.support.obu.model.* import com.mogo.support.obu.model.advance.SpatLight import com.mogo.support.obu.option.MogoObuCom +import com.mogo.support.obu.option.MogoObuLog import com.mogo.support.obu.option.MogoObuOptions import org.json.JSONObject @@ -75,7 +76,7 @@ class MogoPrivateObuNewManager private constructor() { .build() //每次连接的时候如果连接连接了,先断开 - if (MogoObuManager.getInstance().connectStatus == 1) { + if (MogoObuManager.getInstance().connectStatus == MogoObuConstants.CONNECT_STATUS.CONNECTED) { try { MogoObuManager.getInstance().disconnect() } catch (e: Exception) { @@ -86,6 +87,35 @@ class MogoPrivateObuNewManager private constructor() { MogoObuManager.getInstance().connect(options) } + /** + * 断开新obu + */ + fun disConnectObu() { + try { + MogoObuManager.getInstance().disconnect() + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 新obu是否连接 + */ + fun isConnected(): Boolean { + return MogoObuManager.getInstance().connectStatus == MogoObuConstants.CONNECT_STATUS.CONNECTED + } + + fun setObuLog(isChecked: Boolean) { + MogoObuManager.getInstance().setEnableLog(isChecked) + + val builder: com.mogo.support.obu.option.MogoObuLog.Builder = + MogoObuLog.newBuilder().setEnableStdio(isChecked) + if (isChecked) { + builder.setStdioLevel(MogoObuLogLevel.DBG) + } + MogoObuManager.getInstance().logConfig(builder.build()) + } + fun getMogoObuListener(): OnMogoObuListener { return mogoObuListener } diff --git a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/utils/TrafficDataConvertUtils.kt b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/utils/TrafficDataConvertUtils.kt deleted file mode 100644 index 8e94bc8bc6..0000000000 --- a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/utils/TrafficDataConvertUtils.kt +++ /dev/null @@ -1,133 +0,0 @@ -package com.mogo.eagle.core.function.obu.mogo.utils - -import com.mogo.eagle.core.data.traffic.TrafficData -import com.mogo.eagle.core.data.enums.TrafficTypeEnum -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OBU -import com.zhidao.support.obu.constants.ObuConstants -import com.zhidao.support.obu.model.CvxPtcThreatIndInfo -import com.zhidao.support.obu.model.CvxRtiThreatIndInfo -import com.zhidao.support.obu.model.CvxRvInfoIndInfo -import com.zhidao.support.obu.model.CvxV2vThreatIndInfo - -/** - * @author xiaoyuzhou - * @date 2021/8/18 2:30 下午 - */ -object TrafficDataConvertUtils { - val TAG = "TrafficDataConvertUtils" - - /** - * OBU 远车 转换交通元素数据 - */ - fun cvxRvInfoIndInfo2TrafficData(info: CvxRvInfoIndInfo): TrafficData? { - if (info.basic_info == null || info.basic_info.position == null) { - CallerLogger.e("$M_OBU$TAG", "cvxRvInfoIndInfo2TrafficData 数据转换异常,请检查参数是否齐全") - return null - } - val trafficData = TrafficData() - trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_TA_CHE - trafficData.uuid = info.vehicle_id - trafficData.lat = info.basic_info.position.latitude - trafficData.lon = info.basic_info.position.longitude - trafficData.heading = info.basic_info.heading - trafficData.speed = info.basic_info.speed - - return trafficData - } - - /** - * OBU RSU道路事件预警信息 转换交通元素数据 - */ - fun cvxRtiThreatIndInfo2TrafficData(info: CvxRtiThreatIndInfo): TrafficData? { - // 这里只处理道路施工 - if(info.ext_info.rti_type != 0x7){ - return null - } - if (info.rti_id == null || info.ext_info == null - || info.zones_info == null || info.zones_info.first() == null - || info.zones_info.first().path_points.first() == null - || info.threat_info == null - ) { - CallerLogger.e("$M_OBU$TAG", "数据转换异常,请检查参数是否齐全") - return null - } - val trafficData = TrafficData() - trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_DAO_LU_SHI_GONG - trafficData.uuid = info.rti_id - - trafficData.lat = info.zones_info.first().path_points.first().latitude - trafficData.lon = info.zones_info.first().path_points.first().longitude - - trafficData.threatLevel = info.threat_info.threat_level - - return trafficData - } - - /** - * OBU 预警事件 转换交通元素数据 - */ - fun cvxV2vThreatIndInfo2TrafficData(info: CvxV2vThreatIndInfo): TrafficData? { - if (info.basic_info == null || info.basic_info.position == null || info.threat_info == null) { - CallerLogger.e("$M_OBU$TAG", "数据转换异常,请检查参数是否齐全") - return null - } - val trafficData = TrafficData() - trafficData.uuid = info.vehicle_id - trafficData.lat = info.basic_info.position.latitude - trafficData.lon = info.basic_info.position.longitude - trafficData.heading = info.basic_info.heading - trafficData.speed = info.basic_info.speed - // 判断车辆V2X预警级别,调整车辆颜色 - trafficData.threatLevel = info.threat_info.threat_level - - if (info.threat_info.app_id == ObuConstants.USE_CASE_ID.EVW) { - trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_SPECIAL_VEHICLE - } else { - trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_TA_CHE - } - - return trafficData - } - - /** - * OBU 弱势交通参与者信息 转换交通元素数据 TODO - */ - fun cvxPtcThreatIndInfo2TrafficData(info: CvxPtcThreatIndInfo): TrafficData? { - if (info.ptc_pos == null || info.threat_info == null) { - CallerLogger.e("$M_OBU$TAG", "数据转换异常,请检查参数是否齐全") - return null - } - val trafficData = TrafficData() - - trafficData.uuid = info.ptc_id - trafficData.lat = info.ptc_pos.latitude - trafficData.lon = info.ptc_pos.longitude -// trafficData.heading = info.ptc_pos.heading -// trafficData.speed = info.ptc_pos.speed - - when (info.ptc_type) { - // 未知 - 0x0 -> { - trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI - } - // 非机动车 - 0x1 -> { - trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_MOTO - } - // 行人 - 0x2 -> { - trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_PEOPLE - } - } - - // 判断车辆V2X预警级别,调整车辆颜色 - if (info.threat_info != null) { - trafficData.threatLevel = info.threat_info.threat_level - } - - return trafficData - } - - -} \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/obu/IMoGoObuProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/obu/IMoGoObuProvider.kt index 7f07c4f11e..9bafd7eca7 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/obu/IMoGoObuProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/obu/IMoGoObuProvider.kt @@ -14,4 +14,6 @@ interface IMoGoObuProvider : IMoGoFunctionServerProvider { fun disConnect() fun isConnected(): Boolean + + fun setObuLibLog(isSet: Boolean) } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerOBUManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerOBUManager.kt index 3dd265e6c8..a561e5bbe7 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerOBUManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerOBUManager.kt @@ -41,4 +41,11 @@ object CallerOBUManager { return providerApi.isConnected() } + /** + * 设置obu sdk的 日志 + */ + fun setObuLog(isSet: Boolean) { + providerApi.setObuLibLog(isSet) + } + } \ No newline at end of file From 09e88c13f65509b57106252df21908b37af40e9a Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Fri, 17 Feb 2023 17:25:11 +0800 Subject: [PATCH 55/81] =?UTF-8?q?[dev=5Frobotaxi-d-app-module=5F2132=5F221?= =?UTF-8?q?223=5F2.13.2=5Fsop]=20=E8=A7=A3=E5=86=B3=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E5=BE=97=E7=A9=BA=E6=8C=87=E9=92=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/function/obu/mogo/MoGoObuProvider.kt | 1 + .../obu/mogo/MogoPrivateObuNewManager.kt | 42 +++++++++---------- .../mogo/eagle/core/data/obu/ObuStatusInfo.kt | 2 - 3 files changed, 21 insertions(+), 24 deletions(-) diff --git a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MoGoObuProvider.kt b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MoGoObuProvider.kt index ebf56c32b4..81f35634ed 100644 --- a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MoGoObuProvider.kt +++ b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MoGoObuProvider.kt @@ -22,6 +22,7 @@ class MoGoObuProvider : IMoGoObuProvider { private var mContext: Context? = null private val taxiObuIp = "192.168.1.199" //taxi和bus网段统一 +// private val taxiObuIp = "192.168.0.53" //室内测试环境 override val functionName: String get() = TAG diff --git a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt index b2d7d2fcb6..3e47a0a414 100644 --- a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt +++ b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt @@ -1,6 +1,7 @@ package com.mogo.eagle.core.function.obu.mogo import android.content.Context +import android.util.Log import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.config.HmiBuildConfig import com.mogo.eagle.core.data.enums.* @@ -197,7 +198,7 @@ class MogoPrivateObuNewManager private constructor() { if (HmiBuildConfig.isShowObuV2vView) { mObuStatusInfo.obuRvStatus = true CallerObuListenerManager.invokeListener(mObuStatusInfo) - if (!data.warningMsg.warningData.isNullOrEmpty()) { + if (data.warningMsg != null) { // 更新数据,远车数据,之前要匹配uuid TrafficDataConvertUtilsNew.cvxRvInfoIndInfo2TrafficData(data)?.let { CallerMapUIServiceManager.getMarkerService()?.updateITrafficLocationInfo(it) @@ -213,29 +214,26 @@ class MogoPrivateObuNewManager private constructor() { var appId = "" var level = -1 var status = -1 - data.warningMsg?.let { - if (data.warningMsg.warningData != null && data.warningMsg.warningData.size > 0) { - level = data.warningMsg.warningData[0].warningLevel - appId = data.warningMsg.warningData[0].warningType.toString() - status = data.warningMsg.warningData[0].status - - //30秒内同一个事件只出现一次 - if (rvMap.containsKey(appId)) { - var oldTime = rvMap[appId] - var timeDiff = (System.currentTimeMillis() - oldTime!!) / 1000 - if (timeDiff < 30) { - return - } - rvMap.remove(appId) - rvMap[appId] = System.currentTimeMillis() - } else { - rvMap[appId] = System.currentTimeMillis() + if (data.warningMsg.warningData != null && data.warningMsg.warningData.size > 0) { + level = data.warningMsg.warningData[0].warningLevel + appId = data.warningMsg.warningData[0].warningType.toString() + status = data.warningMsg.warningData[0].status + //30秒内同一个事件只出现一次 + if (rvMap.containsKey(appId)) { + var oldTime = rvMap[appId] + var timeDiff = (System.currentTimeMillis() - oldTime!!) / 1000 + if (timeDiff < 30) { + return } + rvMap.remove(appId) + rvMap[appId] = System.currentTimeMillis() + } else { + rvMap[appId] = System.currentTimeMillis() + } - //拼凑数据 - if (appId != null) { - handleSdkObu(appId, direction, status, level, data) - } + //拼凑数据 + if (appId != null) { + handleSdkObu(appId, direction, status, level, data) } } diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/obu/ObuStatusInfo.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/obu/ObuStatusInfo.kt index b0206c4d42..cbf40c1031 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/obu/ObuStatusInfo.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/obu/ObuStatusInfo.kt @@ -6,8 +6,6 @@ package com.mogo.eagle.core.data.obu * OBU 相关的状态信息数据 */ class ObuStatusInfo { - // 当前链接的IP地址, 默认地址 192.168.1.199 - var connectIP: String = "192.168.1.199" var obuSdkVersion = "" From 37c93969ea3aa06b27b4feff8a6b41f1330f651c Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Sun, 19 Feb 2023 22:32:40 +0800 Subject: [PATCH 56/81] =?UTF-8?q?[2.14.0]fix=E5=BD=95=E5=8C=85=E5=B7=A5?= =?UTF-8?q?=E5=85=B7Bag=E5=88=97=E8=A1=A8=E6=98=BE=E7=A4=BA=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/biz/BadCaseManagerView.kt | 63 +++++++++++++------ .../src/main/res/layout/item_bag_manager.xml | 4 +- .../eagle/core/data/badcase/BagInfoEntity.kt | 2 +- 3 files changed, 48 insertions(+), 21 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt index 8150cf6c1b..60b299948b 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt @@ -281,30 +281,40 @@ class BadCaseManagerView @JvmOverloads constructor( clBagNoDataLayout.visibility = View.GONE if(bagManager.bagsInfoRespCount>0){ bagManagerEntity.bagsInfoResp.clear() + val originBagInfoList = ArrayList() for(bagInfo in bagManager.bagsInfoRespList){ bagInfo?.let { - it.timestamp?.let { time -> - val descriptionEntity = BagDescriptionEntity(it.description.description,it.description.hasAudio,it.description.audioUrl,it.description.reportBI) - val bagInfoEntity = BagInfoEntity() - bagInfoEntity.key = it.key - bagInfoEntity.totalSize = it.totalSize - bagInfoEntity.timestamp = it.timestamp - bagInfoEntity.bagPath = it.bagPath - bagInfoEntity.mergeStat = it.mergeStat - bagInfoEntity.uploadStat = it.uploadStat - bagInfoEntity.itemType = 0 - bagInfoEntity.description = descriptionEntity - for(subBag in it.subBagsList){ - val subBagEntity = SubBagEntity(subBag.key,subBag.host,subBag.size) - bagInfoEntity.subBags.add(subBagEntity) - } + val descriptionEntity = BagDescriptionEntity(it.description.description,it.description.hasAudio,it.description.audioUrl,it.description.reportBI) + val bagInfoEntity = BagInfoEntity() + bagInfoEntity.key = it.key + bagInfoEntity.totalSize = it.totalSize + bagInfoEntity.timestamp = it.timestamp + bagInfoEntity.bagPath = it.bagPath + bagInfoEntity.mergeStat = it.mergeStat + bagInfoEntity.uploadStat = it.uploadStat + bagInfoEntity.itemType = 0 + bagInfoEntity.description = descriptionEntity + for(subBag in it.subBagsList){ + val subBagEntity = SubBagEntity(subBag.key,subBag.host,subBag.size) + bagInfoEntity.subBags.add(subBagEntity) + } + originBagInfoList.add(bagInfoEntity) + //对数组按照时间顺序进行倒序排序 + originBagInfoList.sortWith(Comparator { o1, o2 -> + o2.timestamp.compareTo(o1.timestamp) + }) + } + } + for(originBagInfo in originBagInfoList){ + originBagInfo.let { + it.timestamp.let { time -> val month = time.substring(4,6) val day = time.substring(6,8) val timeStr = "${month}月${day}日" var containTime = false for(bag in bagManagerEntity.bagsInfoResp){ - if(bag.timeStr == time){ + if(bag.timeStr == timeStr){ containTime = true } } @@ -318,16 +328,17 @@ class BadCaseManagerView @JvmOverloads constructor( } var containKey = false for(bagInfoContain in bagManagerEntity.bagsInfoResp){ - if(bagInfoContain.key == bagInfoEntity.key){ + if(bagInfoContain.key == it.key){ containKey = true } } if(!containKey){ - bagManagerEntity.bagsInfoResp.add(bagInfoEntity) + bagManagerEntity.bagsInfoResp.add(it) } } } } + //更新List bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) } @@ -362,6 +373,22 @@ class BadCaseManagerView @JvmOverloads constructor( bagUploadDialog?.uploadCompleted() tvCancelSelect.performClick() } + + when (bagManager.uploadCosResp.stat) { + 0 -> { + ToastUtils.showShort("${bagManager.uploadCosResp.key} 上传cos桶成功") + } + 2 -> { + ToastUtils.showShort("${bagManager.uploadCosResp.key} 上传cos桶copy过程失败,原因:${bagManager.uploadCosResp.message}") + } + 3 -> { + ToastUtils.showShort("${bagManager.uploadCosResp.key} 上传cos桶合并过程失败,原因:${bagManager.uploadCosResp.message}") + } + 4 -> { + ToastUtils.showShort("${bagManager.uploadCosResp.key} 上传cos桶上传过程失败,原因:${bagManager.uploadCosResp.message}") + } + } + } //删除Bag else if(bagManager.reqType == 4){ diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_manager.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_manager.xml index eb969081db..43fa322211 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_manager.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_manager.xml @@ -29,11 +29,11 @@ android:layout_marginEnd="30dp" android:background="@null" android:drawableEnd="@drawable/icon_bag_edit" + android:drawablePadding="@dimen/dp_10" android:textColor="#FFFFFFFF" android:textSize="32dp" - android:maxLines="1" + android:singleLine="true" android:ellipsize="end" - android:maxLength="9" /> Date: Sun, 19 Feb 2023 22:51:55 +0800 Subject: [PATCH 57/81] =?UTF-8?q?[2.14.0]=E5=A2=9E=E5=8A=A0=E7=BA=A2?= =?UTF-8?q?=E7=BB=BF=E7=81=AF=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v2x/trafficlight/core/TrafficLightDispatcher.kt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/TrafficLightDispatcher.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/TrafficLightDispatcher.kt index c2874fa8af..be3aca66ad 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/TrafficLightDispatcher.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/TrafficLightDispatcher.kt @@ -61,6 +61,8 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight * @param trafficLights 感知红绿灯 */ override fun onAutopilotPerceptionTrafficLight(trafficLights: TrafficLightOuterClass.TrafficLights?) { + Log.i(TAG,"hasObuLightStatus="+hasObuLightStatus + " hasAiLightStatus="+hasAiLightStatus) + Log.i(TAG,"时间:"+com.mogo.eagle.core.utilcode.util.TimeUtils.millis2String(System.currentTimeMillis())) if (!hasObuLightStatus) { if (!hasAiLightStatus) { trafficLights?.let { it -> @@ -75,30 +77,39 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight light = it.uTurn } if (light == null) { + Log.i(TAG,"light为空") //隐藏红绿灯显示 TrafficLightHMIManager.INSTANCE.hideTrafficLight() } else { + Log.i(TAG,"light.state="+light.state) when (light.state) { TrafficLightOuterClass.LightState.STATE_RED -> { + Log.i(TAG,"显示红灯") //红灯 CallerHmiManager.showWarningTrafficLight(1, 2) CallerHmiManager.changeCountdownGreen(0) } TrafficLightOuterClass.LightState.STATE_YELLOW -> { + Log.i(TAG,"显示黄灯") //黄灯 CallerHmiManager.showWarningTrafficLight(2, 2) CallerHmiManager.changeCountdownGreen(0) } TrafficLightOuterClass.LightState.STATE_GREEN -> { + Log.i(TAG,"显示绿灯") //绿灯 CallerHmiManager.showWarningTrafficLight(3, 2) CallerHmiManager.changeCountdownGreen(0) } TrafficLightOuterClass.LightState.STATE_OFF -> { + Log.i(TAG,"隐藏显示") //黑灯,隐藏红绿灯显示 TrafficLightHMIManager.INSTANCE.hideTrafficLight() } - else -> {} + else -> { + Log.i(TAG,"直接其他情况") + TrafficLightHMIManager.INSTANCE.hideTrafficLight() + } } } From 8c5452d9953d12a9096bd18ef2a830126839aecf Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Sun, 19 Feb 2023 23:48:13 +0800 Subject: [PATCH 58/81] =?UTF-8?q?[2.14.0]SOP=E8=BF=90=E8=90=A5=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF=E6=94=B9=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/hmi/ui/setting/SOPSettingView.kt | 61 ++- .../src/main/res/layout/view_sop_setting.xml | 362 +++++++++--------- 2 files changed, 215 insertions(+), 208 deletions(-) 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 a3a612b656..e85c990676 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 @@ -103,28 +103,24 @@ class SOPSettingView @JvmOverloads constructor( * 限速数据来源开关 */ tbRoadLimitSpeedSop.setOnCheckedChangeListener { _, isChecked -> - //默认开启 + //默认关闭 HmiBuildConfig.isShowObuLimitSpeedView = isChecked } /** * obu V2V开关 */ - tbObuV2vView.isChecked = HmiBuildConfig.isShowObuV2vView tbObuV2vView.setOnCheckedChangeListener { _, isChecked -> - //默认开启 + //默认关闭 HmiBuildConfig.isShowObuV2vView = isChecked -// Log.e("liyz", "---2222-- v2v = ${HmiBuildConfig.isShowObuV2vView}") } /** * obu V2i开关 */ - tbObuV2iView.isChecked = HmiBuildConfig.isShowObuV2iView tbObuV2iView.setOnCheckedChangeListener { _, isChecked -> //默认关闭 HmiBuildConfig.isShowObuV2iView = isChecked -// Log.d("liyz", "---2--- v2i = ${HmiBuildConfig.isShowObuV2iView}") } /** @@ -161,7 +157,10 @@ class SOPSettingView @JvmOverloads constructor( // 演示模式,上一次勾选的数据 tbDemoMode.isChecked = FunctionBuildConfig.isDemoMode // 演示模式 - tbDemoMode.setOnCheckedChangeListener { _, _ -> + tbDemoMode.setOnCheckedChangeListener { compoundButton, _ -> + if(!compoundButton.isPressed){ + return@setOnCheckedChangeListener + } FunctionBuildConfig.isDemoMode = !FunctionBuildConfig.isDemoMode CallerHmiManager.updateStatusBarLeftView(FunctionBuildConfig.isDemoMode, "demoMode", DemoModeView(context)) CallerAutoPilotManager.setDemoMode(FunctionBuildConfig.isDemoMode) @@ -179,7 +178,10 @@ class SOPSettingView @JvmOverloads constructor( // 雨天模式,上一次勾选的数据 tbRainMode.isChecked = FunctionBuildConfig.isRainMode //雨天模式 - tbRainMode.setOnCheckedChangeListener { _, isChecked -> + tbRainMode.setOnCheckedChangeListener { compoundButton, isChecked -> + if(!compoundButton.isPressed){ + return@setOnCheckedChangeListener + } CallerAutoPilotManager.setRainMode(isChecked) FunctionBuildConfig.isRainMode = isChecked } @@ -191,8 +193,12 @@ class SOPSettingView @JvmOverloads constructor( //OBU控制总开关 tbObu.isChecked = CallerOBUManager.isConnected() tbObu.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CallerOBUManager.resetObuIpAddress("192.168.1.199") + if (!isChecked) { + if (AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)) { + CallerOBUManager.resetObuIpAddress("192.168.1.199") + } else if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { + CallerOBUManager.resetObuIpAddress("192.168.1.199") + } } else { //断开链接 CallerOBUManager.disConnectObu() @@ -268,11 +274,8 @@ class SOPSettingView @JvmOverloads constructor( private val timerTaskRefresh = object : TimerTask(){ override fun run() { UiThreadHandler.post{ - if(FunctionBuildConfig.isDemoMode){ - tbDemoMode.text = "关闭美化模式" - }else{ - tbDemoMode.text = "开启美化模式" - } + tbDemoMode.isChecked = FunctionBuildConfig.isDemoMode + tbRainMode.isChecked = FunctionBuildConfig.isRainMode } } @@ -282,39 +285,27 @@ class SOPSettingView @JvmOverloads constructor( when (type) { FuncBizConfig.BIZ_BEAUTY_MODE -> { tbDemoMode.isClickable = !lock - val (left,top,right,bottom) = tbDemoMode.currentPadding() - if (lock) { - tbDemoMode.background = - resources.getDrawable(R.drawable.radio_button_lock_background) - } else { - tbDemoMode.background = - resources.getDrawable(R.drawable.radio_button_normal_background_right) + if(lock){ + tbDemoMode.visibility = View.INVISIBLE + }else{ + tbDemoMode.visibility = View.VISIBLE } - tbDemoMode.setPadding(left,top,right,bottom) } FuncBizConfig.BIZ_RAIN_MODE -> { tbRainMode.isClickable = !lock - val (left,top,right,bottom) = tbRainMode.currentPadding() if (lock) { - tbRainMode.background = - resources.getDrawable(R.drawable.radio_button_lock_background) + tbRainMode.visibility = View.INVISIBLE } else { - tbRainMode.background = - resources.getDrawable(R.drawable.radio_button_normal_background_right) + tbRainMode.visibility = View.VISIBLE } - tbRainMode.setPadding(left,top,right,bottom) } FuncBizConfig.BIZ_PNC_WARNING -> { tbMarkingObstacles.isClickable = !lock - val (left,top,right,bottom) = tbMarkingObstacles.currentPadding() if (lock) { - tbMarkingObstacles.background = - resources.getDrawable(R.drawable.radio_button_lock_background) + tbMarkingObstacles.visibility = View.INVISIBLE } else { - tbMarkingObstacles.background = - resources.getDrawable(R.drawable.radio_button_normal_background_right) + tbMarkingObstacles.visibility = View.VISIBLE } - tbMarkingObstacles.setPadding(left,top,right,bottom) } } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml index d6720d62b6..53f1efd8ba 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml @@ -16,205 +16,231 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> + + - + - + - + - + - - + - + - + - - - - - - - - - - - - + android:text="V2I事件" + android:paddingTop="25dp" + android:paddingBottom="25dp" + android:scaleY="1.2" + android:scaleX="1.2" + app:layout_constraintTop_toBottomOf="@id/tbRainMode" + app:layout_constraintLeft_toRightOf="@id/verticalGuideLine" + app:layout_constraintRight_toRightOf="parent" + /> + + + + + + + + + + @@ -278,16 +304,6 @@ android:layout_marginStart="10dp" /> - - From dde4e503a2b58339455fc6465eefe59f353505d5 Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Mon, 20 Feb 2023 10:22:21 +0800 Subject: [PATCH 59/81] =?UTF-8?q?[2.14.0]=20=E5=9C=B0=E5=9B=BE=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=8D=87=E7=BA=A72.10.0.7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 3e288c6fbd..b12cf5bed0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -85,7 +85,7 @@ MOGO_LOCATION_VERSION=1.4.3.32 MOGO_TELEMATIC_VERSION=1.4.3.32 ######## MogoAiCloudSDK Version ######## # 自研地图 -MAP_SDK_VERSION=2.10.0.2 +MAP_SDK_VERSION=2.10.0.7 MAP_SDK_OPERATION_VERSION=1.1.4.1 # websocket WEBSOCKET_VERSION=1.1.7 From d2742934aca7f45e6dc15488f995c4265f25bcac Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Mon, 20 Feb 2023 12:02:44 +0800 Subject: [PATCH 60/81] =?UTF-8?q?[2.14.0][Opt]=E5=8D=87=E7=BA=A7=E9=AB=98?= =?UTF-8?q?=E5=BE=B7=E5=9C=B0=E5=9B=BE=E7=89=88=E6=9C=AC=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=AF=B9=E5=BA=94=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.gradle | 6 +-- .../function/hmi/ui/map/OfflineMapDialog.kt | 10 +++++ .../mogo-core-function-map/build.gradle | 1 - .../call/map/CallerMapUIServiceManager.kt | 4 ++ .../com/mogo/map/hdcache/IHdCacheListener.kt | 2 + .../uicontroller/IMogoMapUIController.java | 2 + libraries/mogo-map/build.gradle | 3 +- .../java/com/mogo/map/AMapViewWrapper.java | 42 +++++++++++++++---- .../com/mogo/map/MogoMapUIController.java | 7 ++++ .../mogo/map/location/GDLocationClient.java | 36 +++++++++------- .../map/uicontroller/AMapUIController.java | 7 ++++ 11 files changed, 93 insertions(+), 27 deletions(-) diff --git a/config.gradle b/config.gradle index 444370d4a8..e2d70bfd02 100644 --- a/config.gradle +++ b/config.gradle @@ -23,9 +23,9 @@ ext { // amapnavi3dmap : "com.amap.api:navi-3dmap:8.0.1_3dmap8.0.1", // amapsearch : "com.amap.api:search:7.9.0", // amaplocation : "com.amap.api:location:5.5.0", - amapnavi3dmap : "com.amap.api:navi-3dmap:8.0.1_3dmap8.0.1", - amapsearch : "com.amap.api:search:7.1.0", - amaplocation : "com.amap.api:location:5.3.1", + amapnavi3dmap : "com.amap.api:navi-3dmap:9.5.1_3dmap9.5.0", + amapsearch : "com.amap.api:search:9.5.0", + amaplocation : "com.amap.api:location:6.2.0", // json 转换 gson : "com.google.code.gson:gson:2.8.4", // 内存泄漏检测 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/map/OfflineMapDialog.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/map/OfflineMapDialog.kt index aa62c470b2..3383ace8cc 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/map/OfflineMapDialog.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/map/OfflineMapDialog.kt @@ -84,6 +84,9 @@ class OfflineMapDialog(context: Context): BaseFloatDialog(context) { } okView?.setOnClickListener { + if (isLoading) { + CallerMapUIServiceManager.cancelDownloadCacheData() + } dismiss() } } @@ -93,6 +96,12 @@ class OfflineMapDialog(context: Context): BaseFloatDialog(context) { override fun onMapHdCacheProgress(cityId: Int, progress: Double) { updateProgress(progress.toInt()) } + + override fun onMapHdCacheResult(cityId: Int, state: Int) { + if (state == 0) {// 失败 + showNewContent(isLoading = false, false) + } + } }) } @@ -134,6 +143,7 @@ class OfflineMapDialog(context: Context): BaseFloatDialog(context) { @SuppressLint("UseCompatLoadingForDrawables") private fun showNewContent(isLoading: Boolean, isSuccess: Boolean) { + this.isLoading = isLoading change2NewStyle() when { isLoading -> { diff --git a/core/function-impl/mogo-core-function-map/build.gradle b/core/function-impl/mogo-core-function-map/build.gradle index 01e097ded7..70b7ff0853 100644 --- a/core/function-impl/mogo-core-function-map/build.gradle +++ b/core/function-impl/mogo-core-function-map/build.gradle @@ -60,7 +60,6 @@ dependencies { implementation rootProject.ext.dependencies.mogocustommap implementation rootProject.ext.dependencies.amapnavi3dmap - implementation rootProject.ext.dependencies.amaplocation implementation rootProject.ext.dependencies.androidxroomruntime kapt rootProject.ext.dependencies.androidxroomcompiler diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt index 571b02d4b9..3543a6f5aa 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt @@ -51,4 +51,8 @@ object CallerMapUIServiceManager { fun isCityDataCached(): Boolean { return serviceProvider?.mapUIController?.isCityDataCached ?: true } + + fun cancelDownloadCacheData() { + serviceProvider?.mapUIController?.cancelDownloadCacheData() + } } \ No newline at end of file diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/hdcache/IHdCacheListener.kt b/libraries/mogo-map-api/src/main/java/com/mogo/map/hdcache/IHdCacheListener.kt index 4761e40fff..9492c60ba7 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/hdcache/IHdCacheListener.kt +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/hdcache/IHdCacheListener.kt @@ -2,4 +2,6 @@ package com.mogo.map.hdcache interface IHdCacheListener { fun onMapHdCacheProgress(cityId: Int, progress: Double) + + fun onMapHdCacheResult(cityId: Int, state: Int)// 0失败,1成功 } \ No newline at end of file diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java index eaa04ac0c6..920e4b64cb 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java @@ -348,4 +348,6 @@ public interface IMogoMapUIController { * @return */ boolean isCityDataCached(); + + void cancelDownloadCacheData(); } diff --git a/libraries/mogo-map/build.gradle b/libraries/mogo-map/build.gradle index f4e1bf9862..de2755fc0f 100644 --- a/libraries/mogo-map/build.gradle +++ b/libraries/mogo-map/build.gradle @@ -49,7 +49,8 @@ dependencies { // 高精地图 implementation rootProject.ext.dependencies.mogocustommap // 高德地图 - api rootProject.ext.dependencies.amaplocation +// api rootProject.ext.dependencies.amaplocation + api rootProject.ext.dependencies.amapnavi3dmap if (Boolean.valueOf(USE_MAVEN_PACKAGE)) { implementation rootProject.ext.dependencies.mogo_core_utils diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java index 6e65bd6ca2..4b92226e7b 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java @@ -64,6 +64,7 @@ import com.mogo.map.utils.ResIdCache; import com.zhidaoauto.map.sdk.open.MapAutoApi; import com.zhidaoauto.map.sdk.open.abs.MapStatusListener; import com.zhidaoauto.map.sdk.open.abs.OnCameraChangeListener; +import com.zhidaoauto.map.sdk.open.abs.OnHdDataDownByCityListener; import com.zhidaoauto.map.sdk.open.abs.OnMapClickListener; import com.zhidaoauto.map.sdk.open.abs.OnMapLoadedListener; import com.zhidaoauto.map.sdk.open.abs.OnMapStyleListener; @@ -1183,17 +1184,35 @@ public class AMapViewWrapper implements IMogoMapView, Integer id = HDMapUtils.getHDCityCode(gdCityCode); if (id != null) { hdCacheListener = listener; - mMapView.getMapAutoViewHelper().cacheHDDataByCity(id, (cityId, progress) -> { - if (Thread.currentThread() == Looper.getMainLooper().getThread()) { - if (hdCacheListener != null) { - hdCacheListener.onMapHdCacheProgress(cityId, progress * 100); - } - } else { - UiThreadHandler.post(() -> { + mMapView.getMapAutoViewHelper().cacheHDDataByCity(id, new OnHdDataDownByCityListener() { + @Override + public void onMapHDDataCacheProgressByCity(int cityId, double progress) { + if (Thread.currentThread() == Looper.getMainLooper().getThread()) { if (hdCacheListener != null) { hdCacheListener.onMapHdCacheProgress(cityId, progress * 100); } - }); + } else { + UiThreadHandler.post(() -> { + if (hdCacheListener != null) { + hdCacheListener.onMapHdCacheProgress(cityId, progress * 100); + } + }); + } + } + + @Override + public void onMapHDDataCacheStateByCity(int i, int state) {// 0失败,1成功 + if (Thread.currentThread() == Looper.getMainLooper().getThread()) { + if (hdCacheListener != null) { + hdCacheListener.onMapHdCacheResult(i, state); + } + } else { + UiThreadHandler.post(() -> { + if (hdCacheListener != null) { + hdCacheListener.onMapHdCacheResult(i, state); + } + }); + } } }); } @@ -1218,4 +1237,11 @@ public class AMapViewWrapper implements IMogoMapView, } return true; } + + @Override + public void cancelDownloadCacheData() { + if (mMapView.getMapAutoViewHelper() != null) { + mMapView.getMapAutoViewHelper().cancelCacheHDData(); + } + } } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java index edda8cd20b..ab7e482bb4 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java @@ -458,4 +458,11 @@ public class MogoMapUIController implements IMogoMapUIController { } return true; } + + @Override + public void cancelDownloadCacheData() { + if (mDelegate != null) { + mDelegate.cancelDownloadCacheData(); + } + } } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/location/GDLocationClient.java b/libraries/mogo-map/src/main/java/com/mogo/map/location/GDLocationClient.java index cc23b9af97..9e251665b4 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/location/GDLocationClient.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/location/GDLocationClient.java @@ -27,26 +27,34 @@ public class GDLocationClient implements AMapLocationListener { } //声明LocationClient对象 - private final AMapLocationClient mLocationClient; + private AMapLocationClient mLocationClient; private String mCityCode; private GDLocationClient(Context context) { - mLocationClient = new AMapLocationClient(context); - //初始化定位参数 - //声明mLocationOption对象 - AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); - //设置定位监听 - mLocationClient.setLocationListener(this); - //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式 - mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); - //设置定位间隔,单位毫秒,默认为2000ms - mLocationOption.setInterval(1000); - //设置定位参数 - mLocationClient.setLocationOption(mLocationOption); + AMapLocationClient.updatePrivacyShow(context, true, true); + AMapLocationClient.updatePrivacyAgree(context, true); + try { + mLocationClient = new AMapLocationClient(context); + //初始化定位参数 + //声明mLocationOption对象 + AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); + //设置定位监听 + mLocationClient.setLocationListener(this); + //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式 + mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); + //设置定位间隔,单位毫秒,默认为2000ms + mLocationOption.setInterval(1000); + //设置定位参数 + mLocationClient.setLocationOption(mLocationOption); + } catch (Exception e) { + e.printStackTrace(); + } } public void start() { - mLocationClient.startLocation(); + if(mLocationClient != null){ + mLocationClient.startLocation(); + } } @Override diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java index 7a4d26ad38..21fde51ca5 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java @@ -391,4 +391,11 @@ public class AMapUIController implements IMogoMapUIController { } return true; } + + @Override + public void cancelDownloadCacheData() { + if (mClient != null) { + mClient.cancelDownloadCacheData(); + } + } } From b4717185110d21ab07c98b85bba6e01fc056cd48 Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Mon, 20 Feb 2023 13:31:49 +0800 Subject: [PATCH 61/81] =?UTF-8?q?[2.14.0][Fix]=E8=A7=A3=E5=86=B3Taxi?= =?UTF-8?q?=E4=B9=98=E5=AE=A2=E5=B1=8F=E6=89=93=E5=8C=85=E6=8A=A5=E9=94=99?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../passenger/model/TaxiPassengerGeocodeSearchModel.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerGeocodeSearchModel.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerGeocodeSearchModel.java index 1543ad8da0..0ee57c0c2c 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerGeocodeSearchModel.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerGeocodeSearchModel.java @@ -2,6 +2,7 @@ package com.mogo.och.taxi.passenger.model; import android.content.Context; +import com.amap.api.services.core.AMapException; import com.amap.api.services.core.LatLonPoint; import com.amap.api.services.geocoder.GeocodeResult; import com.amap.api.services.geocoder.GeocodeSearch; @@ -52,8 +53,12 @@ public class TaxiPassengerGeocodeSearchModel implements GeocodeSearch.OnGeocodeS public void initGeocodeSearch(){ //通过经纬度逆地理编码得到位置 - mGeocodeSearch = new GeocodeSearch(mContext); - mGeocodeSearch.setOnGeocodeSearchListener(this); + try { + mGeocodeSearch = new GeocodeSearch(mContext); + mGeocodeSearch.setOnGeocodeSearchListener(this); + } catch (AMapException e) { + e.printStackTrace(); + } timer = new Timer(); timerTask = new TimerTask() { @Override From 9863924ebb8478dfdb59c7675f37a6e1c4fd960e Mon Sep 17 00:00:00 2001 From: zhongchao Date: Mon, 20 Feb 2023 14:54:52 +0800 Subject: [PATCH 62/81] [2.14.0] pnc add try catch --- .../function/hmi/ui/pnc/PncActionsView.kt | 51 ++++++++++--------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/pnc/PncActionsView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/pnc/PncActionsView.kt index 29fd379f52..6a15160b33 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/pnc/PncActionsView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/pnc/PncActionsView.kt @@ -72,37 +72,40 @@ class PncActionsView @JvmOverloads constructor( @BizConfig(FOUNDATION, "", BIZ_PNC_ACTIONS) override fun pncActions(planningActionMsg: MessagePad.PlanningActionMsg) { - mAutoPilotStatusInfo?.let { it -> - if (it.state == STATUS_AUTOPILOT_RUNNING) { - UiThreadHandler.post { - var actions: String? = null - planningActionMsg.actionMsg?.let { - actions = PncActionsHelper.getAction(it.drivingState.number, it.drivingAction.number) + try { + mAutoPilotStatusInfo?.let { it -> + if (it.state == STATUS_AUTOPILOT_RUNNING) { + UiThreadHandler.post { + var actions: String? = null + planningActionMsg.actionMsg?.let { + actions = PncActionsHelper.getAction(it.drivingState.number, it.drivingAction.number) - //如果是存在云端红绿灯数据条件下,设置云端数据 - if (PncActionsHelper.isWaitingTrafficlight(it.drivingState.number, it.drivingAction.number) - && mTrafficLightResult != null - && getWaitTrafficlightTime().isNotBlank()) { - actions += ",预计${getWaitTrafficlightTime()}秒后通过" + //如果是存在云端红绿灯数据条件下,设置云端数据 + if (PncActionsHelper.isWaitingTrafficlight(it.drivingState.number, it.drivingAction.number) + && mTrafficLightResult != null + && getWaitTrafficlightTime().isNotBlank()) { + actions += ",预计${getWaitTrafficlightTime()}秒后通过" + } else { + mTrafficLightResult = null + } + } + // update view + if (actions.isNullOrEmpty()) { + this.background = null + tvHmiPncActions.text = "" } else { - mTrafficLightResult = null + this.background = AppCompatResources.getDrawable(context, R.drawable.pnc_actions_bg) + tvHmiPncActions.text = actions } } - // update view - if (actions.isNullOrEmpty()) { - this.background = null - tvHmiPncActions.text = "" - } else { - this.background = AppCompatResources.getDrawable(context, R.drawable.pnc_actions_bg) - tvHmiPncActions.text = actions - } + }else{ + this.background = null + tvHmiPncActions.text = "" } - }else{ - this.background = null - tvHmiPncActions.text = "" } + }catch (e:Exception){ + e.printStackTrace() } - } override fun onTrafficLightStatus(trafficLightResult: TrafficLightResult) { From dac3d92a1198327db68f8bdbef4b8aeb589cdeb1 Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Mon, 20 Feb 2023 15:23:53 +0800 Subject: [PATCH 63/81] =?UTF-8?q?[dev=5Frobotaxi-d-app-module=5F2132=5F221?= =?UTF-8?q?223=5F2.13.2=5Fsop]=20=E4=BF=AE=E6=94=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt index f7b4c5d0ba..41f3af84b2 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt @@ -1193,9 +1193,9 @@ class MoGoHmiFragment : MvpFragment(), mViewLimitingVelocity?.updateLimitingSpeed(limitingSpeed, limitSpeedSource) tvLimitingSource?.visibility = View.VISIBLE if (limitSpeedSource == 1) { - tvLimitingSource.text = "MAP" + tvLimitingSource?.text = "MAP" } else if (limitSpeedSource == 2) { - tvLimitingSource.text = "RSU" + tvLimitingSource?.text = "RSU" } } else { mViewLimitingVelocity?.visibility = View.INVISIBLE From 1630fde73d9aa0ca1fe610f8460e53a0d17a157b Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Mon, 20 Feb 2023 15:41:18 +0800 Subject: [PATCH 64/81] =?UTF-8?q?[2.14.0][adas=20lib]=201.=E8=83=BD?= =?UTF-8?q?=E5=90=A6=E5=90=AF=E5=8A=A8=E8=87=AA=E9=A9=BE=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=85=BC=E5=AE=B9MAP250=E4=BB=A5=E4=B8=8B?= =?UTF-8?q?=E7=89=88=E6=9C=AC=EF=BC=9B2.=E8=8E=B7=E5=8F=96=E8=BD=A6?= =?UTF-8?q?=E6=9C=BA=E5=9F=BA=E7=A1=80=E4=BF=A1=E6=81=AF=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A4=9A=E6=AC=A1=E8=8E=B7=E5=8F=96=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E7=9B=AE=E5=89=8D=E4=BC=9A=E5=B0=9D=E8=AF=95?= =?UTF-8?q?3=E6=AC=A1=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zhidao/support/adas/high/AdasChannel.java | 40 ++- .../zhidao/support/adas/high/AdasOptions.java | 2 +- .../ability/AutopilotAbility230.java | 109 ++++++++ .../ability/AutopilotAbility250.java} | 112 ++------- .../ability/AutopilotAbilityManager.java | 237 ++++++++++++++++++ .../adas/high/msg/CarConfigRespMessage.java | 2 + .../adas/high/msg/StatusQueryRespMessage.java | 2 +- .../adas/high/msg/VehicleStateMessage.java | 2 +- 8 files changed, 408 insertions(+), 98 deletions(-) create mode 100644 libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility230.java rename libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/{AutopilotAbilityManager.java => autopilot/ability/AutopilotAbility250.java} (70%) create mode 100644 libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityManager.java diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java index c2f55a34f4..0759550895 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java @@ -23,7 +23,6 @@ import androidx.annotation.Nullable; import com.google.protobuf.InvalidProtocolBufferException; import com.zhidao.support.adas.high.bean.AutopilotStatistics; import com.zhidao.support.adas.high.bean.VersionCompatibility; -import com.zhidao.support.adas.high.common.AutopilotAbilityManager; import com.zhidao.support.adas.high.common.AutopilotReview; import com.zhidao.support.adas.high.common.ByteUtil; import com.zhidao.support.adas.high.common.Constants; @@ -34,6 +33,7 @@ import com.zhidao.support.adas.high.common.MessageType; import com.zhidao.support.adas.high.common.ProtocolStatus; import com.zhidao.support.adas.high.common.ReceiveTimeoutManager; import com.zhidao.support.adas.high.common.RegexUtils; +import com.zhidao.support.adas.high.common.autopilot.ability.AutopilotAbilityManager; import com.zhidao.support.adas.high.msg.IMsg; import com.zhidao.support.adas.high.msg.MyMessageFactory; import com.zhidao.support.adas.high.protocol.RawData; @@ -129,6 +129,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec * 乘客屏无法进行注册或取消注册,因为乘客屏无法感知司机屏与工控机连接状态。无法重置已注册或未注册接口列表 */ private SubscribeInterface subscribeInterface; + private Timer carConfigReqTimer;//车辆基础信息请求 多次请求防止无法收到基础信息情况出现 public void setOnMultiDeviceListener(OnMultiDeviceListener onMultiDeviceListener) { this.onMultiDeviceListener = onMultiDeviceListener; @@ -519,7 +520,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec @Override public void onWebSocketConnectSuccess(String ipAddress, int port) { - sendCarConfigReq(); + startCarConfigReq(); ipcConnectedIp = ipAddress; ipcConnectedPort = port; subscribeInterface = new SubscribeInterface(this); @@ -641,6 +642,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec } else { AutopilotAbilityManager.getInstance().stop(); stopCheckCompatibility(); + stopCarConfigReq(); } if (status == Constants.IPC_CONNECTION_STATUS.DISCONNECTED) { AdasManager.getInstance().setCarConfig(null); @@ -758,6 +760,40 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec CupidLogUtils.setEnableLog(isEnableLog); } + //车辆基础信息请求 + private void startCarConfigReq() { + if (carConfigReqTimer == null) { + carConfigReqTimer = new Timer(); + carConfigReqTimer.schedule(new TimerTask() { + int num = 0; + + @Override + public void run() { + if (getIpcConnectionStatus() == Constants.IPC_CONNECTION_STATUS.CONNECTED) { + if (AdasManager.getInstance().getCarConfig() == null) { + num++; + if (num > 3) { + CupidLogUtils.i(TAG, "最后一次也未获取到车机基础信息"); + stopCarConfigReq(); + } else { + CupidLogUtils.i(TAG, "第" + num + "次获取车机基础信息"); + sendCarConfigReq(); + } + } else { + stopCarConfigReq(); + } + } + } + }, 10, 2000L); + } + } + + private synchronized void stopCarConfigReq() { + if (carConfigReqTimer != null) { + carConfigReqTimer.cancel(); + carConfigReqTimer = null; + } + } /**************************************************************************************************************************/ /** diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasOptions.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasOptions.java index e39583f367..62bee3e4fb 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasOptions.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasOptions.java @@ -1,6 +1,6 @@ package com.zhidao.support.adas.high; -import com.zhidao.support.adas.high.common.AutopilotAbilityManager; +import com.zhidao.support.adas.high.common.autopilot.ability.AutopilotAbilityManager; import com.zhidao.support.adas.high.subscribe.SubscribeInterfaceOptions; import java.util.HashSet; diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility230.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility230.java new file mode 100644 index 0000000000..ba867d239d --- /dev/null +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility230.java @@ -0,0 +1,109 @@ +package com.zhidao.support.adas.high.common.autopilot.ability; + +import com.zhidao.support.adas.high.OnAdasListener; + +import java.util.Timer; +import java.util.TimerTask; +import java.util.regex.Pattern; + +import chassis.Chassis; +import chassis.ChassisStatesOuterClass; + +/** + * 是否可以启动自动驾驶能力检测 工控机版本>=230&& <250 使用此类 + * 目前监控了底盘的一些状态和查询节点状态应答的数据 + * 没有使用监控事件报告的原因是因为,部分异常没进行正常恢复通知,例如收到了异常监控数据,但是异常恢复之后没有恢复的通知 + *

+ * 此定时器不能停止 鹰眼中存在UI更新依赖循环查询系统状态 + */ +public class AutopilotAbility230 { + private static final String TAG = AutopilotAbility230.class.getSimpleName(); + private static final long DEFAULT_DETECTION_TIME = 3 * 1000L;//默认检测时间 + private volatile Timer timer; + private ChassisStatesOuterClass.ChassisStates chassisStates; + + public AutopilotAbility230() { + } + + + public void setChassisStates(ChassisStatesOuterClass.ChassisStates chassisStates) { + this.chassisStates = chassisStates; + } + + private void onCallback() { + //金旅、开沃小巴乘客端 不能启动自动驾驶 + if (AutopilotAbilityManager.getInstance().isBus() && AutopilotAbilityManager.getInstance().isPassenger()) { + return; + } + boolean isAutopilotAbility = true;//是否能启动自动驾驶 + String unableAutopilotReason = null;//不能启动自动驾驶原因 + //检测底盘相关 + if (chassisStates != null) { + if (chassisStates.hasBrakeSystemStates()) { + float brake = chassisStates.getBrakeSystemStates().getBrakePedalResponsePosition(); + if (brake > 0) { + isAutopilotAbility = false; + unableAutopilotReason = "制动踏板被踩下"; + } + } + if (isAutopilotAbility) { + /** + * 档位状态判断 目前判断的车型包括 东风Taxi 红旗Taxi 金旅Bus + */ + if (chassisStates.hasGearSystemStates()) { + Chassis.GearPosition gear = chassisStates.getGearSystemStates().getGearPosition(); + //金旅Bus和清扫车 档位不正常 + if (AutopilotAbilityManager.getInstance().isBus()) { + if (gear == Chassis.GearPosition.GEAR_N || gear == Chassis.GearPosition.GEAR_R) { + isAutopilotAbility = false; + unableAutopilotReason = "挡位不正常"; + } + } else { + //东风Taxi和红旗 司机端和乘客端 档位不正常 + if (gear == Chassis.GearPosition.GEAR_P || gear == Chassis.GearPosition.GEAR_R) { + isAutopilotAbility = false; + unableAutopilotReason = "挡位不正常"; + } + } + } + } + + //TODO 关于手刹:不同车型的实现不同所以目前没法使用此字段 +// if (isAutopilotAbility) { +// //电子驻车制动系统 +// if (chassisStates.hasEpbSystemStates()) { +// ChassisStatesOuterClass.EPBSystemStates epb = chassisStates.getEpbSystemStates(); +// if (epb.hasEpbEnableState()){ +// epb.getEpbWorkState(); +// } +// } +// } + } + if (AutopilotAbilityManager.getInstance().getListener() != null) { + AutopilotAbilityManager.getInstance().getListener().onAutopilotAbility(isAutopilotAbility, unableAutopilotReason); + } + } + + public synchronized void start() { + if (timer == null) { + timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + onCallback(); + } + }, 2000L, DEFAULT_DETECTION_TIME);//延迟执行,避免刚连接成功后底盘信息无法及时同步 + } + } + + public synchronized void stop() { + if (timer != null) { + timer.cancel(); + timer = null; + } + this.chassisStates = null; + } + + + +} diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotAbilityManager.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility250.java similarity index 70% rename from libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotAbilityManager.java rename to libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility250.java index ba31a11e45..6d61e96e06 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotAbilityManager.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility250.java @@ -1,82 +1,41 @@ -package com.zhidao.support.adas.high.common; +package com.zhidao.support.adas.high.common.autopilot.ability; -import android.os.Handler; import android.os.Message; -import android.text.TextUtils; import com.zhidao.support.adas.high.AdasManager; -import com.zhidao.support.adas.high.OnAdasListener; import java.util.List; import java.util.Timer; import java.util.TimerTask; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import chassis.Chassis; import chassis.ChassisStatesOuterClass; import system_master.SystemStatusInfo; /** - * 是否可以启动自动驾驶能力检测 + * 是否可以启动自动驾驶能力检测 工控机版本>=250使用此类 * 目前监控了底盘的一些状态和查询节点状态应答的数据 * 没有使用监控事件报告的原因是因为,部分异常没进行正常恢复通知,例如收到了异常监控数据,但是异常恢复之后没有恢复的通知 *

* 此定时器不能停止 鹰眼中存在UI更新依赖循环查询系统状态 */ -public class AutopilotAbilityManager { - private static final String TAG = AutopilotAbilityManager.class.getSimpleName(); +public class AutopilotAbility250 { + private static final String TAG = AutopilotAbility250.class.getSimpleName(); private static final int WHAT_TIMEOUT = 0; private static final int DEFAULT_TIMEOUT = 1500; private static final long DEFAULT_DETECTION_TIME = 3 * 1000L;//默认检测时间 private static final String[] NODE_INFO_STATE = {"未知状态 ", "依赖未就绪 ", "启动中 ", "运行 ", "停止 ", "无法启动状态 ", "人为启动状态 ", "人为关闭状态 "}; - private static volatile AutopilotAbilityManager INSTANCE; - private OnAdasListener listener; private volatile Timer timer; - private final Pattern pattern = Pattern.compile("\\d+.\\d+.\\d+"); private ChassisStatesOuterClass.ChassisStates chassisStates; - private Handler handler; - private OnAutopilotAbilityListener onAutopilotAbilityListener; - /** - * 身份/车型 - */ - private int identityMode; - public interface OnAutopilotAbilityListener { - void onStatusQuery();//查询是被调用 + public AutopilotAbility250() { } - public void setIdentityMode(int identityMode) { - this.identityMode = identityMode; - } - - public void setOnAdasListener(OnAdasListener listener) { - this.listener = listener; - } - - public void setOnAutopilotAbilityListener(OnAutopilotAbilityListener onAutopilotAbilityListener) { - this.onAutopilotAbilityListener = onAutopilotAbilityListener; - } - - private AutopilotAbilityManager() { - } - - public static AutopilotAbilityManager getInstance() { - if (INSTANCE == null) { - synchronized (AutopilotAbilityManager.class) { - if (INSTANCE == null) { - INSTANCE = new AutopilotAbilityManager(); - } - } - } - return INSTANCE; - } - public void setStatusInfo(SystemStatusInfo.StatusInfo statusInfo) { - if (handler != null) { - if (handler.hasMessages(WHAT_TIMEOUT)) - handler.removeMessages(WHAT_TIMEOUT); + if (AutopilotAbilityManager.getInstance().getHandler() != null) { + if (AutopilotAbilityManager.getInstance().getHandler().hasMessages(WHAT_TIMEOUT)) + AutopilotAbilityManager.getInstance().getHandler().removeMessages(WHAT_TIMEOUT); } onCallback(statusInfo); } @@ -87,7 +46,7 @@ public class AutopilotAbilityManager { private void onCallback(SystemStatusInfo.StatusInfo statusInfo) { //金旅、开沃小巴乘客端 不能启动自动驾驶 - if (isBus(identityMode) && isPassenger(identityMode)) { + if (AutopilotAbilityManager.getInstance().isBus() && AutopilotAbilityManager.getInstance().isPassenger()) { return; } boolean isAutopilotAbility = true;//是否能启动自动驾驶 @@ -98,20 +57,7 @@ public class AutopilotAbilityManager { if (statusInfo.hasMasterVersion()) { //截取Master Version String masterVersion = statusInfo.getMasterVersion(); - if (!TextUtils.isEmpty(masterVersion)) { - try { - Matcher matcher = pattern.matcher(masterVersion); - if (matcher.find()) { - String group = matcher.group(); - if (!TextUtils.isEmpty(group)) { - String v = group.split("\\.")[0]; - version = Integer.parseInt(v); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } + version = AutopilotAbilityManager.getInstance().parseVersion(false, masterVersion); } //如果 maser version 大于1,还需要判断AutoPilotReady字段是否存在,以确保MAP版本和SSM Maser版本不陪配情况逻辑能正常执行 if (version > 1 && statusInfo.hasAutoPilotReady()) { @@ -182,7 +128,7 @@ public class AutopilotAbilityManager { if (chassisStates.hasGearSystemStates()) { Chassis.GearPosition gear = chassisStates.getGearSystemStates().getGearPosition(); //金旅Bus和清扫车 档位不正常 - if (isBus(identityMode)) { + if (AutopilotAbilityManager.getInstance().isBus()) { if (gear == Chassis.GearPosition.GEAR_N || gear == Chassis.GearPosition.GEAR_R) { isAutopilotAbility = false; unableAutopilotReason = "挡位不正常"; @@ -208,8 +154,8 @@ public class AutopilotAbilityManager { // } // } } - if (listener != null) { - listener.onAutopilotAbility(isAutopilotAbility, unableAutopilotReason); + if (AutopilotAbilityManager.getInstance().getListener() != null) { + AutopilotAbilityManager.getInstance().getListener().onAutopilotAbility(isAutopilotAbility, unableAutopilotReason); } } @@ -219,14 +165,14 @@ public class AutopilotAbilityManager { timer.schedule(new TimerTask() { @Override public void run() { - if (onAutopilotAbilityListener != null) { - onAutopilotAbilityListener.onStatusQuery(); + if (AutopilotAbilityManager.getInstance().getOnAutopilotAbilityListener() != null) { + AutopilotAbilityManager.getInstance().getOnAutopilotAbilityListener().onStatusQuery(); } AdasManager.getInstance().sendStatusQueryReq(); - if (handler != null) { - if (handler.hasMessages(WHAT_TIMEOUT)) - handler.removeMessages(WHAT_TIMEOUT); - handler.sendEmptyMessageDelayed(WHAT_TIMEOUT, DEFAULT_TIMEOUT); + if (AutopilotAbilityManager.getInstance().getHandler() != null) { + if (AutopilotAbilityManager.getInstance().getHandler().hasMessages(WHAT_TIMEOUT)) + AutopilotAbilityManager.getInstance().getHandler().removeMessages(WHAT_TIMEOUT); + AutopilotAbilityManager.getInstance().getHandler().sendEmptyMessageDelayed(WHAT_TIMEOUT, DEFAULT_TIMEOUT); } } }, 2000L, DEFAULT_DETECTION_TIME);//延迟执行,避免刚连接成功后底盘信息无法及时同步 @@ -238,14 +184,9 @@ public class AutopilotAbilityManager { timer.cancel(); timer = null; } - handler = null; this.chassisStates = null; } - public void setHandler(Handler handler) { - this.handler = handler; - } - public void onHandleMessage(Message msg) { if (msg.what == WHAT_TIMEOUT) { @@ -254,19 +195,4 @@ public class AutopilotAbilityManager { } - private boolean isDriver(int appIdentityMode) { - return (appIdentityMode & 0x01) != 0x01; - } - - private boolean isPassenger(int appIdentityMode) { - return (appIdentityMode & 0x01) == 0x01; - } - - private boolean isBus(int appIdentityMode) { - return (appIdentityMode & 0xA0) == 0xA0; - } - - private boolean isTaxi(int appIdentityMode) { - return (appIdentityMode & 0xA0) != 0xA0; - } } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityManager.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityManager.java new file mode 100644 index 0000000000..2a1e7a90da --- /dev/null +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityManager.java @@ -0,0 +1,237 @@ +package com.zhidao.support.adas.high.common.autopilot.ability; + +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; + +import com.zhidao.support.adas.high.AdasManager; +import com.zhidao.support.adas.high.OnAdasListener; +import com.zhidao.support.adas.high.common.Constants; +import com.zhidao.support.adas.high.common.CupidLogUtils; + +import java.util.Timer; +import java.util.TimerTask; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import chassis.ChassisStatesOuterClass; +import mogo.telematics.pad.MessagePad; +import system_master.SystemStatusInfo; + +/** + * 是否可以启动自动驾驶能力检测 + * 目前监控了底盘的一些状态和查询节点状态应答的数据 + * 没有使用监控事件报告的原因是因为,部分异常没进行正常恢复通知,例如收到了异常监控数据,但是异常恢复之后没有恢复的通知 + *

+ * 此定时器不能停止 鹰眼中存在UI更新依赖循环查询系统状态 + */ +public class AutopilotAbilityManager { + private static final String TAG = AutopilotAbilityManager.class.getSimpleName(); + private static volatile AutopilotAbilityManager INSTANCE; + private OnAdasListener listener; + private final Pattern pattern = Pattern.compile("\\d+\\.\\d+\\.\\d+"); + private Handler handler; + private OnAutopilotAbilityListener onAutopilotAbilityListener; + private int dockerVersion = -1;//工控机版本 + private AutopilotAbility230 autopilotAbility230; + private AutopilotAbility250 autopilotAbility250; + private Timer startTimer; + /** + * 身份/车型 + */ + private int identityMode; + + public interface OnAutopilotAbilityListener { + void onStatusQuery();//查询是被调用 + } + + private AutopilotAbilityManager() { + } + + public static AutopilotAbilityManager getInstance() { + if (INSTANCE == null) { + synchronized (AutopilotAbilityManager.class) { + if (INSTANCE == null) { + INSTANCE = new AutopilotAbilityManager(); + } + } + } + return INSTANCE; + } + + + public void setIdentityMode(int identityMode) { + this.identityMode = identityMode; + } + + public void setCarConfig(MessagePad.CarConfigResp carConfig) { + if (dockerVersion == -1) { + String v = carConfig.getDockVersion(); + int version = parseVersion(true, v); + if (version != -1) { + if (startTimer != null) { + startTimer.cancel(); + startTimer = null; + } + dockerVersion = version; + Log.i("dddd", "工控机版本=" + dockerVersion); + initAutopilotAbility(); + } + } + } + + public void setOnAdasListener(OnAdasListener listener) { + this.listener = listener; + } + + public OnAdasListener getListener() { + return listener; + } + + public void setHandler(Handler handler) { + this.handler = handler; + } + + public Handler getHandler() { + return handler; + } + + public void setOnAutopilotAbilityListener(OnAutopilotAbilityListener onAutopilotAbilityListener) { + this.onAutopilotAbilityListener = onAutopilotAbilityListener; + } + + public OnAutopilotAbilityListener getOnAutopilotAbilityListener() { + return onAutopilotAbilityListener; + } + + + public void setStatusInfo(SystemStatusInfo.StatusInfo statusInfo) { + if (autopilotAbility250 != null) { + autopilotAbility250.setStatusInfo(statusInfo); + } + + } + + public void setChassisStates(ChassisStatesOuterClass.ChassisStates chassisStates) { + if (autopilotAbility230 != null) { + autopilotAbility230.setChassisStates(chassisStates); + } + if (autopilotAbility250 != null) { + autopilotAbility250.setChassisStates(chassisStates); + } + } + + + public void onHandleMessage(Message msg) { + if (autopilotAbility250 != null) { + autopilotAbility250.onHandleMessage(msg); + } + } + + + private void initAutopilotAbility() { + if (dockerVersion >= 250) { + stop230(); + if (autopilotAbility250 == null) { + autopilotAbility250 = new AutopilotAbility250(); + autopilotAbility250.start(); + } + } else { + stop250(); + if (autopilotAbility230 == null) { + autopilotAbility230 = new AutopilotAbility230(); + autopilotAbility230.start(); + } + + } + } + + private void stop230() { + if (autopilotAbility230 != null) { + autopilotAbility230.stop(); + autopilotAbility230 = null; + } + } + + private void stop250() { + if (autopilotAbility250 != null) { + autopilotAbility250.stop(); + autopilotAbility250 = null; + } + } + + /** + * 连接工控机成功调用此函数,如果dockerVersion还未获取到将启动最低版本的启动自动驾驶能力检测 + * 此函数为保险措施 以防无法获取工控机版本时 也能 正常执行逻辑 + */ + public synchronized void start() { + if (startTimer == null) { + startTimer = new Timer(); + startTimer.schedule(new TimerTask() { + @Override + public void run() { + if (dockerVersion == -1 && AdasManager.getInstance().getIpcConnectionStatus() == Constants.IPC_CONNECTION_STATUS.CONNECTED) { + dockerVersion = 230; + initAutopilotAbility(); + } + } + }, 8000L);//延迟执行,避免刚连接成功后底盘信息无法及时同步 + } + + } + + public synchronized void stop() { + stop230(); + stop250(); + handler = null; + dockerVersion = -1; + } + + + /** + * 接线板 格式 xxx.xxx.xxx(x的数量不固定) + * + * @param isUserAll 是否使用全部截取数据 true:表示 12.34.56 截取之后 123456 false:表示12.34.56 截取之后 12 + * @param ver 版本字符串 + * @return -1表示解析失败 + */ + public int parseVersion(boolean isUserAll, String ver) { + int version = -1; + if (!TextUtils.isEmpty(ver)) { + try { + Matcher matcher = pattern.matcher(ver); + if (matcher.find()) { + String group = matcher.group(); + if (!TextUtils.isEmpty(group)) { + if (isUserAll) { + group = group.replace(".", ""); + } else { + group = group.split("\\.")[0]; + } + version = Integer.parseInt(group); + } + } + } catch (Exception e) { + CupidLogUtils.e(TAG, "版本解析失败=" + ver, e); + } + } + return version; + } + + public boolean isDriver() { + return (identityMode & 0x01) != 0x01; + } + + public boolean isPassenger() { + return (identityMode & 0x01) == 0x01; + } + + public boolean isBus() { + return (identityMode & 0xA0) == 0xA0; + } + + public boolean isTaxi() { + return (identityMode & 0xA0) != 0xA0; + } +} diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/CarConfigRespMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/CarConfigRespMessage.java index 61c6d1b9f4..7a63aed0b6 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/CarConfigRespMessage.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/CarConfigRespMessage.java @@ -7,6 +7,7 @@ import com.zhidao.support.adas.high.AdasChannel; import com.zhidao.support.adas.high.AdasManager; import com.zhidao.support.adas.high.OnAdasListener; import com.zhidao.support.adas.high.common.CupidLogUtils; +import com.zhidao.support.adas.high.common.autopilot.ability.AutopilotAbilityManager; import com.zhidao.support.adas.high.protocol.RawData; import mogo.telematics.pad.MessagePad; @@ -20,6 +21,7 @@ public class CarConfigRespMessage extends MyAbstractMessageHandler { public void handlerMsg(RawData raw, OnAdasListener adasListener) throws InvalidProtocolBufferException { MessagePad.CarConfigResp carConfigResp = MessagePad.CarConfigResp.parser().parseFrom(raw.originalData.toByteArray(), raw.getOffsetValue(), raw.getPackageLengthValue() - raw.getOffsetValue()); AdasChannel.calculateTimeConsumingOnDispatchRaw("车机基础信息应答", raw.receiveTime); + AutopilotAbilityManager.getInstance().setCarConfig(carConfigResp); AdasManager.getInstance().setCarConfig(carConfigResp); long nowTime = 0; if (CupidLogUtils.isEnableLog()) diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/StatusQueryRespMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/StatusQueryRespMessage.java index be81f42258..2d37f3ced7 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/StatusQueryRespMessage.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/StatusQueryRespMessage.java @@ -5,7 +5,7 @@ import android.os.SystemClock; import com.google.protobuf.InvalidProtocolBufferException; import com.zhidao.support.adas.high.AdasChannel; import com.zhidao.support.adas.high.OnAdasListener; -import com.zhidao.support.adas.high.common.AutopilotAbilityManager; +import com.zhidao.support.adas.high.common.autopilot.ability.AutopilotAbilityManager; import com.zhidao.support.adas.high.common.CupidLogUtils; import com.zhidao.support.adas.high.protocol.RawData; diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/VehicleStateMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/VehicleStateMessage.java index 00381802e6..4295d0fc4d 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/VehicleStateMessage.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/VehicleStateMessage.java @@ -5,7 +5,7 @@ import android.os.SystemClock; import com.google.protobuf.InvalidProtocolBufferException; import com.zhidao.support.adas.high.AdasChannel; import com.zhidao.support.adas.high.OnAdasListener; -import com.zhidao.support.adas.high.common.AutopilotAbilityManager; +import com.zhidao.support.adas.high.common.autopilot.ability.AutopilotAbilityManager; import com.zhidao.support.adas.high.common.CupidLogUtils; import com.zhidao.support.adas.high.protocol.RawData; From e9b415381d41cb33e91f4309ba4c93b79b4b07ab Mon Sep 17 00:00:00 2001 From: zhongchao Date: Mon, 20 Feb 2023 16:20:27 +0800 Subject: [PATCH 65/81] [2.14.0] fix bug of upload role status --- .../com/zhjt/mogo_core_function_devatools/trace/SyncConfig.kt | 2 ++ .../src/main/java/com/mogo/eagle/core/data/app/AppConfigInfo.kt | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/trace/SyncConfig.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/trace/SyncConfig.kt index 51ca529e18..aa1734dd78 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/trace/SyncConfig.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/trace/SyncConfig.kt @@ -10,6 +10,7 @@ import com.mogo.eagle.core.data.deva.chain.ChainConstant import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.eagle.core.utilcode.mogo.getMisChannelCode import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA import com.mogo.eagle.core.utilcode.util.NetworkUtils @@ -38,6 +39,7 @@ object SyncConfig { AppConfigInfo.mapSdkOptVersion = DebugConfig.getMapOptVersion() AppConfigInfo.isConnectNet = NetworkUtils.isConnected(context) AppConfigInfo.isConnectSocket = MogoStatusManager.getInstance().isSocketOnLine + AppConfigInfo.role = AppIdentityModeUtils.getMisChannelCode(FunctionBuildConfig.appIdentityMode) when { AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode) -> {// 司机端 AppConfigInfo.isDriver = true diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/app/AppConfigInfo.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/app/AppConfigInfo.kt index 1a43eab9b8..b92c85dfb9 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/app/AppConfigInfo.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/app/AppConfigInfo.kt @@ -58,7 +58,7 @@ object AppConfigInfo { var netMode: Int = 3 // 角色 - var role: Int = AppIdentityModeUtils.getMisChannelCode(FunctionBuildConfig.appIdentityMode) + var role: Int = 0 // 是否可以网络连接 var isConnectNet: Boolean = false From 49c3bda190dc8b1d4f43d88b702fc4b5b0999d82 Mon Sep 17 00:00:00 2001 From: zhongchao Date: Mon, 20 Feb 2023 16:35:09 +0800 Subject: [PATCH 66/81] [2.14.0] fix bug --- .../function/hmi/ui/pnc/PncActionsView.kt | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/pnc/PncActionsView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/pnc/PncActionsView.kt index 6a15160b33..60c4f7420e 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/pnc/PncActionsView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/pnc/PncActionsView.kt @@ -74,16 +74,23 @@ class PncActionsView @JvmOverloads constructor( override fun pncActions(planningActionMsg: MessagePad.PlanningActionMsg) { try { mAutoPilotStatusInfo?.let { it -> - if (it.state == STATUS_AUTOPILOT_RUNNING) { - UiThreadHandler.post { + UiThreadHandler.post { + if (it.state == STATUS_AUTOPILOT_RUNNING) { var actions: String? = null planningActionMsg.actionMsg?.let { - actions = PncActionsHelper.getAction(it.drivingState.number, it.drivingAction.number) + actions = PncActionsHelper.getAction( + it.drivingState.number, + it.drivingAction.number + ) //如果是存在云端红绿灯数据条件下,设置云端数据 - if (PncActionsHelper.isWaitingTrafficlight(it.drivingState.number, it.drivingAction.number) + if (PncActionsHelper.isWaitingTrafficlight( + it.drivingState.number, + it.drivingAction.number + ) && mTrafficLightResult != null - && getWaitTrafficlightTime().isNotBlank()) { + && getWaitTrafficlightTime().isNotBlank() + ) { actions += ",预计${getWaitTrafficlightTime()}秒后通过" } else { mTrafficLightResult = null @@ -94,16 +101,18 @@ class PncActionsView @JvmOverloads constructor( this.background = null tvHmiPncActions.text = "" } else { - this.background = AppCompatResources.getDrawable(context, R.drawable.pnc_actions_bg) + this.background = + AppCompatResources.getDrawable(context, R.drawable.pnc_actions_bg) tvHmiPncActions.text = actions } + + } else { + this.background = null + tvHmiPncActions.text = "" } - }else{ - this.background = null - tvHmiPncActions.text = "" } } - }catch (e:Exception){ + } catch (e: Exception) { e.printStackTrace() } } From 2b551bcdc3f3af8c3cc27196ee561513f5d941c4 Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Mon, 20 Feb 2023 16:44:28 +0800 Subject: [PATCH 67/81] =?UTF-8?q?[2.14.0][adas=20lib]=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E9=94=99=E5=88=AB=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../high/common/autopilot/ability/AutopilotAbility230.java | 4 ++-- .../high/common/autopilot/ability/AutopilotAbility250.java | 4 ++-- .../com/zhidao/support/adas/high/msg/VehicleStateMessage.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility230.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility230.java index ba867d239d..588f741e14 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility230.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility230.java @@ -56,13 +56,13 @@ public class AutopilotAbility230 { if (AutopilotAbilityManager.getInstance().isBus()) { if (gear == Chassis.GearPosition.GEAR_N || gear == Chassis.GearPosition.GEAR_R) { isAutopilotAbility = false; - unableAutopilotReason = "挡位不正常"; + unableAutopilotReason = "档位不正常"; } } else { //东风Taxi和红旗 司机端和乘客端 档位不正常 if (gear == Chassis.GearPosition.GEAR_P || gear == Chassis.GearPosition.GEAR_R) { isAutopilotAbility = false; - unableAutopilotReason = "挡位不正常"; + unableAutopilotReason = "档位不正常"; } } } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility250.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility250.java index 6d61e96e06..18143ec8b0 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility250.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbility250.java @@ -131,13 +131,13 @@ public class AutopilotAbility250 { if (AutopilotAbilityManager.getInstance().isBus()) { if (gear == Chassis.GearPosition.GEAR_N || gear == Chassis.GearPosition.GEAR_R) { isAutopilotAbility = false; - unableAutopilotReason = "挡位不正常"; + unableAutopilotReason = "档位不正常"; } } else { //东风Taxi和红旗 司机端和乘客端 档位不正常 if (gear == Chassis.GearPosition.GEAR_P || gear == Chassis.GearPosition.GEAR_R) { isAutopilotAbility = false; - unableAutopilotReason = "挡位不正常"; + unableAutopilotReason = "档位不正常"; } } } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/VehicleStateMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/VehicleStateMessage.java index 4295d0fc4d..5a94481d6a 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/VehicleStateMessage.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/VehicleStateMessage.java @@ -139,7 +139,7 @@ public class VehicleStateMessage extends MyAbstractMessageHandler { ChassisStatesOuterClass.GearSystemStates.Builder gearSystemStates = null; if (vehicleState.hasGear()) { gearSystemStates = ChassisStatesOuterClass.GearSystemStates.newBuilder(); - //挂挡档位数据 + //档位数据 gearSystemStates.setGearPosition(vehicleState.getGear());//鹰眼已用 } if (vehicleState.hasGearSwitchInference()) { From b3045791a960003bfbd0d1a3305bef825dc1337a Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Mon, 20 Feb 2023 17:23:56 +0800 Subject: [PATCH 68/81] =?UTF-8?q?[2.14.0]=E5=8C=85=E4=BD=93=E5=A4=A7?= =?UTF-8?q?=E5=B0=8F=E6=94=B9=E4=B8=BA=E4=BF=9D=E7=95=99=E5=B0=8F=E6=95=B0?= =?UTF-8?q?=E7=82=B9=E5=90=8E=E4=B8=A4=E4=BD=8D=EF=BC=8C=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?Cos=E5=88=A4=E6=96=ADkey=E6=96=B9=E5=BC=8F=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/biz/BadCaseManagerView.kt | 5 ++++- .../badcase/biz/adapter/BagManagerListAdapter.kt | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt index 60b299948b..70f318d8fe 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt @@ -114,6 +114,7 @@ class BadCaseManagerView @JvmOverloads constructor( if(bagManagerList.size>0){ bagManagerEntity.reqType = 3 bagManagerEntity.keyReq = bagManagerList[0].key + Log.i("sendBagManagerCmd","bagManagerEntity.keyReq="+bagManagerEntity.keyReq) CallerAutoPilotManager.sendBagManagerCmd(bagManagerEntity) bagUploadDialog = BagUploadDialog(context) @@ -237,6 +238,7 @@ class BadCaseManagerView @JvmOverloads constructor( Log.i(TAG,"onBagManagerResult Start") Log.i(TAG,"keyReq="+bagManager.keyReq) Log.i(TAG,"reqType="+bagManager.reqType) + Log.i(TAG,"uploadCosResp stat="+bagManager.uploadCosResp.stat) Log.i(TAG,"descReq description="+bagManager.descReq.description +" audioUrl="+bagManager.descReq.audioUrl +" reportBI="+bagManager.descReq.reportBI @@ -352,7 +354,7 @@ class BadCaseManagerView @JvmOverloads constructor( val uploadIterator = bagManagerEntity.bagsInfoResp.iterator() while(uploadIterator.hasNext()){ val uploadBagInfo = uploadIterator.next() - if(uploadBagInfo.key == bagManager.keyReq){ + if(uploadBagInfo.key == bagManager.uploadCosResp.key && bagManager.uploadCosResp.stat!=1){ bagManagerList.remove(uploadBagInfo) if(bagManagerList.size>0){ var remainSize = 0L @@ -363,6 +365,7 @@ class BadCaseManagerView @JvmOverloads constructor( //执行下一个上传Bag命令 bagManagerEntity.reqType = 3 bagManagerEntity.keyReq = bagManagerList[0].key + Log.i("sendBagManagerCmd","bagManagerEntity.keyReq="+bagManagerEntity.keyReq) CallerAutoPilotManager.sendBagManagerCmd(bagManagerEntity) } } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt index 0dbf9915b2..d3c8abc803 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt @@ -24,7 +24,7 @@ class BagManagerListAdapter: RecyclerView.Adapter() { private var data:List ?= null private var bagClickListener: BagClickListener ?= null - private val format = DecimalFormat("0.0") + private val format = DecimalFormat("0.00") fun setData(data: List?){ this.data = data From 79717282a9735769fe9c42409c5a6e9d1fecdf44 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Mon, 20 Feb 2023 18:35:05 +0800 Subject: [PATCH 69/81] =?UTF-8?q?[2.14.0]=E6=B6=88=E6=81=AF=E7=9B=92?= =?UTF-8?q?=E5=AD=90=E8=BD=A6=E8=BE=86=E7=B3=BB=E7=BB=9F=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B6=88=E6=81=AF=E6=9D=A5=E6=BA=90=EF=BC=8C?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=8A=98=E5=8F=A0=E6=96=87=E5=AD=97=E5=B1=95?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../msgbox/adapter/DriverMsgBoxListAdapter.kt | 6 ++++++ .../res/layout/item_msg_box_ipc_report.xml | 18 ++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt index 9987bfaa74..a0e12d3a8e 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt @@ -143,6 +143,7 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : holder.tvReportTypeNormal.text = resultStr holder.tvReportTypeOpen.text = resultStr holder.tvReportReasonOpen.text = "原因:${reportEntity.msg}" + holder.tvReportSrcOpen.text = "消息来源:${reportEntity.src}" var actionStr = "" for (action in reportEntity.actionsList) { actionStr = @@ -157,6 +158,7 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : null, null ) + holder.tvStatusSelect.text = "折叠" holder.ivReportImageNormal.visibility = View.GONE holder.tvReportLevelNormal.visibility = View.GONE holder.tvReportTimeNormal.visibility = View.GONE @@ -167,6 +169,7 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : holder.tvReportTimeOpen.visibility = View.VISIBLE holder.tvReportTypeOpen.visibility = View.VISIBLE holder.tvReportReasonOpen.visibility = View.VISIBLE + holder.tvReportSrcOpen.visibility = View.VISIBLE holder.tvReportActionOpen.visibility = View.VISIBLE } else { holder.tvStatusSelect.setCompoundDrawablesWithIntrinsicBounds( @@ -175,6 +178,7 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : null, null ) + holder.tvStatusSelect.text = "展开" holder.ivReportImageNormal.visibility = View.VISIBLE holder.tvReportLevelNormal.visibility = View.VISIBLE holder.tvReportTimeNormal.visibility = View.VISIBLE @@ -185,6 +189,7 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : holder.tvReportTimeOpen.visibility = View.GONE holder.tvReportTypeOpen.visibility = View.GONE holder.tvReportReasonOpen.visibility = View.GONE + holder.tvReportSrcOpen.visibility = View.GONE holder.tvReportActionOpen.visibility = View.GONE } } @@ -340,6 +345,7 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : var tvReportTimeOpen: TextView = itemView.findViewById(R.id.tvReportTimeOpen) var tvReportTypeOpen: TextView = itemView.findViewById(R.id.tvReportTypeOpen) var tvReportReasonOpen: TextView = itemView.findViewById(R.id.tvReportReasonOpen) + var tvReportSrcOpen: TextView = itemView.findViewById(R.id.tvReportSrcOpen) var tvReportActionOpen: TextView = itemView.findViewById(R.id.tvReportActionOpen) } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_ipc_report.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_ipc_report.xml index 5911e16c42..29e1165bfb 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_ipc_report.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_ipc_report.xml @@ -70,7 +70,7 @@ android:id="@+id/tvStatusSelect" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="折叠" + android:text="展开" android:textColor="#FFFFFFFF" android:textSize="24dp" app:layout_constraintTop_toTopOf="parent" @@ -163,12 +163,26 @@ /> + + Date: Mon, 20 Feb 2023 18:41:00 +0800 Subject: [PATCH 70/81] =?UTF-8?q?[2.14.0]MAP=E7=89=88=E6=9C=AC=E5=8F=B7?= =?UTF-8?q?=E6=98=BE=E7=A4=BAView=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo/eagle/core/function/hmi/ui/widget/VersionNameView.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/VersionNameView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/VersionNameView.kt index 12ff7aa0bc..2806810642 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/VersionNameView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/VersionNameView.kt @@ -3,6 +3,7 @@ package com.mogo.eagle.core.function.hmi.ui.widget import android.annotation.SuppressLint import android.content.Context import android.util.AttributeSet +import android.util.Log import android.view.LayoutInflater import android.widget.LinearLayout import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo @@ -66,6 +67,7 @@ class VersionNameView @JvmOverloads constructor( if (!dockerVersion.isNullOrEmpty()) { it.text = " ; MAP:${dockerVersion}" } + Log.i(TAG,"tvMapVersionName text="+tvMapVersionName.text) } } } @@ -88,6 +90,7 @@ class VersionNameView @JvmOverloads constructor( override fun onAutopilotStatusResponse(autoPilotStatusInfo: AutopilotStatusInfo) { dockerVersion = autoPilotStatusInfo.dockVersion + Log.i(TAG,"dockerVersion=$dockerVersion") showCurrentMapVersion() //将工控机版本赋值给BadCase配置常量 BadCaseConfig.dockerVersion = autoPilotStatusInfo.dockVersion From a8ad4c67ca075711a965b058ec9f50be20d7e957 Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Mon, 20 Feb 2023 18:52:03 +0800 Subject: [PATCH 71/81] =?UTF-8?q?[2.14.0][Fix]=E8=A7=A3=E5=86=B3=E9=AB=98?= =?UTF-8?q?=E7=B2=BE=E5=9C=B0=E5=9B=BE=E7=BC=93=E5=AD=98=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E7=8A=B6=E6=80=81=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eagle/core/function/call/map/CallerMapUIServiceManager.kt | 2 +- .../mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java | 2 +- .../src/main/java/com/mogo/map/MogoMapUIController.java | 2 +- .../main/java/com/mogo/map/uicontroller/AMapUIController.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt index 3543a6f5aa..180dcaa281 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapUIServiceManager.kt @@ -49,7 +49,7 @@ object CallerMapUIServiceManager { } fun isCityDataCached(): Boolean { - return serviceProvider?.mapUIController?.isCityDataCached ?: true + return serviceProvider?.mapUIController?.isCityDataCached ?: false } fun cancelDownloadCacheData() { diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java index 4b92226e7b..8fab38a2af 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java @@ -1235,7 +1235,7 @@ public class AMapViewWrapper implements IMogoMapView, } } } - return true; + return false; } @Override diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java index ab7e482bb4..90eead43e5 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java @@ -456,7 +456,7 @@ public class MogoMapUIController implements IMogoMapUIController { if (mDelegate != null) { return mDelegate.isCityDataCached(); } - return true; + return false; } @Override diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java index 21fde51ca5..793df718de 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java @@ -389,7 +389,7 @@ public class AMapUIController implements IMogoMapUIController { if (mClient != null) { return mClient.isCityDataCached(); } - return true; + return false; } @Override From 76c6d459677e127c734e0dcbecd3601273e33732 Mon Sep 17 00:00:00 2001 From: renwj Date: Tue, 21 Feb 2023 11:56:00 +0800 Subject: [PATCH 72/81] =?UTF-8?q?[2.14.0]=E7=A7=BB=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E6=97=A5=E5=BF=97;lancetx=E6=8F=92=E4=BB=B6=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=97=A5=E5=BF=97level?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 1 + .../eagle/core/function/v2x/events/alarm/V2XAlarmServer.java | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 5c65028837..92939b8073 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -50,6 +50,7 @@ if (!isAndroidTestBuild()) { LancetX { enable true enableInDebug true + logLevel "DEBUG" weaveGroup { anr_fix { diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/alarm/V2XAlarmServer.java b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/alarm/V2XAlarmServer.java index 7019f0601f..95c65ff2b7 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/alarm/V2XAlarmServer.java +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/alarm/V2XAlarmServer.java @@ -35,7 +35,6 @@ public class V2XAlarmServer { CopyOnWriteArrayList v2XRoadEventEntityList, MogoLocation currentLocation) { try { - Log.d("RWJ", "getDriveFrontAlarmEvent --- 1 ---" + currentLocation ); if (!showedEvents.isEmpty()) { Iterator iterator = showedEvents.iterator(); while (iterator.hasNext()) { @@ -52,7 +51,6 @@ public class V2XAlarmServer { } } } - Log.d("RWJ", "getDriveFrontAlarmEvent --- 2 ---" + currentLocation); if (currentLocation != null && v2XRoadEventEntityList != null) { // 因为集合是按照距离排序后的所以这里检索出来第一个就发出警告 for (V2XRoadEventEntity v2XRoadEventEntity : v2XRoadEventEntityList) { From 81e22becd36506a6d3b47416d4963323ff631915 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Tue, 21 Feb 2023 12:07:06 +0800 Subject: [PATCH 73/81] =?UTF-8?q?[2.14.0]=E6=B6=88=E6=81=AF=E7=9B=92?= =?UTF-8?q?=E5=AD=90=E8=BF=90=E8=90=A5=E5=B9=B3=E5=8F=B0=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=8A=98=E5=8F=A0=E5=B8=83=E5=B1=80=E6=96=87=E5=AD=97=E4=B8=BA?= =?UTF-8?q?=E6=8A=98=E5=8F=A0=E3=80=81=E5=B1=95=E5=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt | 2 ++ .../src/main/res/layout/item_msg_box_operation.xml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt index a0e12d3a8e..1b2408f3bf 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt @@ -216,6 +216,7 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : null, null ) + holder.tvOperationStatusSelect.text = "折叠" holder.ivOperationImageNormal.visibility = View.GONE holder.tvOperationTitleNormal.visibility = View.GONE holder.tvOperationContentNormal.visibility = View.GONE @@ -230,6 +231,7 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : null, null ) + holder.tvOperationStatusSelect.text = "展开" holder.ivOperationImageNormal.visibility = View.VISIBLE holder.tvOperationTitleNormal.visibility = View.VISIBLE holder.tvOperationContentNormal.visibility = View.VISIBLE diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_operation.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_operation.xml index 375a39975f..81fe42c1e5 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_operation.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_operation.xml @@ -59,7 +59,7 @@ android:id="@+id/tvOperationStatusSelect" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="折叠" + android:text="展开" android:textColor="#FFFFFFFF" android:textSize="24dp" app:layout_constraintTop_toTopOf="parent" From 14980779290a6b66cd466eecbdac4eb47a81569d Mon Sep 17 00:00:00 2001 From: renwj Date: Tue, 21 Feb 2023 12:08:16 +0800 Subject: [PATCH 74/81] =?UTF-8?q?[2.14.0]=E5=85=B3=E9=97=ADv2x=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo/eagle/core/function/v2x/events/V2XEventManager.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/V2XEventManager.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/V2XEventManager.kt index 12d03d56ac..e02afb9d09 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/V2XEventManager.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/V2XEventManager.kt @@ -7,6 +7,7 @@ import android.util.* import androidx.localbroadcastmanager.content.* import com.mogo.cloud.passport.* import com.mogo.commons.constants.HostConst +import com.mogo.commons.debug.DebugConfig import com.mogo.commons.module.ServiceConst.CARD_TYPE_ROAD_CONDITION import com.mogo.commons.module.status.IMogoStatusChangedListener import com.mogo.commons.module.status.MogoStatusManager @@ -68,6 +69,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.* import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_V2X import com.mogo.eagle.core.utilcode.mogo.storage.* import com.mogo.eagle.core.utilcode.util.* +import com.mogo.eagle.core.utilcode.util.BuildConfig import com.mogo.eagle.core.utilcode.util.TimeUtils import com.mogo.eagle.core.utilcode.util.Utils import com.mogo.map.listener.* @@ -112,7 +114,7 @@ object V2XEventManager : IMoGoMapLocationListener, IMoGoTokenCallback, IV2XCallb V2XManager.init(V2XConfig.Builder().also { it.aiCloudConfig(MoGoAiCloudClientConfig.getInstance()) it.context(context) - it.loggable(true) + it.loggable(DebugConfig.isDebug()) it.distanceForTriggerRefresh(200f) //行驶超过200(包含)米,刷新道路周边信息(短链请求) it.durationForTriggerRefresh( 60, From 7c4e3ec7b4cc6cf4ca80a68a5c8585b29b719fbc Mon Sep 17 00:00:00 2001 From: yangyakun Date: Tue, 21 Feb 2023 14:28:24 +0800 Subject: [PATCH 75/81] =?UTF-8?q?[=E6=B7=BB=E5=8A=A0=E5=8F=91=E9=80=81Even?= =?UTF-8?q?tBus=E6=97=A5=E5=BF=97]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../och/taxi/passenger/ui/leftmenu/OverlayLeftViewUtils.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/OverlayLeftViewUtils.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/OverlayLeftViewUtils.kt index 8964d0907b..f1022f936d 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/OverlayLeftViewUtils.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/OverlayLeftViewUtils.kt @@ -15,6 +15,8 @@ import android.widget.FrameLayout import android.widget.ListView import androidx.appcompat.widget.AppCompatImageView import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr import com.mogo.eagle.core.utilcode.util.* import com.mogo.och.taxi.passenger.R @@ -136,6 +138,7 @@ object OverlayLeftViewUtils { subscribeOVERVIEW = Observable.timer(300, TimeUnit.MILLISECONDS) .subscribe { EventBus.getDefault().post(UIStatus(UIStatus.OVERVIEW)) + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "发送Eventbus subscribeOVERVIEW") } }else{ EventBus.getDefault().post(FinishActivity()) From 0be60f24b678e25a1457dca42c354daeb49623a3 Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Tue, 21 Feb 2023 15:28:47 +0800 Subject: [PATCH 76/81] =?UTF-8?q?[2.14.0][adas=20lib]=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=AE=9A=E6=97=B6=E5=99=A8=E6=97=A0=E6=B3=95=E9=87=8D=E5=90=AF?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autopilot/ability/AutopilotAbilityManager.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityManager.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityManager.java index 2a1e7a90da..43e8b0cb3a 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityManager.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/autopilot/ability/AutopilotAbilityManager.java @@ -70,10 +70,7 @@ public class AutopilotAbilityManager { String v = carConfig.getDockVersion(); int version = parseVersion(true, v); if (version != -1) { - if (startTimer != null) { - startTimer.cancel(); - startTimer = null; - } + stopTimer(); dockerVersion = version; Log.i("dddd", "工控机版本=" + dockerVersion); initAutopilotAbility(); @@ -161,6 +158,13 @@ public class AutopilotAbilityManager { } } + private void stopTimer() { + if (startTimer != null) { + startTimer.cancel(); + startTimer = null; + } + } + /** * 连接工控机成功调用此函数,如果dockerVersion还未获取到将启动最低版本的启动自动驾驶能力检测 * 此函数为保险措施 以防无法获取工控机版本时 也能 正常执行逻辑 @@ -182,6 +186,7 @@ public class AutopilotAbilityManager { } public synchronized void stop() { + stopTimer(); stop230(); stop250(); handler = null; From 05281fc00588f2f8ec10c5491e403c5e6a03b6a6 Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Tue, 21 Feb 2023 16:20:49 +0800 Subject: [PATCH 77/81] =?UTF-8?q?[2.14.0][Fix]=E8=A7=A3=E5=86=B3=E9=AB=98?= =?UTF-8?q?=E7=B2=BE=E5=9C=B0=E5=9B=BE=E7=BC=93=E5=AD=98=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo/eagle/core/function/hmi/ui/map/OfflineMapDialog.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/map/OfflineMapDialog.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/map/OfflineMapDialog.kt index 3383ace8cc..2f649553a8 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/map/OfflineMapDialog.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/map/OfflineMapDialog.kt @@ -63,8 +63,8 @@ class OfflineMapDialog(context: Context): BaseFloatDialog(context) { leftView?.setOnClickListener { when { isConfirm -> { - cacheHDOfflineData() showNewContent(isLoading = true, false) + cacheHDOfflineData() } else -> { dismiss() @@ -75,6 +75,7 @@ class OfflineMapDialog(context: Context): BaseFloatDialog(context) { rightView?.setOnClickListener { when { isRetry -> { + showNewContent(isLoading = true, false) cacheHDOfflineData() } else -> { @@ -163,11 +164,14 @@ class OfflineMapDialog(context: Context): BaseFloatDialog(context) { downloadResultImg?.background = ContextCompat.getDrawable(context, R.drawable.download_success_icon) } else -> { + isRetry = true + isConfirm = false offlineTitleView?.text = context.resources.getString(R.string.offline_download_failure) okView?.visibility = View.GONE progressBar?.visibility = View.GONE downloadPercentView?.visibility = View.GONE leftView?.visibility = View.VISIBLE + leftView?.text = context.resources.getString(R.string.ok_tip) rightView?.visibility = View.VISIBLE vertLineView?.visibility = View.VISIBLE rightView?.text = context.resources.getString(R.string.retry) From 22b71c33b3dcc05eb8c16760acad049f70d2f765 Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Tue, 21 Feb 2023 16:21:18 +0800 Subject: [PATCH 78/81] =?UTF-8?q?[2.14.0][Opt]=E6=96=B0=E5=A2=9E=E5=85=A8?= =?UTF-8?q?=E8=A7=88=E6=A8=A1=E5=BC=8F=E7=9A=84=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt index 41f3af84b2..aaebb67089 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt @@ -1729,6 +1729,7 @@ class MoGoHmiFragment : MvpFragment(), } override fun showSmallFragment() { + CallerLogger.d("$M_HMI$TAG", "showSmallFragment start!") // 加载全览模式图层 val fragmentOverview = ARouter.getInstance().build(MoGoFragmentPaths.PATH_FRAGMENT_OVERVIEW) .navigation() as BaseFragment @@ -1745,9 +1746,11 @@ class MoGoHmiFragment : MvpFragment(), }.commitAllowingStateLoss() } CallerDevaToolsManager.hideStatusBar() + CallerLogger.d("$M_HMI$TAG", "showSmallFragment end!") } override fun hideSmallFragment() { + CallerLogger.d("$M_HMI$TAG", "hideSmallFragment start!") val fragmentOverview = ARouter.getInstance().build(MoGoFragmentPaths.PATH_FRAGMENT_OVERVIEW) .navigation() as BaseFragment activity?.supportFragmentManager?.beginTransaction() @@ -1757,6 +1760,7 @@ class MoGoHmiFragment : MvpFragment(), } } ?.commitAllowingStateLoss() + CallerLogger.d("$M_HMI$TAG", "hideSmallFragment end!") // context?.let { CallerDevaToolsManager.showStatusBar(it, statusBarContainer) } } From 803764c97e09712b45f14513a35611c818a0bc38 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Tue, 21 Feb 2023 17:57:34 +0800 Subject: [PATCH 79/81] =?UTF-8?q?[2.14.0]=E5=BD=95=E5=8C=85=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E4=BF=AE=E5=A4=8D=E7=A9=BA=E9=97=B4=E9=A2=84=E8=AD=A6?= =?UTF-8?q?=E5=BC=B9=E7=AA=97=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/biz/SpaceWarningDialog.java | 17 +++++++-- .../main/res/layout/dialog_space_warning.xml | 13 ------- .../src/main/res/layout/item_bag_manager.xml | 3 +- .../core/function/hmi/ui/MoGoHmiFragment.kt | 36 +++++++++++++++---- 4 files changed, 46 insertions(+), 23 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/SpaceWarningDialog.java b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/SpaceWarningDialog.java index 0b1656014a..036f2cb2b0 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/SpaceWarningDialog.java +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/SpaceWarningDialog.java @@ -22,6 +22,8 @@ public class SpaceWarningDialog extends Dialog { private TextView tvCancel;//取消 private Activity mActivity; + private ClickListener clickListener; + public SpaceWarningDialog(@NonNull Activity activity) { super(activity, R.style.bad_case_dialog); mActivity = activity; @@ -49,8 +51,11 @@ public class SpaceWarningDialog extends Dialog { //清理磁盘 tvCleanDisk.setOnClickListener(v -> { //跳转录包管理页面 - if(mActivity!=null){ - CallerDevaToolsManager.INSTANCE.showBadCaseManagerView(mActivity); +// if(mActivity!=null){ +// CallerDevaToolsManager.INSTANCE.showBadCaseManagerView(mActivity); +// } + if(clickListener!=null){ + clickListener.showBadCaseManagerView(); } dismiss(); }); @@ -61,6 +66,10 @@ public class SpaceWarningDialog extends Dialog { }); } + public void setClickListener(ClickListener clickListener){ + this.clickListener = clickListener; + } + @Override public void onAttachedToWindow() { super.onAttachedToWindow(); @@ -71,4 +80,8 @@ public class SpaceWarningDialog extends Dialog { super.onDetachedFromWindow(); } + public interface ClickListener{ + void showBadCaseManagerView(); + } + } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_space_warning.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_space_warning.xml index 475510356c..5cfa0f954f 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_space_warning.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_space_warning.xml @@ -80,17 +80,4 @@ android:progressDrawable="@drawable/space_warning_progress_bg" /> - - - \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_manager.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_manager.xml index 43fa322211..8cd8a75b48 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_manager.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_manager.xml @@ -64,13 +64,14 @@ (), private var bagManagerEntity: BagManagerEntity = BagManagerEntity() + private var spaceWarningDialog: SpaceWarningDialog ?=null + private var isShowWarningDialog = false + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } @@ -407,13 +410,32 @@ class MoGoHmiFragment : MvpFragment(), super.onBagManagerResult(bagManager) //判断磁盘是否已满,展示预警弹窗 UiThreadHandler.post{ - if(bagManager.spaceInfoRespCount>0){ - for(spaceInfo in bagManager.spaceInfoRespList){ - for(bagSpaceInfo in spaceInfo.bagDirsSpaceInfoList){ - if(bagSpaceInfo.free == 0L){ - //磁盘空间已满 - val spaceWarningDialog = SpaceWarningDialog(context as Activity) - spaceWarningDialog.show() + if(bagManager.reqType == 1){ + if(bagManager.spaceInfoRespCount>0){ + for(spaceInfo in bagManager.spaceInfoRespList){ + for(bagSpaceInfo in spaceInfo.bagDirsSpaceInfoList){ + if(bagSpaceInfo.free == 0L){ + //磁盘空间已满 + if(!isShowWarningDialog){ + if(spaceWarningDialog == null){ + spaceWarningDialog = SpaceWarningDialog(context as Activity) + spaceWarningDialog?.setClickListener(object:SpaceWarningDialog.ClickListener{ + override fun showBadCaseManagerView() { + if(mBadCaseManagerView == null){ + toggleBagManagerView() + } + } + + }) + } + spaceWarningDialog?.let { + if(!it.isShowing){ + it.show() + } + } + isShowWarningDialog = true + } + } } } } From c4f1dda1a3c3c79bacce68c2f7f18f038e25fc60 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Tue, 21 Feb 2023 18:24:39 +0800 Subject: [PATCH 80/81] =?UTF-8?q?[2.14.0]=E5=8E=BB=E9=99=A4=E5=86=97?= =?UTF-8?q?=E4=BD=99=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/function/hmi/ui/widget/VersionNameView.kt | 3 --- .../v2x/trafficlight/core/TrafficLightDispatcher.kt | 10 ---------- 2 files changed, 13 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/VersionNameView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/VersionNameView.kt index 2806810642..12ff7aa0bc 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/VersionNameView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/VersionNameView.kt @@ -3,7 +3,6 @@ package com.mogo.eagle.core.function.hmi.ui.widget import android.annotation.SuppressLint import android.content.Context import android.util.AttributeSet -import android.util.Log import android.view.LayoutInflater import android.widget.LinearLayout import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo @@ -67,7 +66,6 @@ class VersionNameView @JvmOverloads constructor( if (!dockerVersion.isNullOrEmpty()) { it.text = " ; MAP:${dockerVersion}" } - Log.i(TAG,"tvMapVersionName text="+tvMapVersionName.text) } } } @@ -90,7 +88,6 @@ class VersionNameView @JvmOverloads constructor( override fun onAutopilotStatusResponse(autoPilotStatusInfo: AutopilotStatusInfo) { dockerVersion = autoPilotStatusInfo.dockVersion - Log.i(TAG,"dockerVersion=$dockerVersion") showCurrentMapVersion() //将工控机版本赋值给BadCase配置常量 BadCaseConfig.dockerVersion = autoPilotStatusInfo.dockVersion diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/TrafficLightDispatcher.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/TrafficLightDispatcher.kt index be3aca66ad..97700be14c 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/TrafficLightDispatcher.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/TrafficLightDispatcher.kt @@ -2,7 +2,6 @@ package com.mogo.eagle.core.function.v2x.trafficlight.core import android.content.Context import android.os.Handler -import android.util.Log import com.mogo.eagle.core.data.trafficlight.TrafficLightResult import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener import com.mogo.eagle.core.function.api.obu.IMoGoObuTrafficLightDisapperListener @@ -61,8 +60,6 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight * @param trafficLights 感知红绿灯 */ override fun onAutopilotPerceptionTrafficLight(trafficLights: TrafficLightOuterClass.TrafficLights?) { - Log.i(TAG,"hasObuLightStatus="+hasObuLightStatus + " hasAiLightStatus="+hasAiLightStatus) - Log.i(TAG,"时间:"+com.mogo.eagle.core.utilcode.util.TimeUtils.millis2String(System.currentTimeMillis())) if (!hasObuLightStatus) { if (!hasAiLightStatus) { trafficLights?.let { it -> @@ -77,37 +74,30 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight light = it.uTurn } if (light == null) { - Log.i(TAG,"light为空") //隐藏红绿灯显示 TrafficLightHMIManager.INSTANCE.hideTrafficLight() } else { - Log.i(TAG,"light.state="+light.state) when (light.state) { TrafficLightOuterClass.LightState.STATE_RED -> { - Log.i(TAG,"显示红灯") //红灯 CallerHmiManager.showWarningTrafficLight(1, 2) CallerHmiManager.changeCountdownGreen(0) } TrafficLightOuterClass.LightState.STATE_YELLOW -> { - Log.i(TAG,"显示黄灯") //黄灯 CallerHmiManager.showWarningTrafficLight(2, 2) CallerHmiManager.changeCountdownGreen(0) } TrafficLightOuterClass.LightState.STATE_GREEN -> { - Log.i(TAG,"显示绿灯") //绿灯 CallerHmiManager.showWarningTrafficLight(3, 2) CallerHmiManager.changeCountdownGreen(0) } TrafficLightOuterClass.LightState.STATE_OFF -> { - Log.i(TAG,"隐藏显示") //黑灯,隐藏红绿灯显示 TrafficLightHMIManager.INSTANCE.hideTrafficLight() } else -> { - Log.i(TAG,"直接其他情况") TrafficLightHMIManager.INSTANCE.hideTrafficLight() } } From f1d33bf0f71be0565264376badc68ffa33e6782f Mon Sep 17 00:00:00 2001 From: lianglihui Date: Wed, 22 Feb 2023 10:11:05 +0800 Subject: [PATCH 81/81] =?UTF-8?q?2.14.0=20=20hdmap=20sdk=20version=20updat?= =?UTF-8?q?e=20to=20=202.10.0.9=20=E4=BF=AE=E5=A4=8D=E6=B4=B1=E6=B5=B7?= =?UTF-8?q?=E5=9C=B0=E5=9B=BE=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index b12cf5bed0..462afee43a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -85,7 +85,7 @@ MOGO_LOCATION_VERSION=1.4.3.32 MOGO_TELEMATIC_VERSION=1.4.3.32 ######## MogoAiCloudSDK Version ######## # 自研地图 -MAP_SDK_VERSION=2.10.0.7 +MAP_SDK_VERSION=2.10.0.9 MAP_SDK_OPERATION_VERSION=1.1.4.1 # websocket WEBSOCKET_VERSION=1.1.7