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 f7cea76f00..25e7216333 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 @@ -56,6 +56,7 @@ import org.greenrobot.eventbus.EventBus; import java.util.Objects; +import bag_manager.BagManagerOuterClass; import mogo.telematics.pad.MessagePad; import record_cache.RecordPanelOuterClass; @@ -320,6 +321,10 @@ public abstract class BaseBusTabFragment public void onAutopilotRecordConfig(@NonNull MessagePad.RecordDataConfig config) { } + @Override + public void onBagManagerResult(@NonNull BagManagerOuterClass.BagManager bagManager) { + } + /** * 测试到站 */ @@ -428,8 +433,6 @@ public abstract class BaseBusTabFragment } private void changeAutopilotBtnView(int autopilotStatus, boolean isAnimateRunning) { - CallerLogger.INSTANCE.d(M_BUS + TAG, "onStateChangeChangeAutopilotBtnView: " - + autopilotStatus + "isAnimateRunning = " + isAnimateRunning); if (isAnimateRunning && IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING != autopilotStatus) { // 主动开启自动驾驶中,不为2(为0、1)则继续loading diff --git a/OCH/mogo-och-common-module/build.gradle b/OCH/mogo-och-common-module/build.gradle index 54bfc93114..24b27d9db3 100644 --- a/OCH/mogo-och-common-module/build.gradle +++ b/OCH/mogo-och-common-module/build.gradle @@ -71,6 +71,4 @@ dependencies { api project(':core:function-impl:mogo-core-function-map') } - compileOnly project(':libraries:mogo-adas') - } \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/AbnormalFactorsLoopManager.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/AbnormalFactorsLoopManager.kt index 9724ef2eee..3ac45bea20 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/AbnormalFactorsLoopManager.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/AbnormalFactorsLoopManager.kt @@ -2,7 +2,6 @@ package com.mogo.och.common.module.manager import android.Manifest import android.content.Context -import com.mogo.commons.debug.DebugConfig import com.mogo.commons.module.status.IMogoStatusChangedListener import com.mogo.commons.module.status.MogoStatusManager import com.mogo.commons.module.status.StatusDescriptor @@ -17,6 +16,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable import io.reactivex.schedulers.Schedulers import java.util.concurrent.TimeUnit +import kotlin.properties.Delegates /** * @author: wangmingjun @@ -26,26 +26,40 @@ object AbnormalFactorsLoopManager : IMogoStatusChangedListener { const val TAG = "AbnormalFactorsLoopManager" - private const val LOOP_TIME = 10 *1000L + private const val LOOP_TIME = 10 * 1000L private const val LOOP_DELAY = 5 * 1000L - private var socketStatus: Boolean = false + private var socketStatus by Delegates.observable(false) { _, _, newValue -> + if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { + return@observable + } + if (FunctionBuildConfig.isDemoMode) { + return@observable + } + if (newValue) { + ToastUtils.showLong("长链接状态恢复") + } else { + ToastUtils.showLong("长链接异常,请开启相应权限或者查看网络") + } + } - private var looperDisposable : Disposable? = null + private var looperDisposable: Disposable? = null - fun startLoopAbnormalFactors(context: Context){ - if (looperDisposable != null && !looperDisposable!!.isDisposed){ + fun startLoopAbnormalFactors(context: Context) { + if (looperDisposable != null && !looperDisposable!!.isDisposed) { return } i(TAG, "startLoopAbnormalFactors()") looperDisposable = Observable.interval(LOOP_DELAY, LOOP_TIME, TimeUnit.MILLISECONDS) - .map { aLong -> aLong+1 } + .map { aLong -> aLong + 1 } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe{ aLong -> checkAbnormalFactors(context)} + .subscribe { aLong -> checkAbnormalFactors(context) } //长链接监听 - MogoStatusManager.getInstance().registerStatusChangedListener(TAG, - StatusDescriptor.CLOUD_SOCKET,this) + MogoStatusManager.getInstance().registerStatusChangedListener( + TAG, + StatusDescriptor.CLOUD_SOCKET, this + ) } private fun checkAbnormalFactors(context: Context) { @@ -54,14 +68,15 @@ object AbnormalFactorsLoopManager : IMogoStatusChangedListener { var networkStatus = false //定位权限 - locationStatusPermsStatus = !(!PermissionUtil.isLocServiceEnable(context) || !PermissionUtil.checkPermission( - context, *arrayOf( - Manifest.permission.ACCESS_FINE_LOCATION - ) - )) + locationStatusPermsStatus = + !(!PermissionUtil.isLocServiceEnable(context) || !PermissionUtil.checkPermission( + context, *arrayOf( + Manifest.permission.ACCESS_FINE_LOCATION + ) + )) //网络状态或者网络权限是否打开 - if (NetworkUtils.isConnected(context)){ + if (NetworkUtils.isConnected(context)) { networkStatus = true } //长链接状态 socketStatus @@ -70,28 +85,27 @@ object AbnormalFactorsLoopManager : IMogoStatusChangedListener { if (!locationStatusPermsStatus) toastStr += "定位服务异常 " if (!networkStatus) toastStr += " 网络异常 " - //乘客屏不显示长链接异常 - if (!socketStatus && !AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) toastStr += " 长链接异常 " - i(TAG, "abnormal_factors_Str = $toastStr") - if (!FunctionBuildConfig.isDemoMode && toastStr !== ""){ + if (!FunctionBuildConfig.isDemoMode && toastStr !== "") { ToastUtils.showLong(toastStr + "请开启相应权限或者查看网络") } } - fun stopLoopAbnormalFactors(){ + fun stopLoopAbnormalFactors() { looperDisposable!!.dispose() looperDisposable == null - MogoStatusManager.getInstance().unregisterStatusChangedListener(TAG, - StatusDescriptor.CLOUD_SOCKET,this) + MogoStatusManager.getInstance().unregisterStatusChangedListener( + TAG, + StatusDescriptor.CLOUD_SOCKET, this + ) } override fun onStatusChanged(descriptor: StatusDescriptor?, isTrue: Boolean) { //长链接监听、 - if (StatusDescriptor.CLOUD_SOCKET == descriptor){ + if (StatusDescriptor.CLOUD_SOCKET == descriptor) { socketStatus = isTrue } } diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java index d5a4f1e833..2e926bbdd4 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java @@ -46,6 +46,9 @@ import java.util.List; import androidx.annotation.NonNull; import androidx.constraintlayout.widget.Group; import androidx.fragment.app.FragmentTransaction; +import bag_manager.BagManagerOuterClass; +import mogo.telematics.pad.MessagePad; +import record_cache.RecordPanelOuterClass; /** * 网约车基础Fragment,主要负责布局通用界面,处理站点面板和通话面板互斥情况 @@ -222,6 +225,26 @@ public abstract class BaseSweeperTabFragment', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}' | +| 金旅小巴 | fOchBus.gradle、fOchBusPassenger.gradle、fOchShuttle.gradle、fOchShuttlePassenger.gradle | N、R | buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_R);}}' | +| M1 | fOchBusPassengerM1.gradle | 不限制档位 | buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null' | +| M2 | fOchBusPassengerM2.gradle | N、P、R | buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}' | +| 清扫车 | fOchSweeper.gradle | N | buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);}}' | +| 开沃 | 暂无 | 不限制档位 | buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null' | diff --git a/app/build.gradle b/app/build.gradle index 38eaa76d91..455fd7f487 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,7 @@ -import java.text.SimpleDateFormat -import groovy.json.JsonSlurper import groovy.json.JsonOutput +import groovy.json.JsonSlurper +import java.text.SimpleDateFormat apply plugin: 'com.android.application' apply plugin: 'com.alibaba.arouter' @@ -204,7 +204,7 @@ android { } } - flavorDimensions "business","product", "basic", "env" + flavorDimensions "business", "product", "basic", "env" productFlavors { // launcher app @@ -231,24 +231,24 @@ android { sweeper { dimension "business" } - shuttle{ + shuttle { dimension "business" } // 配置网络环境,QA、线上、演示 qa { dimension "env" buildConfigField 'int', 'NET_ENV', '2' - buildConfigField 'String', 'URLs', "\"${readFileToJson("qa").replace("\"","\\\"")}\"" + buildConfigField 'String', 'URLs', "\"${readFileToJson("qa").replace("\"", "\\\"")}\"" } online { dimension "env" buildConfigField 'int', 'NET_ENV', '3' - buildConfigField 'String', 'URLs', "\"${readFileToJson("online").replace("\"","\\\"")}\"" + buildConfigField 'String', 'URLs', "\"${readFileToJson("online").replace("\"", "\\\"")}\"" } demo { dimension "env" buildConfigField 'int', 'NET_ENV', '4' - buildConfigField 'String', 'URLs', "\"${readFileToJson("demo").replace("\"","\\\"")}\"" + buildConfigField 'String', 'URLs', "\"${readFileToJson("demo").replace("\"", "\\\"")}\"" } } @@ -266,13 +266,13 @@ android { def names = variant.flavors*.name //要检查特定的构建类型,请使用variant.buildType.name ==“ ” // region 过滤noop 的flavors 不带och业务的 - if (names.contains("noop")&&!names.contains("fPadLenovo")) { + if (names.contains("noop") && !names.contains("fPadLenovo")) { //Gradle会忽略满足上述条件的所有变体 setIgnore(true) } // endregion // region 过滤sweper 的flavors - if (names.contains("sweeper")&&!names.contains("fPadLenovoOchSweeper")) { + if (names.contains("sweeper") && !names.contains("fPadLenovoOchSweeper")) { //Gradle会忽略满足上述条件的所有变体 setIgnore(true) } @@ -281,9 +281,9 @@ android { // region 过滤shuttle 的flavors if (names.contains("shuttle")) { //Gradle会忽略满足上述条件的所有变体 - if(names.contains("fPadLenovoOchBus")){ - }else if(names.contains("fPadLenovoOchBusPassenger")){ - }else { + if (names.contains("fPadLenovoOchBus")) { + } else if (names.contains("fPadLenovoOchBusPassenger")) { + } else { setIgnore(true) } } @@ -291,11 +291,11 @@ android { // region 过滤taxibase 的flavors if (names.contains("taxibase")) { //Gradle会忽略满足上述条件的所有变体 - if(names.contains("fPadLenovoOchTaxi")){ - }else if(names.contains("fPadLenovoOchTaxiPassenger")){ - }else if(names.contains("fPadLenovo")){ - }else if(names.contains("fMultiDisplayOchTaxi")){ - }else { + if (names.contains("fPadLenovoOchTaxi")) { + } else if (names.contains("fPadLenovoOchTaxiPassenger")) { + } else if (names.contains("fPadLenovo")) { + } else if (names.contains("fMultiDisplayOchTaxi")) { + } else { setIgnore(true) } } @@ -303,10 +303,10 @@ android { // region 过滤taxibase 的flavors if (names.contains("busbase")) { //Gradle会忽略满足上述条件的所有变体 - if(names.contains("fPadLenovoOchBus")){ - }else if(names.contains("fPadLenovoOchBusPassenger")){ - }else if(names.contains("fMultiDisplayOchBus")){ - }else { + if (names.contains("fPadLenovoOchBus")) { + } else if (names.contains("fPadLenovoOchBusPassenger")) { + } else if (names.contains("fMultiDisplayOchBus")) { + } else { setIgnore(true) } } @@ -335,8 +335,6 @@ aspectjx { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) - //Crash日志收集 -// implementation rootProject.ext.dependencies.crashSdk implementation rootProject.ext.dependencies.androidxappcompat implementation rootProject.ext.dependencies.arouter implementation rootProject.ext.dependencies.boostmultidex @@ -346,41 +344,23 @@ dependencies { implementation rootProject.ext.dependencies.android_start_up implementation rootProject.ext.dependencies.lancetx_runtime implementation rootProject.ext.dependencies.mogocustommap - implementation project(':core:function-impl:mogo-core-function-startup') implementation project(':libraries:map-usbcamera') -// // 暂不使用Shizuku-API -// implementation rootProject.ext.dependencies.shizuku_provider - if (Boolean.valueOf(USE_MAVEN_PACKAGE)) { - implementation rootProject.ext.dependencies.ttspad - implementation rootProject.ext.dependencies.mogo_core_function_hmi - implementation rootProject.ext.dependencies.mogocommons - implementation rootProject.ext.dependencies.mogo_core_utils - implementation rootProject.ext.dependencies.mogo_core_function_map - implementation rootProject.ext.dependencies.mogo_core_function_datacenter - implementation rootProject.ext.dependencies.mogo_core_function_devatools - implementation rootProject.ext.dependencies.mogo_core_function_chat - implementation rootProject.ext.dependencies.mogo_core_function_biz - implementation rootProject.ext.dependencies.mogo_core_function_call - androidTestImplementation rootProject.ext.dependencies.mogo_core_function_call - androidTestImplementation rootProject.ext.dependencies.mogo_core_res - } else { - implementation project(':tts:tts-pad') - implementation project(':core:function-impl:mogo-core-function-hmi') - implementation project(':core:function-impl:mogo-core-function-map') - implementation project(':core:function-impl:mogo-core-function-datacenter') - implementation project(':core:function-impl:mogo-core-function-devatools') - implementation project(':core:function-impl:mogo-core-function-chat') - implementation project(':core:function-impl:mogo-core-function-biz') - implementation project(':core:mogo-core-function-call') - implementation project(':core:mogo-core-utils') - implementation project(':core:mogo-core-res') - implementation project(':foudations:mogo-commons') + implementation project(':tts:tts-pad') + implementation project(':core:function-impl:mogo-core-function-startup') + implementation project(':core:function-impl:mogo-core-function-devatools') + implementation project(':core:function-impl:mogo-core-function-datacenter') + implementation project(':core:function-impl:mogo-core-function-biz') + implementation project(':core:function-impl:mogo-core-function-hmi') + implementation project(':core:function-impl:mogo-core-function-map') + implementation project(':core:function-impl:mogo-core-function-chat') + implementation project(':foudations:mogo-commons') + implementation project(':core:mogo-core-function-call') + implementation project(':core:mogo-core-utils') + implementation project(':core:mogo-core-res') - androidTestImplementation project(':core:mogo-core-function-call') - androidTestImplementation project(':core:mogo-core-res') - - } + androidTestImplementation project(':core:mogo-core-function-call') + androidTestImplementation project(':core:mogo-core-res') apply from: "./functions/och.gradle" @@ -496,10 +476,10 @@ boolean isReleaseBuild() { return false } -Object readFileToJson(env){ +Object readFileToJson(env) { try { def businessType = project.hasProperty('business') - if(businessType){ + if (businessType) { println("businessType:${businessType}----${business}") } // 加载config.json 文件 @@ -507,11 +487,11 @@ Object readFileToJson(env){ def jsonSlurper = new JsonSlurper() // 解析json def config = jsonSlurper.parse(file) - def flavorNames = variantName() + def flavorNames = variantName() def jsonOutput = new JsonOutput() - config.each {key, value -> + config.each { key, value -> // 匹配flavor对应的 json - if(flavorNames.toLowerCase().contains(key)){ + if (flavorNames.toLowerCase().contains(key)) { return jsonOutput.toJson(value.get(env)) } } @@ -526,12 +506,12 @@ Object readFileToJson(env){ def variantName() { def taskName = getGradle().getStartParameter().getTaskRequests().toString() def split = taskName.split(":") - if (split.length > 2){ - return split[2].toString().split("]")[0].replace("assemble","") - }else { - if(taskName.contains("bus")) { + if (split.length > 2) { + return split[2].toString().split("]")[0].replace("assemble", "") + } else { + if (taskName.contains("bus")) { return "busbase" - }else { + } else { return "taxibase" } } diff --git a/app/productFlavors/fMultiDisplayOchBus.gradle b/app/productFlavors/fMultiDisplayOchBus.gradle index 49cf57f8f8..43fff66de1 100644 --- a/app/productFlavors/fMultiDisplayOchBus.gradle +++ b/app/productFlavors/fMultiDisplayOchBus.gradle @@ -41,6 +41,9 @@ project.android.productFlavors { // 构建 是否支持多屏异显异交互 buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'true' + + //不能启动自驾的档位 + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null' } } \ No newline at end of file diff --git a/app/productFlavors/fMultiDisplayOchTaxi.gradle b/app/productFlavors/fMultiDisplayOchTaxi.gradle index a04d284d67..7c95db8fd3 100644 --- a/app/productFlavors/fMultiDisplayOchTaxi.gradle +++ b/app/productFlavors/fMultiDisplayOchTaxi.gradle @@ -46,6 +46,9 @@ project.android.productFlavors { // 构建 是否支持多屏异显异交互 buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'true' + + //不能启动自驾的档位 + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null' } } \ No newline at end of file diff --git a/app/productFlavors/fPadLenovo.gradle b/app/productFlavors/fPadLenovo.gradle index b33dba6460..245ff86dca 100644 --- a/app/productFlavors/fPadLenovo.gradle +++ b/app/productFlavors/fPadLenovo.gradle @@ -43,5 +43,8 @@ project.android.productFlavors { // 构建 是否支持多屏异显异交互 buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false' + + //不能启动自驾的档位 + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'null' } } \ No newline at end of file diff --git a/app/productFlavors/fPadLenovoOchBus.gradle b/app/productFlavors/fPadLenovoOchBus.gradle index e671513ffa..f7338b4090 100644 --- a/app/productFlavors/fPadLenovoOchBus.gradle +++ b/app/productFlavors/fPadLenovoOchBus.gradle @@ -46,5 +46,8 @@ project.android.productFlavors { // 构建 是否支持多屏异显异交互 buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false' + + //Bus不能启动自驾的档位 + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_R);}}' } } \ No newline at end of file diff --git a/app/productFlavors/fPadLenovoOchBusPassenger.gradle b/app/productFlavors/fPadLenovoOchBusPassenger.gradle index 508ef2da67..aa50f49580 100644 --- a/app/productFlavors/fPadLenovoOchBusPassenger.gradle +++ b/app/productFlavors/fPadLenovoOchBusPassenger.gradle @@ -44,5 +44,8 @@ project.android.productFlavors { // 构建 是否支持多屏异显异交互 buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'true' + + //Bus不能启动自驾的档位 + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_R);}}' } } \ No newline at end of file diff --git a/app/productFlavors/fPadLenovoOchSweeper.gradle b/app/productFlavors/fPadLenovoOchSweeper.gradle index 0afcc6abaa..8361d529f8 100644 --- a/app/productFlavors/fPadLenovoOchSweeper.gradle +++ b/app/productFlavors/fPadLenovoOchSweeper.gradle @@ -46,5 +46,8 @@ project.android.productFlavors { // 构建 是否支持多屏异显异交互 buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false' + + //清扫车不能启动自驾的档位 + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);}}' } } \ No newline at end of file diff --git a/app/productFlavors/fPadLenovoOchTaxi.gradle b/app/productFlavors/fPadLenovoOchTaxi.gradle index c9f2a230f2..ebeac659c3 100644 --- a/app/productFlavors/fPadLenovoOchTaxi.gradle +++ b/app/productFlavors/fPadLenovoOchTaxi.gradle @@ -47,6 +47,9 @@ project.android.productFlavors { // 构建 是否支持多屏异显异交互 buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false' + + //Taxi不能启动自驾的档位 + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}' } } \ No newline at end of file diff --git a/app/productFlavors/fPadLenovoOchTaxiPassenger.gradle b/app/productFlavors/fPadLenovoOchTaxiPassenger.gradle index 36592bccb0..5c37382209 100644 --- a/app/productFlavors/fPadLenovoOchTaxiPassenger.gradle +++ b/app/productFlavors/fPadLenovoOchTaxiPassenger.gradle @@ -46,6 +46,9 @@ project.android.productFlavors { // 构建 是否支持多屏异显异交互 buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'true' + + //Taxi不能启动自驾的档位 + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}' } } \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 5da3d57d2c..2dd53bbe9e 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -426,6 +426,6 @@ -keep class com.squareup.haha.guava.collect.*{*;} -keep class **.zego.**{*;} - - +#-----科大讯飞语音合成----- +-keep class com.iflytek.**{*;} diff --git a/app/src/androidTest/java/com/mogo/functions/test/RxJavaBackPressureTest.kt b/app/src/androidTest/java/com/mogo/functions/test/RxJavaBackPressureTest.kt index 192fb9905d..ef335d6bff 100644 --- a/app/src/androidTest/java/com/mogo/functions/test/RxJavaBackPressureTest.kt +++ b/app/src/androidTest/java/com/mogo/functions/test/RxJavaBackPressureTest.kt @@ -1,7 +1,6 @@ package com.mogo.functions.test import android.os.Debug -import android.util.Log import androidx.test.core.app.ActivityScenario import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.LargeTest @@ -30,7 +29,6 @@ class RxJavaBackPressureTest { fun before() { launch = ActivityScenario.launch(MainLauncherActivity::class.java) RxJavaPlugins.setErrorHandler { - Log.e("RxJava2", it.message, it) } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 86e6613133..1fd891b416 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,6 +18,7 @@ android:theme="@style/AppTheme.App" android:usesCleartextTraffic="true" tools:replace="android:label"> + @@ -25,27 +26,6 @@ android:name="design_height_in_dp" android:value="1600"/> - - - - - - - - - - - - - - - - - - - - - ', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_TAXI', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}' + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_BUS', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_R);}}' + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_M1', 'null' + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_M2', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}' + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_SWEEPER', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);}}' + buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR_VAN', 'null' } } @@ -94,6 +100,6 @@ dependencies { // implementation project(':core:mogo-core-utils') implementation 'org.greenrobot:eventbus:3.2.0' implementation 'com.android.support:multidex:1.0.3' - implementation 'com.mogo.cloud:telematic:1.3.59' +// implementation 'com.mogo.cloud:telematic:1.3.59'//注释掉司机端 乘客端 implementation 'com.jcraft:jsch:0.1.55' } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/App.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/App.java index e89e78ab58..f0bd8f52ca 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/App.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/App.java @@ -4,8 +4,13 @@ import android.app.Application; import com.zhidao.adas.client.utils.CrashHandler; +import chassis.Chassis; + public class App extends Application { public static App INSTANCE; + + public Chassis.GearPosition gear; + @Override public void onCreate() { super.onCreate(); diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/DataDistribution.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/DataDistribution.java index fd41c30be6..2952be1594 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/DataDistribution.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/DataDistribution.java @@ -2,19 +2,9 @@ package com.zhidao.adas.client; import android.util.Pair; -import com.zhidao.adas.client.bean.ArrivalNotification; -import com.zhidao.adas.client.bean.AutopilotState; -import com.zhidao.adas.client.bean.BagManagerCmd; import com.zhidao.adas.client.bean.BaseInfo; -import com.zhidao.adas.client.bean.BasicInfoReq; -import com.zhidao.adas.client.bean.CarConfigResp; -import com.zhidao.adas.client.bean.ChassisStates; import com.zhidao.adas.client.bean.DataShow; import com.zhidao.adas.client.bean.ErrorData; -import com.zhidao.adas.client.bean.FSMFunctionStates; -import com.zhidao.adas.client.bean.GlobalPathResp; -import com.zhidao.adas.client.bean.GnssInfo; -import com.zhidao.adas.client.bean.MogoReportMessage; import com.zhidao.adas.client.bean.ObuMap; import com.zhidao.adas.client.bean.ObuRsi; import com.zhidao.adas.client.bean.ObuRsm; @@ -43,6 +33,8 @@ import java.util.Locale; import java.util.concurrent.Future; import java.util.concurrent.LinkedBlockingQueue; +import mogo.telematics.pad.MessagePad; + /** * 数据分发 */ @@ -192,8 +184,8 @@ public class DataDistribution { } public String cutDown(String str) { - if (isCutDown && str.length() > 650) { - str = str.substring(0, 650) + "\n(已缩短。如需查看完整数据,请勾选日志缩短复选框)"; + if (isCutDown && str.length() > 850) { + str = str.substring(0, 850) + "\n(已缩短。如需查看完整数据,请勾选日志缩短复选框)"; } return str; } @@ -422,6 +414,222 @@ public class DataDistribution { } if (listener != null && Constants.TITLE.RECEIVE_ERROR.equals(listener.first)) { listener.second.onRefresh(); + if (data.header == null) { + if (data instanceof ErrorData) { + listErrorData.add(0, new DataShow(listErrorDataSize++, time + str)); + if (listErrorData.size() > 100) { + listErrorData.remove(listErrorData.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_ERROR.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (data instanceof OriginalPointCloudData) { + listOriginalPointCloud.add(0, new DataShow(listOriginalPointCloudSize++, time + str)); + if (listOriginalPointCloud.size() > LIST_SIZE) { + listOriginalPointCloud.remove(listOriginalPointCloud.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_POINT_CLOUD_ORIGINAL.equals(listener.first)) { + listener.second.onRefresh(); + } + } + } else { + MessagePad.MessageType messageType = data.header.getMsgType(); + if (messageType == MessagePad.MessageType.MsgTypeTrajectory) { + listTrajectory.add(0, new DataShow(listTrajectorySize++, time + str)); + if (listTrajectory.size() > LIST_SIZE) { + listTrajectory.remove(listTrajectory.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_TRAJECTORY.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeTrackedObjects) { + listTrackedObjects.add(0, new DataShow(listTrackedObjectsSize++, time + str)); + if (listTrackedObjects.size() > LIST_SIZE) { + listTrackedObjects.remove(listTrackedObjects.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_TRACKED_OBJECTS.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypePlanningObjects) { + listPlanningObjects.add(0, new DataShow(listPlanningObjectsSize++, time + str)); + if (listPlanningObjects.size() > LIST_SIZE) { + listPlanningObjects.remove(listPlanningObjects.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_PLANNING_OBJECTS.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypePlanningDecisionState) { + listPlanningDecisionState.add(0, new DataShow(listPlanningDecisionStateSize++, time + str)); + if (listPlanningDecisionState.size() > LIST_SIZE) { + listPlanningDecisionState.remove(listPlanningDecisionState.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_PLANNING_DECISION_STATE.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeGnssInfo) { + listGnssInfo.add(0, new DataShow(listGnssInfoSize++, time + str)); + if (listGnssInfo.size() > LIST_SIZE) { + listGnssInfo.remove(listGnssInfo.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_GNSS_INFO.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeVehicleState) { + listVehicleState.add(0, new DataShow(listVehicleStateSize++, time + str)); + if (listVehicleState.size() > LIST_SIZE) { + listVehicleState.remove(listVehicleState.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_VEHICLE_STATE.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeChassisStates) { + listChassisStates.add(0, new DataShow(listChassisStatesSize++, time + str)); + if (listChassisStates.size() > LIST_SIZE) { + listChassisStates.remove(listChassisStates.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_CHASSIS_STATES.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeAutopilotState) { + listAutopilotState.add(0, new DataShow(listAutopilotStateSize++, time + str)); + if (listAutopilotState.size() > LIST_SIZE) { + listAutopilotState.remove(listAutopilotState.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_AUTOPILOT_STATE.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeReportMessage) { + listMogoReportMessage.add(0, new DataShow(listMogoReportMessageSize++, time + str)); + if (listMogoReportMessage.size() > LIST_SIZE) { + listMogoReportMessage.remove(listMogoReportMessage.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_REPORT_MESSAGE.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypePredictionObstacleTrajectory) { + listPredictionObstacleTrajectory.add(0, new DataShow(listPredictionObstacleTrajectorySize++, time + str)); + if (listPredictionObstacleTrajectory.size() > LIST_SIZE) { + listPredictionObstacleTrajectory.remove(listPredictionObstacleTrajectory.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_PREDICTION_OBSTACLE_TRAJECTORY.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeCarConfigResp) { + if (listener != null && Constants.TITLE.TITLE_CAR_CONFIG_RESP.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeRecordResult) { + listRecordPanel.add(0, new DataShow(listRecordPanelSize++, time + str)); + if (listRecordPanel.size() > LIST_SIZE) { + listRecordPanel.remove(listRecordPanel.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_RECORD_RESULT.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeBagManagerCmd) { + listBagManagerCmd.add(0, new DataShow(listBagManagerCmdSize++, time + str)); + if (listBagManagerCmd.size() > LIST_SIZE) { + listBagManagerCmd.remove(listBagManagerCmd.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_BAG_MANAGER_CMD.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeGlobalPathResp) { + listGlobalPathResp.add(0, new DataShow(listGlobalPathRespSize++, time + str)); + if (listGlobalPathResp.size() > LIST_SIZE) { + listGlobalPathResp.remove(listGlobalPathResp.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_GLOBAL_PATH_RESP.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeWarn) { + listWarn.add(0, new DataShow(listWarnSize++, time + str)); + if (listWarn.size() > LIST_SIZE) { + listWarn.remove(listWarn.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_WARN.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeArrivalNotification) { + listArrivalNotification.add(0, new DataShow(listArrivalNotificationSize++, time + str)); + if (listArrivalNotification.size() > LIST_SIZE) { + listArrivalNotification.remove(listArrivalNotification.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_ARRIVAL_NOTIFICATION.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeStatusQueryResp) { + listStatusInfo.add(0, new DataShow(listStatusInfoSize++, time + str)); + if (listStatusInfo.size() > LIST_SIZE) { + listStatusInfo.remove(listStatusInfo.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_STATUS_QUERY_RESP.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeRecordDataConfigResp) { + listRecordDataConfig.add(0, new DataShow(listRecordDataConfigSize++, time + str)); + if (listRecordDataConfig.size() > LIST_SIZE) { + listRecordDataConfig.remove(listRecordDataConfig.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_RECORD_DATA_CONFIG_RESP.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeSweeperTaskIndexData) { + listRoboSweeperTaskIndex.add(0, new DataShow(listRoboSweeperTaskIndexSize++, time + str)); + if (listRoboSweeperTaskIndex.size() > LIST_SIZE) { + listRoboSweeperTaskIndex.remove(listRoboSweeperTaskIndex.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_SWEEPER_TASK_INDEX_DATA.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (messageType == MessagePad.MessageType.MsgTypeFunctionStates) { + listFSMFunctionStates.add(0, new DataShow(listFSMFunctionStatesSize++, time + str)); + if (listFSMFunctionStates.size() > LIST_SIZE) { + listFSMFunctionStates.remove(listFSMFunctionStates.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_FUNCTION_STATES.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (data instanceof PerceptionTrafficLight) { + listPerceptionTrafficLight.add(0, new DataShow(listPerceptionTrafficLightSize++, time + str)); + if (listPerceptionTrafficLight.size() > LIST_SIZE) { + listPerceptionTrafficLight.remove(listPerceptionTrafficLight.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_PERCEPTION_TRAFFIC_LIGHT.equals(listener.first)) { + listener.second.onPerceptionTrafficLight((PerceptionTrafficLight) data); + } + } else if (data instanceof ObuSpat) { + listObuSpat.add(0, new DataShow(listObuSpatSize++, time + str)); + if (listObuSpat.size() > LIST_SIZE) { + listObuSpat.remove(listObuSpat.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_OBU_SPAT.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (data instanceof ObuRsi) { + listObuRsi.add(0, new DataShow(listObuRsiSize++, time + str)); + if (listObuRsi.size() > LIST_SIZE) { + listObuRsi.remove(listObuRsi.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_OBU_RSI.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (data instanceof ObuRsm) { + listObuRsm.add(0, new DataShow(listObuRsmSize++, time + str)); + if (listObuRsm.size() > LIST_SIZE) { + listObuRsm.remove(listObuRsm.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_OBU_RSM.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (data instanceof ObuMap) { + listObuMap.add(0, new DataShow(listObuMapSize++, time + str)); + if (listObuMap.size() > LIST_SIZE) { + listObuMap.remove(listObuMap.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_OBU_MAP.equals(listener.first)) { + listener.second.onRefresh(); + } } } return temp; diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ArrivalNotification.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ArrivalNotification.java deleted file mode 100644 index 9c5904dc23..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ArrivalNotification.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class ArrivalNotification extends BaseInfo { - public final MessagePad.ArrivalNotification bean; - - public ArrivalNotification(MessagePad.Header header, MessagePad.ArrivalNotification bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutopilotState.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutopilotState.java deleted file mode 100644 index e3a2c31b98..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutopilotState.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class AutopilotState extends BaseInfo { - public final MessagePad.AutopilotState bean; - - public AutopilotState(MessagePad.Header header, MessagePad.AutopilotState bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BagManagerCmd.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BagManagerCmd.java deleted file mode 100644 index db1dd0f4ab..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BagManagerCmd.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import bag_manager.BagManagerOuterClass; -import mogo.telematics.pad.MessagePad; - -public class BagManagerCmd extends BaseInfo { - public final BagManagerOuterClass.BagManager bean; - - public BagManagerCmd(MessagePad.Header header, BagManagerOuterClass.BagManager bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BasicInfoReq.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BasicInfoReq.java deleted file mode 100644 index bce516eee2..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BasicInfoReq.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class BasicInfoReq extends BaseInfo { - public final MessagePad.BasicInfoReq bean; - - public BasicInfoReq(MessagePad.Header header, MessagePad.BasicInfoReq bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/CarConfigResp.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/CarConfigResp.java deleted file mode 100644 index c8b3b390f3..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/CarConfigResp.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class CarConfigResp extends BaseInfo { - public final MessagePad.CarConfigResp bean; - - public CarConfigResp(MessagePad.Header header, MessagePad.CarConfigResp bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ChassisStates.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ChassisStates.java deleted file mode 100644 index f18d4564a5..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ChassisStates.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import chassis.ChassisStatesOuterClass; -import mogo.telematics.pad.MessagePad; - -public class ChassisStates extends BaseInfo { - public final ChassisStatesOuterClass.ChassisStates bean; - - public ChassisStates(MessagePad.Header header, ChassisStatesOuterClass.ChassisStates bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/FSMFunctionStates.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/FSMFunctionStates.java deleted file mode 100644 index 1d672127ae..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/FSMFunctionStates.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import function_state_management.FunctionStates; -import mogo.telematics.pad.MessagePad; - -public class FSMFunctionStates extends BaseInfo { - public final FunctionStates.FSMFunctionStates bean; - - public FSMFunctionStates(MessagePad.Header header, FunctionStates.FSMFunctionStates bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GlobalPathResp.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GlobalPathResp.java deleted file mode 100644 index bd5be112a6..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GlobalPathResp.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class GlobalPathResp extends BaseInfo { - public final MessagePad.GlobalPathResp bean; - - public GlobalPathResp(MessagePad.Header header, MessagePad.GlobalPathResp bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GnssInfo.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GnssInfo.java deleted file mode 100644 index 1ebd36a34f..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GnssInfo.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class GnssInfo extends BaseInfo { - public final MessagePad.GnssInfo bean; - - public GnssInfo(MessagePad.Header header, MessagePad.GnssInfo bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MogoReportMessage.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MogoReportMessage.java deleted file mode 100644 index ec25240c06..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MogoReportMessage.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; -import mogo_msg.MogoReportMsg; - -public class MogoReportMessage extends BaseInfo { - public final MogoReportMsg.MogoReportMessage bean; - - public MogoReportMessage(MessagePad.Header header, MogoReportMsg.MogoReportMessage bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuMap.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuMap.java index 88c93caf6e..51a2c8c4ed 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuMap.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuMap.java @@ -2,6 +2,7 @@ package com.zhidao.adas.client.bean; import com.google.protobuf.TextFormat; import com.mogo.support.obu.ObuScene; +import com.zhidao.support.adas.high.common.ByteUtil; import java.text.SimpleDateFormat; @@ -18,7 +19,7 @@ public class ObuMap extends BaseInfo { @Override public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); + return super.toString() + "Payload原始数据:" + ByteUtil.byteArrToHex(bean.toByteArray()) + '\n' + TextFormat.printer().escapingNonAscii(false).printToString(bean); } } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsi.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsi.java index d433245ebe..8cd054f956 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsi.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsi.java @@ -2,6 +2,7 @@ package com.zhidao.adas.client.bean; import com.google.protobuf.TextFormat; import com.mogo.support.obu.ObuScene; +import com.zhidao.support.adas.high.common.ByteUtil; import java.text.SimpleDateFormat; @@ -18,7 +19,7 @@ public class ObuRsi extends BaseInfo { @Override public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); + return super.toString() + "Payload原始数据:" + ByteUtil.byteArrToHex(bean.toByteArray()) + '\n' + TextFormat.printer().escapingNonAscii(false).printToString(bean); } } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsm.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsm.java index 6045845ae4..badbf1745b 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsm.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsm.java @@ -2,6 +2,7 @@ package com.zhidao.adas.client.bean; import com.google.protobuf.TextFormat; import com.mogo.support.obu.ObuScene; +import com.zhidao.support.adas.high.common.ByteUtil; import java.text.SimpleDateFormat; @@ -18,7 +19,7 @@ public class ObuRsm extends BaseInfo { @Override public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); + return super.toString() + "Payload原始数据:" + ByteUtil.byteArrToHex(bean.toByteArray()) + '\n' + TextFormat.printer().escapingNonAscii(false).printToString(bean); } } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuSpat.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuSpat.java index bb4707903e..3ba064f0e6 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuSpat.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuSpat.java @@ -2,6 +2,7 @@ package com.zhidao.adas.client.bean; import com.google.protobuf.TextFormat; import com.mogo.support.obu.ObuScene; +import com.zhidao.support.adas.high.common.ByteUtil; import java.text.SimpleDateFormat; @@ -18,7 +19,7 @@ public class ObuSpat extends BaseInfo { @Override public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); + return super.toString() + "Payload原始数据:" + ByteUtil.byteArrToHex(bean.toByteArray()) + '\n' + TextFormat.printer().escapingNonAscii(false).printToString(bean); } } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuWarningData.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuWarningData.java deleted file mode 100644 index 7ea1bca9af..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuWarningData.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; -import mogo.v2x.ObuWarningEvent; - -public class ObuWarningData extends BaseInfo { - public final ObuWarningEvent.ObuWarningData bean; - - public ObuWarningData(MessagePad.Header header, ObuWarningEvent.ObuWarningData bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java index 585a18d0a6..246de432ce 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java @@ -1,6 +1,7 @@ package com.zhidao.adas.client.bean; import com.google.protobuf.TextFormat; +import com.zhidao.support.adas.high.common.ByteUtil; import java.text.SimpleDateFormat; @@ -18,7 +19,7 @@ public class PerceptionTrafficLight extends BaseInfo { @Override public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); + return super.toString() + "Payload原始数据:" + ByteUtil.byteArrToHex(bean.toByteArray()) + '\n' + TextFormat.printer().escapingNonAscii(false).printToString(bean); } } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PlanningDecisionState.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PlanningDecisionState.java deleted file mode 100644 index c443774c36..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PlanningDecisionState.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class PlanningDecisionState extends BaseInfo { - public final MessagePad.PlanningActionMsg bean; - - public PlanningDecisionState(MessagePad.Header header, MessagePad.PlanningActionMsg bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PlanningObjects.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PlanningObjects.java deleted file mode 100644 index 68c1947de2..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PlanningObjects.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class PlanningObjects extends BaseInfo { - public final MessagePad.PlanningObjects bean; - - public PlanningObjects(MessagePad.Header header, MessagePad.PlanningObjects bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PredictionObstacleTrajectory.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PredictionObstacleTrajectory.java deleted file mode 100644 index b6b070e110..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PredictionObstacleTrajectory.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; -import prediction.Prediction; - -public class PredictionObstacleTrajectory extends BaseInfo { - public final Prediction.mPredictionObjects bean; - - public PredictionObstacleTrajectory(MessagePad.Header header, Prediction.mPredictionObjects bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ReceiveData.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ReceiveData.java new file mode 100644 index 0000000000..0d8be2857d --- /dev/null +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ReceiveData.java @@ -0,0 +1,25 @@ +package com.zhidao.adas.client.bean; + +import com.google.protobuf.GeneratedMessageV3; +import com.google.protobuf.TextFormat; +import com.zhidao.support.adas.high.common.ByteUtil; + +import java.text.SimpleDateFormat; + +import mogo.telematics.pad.MessagePad; + +public class ReceiveData extends BaseInfo { + public final GeneratedMessageV3 bean; + + public ReceiveData(MessagePad.Header header, GeneratedMessageV3 bean, SimpleDateFormat sdf) { + super("接收", bean.getSerializedSize(), header, sdf); + this.bean = bean; + } + + + @Override + public String toString() { + return super.toString() + "Payload原始数据:" + ByteUtil.byteArrToHex(bean.toByteArray()) + '\n' + TextFormat.printer().escapingNonAscii(false).printToString(bean); + } + +} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordDataConfig.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordDataConfig.java deleted file mode 100644 index 1dd5785507..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordDataConfig.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class RecordDataConfig extends BaseInfo { - public final MessagePad.RecordDataConfig bean; - - public RecordDataConfig(MessagePad.Header header, MessagePad.RecordDataConfig bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordPanel.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordPanel.java deleted file mode 100644 index a5d8cd7964..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordPanel.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; -import record_cache.RecordPanelOuterClass; - -public class RecordPanel extends BaseInfo { - public final RecordPanelOuterClass.RecordPanel bean; - - public RecordPanel(MessagePad.Header header, RecordPanelOuterClass.RecordPanel bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RoboSweeperTaskIndex.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RoboSweeperTaskIndex.java deleted file mode 100644 index 86eaedbb6c..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RoboSweeperTaskIndex.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; -import planning.RoboSweeperTaskIndexOuterClass; - -public class RoboSweeperTaskIndex extends BaseInfo { - public final RoboSweeperTaskIndexOuterClass.RoboSweeperTaskIndex bean; - - public RoboSweeperTaskIndex(MessagePad.Header header, RoboSweeperTaskIndexOuterClass.RoboSweeperTaskIndex bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/StatusInfo.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/StatusInfo.java deleted file mode 100644 index 72a96e6b7a..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/StatusInfo.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; -import system_master.SystemStatusInfo; - -public class StatusInfo extends BaseInfo { - public final SystemStatusInfo.StatusInfo bean; - - public StatusInfo(MessagePad.Header header, SystemStatusInfo.StatusInfo bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/TrackedObjects.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/TrackedObjects.java deleted file mode 100644 index 6f49037779..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/TrackedObjects.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class TrackedObjects extends BaseInfo { - private MessagePad.TrackedObjects bean; - - public TrackedObjects(MessagePad.Header header, MessagePad.TrackedObjects bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Trajectory.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Trajectory.java deleted file mode 100644 index 764d7fa44e..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Trajectory.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class Trajectory extends BaseInfo { - public final MessagePad.Trajectory bean; - - public Trajectory(MessagePad.Header header, MessagePad.Trajectory bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } - -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Warn.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Warn.java deleted file mode 100644 index 5bb43ebaaa..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Warn.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.zhidao.adas.client.bean; - -import com.google.protobuf.TextFormat; - -import java.text.SimpleDateFormat; - -import mogo.telematics.pad.MessagePad; - -public class Warn extends BaseInfo { - public final MessagePad.Warn bean; - - public Warn(MessagePad.Header header, MessagePad.Warn bean, SimpleDateFormat sdf) { - super("接收", bean.getSerializedSize(), header, sdf); - this.bean = bean; - } - - @Override - public String toString() { - return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); - } -} 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 f0af057c05..3a92a7f8dc 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 @@ -1,7 +1,5 @@ package com.zhidao.adas.client.ui; -import static com.mogo.telematic.MogoProtocolMsg.NORMAL_DATA; - import android.content.Context; import android.content.DialogInterface; import android.content.Intent; @@ -45,11 +43,7 @@ import androidx.recyclerview.widget.SimpleItemAnimator; import com.google.protobuf.TextFormat; import com.mogo.support.obu.ObuScene; -import com.mogo.telematic.MogoProtocolMsg; -import com.mogo.telematic.NSDNettyManager; -import com.mogo.telematic.client.listener.NettyClientListener; -import com.mogo.telematic.client.status.ConnectState; -import com.mogo.telematic.server.netty.NettyServerListener; +import com.zhidao.adas.client.App; import com.zhidao.adas.client.BuildConfig; import com.zhidao.adas.client.DataDistribution; import com.zhidao.adas.client.R; @@ -57,30 +51,15 @@ import com.zhidao.adas.client.adapter.InfoTitleAdapter; import com.zhidao.adas.client.base.BaseActivity; import com.zhidao.adas.client.base.BaseAdapter; import com.zhidao.adas.client.base.BaseFragment; -import com.zhidao.adas.client.bean.ArrivalNotification; -import com.zhidao.adas.client.bean.AutopilotState; -import com.zhidao.adas.client.bean.BagManagerCmd; -import com.zhidao.adas.client.bean.BasicInfoReq; -import com.zhidao.adas.client.bean.CarConfigResp; -import com.zhidao.adas.client.bean.ChassisStates; import com.zhidao.adas.client.bean.ErrorData; -import com.zhidao.adas.client.bean.FSMFunctionStates; -import com.zhidao.adas.client.bean.GlobalPathResp; -import com.zhidao.adas.client.bean.GnssInfo; import com.zhidao.adas.client.bean.IPCConnectState; -import com.zhidao.adas.client.bean.MogoReportMessage; import com.zhidao.adas.client.bean.ObuMap; import com.zhidao.adas.client.bean.ObuRsi; import com.zhidao.adas.client.bean.ObuRsm; import com.zhidao.adas.client.bean.ObuSpat; import com.zhidao.adas.client.bean.OriginalPointCloudData; import com.zhidao.adas.client.bean.PerceptionTrafficLight; -import com.zhidao.adas.client.bean.PlanningDecisionState; -import com.zhidao.adas.client.bean.PlanningObjects; -import com.zhidao.adas.client.bean.PredictionObstacleTrajectory; -import com.zhidao.adas.client.bean.RecordDataConfig; -import com.zhidao.adas.client.bean.RecordPanel; -import com.zhidao.adas.client.bean.RoboSweeperTaskIndex; +import com.zhidao.adas.client.bean.ReceiveData; import com.zhidao.adas.client.bean.SpecialVehicleBean; import com.zhidao.adas.client.bean.StatusInfo; import com.zhidao.adas.client.bean.TrackedObjects; @@ -98,14 +77,12 @@ 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.OnMultiDeviceListener; -import com.zhjt.mogo.adas.data.bean.AutopilotStatistics; import com.zhidao.support.adas.high.bean.VersionCompatibility; -import com.zhidao.support.adas.high.common.ByteUtil; 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.ProtocolStatus; import com.zhidao.support.adas.high.common.ReceiveTimeoutManager; +import com.zhjt.mogo.adas.data.bean.AutopilotStatistics; import java.net.Inet4Address; import java.net.InetAddress; @@ -123,7 +100,6 @@ import java.util.concurrent.ScheduledExecutorService; import bag_manager.BagManagerOuterClass; import chassis.ChassisStatesOuterClass; import function_state_management.FunctionStates; -import io.netty.channel.Channel; import mogo.telematics.pad.MessagePad; import mogo_msg.MogoReportMsg; import perception.TrafficLightOuterClass; @@ -877,39 +853,46 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas @Override public void onTrajectory(MessagePad.Header header, MessagePad.Trajectory trajectory) { - Trajectory base = new Trajectory(header, trajectory, sdf); + ReceiveData base = new ReceiveData(header, trajectory, sdf); DataDistribution.getInstance().addData(base); } @Override public void onTrackedObjects(MessagePad.Header header, MessagePad.TrackedObjects trackedObjects) { - TrackedObjects base = new TrackedObjects(header, trackedObjects, sdf); + ReceiveData base = new ReceiveData(header, trackedObjects, sdf); DataDistribution.getInstance().addData(base); } @Override public void onGnssInfo(MessagePad.Header header, MessagePad.GnssInfo gnssInfo) { - GnssInfo base = new GnssInfo(header, gnssInfo, sdf); + ReceiveData base = new ReceiveData(header, gnssInfo, sdf); + DataDistribution.getInstance().addData(base); + } + + @Override + public void onVehicleState(MessagePad.Header header, VehicleStateOuterClass.VehicleState vehicleState) { + App.INSTANCE.gear = vehicleState.getGear(); + ReceiveData base = new ReceiveData(header, vehicleState, sdf); DataDistribution.getInstance().addData(base); } - @Override public void onChassisStates(MessagePad.Header header, ChassisStatesOuterClass.ChassisStates chassisStates) { - ChassisStates base = new ChassisStates(header, chassisStates, sdf); + App.INSTANCE.gear = chassisStates.getGearSystemStates().getGearPosition(); + ReceiveData base = new ReceiveData(header, chassisStates, sdf); DataDistribution.getInstance().addData(base); } @Override public void onAutopilotState(MessagePad.Header header, MessagePad.AutopilotState autopilotState) { - AutopilotState base = new AutopilotState(header, autopilotState, sdf); + ReceiveData base = new ReceiveData(header, autopilotState, sdf); DataDistribution.getInstance().addData(base); } @Override public void onReportMessage(MessagePad.Header header, MogoReportMsg.MogoReportMessage mogoReportMessage) { - MogoReportMessage base = new MogoReportMessage(header, mogoReportMessage, sdf); + ReceiveData base = new ReceiveData(header, mogoReportMessage, sdf); DataDistribution.getInstance().addData(base); } @@ -921,7 +904,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas @Override public void onPredictionObstacleTrajectory(MessagePad.Header header, Prediction.mPredictionObjects predictionObjects) { - PredictionObstacleTrajectory base = new PredictionObstacleTrajectory(header, predictionObjects, sdf); + ReceiveData base = new ReceiveData(header, predictionObjects, sdf); DataDistribution.getInstance().addData(base); } @@ -960,32 +943,32 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas @Override public void onPlanningObjects(MessagePad.Header header, MessagePad.PlanningObjects planningObjects) { - PlanningObjects base = new PlanningObjects(header, planningObjects, sdf); + ReceiveData base = new ReceiveData(header, planningObjects, sdf); DataDistribution.getInstance().addData(base); } @Override public void onBasicInfoReq(MessagePad.Header header, MessagePad.BasicInfoReq basicInfoReq) { - BasicInfoReq info = new BasicInfoReq(header, basicInfoReq, sdf); - DataDistribution.getInstance().addData(info); + ReceiveData base = new ReceiveData(header, basicInfoReq, sdf); + DataDistribution.getInstance().addData(base); AdasManager.getInstance().sendBasicInfoResp("", 0, com.zhidao.support.adas.high.common.Constants.TERMINAL_ROLE.DEBUG); runOnUiThread(new Runnable() { @Override public void run() { - showToastCenter("收到车机基础信息请求:" + info.toString()); + showToastCenter("收到车机基础信息请求:" + base.toString()); } }); } @Override public void onCarConfigResp(MessagePad.Header header, MessagePad.CarConfigResp carConfigResp) { - CarConfigResp base = new CarConfigResp(header, carConfigResp, sdf); + ReceiveData base = new ReceiveData(header, carConfigResp, sdf); DataDistribution.getInstance().addData(base); } @Override public void onRecordResult(MessagePad.Header header, RecordPanelOuterClass.RecordPanel recordPanel) { - RecordPanel base = new RecordPanel(header, recordPanel, sdf); + ReceiveData base = new ReceiveData(header, recordPanel, sdf); DataDistribution.getInstance().addData(base); recordKey = recordPanel.getKey(); recordFileName = recordPanel.getFilename(); @@ -993,37 +976,37 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas @Override public void onGlobalPathResp(MessagePad.Header header, MessagePad.GlobalPathResp globalPathResp) { - GlobalPathResp base = new GlobalPathResp(header, globalPathResp, sdf); + ReceiveData base = new ReceiveData(header, globalPathResp, sdf); DataDistribution.getInstance().addData(base); } @Override public void onWarn(MessagePad.Header header, MessagePad.Warn warn) { - Warn base = new Warn(header, warn, sdf); + ReceiveData base = new ReceiveData(header, warn, sdf); DataDistribution.getInstance().addData(base); } @Override public void onArrivalNotification(MessagePad.Header header, MessagePad.ArrivalNotification arrivalNotification) { - ArrivalNotification base = new ArrivalNotification(header, arrivalNotification, sdf); + ReceiveData base = new ReceiveData(header, arrivalNotification, sdf); DataDistribution.getInstance().addData(base); } @Override public void onStatusQueryResp(MessagePad.Header header, SystemStatusInfo.StatusInfo statusInfo) { - StatusInfo base = new StatusInfo(header, statusInfo, sdf); + ReceiveData base = new ReceiveData(header, statusInfo, sdf); DataDistribution.getInstance().addData(base); } @Override public void onRecordDataConfigResp(MessagePad.Header header, MessagePad.RecordDataConfig config) { - RecordDataConfig base = new RecordDataConfig(header, config, sdf); + ReceiveData base = new ReceiveData(header, config, sdf); DataDistribution.getInstance().addData(base); } @Override public void onPlanningActionMsg(MessagePad.Header header, MessagePad.PlanningActionMsg planningActionMsg) { - PlanningDecisionState base = new PlanningDecisionState(header, planningActionMsg, sdf); + ReceiveData base = new ReceiveData(header, planningActionMsg, sdf); DataDistribution.getInstance().addData(base); } @@ -1054,19 +1037,19 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas @Override public void onFunctionStates(MessagePad.Header header, FunctionStates.FSMFunctionStates functionStates) { - FSMFunctionStates base = new FSMFunctionStates(header, functionStates, sdf); + ReceiveData base = new ReceiveData(header, functionStates, sdf); DataDistribution.getInstance().addData(base); } @Override public void onSweeperTaskIndexData(MessagePad.Header header, RoboSweeperTaskIndexOuterClass.RoboSweeperTaskIndex roboSweeperTaskIndex) { - RoboSweeperTaskIndex base = new RoboSweeperTaskIndex(header, roboSweeperTaskIndex, sdf); + ReceiveData base = new ReceiveData(header, roboSweeperTaskIndex, sdf); DataDistribution.getInstance().addData(base); } @Override public void onBagManagerCmd(MessagePad.Header header, BagManagerOuterClass.BagManager bagManager) { - BagManagerCmd base = new BagManagerCmd(header, bagManager, sdf); + ReceiveData base = new ReceiveData(header, bagManager, sdf); DataDistribution.getInstance().addData(base); } @@ -1076,6 +1059,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas if (BuildConfig.IS_CLIENT) { /*—————————————作为乘客端———————————*/ options = new AdasOptions.Builder().setClient(true).build(); + /*乘客端启动 注释掉 NSDNettyManager.getInstance().searchAndConnectServer(this, "1234", new NettyClientListener() { @Override @@ -1095,7 +1079,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas getHandler().sendEmptyMessage(WHAT_DRIVER_IP); onUpdateConnectStateView(); } - }); + });*/ } else { /*—————————————作为司机端———————————*/ int mode = Constants.getIpcConnectionMode(this); @@ -1118,6 +1102,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas break; } + /*司机端启动 注释掉 NSDNettyManager.getInstance().startNSDNettyServerWithSN(this, new NettyServerListener() { @Override public void onMessageResponseServer(MogoProtocolMsg msg, Channel channel) { @@ -1144,10 +1129,12 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas public void onChannelDisConnect(Channel channel) { Log.i(TAG, "onChannelDisConnect channel=" + channel.id()); } - }, "1234567"); + }, "1234567");*/ } + options.setUnableLaunchAutopilotGear(BuildConfig.UNABLE_LAUNCH_AUTOPILOT_GEAR_TAXI); AdasManager.getInstance().create(options, this); AdasManager.getInstance().setOnAdasListener(this); + /*两端数据转发 注释掉 AdasManager.getInstance().setOnMultiDeviceListener(new OnMultiDeviceListener() { @Override public void onForwardingDriverIPCMessage(byte[] bytes) { @@ -1165,7 +1152,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas .sendMogoProtocolMsgToServer(new MogoProtocolMsg(NORMAL_DATA, bytes.length, bytes), null); Log.i(TAG, "乘客屏发送数据=" + ByteUtil.byteArrToHex(bytes)); } - }); + });*/ } @@ -1579,7 +1566,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas break; case WHAT_DRIVER_IP: ipcIp.setVisibility(View.VISIBLE); - ipcIp.setText("司机IP:" + NSDNettyManager.getInstance().getConnServerIp()); +// ipcIp.setText("司机IP:" + NSDNettyManager.getInstance().getConnServerIp()); break; case WHAT_IPC_CONNECT_STATE: if (floatWindow != null) { 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 7b4abdaad1..6bbb4b3825 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 @@ -13,6 +13,8 @@ import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; +import android.widget.RadioButton; +import android.widget.RadioGroup; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; @@ -23,6 +25,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.SimpleItemAnimator; +import com.zhidao.adas.client.App; import com.zhidao.adas.client.BuildConfig; import com.zhidao.adas.client.R; import com.zhidao.adas.client.adapter.ConfigAdapter; @@ -36,15 +39,18 @@ import com.zhidao.support.adas.high.bean.VersionCompatibility; import com.zhidao.support.adas.high.common.Constants; import com.zhidao.support.adas.high.common.CupidLogUtils; import com.zhidao.support.adas.high.common.MessageType; +import com.zhidao.support.adas.high.common.autopilot.ability.AutopilotAbilityManager; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import chassis.Chassis; import mogo.telematics.pad.MessagePad; /** @@ -61,12 +67,17 @@ public class VersionFragment extends BaseFragment { private CheckBox unregistered_check_all; private TextView hint_registered; private TextView hint_unregistered; + private TextView can; + private TextView gear_influence; + private TextView gear; + private TextView title_gear; + private RadioButton rb_taxi; + private RadioGroup rg; private ConfigAdapter adapter; private InterfaceAdapter unregisteredAdapter; private InterfaceAdapter registeredAdapter; - private int role = Constants.TERMINAL_ROLE.DEBUG;//角色 默认调试屏 public VersionFragment() { @@ -131,6 +142,12 @@ public class VersionFragment extends BaseFragment { Button btn2 = view.findViewById(R.id.btn2); ipsView = view.findViewById(R.id.ips_view); recyclerView = view.findViewById(R.id.config_list); + rb_taxi = view.findViewById(R.id.rb_taxi); + can = view.findViewById(R.id.can); + gear_influence = view.findViewById(R.id.gear_influence); + gear = view.findViewById(R.id.gear); + title_gear = view.findViewById(R.id.title_gear); + rg = view.findViewById(R.id.rg); initFragmentRecyclerView(); CupidLogUtils.w("InfoFragment===>" + title); tvTitle.setText(title); @@ -173,7 +190,36 @@ public class VersionFragment extends BaseFragment { view.findViewById(R.id.line1).setVisibility(View.GONE); tvTitle.setText("版本"); } + rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.rb_taxi) { + AutopilotAbilityManager.getInstance().setUnableLaunchAutopilotGear(BuildConfig.UNABLE_LAUNCH_AUTOPILOT_GEAR_TAXI); + gear("TAXI", Arrays.toString(BuildConfig.UNABLE_LAUNCH_AUTOPILOT_GEAR_TAXI.toArray())); + } else if (checkedId == R.id.rb_bus) { + AutopilotAbilityManager.getInstance().setUnableLaunchAutopilotGear(BuildConfig.UNABLE_LAUNCH_AUTOPILOT_GEAR_BUS); + gear("BUS", Arrays.toString(BuildConfig.UNABLE_LAUNCH_AUTOPILOT_GEAR_BUS.toArray())); + } else if (checkedId == R.id.rb_sweeper) { + AutopilotAbilityManager.getInstance().setUnableLaunchAutopilotGear(BuildConfig.UNABLE_LAUNCH_AUTOPILOT_GEAR_SWEEPER); + gear("SWEEPER", Arrays.toString(BuildConfig.UNABLE_LAUNCH_AUTOPILOT_GEAR_SWEEPER.toArray())); + } else if (checkedId == R.id.rb_m1) { + AutopilotAbilityManager.getInstance().setUnableLaunchAutopilotGear(BuildConfig.UNABLE_LAUNCH_AUTOPILOT_GEAR_M1); + gear("M1", "无限制"); + } else if (checkedId == R.id.rb_m2) { + AutopilotAbilityManager.getInstance().setUnableLaunchAutopilotGear(BuildConfig.UNABLE_LAUNCH_AUTOPILOT_GEAR_M2); + gear("M1", Arrays.toString(BuildConfig.UNABLE_LAUNCH_AUTOPILOT_GEAR_M2.toArray())); + } else if (checkedId == R.id.rb_van) { + AutopilotAbilityManager.getInstance().setUnableLaunchAutopilotGear(BuildConfig.UNABLE_LAUNCH_AUTOPILOT_GEAR_VAN); + gear("VAN", "无限制"); + } + } + }); + gear("TAXI", Arrays.toString(BuildConfig.UNABLE_LAUNCH_AUTOPILOT_GEAR_TAXI.toArray())); + } + private void gear(String car, String gear) { + title_gear.setText(car + "不能启动自动驾驶的档位:"); + this.gear.setText(gear); } //根据连接状态更新数据 @@ -215,43 +261,62 @@ 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); + private String gear() { + StringBuilder builder = new StringBuilder(); + Chassis.GearPosition gear = App.INSTANCE.gear; + if (gear != null) { + boolean b = AutopilotAbilityManager.getInstance().isLaunchAutopilot(gear); + builder.append(" 当前档位:").append(gear.name()); + builder.append(" 是否可以启动自驾:").append(b); + } + return builder.toString(); + } + + private String getAutopilotAbilityConfig(String value) { + return 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); - } - }); - } + if (getActivity() != null) + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + can.setTextColor(getResources().getColor(RandomColor.randomColor())); + can.setText(getAutopilotAbilityConfig(isAutopilotAbility + ",原因:" + unableAutopilotReason)); + gear_influence.setTextColor(getResources().getColor(RandomColor.randomColor())); + gear_influence.setText(gear()); + } + }); + + + } + + private void updateRefreshConfig(List list, Config temp) { + 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 diff --git a/app_ipc_monitoring/src/main/res/layout/fragment_version.xml b/app_ipc_monitoring/src/main/res/layout/fragment_version.xml index 0b6016f93b..2f68eb3f7d 100644 --- a/app_ipc_monitoring/src/main/res/layout/fragment_version.xml +++ b/app_ipc_monitoring/src/main/res/layout/fragment_version.xml @@ -33,12 +33,155 @@ android:layout_margin="20dp" android:orientation="horizontal"> - - + android:layout_weight="1"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #1E90FF #FFC0CB #FF8F00 - #FFE500 - #B9ED3E + #FF33FF + #669900 #2EEDEB diff --git a/config.gradle b/config.gradle index fd51e09b27..a0654f8743 100644 --- a/config.gradle +++ b/config.gradle @@ -93,7 +93,7 @@ ext { // obu sdk obusdk : "com.zhidao.enterprise.smartv2x:smartv2x:1.0.0.3", - mogoobu : 'com.mogo.support.obu:mogo-obu:1.1.0_beta1', + mogoobu : 'com.mogo.support.obu:mogo-obu:1.1.0_beta3', // google googlezxing : "com.google.zxing:core:3.3.3", @@ -142,6 +142,7 @@ ext { ttszhi : "com.mogo.tts:tts-zhi:${TTS_ZHI_VERSION}", ttspad : "com.mogo.tts:tts-pad:${TTS_ZHI_VERSION}", ttsnoop : "com.mogo.tts:tts-noop:${TTS_NOOP_VERSION}", + ttsiflytek : "com.mogo.tts:tts-iflytek :${TTS_IFLYTEK_VERSION}", //========================= 网约车 Maven 版本管理 ========================= mogooch : "com.mogo.och:och:${MOGO_OCH_VERSION}", @@ -198,10 +199,6 @@ ext { androidx_datastore : "androidx.datastore:datastore:1.0.0", android_start_up : "com.mogo:android-startup:1.0.1", - //========================= Shizuku ====================== - shizuku_api : "dev.rikka.shizuku:api:12.1.0", - shizuku_provider : "dev.rikka.shizuku:provider:12.1.0", - //========================= Koom ====================== koomnative : "com.kuaishou.koom:koom-native-leak-static:2.2.0", koomxhook : "com.kuaishou.koom:xhook-static:2.2.0", diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/dispatch/DispatchAutoPilotManager.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/dispatch/DispatchAutoPilotManager.kt index c7c48c012e..7dfd3190a9 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/dispatch/DispatchAutoPilotManager.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/dispatch/DispatchAutoPilotManager.kt @@ -41,6 +41,7 @@ class DispatchAutoPilotManager private constructor() : private const val MSG_SOCKET_TYPE = 501000 private const val MSG_TYPE_SHOW_DIALOG = 0 private const val MSG_TYPE_UPLOAD_AUTOPILOT_STATUS = 1 + private const val MSG_TYPE_UPLOAD_AUTOPILOT_ROTTING = 2 val dispatchAutoPilotManager by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { DispatchAutoPilotManager() @@ -68,6 +69,16 @@ class DispatchAutoPilotManager private constructor() : getAutoPilotStatusInfo().reason ) sendEmptyMessageDelayed(MSG_TYPE_UPLOAD_AUTOPILOT_STATUS, 1000L) + } else if(msg.what == MSG_TYPE_UPLOAD_AUTOPILOT_ROTTING){ + val data = msg.obj as MessagePad.GlobalPathResp + val list: MutableList = ArrayList() + for (location in data.wayPointsList) { + val routeModels = AutopilotRouteInfo.RouteModels() + routeModels.lat = location.latitude + routeModels.lon = location.longitude + list.add(routeModels) + } + dispatchServiceModel.uploadAutopilotRoute(list) } } } @@ -165,14 +176,10 @@ class DispatchAutoPilotManager private constructor() : if (globalPathResp == null || globalPathResp.wayPointsList.isEmpty()) { return } - val list: MutableList = ArrayList() - for (location in globalPathResp.wayPointsList) { - val routeModels = AutopilotRouteInfo.RouteModels() - routeModels.lat = location.latitude - routeModels.lon = location.longitude - list.add(routeModels) - } - dispatchServiceModel.uploadAutopilotRoute(list) + val message = Message() + message.what = MSG_TYPE_UPLOAD_AUTOPILOT_ROTTING + message.obj = globalPathResp + handler.sendMessage(message) } override fun onAutopilotArriveAtStation(arrivalNotification: MessagePad.ArrivalNotification?) { diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/dispatch/network/DispatchServiceModel.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/dispatch/network/DispatchServiceModel.kt index a2ffd09f4d..1f5fa404b7 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/dispatch/network/DispatchServiceModel.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/dispatch/network/DispatchServiceModel.kt @@ -76,7 +76,7 @@ class DispatchServiceModel private constructor() { fun uploadAutopilotRoute(list: List?) { val sn = MoGoAiCloudClientConfig.getInstance().sn val reportedRoute = ReportedRoute(sn, GsonUtil.jsonFromObject(list)) - val map: MutableMap = HashMap() + val map: MutableMap = HashMap() map["sn"] = sn map["data"] = GsonUtil.jsonFromObject(reportedRoute) mAdasApiService.uploadAutopilotRoute(map) diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/dispatch/network/IDispatchAdasApiService.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/dispatch/network/IDispatchAdasApiService.kt index 4c018f2030..dbdc2e34c7 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/dispatch/network/IDispatchAdasApiService.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/dispatch/network/IDispatchAdasApiService.kt @@ -15,7 +15,7 @@ interface IDispatchAdasApiService { */ @FormUrlEncoded @POST("eagle-eye-dns/eagle-eye-dns/dataService/autoDriver/receiveCarPreSetPath") - fun uploadAutopilotRoute(@FieldMap parameters: Map): Observable + fun uploadAutopilotRoute(@FieldMap parameters: Map): Observable /** * 上报自动驾驶调度处理结果 服务于业务调度 diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/obu/V2xObuEventManager.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/obu/V2xObuEventManager.kt index 85f54b0207..130cf0ef7a 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/obu/V2xObuEventManager.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/obu/V2xObuEventManager.kt @@ -5,9 +5,12 @@ import com.mogo.eagle.core.data.enums.DataSourceType 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.data.obu.MogoObuConst import com.mogo.eagle.core.function.api.obu.IMoGoObuSaveMessageListener import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.function.call.obu.CallerObuSaveMessageListenerManager +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant /** * 处理obu分发出来,在消息盒子展示的消息 @@ -27,24 +30,41 @@ object V2xObuEventManager : IMoGoObuSaveMessageListener { CallerObuSaveMessageListenerManager.removeListener(TAG) } + private val obuDataMap = mutableMapOf() + /** * @param type 事件id,类似与uuid * @param content 事件内容 - * @param tts 事件语音播报 + * @param tts 事件语音播报 //30秒内同一个事件只出现一次 TODO 临时添加,后面宏宇统一在数据中心处理 */ override fun onMoGoObuSaveMessage(type: String, content: String, tts: String, source: DataSourceType) { - CallerMsgBoxManager.saveMsgBox( - MsgBoxBean( - MsgBoxType.V2X, - V2XMsg( - type, - content, - tts - ) - ).apply { - sourceType = source + if (content.isNotEmpty()) { + if (obuDataMap.containsKey(type)) { + var oldTime = obuDataMap[type] + var timeDiff = (System.currentTimeMillis() - oldTime!!) / 1000 + if (timeDiff < 30) { + return + } + obuDataMap.remove(type) + obuDataMap[type] = System.currentTimeMillis() + } else { + obuDataMap[type] = System.currentTimeMillis() } - ) + + CallerLogger.d("${SceneConstant.M_OBU}${TAG}", "onMoGoObuSaveMessage type = $type ---content = $content ---tts = $tts ") + CallerMsgBoxManager.saveMsgBox( + MsgBoxBean( + MsgBoxType.V2X, + V2XMsg( + type, + content, + tts + ) + ).apply { + sourceType = source + } + ) + } } fun release() { diff --git a/core/function-impl/mogo-core-function-datacenter/README.md b/core/function-impl/mogo-core-function-datacenter/README.md index b17a6584f3..3721fcd10f 100644 --- a/core/function-impl/mogo-core-function-datacenter/README.md +++ b/core/function-impl/mogo-core-function-datacenter/README.md @@ -44,7 +44,7 @@ MogoObuManager.getInstance().init(Context context); ``` ## 连接 ```java -//默认192.168.1.199 +//默认 MogoObuManager.getInstance().connect(); //自定义 IP MogoObuManager.getInstance().connect(String ip); diff --git a/core/function-impl/mogo-core-function-datacenter/build.gradle b/core/function-impl/mogo-core-function-datacenter/build.gradle index fab4051ccf..a60c8f718b 100644 --- a/core/function-impl/mogo-core-function-datacenter/build.gradle +++ b/core/function-impl/mogo-core-function-datacenter/build.gradle @@ -45,28 +45,30 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation rootProject.ext.dependencies.androidxccorektx - implementation rootProject.ext.dependencies.androidxappcompat - implementation rootProject.ext.dependencies.arouter - implementation rootProject.ext.dependencies.rxandroid - kapt rootProject.ext.dependencies.aroutercompiler - implementation rootProject.ext.dependencies.androidxroomruntime - kapt rootProject.ext.dependencies.androidxroomcompiler - implementation rootProject.ext.dependencies.androidxroomktx - - implementation rootProject.ext.dependencies.mogoaicloudtelematic - implementation project(':libraries:mogo-obu') - implementation project(':libraries:mogo-adas') if (Boolean.valueOf(USE_MAVEN_PACKAGE)) { - implementation rootProject.ext.dependencies.mogo_core_utils - implementation rootProject.ext.dependencies.mogo_core_function_call - implementation rootProject.ext.dependencies.mogocommons + implementation rootProject.ext.dependencies.androidxccorektx + implementation rootProject.ext.dependencies.androidxappcompat + implementation project(':libraries:mogo-obu') + implementation project(':libraries:mogo-adas') + implementation project(":foudations:mogo-aicloud-services-sdk") + implementation project(':core:mogo-core-data') } else { - implementation project(':core:mogo-core-utils') + implementation rootProject.ext.dependencies.androidxccorektx + implementation rootProject.ext.dependencies.androidxappcompat + implementation rootProject.ext.dependencies.arouter + implementation rootProject.ext.dependencies.rxandroid + kapt rootProject.ext.dependencies.aroutercompiler + implementation rootProject.ext.dependencies.androidxroomruntime + kapt rootProject.ext.dependencies.androidxroomcompiler + implementation rootProject.ext.dependencies.androidxroomktx + + implementation project(':libraries:mogo-obu') + implementation project(':libraries:mogo-adas') + implementation rootProject.ext.dependencies.mogoaicloudtelematic implementation project(':core:mogo-core-function-call') - implementation project(':foudations:mogo-commons') + implementation project(":foudations:mogo-commons") } } -apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString() +//apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString() diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/aicloud/AiCloudSocketBizProvider.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/aicloud/AiCloudSocketBizProvider.kt index 8f94b5a59d..971e7b2af2 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/aicloud/AiCloudSocketBizProvider.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/aicloud/AiCloudSocketBizProvider.kt @@ -3,7 +3,6 @@ package com.mogo.eagle.core.function.datacenter.aicloud import android.content.Context import com.alibaba.android.arouter.facade.annotation.Route import com.mogo.cloud.socket.SocketManager -import com.mogo.commons.AbsMogoApplication import com.mogo.eagle.core.data.constants.MogoServicePaths import com.mogo.eagle.core.function.api.base.IMoGoFunctionServerProvider @@ -13,13 +12,15 @@ class AiCloudSocketBizProvider : IMoGoFunctionServerProvider { get() = "AiCloudSocketBizProvider" override fun init(context: Context?) { - SocketManager.getInstance().init(AbsMogoApplication.getApp(), 0.0, 0.0) - SocketManager.getInstance().registerOnMessageListener(401012, V2XMessageListener401012()) - SocketManager.getInstance().registerOnMessageListener(401018, V2XMessageListener401018()) - SocketManager.getInstance().registerOnMessageListener(402000, V2XMessageListener402000()) - SocketManager.getInstance().registerOnMessageListener(404000, V2XMessageListener404000()) - //SocketManager.getInstance().registerOnMessageListener(503000, V2XMessageListener503000()) - SocketManager.getInstance().registerOnMessageListener(70001, V2XMessageListener70001()) + context?.let { + SocketManager.getInstance().init(it, 0.0, 0.0) + SocketManager.getInstance().registerOnMessageListener(401012, V2XMessageListener401012()) + SocketManager.getInstance().registerOnMessageListener(401018, V2XMessageListener401018()) + SocketManager.getInstance().registerOnMessageListener(402000, V2XMessageListener402000()) + SocketManager.getInstance().registerOnMessageListener(404000, V2XMessageListener404000()) + //SocketManager.getInstance().registerOnMessageListener(503000, V2XMessageListener503000()) + SocketManager.getInstance().registerOnMessageListener(70001, V2XMessageListener70001()) + } } override fun onDestroy() { diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt index e68500d7c7..02f835979b 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt @@ -3,12 +3,14 @@ package com.mogo.eagle.core.function.datacenter.autopilot import android.Manifest.permission import android.content.Context 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 @@ -52,7 +54,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.MessageType -import com.zhidao.support.adas.high.common.MogoReport +import com.zhjt.mogo.adas.data.bean.MogoReport import com.zhjt.service.chain.ChainLog import com.zhjt.service.chain.TracingConstants import io.netty.channel.Channel @@ -105,7 +107,7 @@ class MoGoAutopilotControlProvider : .setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.FIXATION) .setIpcFixationIP(AdasManager.getInstance().getIPCFixationIPList(mContext)) .setClient(false) - .setIdentityMode(FunctionBuildConfig.appIdentityMode) + .setUnableLaunchAutopilotGear(FunctionBuildConfig.unableLaunchAutopilotGear) // .setSubscribeInterfaceOptions(subscribeInterfaceOptions)// .build() @@ -196,7 +198,7 @@ class MoGoAutopilotControlProvider : val options = AdasOptions .Builder() .setClient(true) - .setIdentityMode(FunctionBuildConfig.appIdentityMode) + .setUnableLaunchAutopilotGear(FunctionBuildConfig.unableLaunchAutopilotGear) .build() AdasManager.getInstance() .create(options, MoGoAdasMsgConnectStatusListenerImpl()) @@ -224,7 +226,7 @@ class MoGoAutopilotControlProvider : .setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.FIXATION) .setIpcFixationIP(AdasManager.getInstance().getIPCFixationIPList(mContext)) .setClient(false)// 乘客端直连工控机改为false - .setIdentityMode(FunctionBuildConfig.appIdentityMode) + .setUnableLaunchAutopilotGear(FunctionBuildConfig.unableLaunchAutopilotGear) .build() AdasManager.getInstance().create(options, MoGoAdasMsgConnectStatusListenerImpl()) //////////////////////////////////注意先后顺序,AdasManager.getInstance().create后才可以设置监听///////////////////////////////////////////// @@ -546,6 +548,108 @@ class MoGoAutopilotControlProvider : return AdasManager.getInstance().sendRecordDataConfigReq(reqType, recordType, topicsNeedToCache) } + /** + * 获取数据采集录制模式配置列表 + * @param reqType 0: all, 1:获取当前所有topic列表, 2:配置需要预加载的topic组合 + * @param recordType 0:不需要修改内置类型的topic组合, 1:需要修改内置类型的topic组合 + * @param topicsNeedToCache + * @return boolean + */ + override fun sendBagManagerCmd(bagManagerEntity: BagManagerEntity): Boolean { + val bagManager = BagManagerOuterClass.BagManager + .newBuilder() + .setReqType(bagManagerEntity.reqType) + .setKeyReq(bagManagerEntity.keyReq) + + // 更新包附加信息,发送请求且reqType=5时有效 + val descReq = BagManagerOuterClass.BagDescription + .newBuilder() + bagManagerEntity.descReq?.let { + descReq.description = it.description + descReq.hasAudio = it.hasAudio + descReq.audioUrl = it.audioUrl + descReq.setReportBI(it.reportBI) + } + bagManager.descReq = descReq.build() + + // 空间使用信息,获取响应且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){ + if(bagsInfoRespEntity.itemType == 0){ + // 包描述信息 + 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 + .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() + + bagManagerEntity.uploadCosResp?.let { + uploadCosResp.key = it.key + uploadCosResp.stat = it.stat + uploadCosResp.message = it.message + bagManager.uploadCosResp = uploadCosResp.build() + } + + + return AdasManager.getInstance().sendBagManagerCmd(bagManager.build()) + } + /** * 向左变道 */ @@ -644,27 +748,29 @@ class MoGoAutopilotControlProvider : } override fun connectSpecifiedServer(ip: String) { - NSDNettyManager.getInstance().connectSpecifiedServer( - ip, - NettyTcpServer.SERVER_PORT, - MoGoAiCloudClientConfig.getInstance().sn, - object : NettyClientListener { - override fun onMessageResponseClient( - msg: MogoProtocolMsg?, - sign: String?, - channel: Channel - ) { - msgHandler.handleMsgFromServer(msg, channel) - } + ThreadUtils.getIoPool().submit { + NSDNettyManager.getInstance().connectSpecifiedServer( + ip, + NettyTcpServer.SERVER_PORT, + MoGoAiCloudClientConfig.getInstance().sn, + object : NettyClientListener { + override fun onMessageResponseClient( + msg: MogoProtocolMsg?, + sign: String?, + channel: Channel + ) { + msgHandler.handleMsgFromServer(msg, channel) + } - override fun onClientStatusConnectChanged( - statusCode: Int, - sign: String?, - channel: Channel - ) { - msgHandler.handleClientConnStatus(statusCode, sign, channel) - } - }) + override fun onClientStatusConnectChanged( + statusCode: Int, + sign: String?, + channel: Channel + ) { + msgHandler.handleClientConnStatus(statusCode, sign, channel) + } + }) + } } /** diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasMsgConnectStatusListenerImpl.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasMsgConnectStatusListenerImpl.kt index f96c1a7bde..f77595e303 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasMsgConnectStatusListenerImpl.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasMsgConnectStatusListenerImpl.kt @@ -1,6 +1,5 @@ package com.mogo.eagle.core.function.datacenter.autopilot.adapter -import android.content.Context import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.commons.debug.DebugConfig.* import com.mogo.eagle.core.data.config.FunctionBuildConfig diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/location/MoGoLocationDispatcher.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/location/MoGoLocationDispatcher.kt index 945490bfd2..bc5dfa9d16 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/location/MoGoLocationDispatcher.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/location/MoGoLocationDispatcher.kt @@ -1,7 +1,5 @@ package com.mogo.eagle.core.function.datacenter.location -import com.mogo.commons.AbsMogoApplication -import com.mogo.commons.constants.SharedPrefsConstants import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.enums.DataSourceType import com.mogo.eagle.core.data.map.MogoLocation @@ -13,7 +11,6 @@ import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02Lis import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager import com.mogo.eagle.core.function.call.map.CallerGaoDeMapLocationListenerManager import com.mogo.eagle.core.function.call.obu.CallerObuLocationWGS84ListenerManager -import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr import com.mogo.eagle.core.utilcode.util.MultiDisplayUtils import com.mogo.eagle.core.utilcode.util.TimeUtils import mogo.telematics.pad.MessagePad @@ -119,25 +116,6 @@ object MoGoLocationDispatcher : } } - // 本地SP缓存城市Code - val cityCode = mogoLocation.cityCode - if (cityCode != null && cityCode.isNotEmpty()) { - mCityCode = mogoLocation.cityCode - SharedPrefsMgr.getInstance(AbsMogoApplication.getApp()) - .putString(SharedPrefsConstants.LOCATION_CITY_CODE, cityCode) - - SharedPrefsMgr.getInstance(AbsMogoApplication.getApp()) - .putString( - SharedPrefsConstants.LOCATION_LATITUDE, - mogoLocation.latitude.toString() - ) - SharedPrefsMgr.getInstance(AbsMogoApplication.getApp()) - .putString( - SharedPrefsConstants.LOCATION_LONGITUDE, - mogoLocation.longitude.toString() - ) - } - } /** diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MoGoObuProvider.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MoGoObuProvider.kt index 3e55c6a63f..5b1cdbcf28 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MoGoObuProvider.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MoGoObuProvider.kt @@ -4,6 +4,7 @@ import android.content.Context import com.alibaba.android.arouter.facade.annotation.Route import com.mogo.eagle.core.data.constants.MoGoConfig import com.mogo.eagle.core.data.constants.MogoServicePaths +import com.mogo.eagle.core.data.obu.MogoObuConst import com.mogo.eagle.core.function.api.obu.IMoGoObuProvider import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OBU @@ -18,7 +19,6 @@ import com.mogo.eagle.core.utilcode.util.CommonUtils class MoGoObuProvider : IMoGoObuProvider { private val TAG = "MoGoObuProvider" private var mContext: Context? = null - private val taxiObuIp = "192.168.1.199" //obu的taxi和bus的ip已经全部统一成1网段ip override val functionName: String get() = TAG @@ -36,7 +36,7 @@ class MoGoObuProvider : IMoGoObuProvider { mContext = context mContext?.let { val ipAddress = - SharedPrefsMgr.getInstance(context).getString(MoGoConfig.OBU_IP, taxiObuIp) + SharedPrefsMgr.getInstance(context).getString(MoGoConfig.OBU_IP, MogoObuConst.OBU_DEFAULT_IP) //mogo obu MogoPrivateObuNewManager.INSTANCE.connectObu( it, @@ -44,6 +44,9 @@ class MoGoObuProvider : IMoGoObuProvider { CommonUtils.getIpAddressString() ) } + + //监听obu版本数据 + MogoPrivateObuNewManager.INSTANCE.readSystemConfig() } /** @@ -74,4 +77,12 @@ class MoGoObuProvider : IMoGoObuProvider { override fun setObuLog(isChecked: Boolean) { MogoPrivateObuNewManager.INSTANCE.setObuLog(isChecked) } + + override fun uploadObuPack(filePathArray: Array) { + MogoPrivateObuNewManager.INSTANCE.uploadObuPack(filePathArray) + } + + override fun deleteObuFile() { + MogoPrivateObuNewManager.INSTANCE.deleteObuFile() + } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoObuDcCombineManager.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoObuDcCombineManager.kt index c5e9c8b345..7f9651f0da 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoObuDcCombineManager.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoObuDcCombineManager.kt @@ -229,6 +229,7 @@ class MogoObuDcCombineManager private constructor() : IMoGoObuWarningRsiListener //限速预警, ADD处理一次 MogoObuConstants.RSI_SCENE_TYPE.SLW.toString() -> { + appId = EventTypeEnumNew.TYPE_USECASE_ID_ROAD_SPEED_LIMIT.poiType alertContent = EventTypeEnumNew.getWarningContent(appId) ttsContent = EventTypeEnumNew.getWarningTts(appId) } @@ -241,6 +242,9 @@ class MogoObuDcCombineManager private constructor() : IMoGoObuWarningRsiListener when (status) { // 添加 MogoObuConstants.STATUS.ADD -> { + if (alertContent.isEmpty() || ttsContent.isEmpty()) { + return + } saveObuToDcData(appId, alertContent, ttsContent) showWarning(appId, alertContent, ttsContent, direction) } @@ -501,6 +505,9 @@ class MogoObuDcCombineManager private constructor() : IMoGoObuWarningRsiListener "${M_OBU}${TAG}", "MogoObuDcCombineManager changeTrafficLightStatus 闯红灯 --------> ttsContent = $ttsContent ---alertContent = $alertContent " ) + if (alertContent.isEmpty() || ttsContent.isEmpty()) { + return + } saveObuToDcData(EventTypeEnumNew.TYPE_USECASE_ID_IVP_RED.poiType, alertContent, ttsContent) showWarning(EventTypeEnumNew.TYPE_USECASE_ID_IVP_RED.poiType, alertContent, ttsContent, WarningDirectionEnum.ALERT_WARNING_NON) } @@ -538,6 +545,9 @@ class MogoObuDcCombineManager private constructor() : IMoGoObuWarningRsiListener ) val maxSpeed = currentLight.suggestMaxSpeed * 3.6 if (maxSpeed > 0) { + if (alertContent.isEmpty() || ttsContent.isEmpty()) { + return + } saveObuToDcData(EventTypeEnumNew.TYPE_USECASE_ID_IVP_GREEN.poiType, alertContent, ttsContent) showWarning(EventTypeEnumNew.TYPE_USECASE_ID_IVP_GREEN.poiType, alertContent, ttsContent, WarningDirectionEnum.ALERT_WARNING_NON) } diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt index ec299f6d9c..a9c89ae9f0 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoPrivateObuNewManager.kt @@ -4,10 +4,12 @@ import android.content.Context import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.config.HmiBuildConfig import com.mogo.eagle.core.data.enums.* +import com.mogo.eagle.core.data.obu.MogoObuConst import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener import com.mogo.eagle.core.function.api.map.angle.Default import com.mogo.eagle.core.function.api.map.angle.TooClose import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager +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.map.CallerMapUIServiceManager import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager @@ -18,8 +20,10 @@ import com.mogo.eagle.core.function.call.obu.CallerObuWarningListenerManager import com.mogo.eagle.core.function.call.v2x.CallerLimitingVelocityListenerManager import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager import com.mogo.eagle.core.function.datacenter.obu.utils.TrafficDataConvertUtilsNew +import com.mogo.eagle.core.utilcode.breakpoint.Config 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.util.FileUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.support.obu.ObuBase import com.mogo.support.obu.ObuScene @@ -31,6 +35,8 @@ import com.mogo.support.obu.model.* import com.mogo.support.obu.option.MogoObuCom import com.mogo.support.obu.option.MogoObuLog import com.mogo.support.obu.option.MogoObuOptions +import com.mogo.support.obu.upgrade.ObuSoftwareUpgradeStatus +import com.mogo.support.obu.upgrade.OnUpgradeListener import com.zhidao.support.obu.ObuManager import com.zhidao.support.obu.OnObuListener import mogo.telematics.pad.MessagePad @@ -42,7 +48,7 @@ import kotlin.math.roundToInt * @since 2021/8/23 * @description 自研OBU 管理 */ -class MogoPrivateObuNewManager private constructor() { +class MogoPrivateObuNewManager private constructor() : OnUpgradeListener { companion object { val INSTANCE: MogoPrivateObuNewManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { MogoPrivateObuNewManager() @@ -50,9 +56,12 @@ class MogoPrivateObuNewManager private constructor() { } private var mObuStatusInfo = CallerObuConnectListenerManager.getObuStatusInfo() + private var mContext: Context? = null + var mVersionName: String? = null fun connectObu(context: Context, obuIpAddress: String, padIpAddress: String) { ObuManager.getInstance().registerObuListener(mogoObuListener) + mContext = context val com = MogoObuCom.newBuilder() .setLocalIp(padIpAddress) .setComType(MogoObuComType.UDP) @@ -82,6 +91,65 @@ class MogoPrivateObuNewManager private constructor() { ObuManager.getInstance().connect(options) } + /** + * 上传obu文件的状态, 升级成功,需要删除obu的文件和解压文件夹 + */ + override fun onUpgradeStatus(status: ObuSoftwareUpgradeStatus?, t: Throwable?) { + CallerLogger.d("$M_OBU${MogoObuConst.TAG_UPGRADE_OBU}", "onUpgradeStatus status = $status ") + //上传完成就相当于成功了,立即升级,比上电升级,只是多了一个重启 + if (status == ObuSoftwareUpgradeStatus.UPLOAD_FINISH|| status == ObuSoftwareUpgradeStatus.EXEC_UPGRADE_PROGRAM_FINISH + || status == ObuSoftwareUpgradeStatus.CONNECTION_FAILED|| status == ObuSoftwareUpgradeStatus.AUTHENTICATION_FAILED + || status == ObuSoftwareUpgradeStatus.CHANNEL_ABNORMITY|| status == ObuSoftwareUpgradeStatus.UPGRADE_PACKAGE_ERROR + || status == ObuSoftwareUpgradeStatus.UPGRADE_PACKAGE_CHECK_FAILED || status == ObuSoftwareUpgradeStatus.PACKAGE_UPLOAD_FAILED + || status == ObuSoftwareUpgradeStatus.EXEC_UPGRADE_PROGRAM_FAILED || status == ObuSoftwareUpgradeStatus.UNKNOWN) { + + deleteObuFile() + } + } + + /** + * 当前的obu版本 + */ + override fun onCurrentVersion(version: MogoObuSystemBConfigData) { + CallerLogger.d("$M_OBU${MogoObuConst.TAG_UPGRADE_OBU}", "onCurrentVersion version = ${version.version}") + if (!version.version.isNullOrEmpty()) { + mVersionName = version.version + CallerDevaToolsManager.queryObuUpgrade(version.version) + } + } + + /** + * 删除obu相关的文件夹 + */ + fun deleteObuFile(){ + UiThreadHandler.post { + var isDeleteSuccess = FileUtils.delete(Config.downLoadObuPath) + var isDeleteUnzipSuccess = FileUtils.delete(Config.downLoadUnzipObuPath) + CallerLogger.d("$M_OBU${MogoObuConst.TAG_UPGRADE_OBU}", "deleteObuFile isDeleteSuccess = $isDeleteSuccess ----isDeleteUnzipSuccess = $isDeleteUnzipSuccess") + } + } + + /** + * 监听obu + */ + fun readSystemConfig() { + ObuManager.getInstance().readSystemBConfig(mContext, MogoObuConst.OBU_DEFAULT_IP, this) + } + + /** + * 传递obu升级包给硬件 + * @param upgradePackage 升级包文件绝对路径 只能包含 升级包MD5文件和升级包文件 + * @param isUpgradeNow 是否立即升级 + * false:OBU设备下次上电时执行升级程序 + * ture: OBU设备立即执行升级程序 TODO 警告:执行立即升级时请确保车辆是静止状态。车辆在运行过程中升级设备可能会影响驾驶,严重时可能造成安全隐患!!! + * @param listener 升级回调 + * @return 是否调用成功 + */ + fun uploadObuPack(filePathArray: Array) { + CallerLogger.d("$M_OBU${MogoObuConst.TAG_UPGRADE_OBU}", " uploadObuPack filePathArray = $filePathArray") + ObuManager.getInstance().uploadUpgradePackage(MogoObuConst.OBU_DEFAULT_IP, filePathArray,true,this) + } + /** * 断开新obu */ @@ -100,6 +168,9 @@ class MogoPrivateObuNewManager private constructor() { return ObuManager.getInstance().connectStatus == MogoObuConstants.CONNECT_STATUS.CONNECTED } + /** + * 设置obu sdk日志的输出 + */ fun setObuLog(isChecked: Boolean) { ObuManager.getInstance().setEnableLog(isChecked) val builder: MogoObuLog.Builder = @@ -110,6 +181,9 @@ class MogoPrivateObuNewManager private constructor() { ObuManager.getInstance().logConfig(builder.build()) } + /** + * obu 回调监听 + */ private val mogoObuListener: OnObuListener = object : OnObuListener { /** * 连接状态的改变 @@ -154,11 +228,14 @@ class MogoPrivateObuNewManager private constructor() { if (HmiBuildConfig.isShowObuV2vView) { if (data.warningMsg != null) { // 更新数据,远车数据,之前要匹配uuid - TrafficDataConvertUtilsNew.cvxRvInfoIndInfo2TrafficData(data.vehBasicsMsg) - ?.let { - CallerMapUIServiceManager.getMarkerService() - ?.updateITrafficLocationInfo(it) - } + data.vehBasicsMsg?.let { + TrafficDataConvertUtilsNew.cvxRvInfoIndInfo2TrafficData(it) + ?.let { data -> + CallerMapUIServiceManager.getMarkerService()?.updateITrafficLocationInfo(data) + } + }.also { + CallerLogger.e("$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", "cvxRvInfoIndInfo2TrafficData 数据转换异常,请检查参数是否齐全") + } CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_NEW_OBU}", data.toString()) //预警信息,预警类型 threat_level 2、3 @@ -607,12 +684,9 @@ class MogoPrivateObuNewManager private constructor() { when (appId) { //前向碰撞预警 MogoObuConstants.V2X_WARNING_TYPE.FCW.toString() -> { - if (FunctionBuildConfig.isObuWarningFusionUnion) { + if (FunctionBuildConfig.isObuWarningFusionUnion && level == 3) { alertContent = "前车距离过近" ttsContent = "前车距离过近" - CallerObuWarningListenerManager.invokeTrackerFusionData( - ObuManager.getInstance().obuRvToTrackedObject(info) - ) } else { alertContent = EventTypeEnumNew.getWarningContent(EventTypeEnumNew.TYPE_USECASE_ID_FCW.poiType) @@ -952,7 +1026,12 @@ class MogoPrivateObuNewManager private constructor() { * 保存obu直连数据到消息盒子 */ private fun saveObuData(type: String, content: String, tts: String) { - CallerObuSaveMessageListenerManager.invokeObuSaveMessage(type, content, tts, DataSourceType.OBU) + CallerObuSaveMessageListenerManager.invokeObuSaveMessage( + type, + content, + tts, + DataSourceType.OBU + ) } /** diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/utils/TrafficDataConvertUtilsNew.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/utils/TrafficDataConvertUtilsNew.kt index d3bae2a27b..b2ce90ff41 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/utils/TrafficDataConvertUtilsNew.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/utils/TrafficDataConvertUtilsNew.kt @@ -6,9 +6,6 @@ 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.support.obu.ObuBase import com.mogo.support.obu.ObuScene -import com.mogo.support.obu.model.MogoObuRsiWarningData -import com.mogo.support.obu.model.MogoObuRsmWarningData -import com.mogo.support.obu.model.MogoObuRvWarningData /** * @description 自研obu数据转换 @@ -23,10 +20,6 @@ object TrafficDataConvertUtilsNew { * OBU 远车 转换交通元素数据,是否需要 */ fun cvxRvInfoIndInfo2TrafficData(info: ObuBase.VehicleBasics): TrafficData? { - if (info == null) { - CallerLogger.e("$M_OBU$TAG", "cvxRvInfoIndInfo2TrafficData 数据转换异常,请检查参数是否齐全") - return null - } val trafficData = TrafficData() trafficData.type = TrafficTypeEnum.TYPE_TRAFFIC_ID_TA_CHE trafficData.uuid = info.id @@ -59,7 +52,7 @@ object TrafficDataConvertUtilsNew { * OBU 预警事件 转换交通元素数据 他车预警 */ fun cvxV2vThreatIndInfo2TrafficData(info: ObuScene.RvWarningData): TrafficData? { - if (info?.vehBasicsMsg == null || info.warningMsg == null) { + if (info.vehBasicsMsg == null || info.warningMsg == null) { CallerLogger.e("$M_OBU$TAG", "数据转换异常,请检查参数是否齐全") return null } @@ -70,7 +63,7 @@ object TrafficDataConvertUtilsNew { trafficData.heading = info.vehBasicsMsg.heading trafficData.speed = info.vehBasicsMsg.speed // 判断车辆V2X预警级别,调整车辆颜色 - if (info.warningMsg.warningDataList != null) { + if (info.warningMsg.warningDataList != null && info.warningMsg.warningDataList.size > 0) { trafficData.threatLevel = info.warningMsg.warningDataList[0].warningLevel } else { trafficData.threatLevel = 1 @@ -123,7 +116,7 @@ object TrafficDataConvertUtilsNew { } // 判断车辆V2X预警级别,调整车辆颜色 - if (info.warningMsg != null && info.warningMsg.warningDataList != null) { + if (info.warningMsg != null && info.warningMsg.warningDataList != null && info.warningMsg.warningDataList.size > 0) { trafficData.threatLevel = info.warningMsg.warningDataList[0].warningLevel } else { trafficData.threatLevel = 1 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 4dbc384f01..dfdec5e541 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 @@ -158,6 +158,10 @@ class DevaToolsProvider : IDevaToolsProvider { BadCaseManager.showBadCaseConfigWindow(ctx) } + override fun showBadCaseManagerView(context: Context) { + BadCaseManager.showBadCaseManagerWindow(context) + } + override fun downLoadPackage(downloadKey: String, downloadUrl: String) { upgradeManager.downLoadPackage(mContext!!, downloadKey, downloadUrl) } @@ -239,4 +243,8 @@ class DevaToolsProvider : IDevaToolsProvider { } override fun apmEnvProvider(): IApmEnvProvider = apmEnvProvider + + override fun queryObuUpgrade(obuVersionName: String) { + bindingCarManager.queryObuUpgrade(obuVersionName) + } } \ 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/apm/ApmEnvProviderImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/apm/ApmEnvProviderImpl.kt index 1a6a181a80..146ce9adc3 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/apm/ApmEnvProviderImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/apm/ApmEnvProviderImpl.kt @@ -2,12 +2,16 @@ package com.zhjt.mogo_core_function_devatools.apm import android.os.Process import android.text.TextUtils -import android.util.* import android.widget.Toast import com.mogo.commons.debug.DebugConfig +import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_INIT_ENV_RESTART +import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_INIT +import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_CONNECT_STATUS import com.mogo.eagle.core.function.api.devatools.apm.* import com.mogo.eagle.core.utilcode.util.* import com.zhjt.mogo_core_function_devatools.apm.config.* +import com.zhjt.service.chain.ChainLog +import com.zhjt.service.chain.TracingConstants.Endpoint.Companion.PAD import kotlinx.coroutines.* import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicReference @@ -53,7 +57,6 @@ object ApmEnvProviderImpl: IApmEnvProvider, CoroutineScope { return } launch { - Log.d(TAG, "onEnvChanged[1]:[buildType: $buildType, netType:$netType, dockerVersion:$dockerVersion]") var buildTypeChanged = false if (ApmEnvConfig.getBuildType() != buildType) { buildTypeChanged = true @@ -80,10 +83,9 @@ object ApmEnvProviderImpl: IApmEnvProvider, CoroutineScope { isEnvValid = buildType == "0" || (buildType == "1" && netType == DebugConfig.NET_MODE_RELEASE.toString() && dockerVersion.endsWith("release", true)) } val appRelaunched = ApmEnvConfig.isAppRelaunched() - Log.d(TAG, "onEnvChanged[2]: buildTypeChanged: $buildTypeChanged, netTypeChanged: $netTypeChanged, dockerVersionChanged:$dockerVersionChanged], isAppLaunched:$appRelaunched") if ((!isEnvValid || (buildTypeChanged || netTypeChanged || dockerVersionChanged)) && !appRelaunched) { ApmEnvConfig.setAppRelaunched(true) - restartApp() + restartApp("buildType:$buildType,netType:$netType,dockerVersion:$dockerVersion") return@launch } if (isFirstDockerVersionSet) { @@ -108,9 +110,16 @@ object ApmEnvProviderImpl: IApmEnvProvider, CoroutineScope { } } - private fun restartApp() { + @ChainLog( + linkChainLog = CHAIN_LINK_LOG_CONNECT_STATUS, + linkCode = CHAIN_LINK_INIT, + endpoint = PAD, + nodeAliasCode = CHAIN_ALIAS_CODE_INIT_ENV_RESTART, + paramIndexes = [0], + clientPkFileName = "sn" + ) + private fun restartApp(envStr:String) { launch(Dispatchers.Main) { - Log.d(TAG, "restartApp ---") Toast.makeText(Utils.getApp(), "发现系统环境不一致,正在重启...", Toast.LENGTH_SHORT).show() delay(50) Utils.getApp().startActivity(Utils.getApp().packageManager.getLaunchIntentForPackage(Utils.getApp().packageName)) 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 62501383b7..54de5f1730 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 @@ -101,6 +101,22 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis } } + /** + * 展示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 = "BadCaseManagerView").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/BadCaseConfigView.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseConfigView.kt index 8085354c73..f0b1b833bd 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseConfigView.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseConfigView.kt @@ -20,7 +20,6 @@ import com.zhjt.mogo_core_function_devatools.badcase.biz.adapter.RecordTemplateA import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig import kotlinx.android.synthetic.main.layout_badcase_config.view.* import mogo.telematics.pad.MessagePad -import java.lang.Exception /** 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..cd2e164914 --- /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,521 @@ +package com.zhjt.mogo_core_function_devatools.badcase.biz + +import android.app.Activity +import android.content.Context +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 +import androidx.recyclerview.widget.LinearLayoutManager +import bag_manager.BagManagerOuterClass +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.SubBagEntity +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager +import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager +import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.zhidao.loglib.download.DownloadManager +import com.zhjt.mogo_core_function_devatools.R +import com.zhjt.mogo_core_function_devatools.badcase.biz.adapter.BagManagerListAdapter +import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig.bagManagerList +import com.zhjt.mogo_core_function_devatools.badcase.record.Audition +import kotlinx.android.synthetic.main.layout_badcase_manager.view.* +import java.util.* + + +/** + * @author XuXinChao + * @description BadCase录包管理页面 + * @since: 2022/12/15 + */ +class BadCaseManagerView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoAutopilotRecordListener { + + companion object { + const val TAG = "BadCaseManagerView" + } + + private var bagManagerListAdapter: BagManagerListAdapter ?= null + private var bagManagerEntity: BagManagerEntity = BagManagerEntity() + private var clickListener: ClickListener? = null + private var bagUploadDialog: BagUploadDialog ?= null + + private var spaceTotal: Long = 0 //总空间 + private var spaceUsed: Long = 0 //已用空间 + private var spaceFree: Long = 0 //可用空间 + + private var selectedBagNum = 0 //选中Bag包的数量 + private var selectedBagSize: Long = 0 //选中Bag包的大小 + + private val audioSavePath = "/mnt/sdcard/mogo/" + + private var isNameModify = false + + private val deleteDataList: ArrayList = ArrayList() + + init { + LayoutInflater.from(context).inflate(R.layout.layout_badcase_manager, this, true) + initView() + } + + private fun initView(){ + background = ColorDrawable(Color.parseColor("#F0151D41")) + clLayout.setOnClickListener { + } + //关闭BadCase管理窗口 + ivManagerClose.setOnClickListener { + clickListener?.onClose() + } + //一键全选 + 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 + selectedBagSize += selectBagInfo.totalSize + bagManagerList.add(selectBagInfo) + selectedBagNum++ + } + } + //显示选择包的个数和大小 + 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 + Log.i("sendBagManagerCmd","bagManagerEntity.keyReq="+bagManagerEntity.keyReq) + CallerAutoPilotControlManager.sendBagManagerCmd(bagManagerEntity) + + bagUploadDialog = BagUploadDialog(context) + bagUploadDialog?.setListener { //删除选择,取消上传 + bagManagerList.clear() + if (bagManagerEntity.bagsInfoResp.size > 0) { + for (cancelBagInfo in bagManagerEntity.bagsInfoResp) { + if(cancelBagInfo.itemType == 0){ + cancelBagInfo.selectStatus = false + bagManagerList.remove(cancelBagInfo) + } + } + selectedBagNum = 0 + selectedBagSize = 0 + tvSelectedBagSize.visibility = View.GONE + bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) + } + } + bagUploadDialog?.show() + bagUploadDialog?.setAllUpload(selectedBagNum,selectedBagSize) + }else{ + ToastUtils.showShort("请先选择要上传的Bag包") + } + + } + //删除Bag包 + tvDeleteSelect.setOnClickListener { + if(bagManagerList.size>0){ + bagManagerEntity.reqType = 4 + bagManagerEntity.keyReq = bagManagerList[0].key + CallerAutoPilotControlManager.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包描述信息 + isNameModify = true + bagManagerEntity.reqType = 5 + bagManagerEntity.keyReq = key + bagManagerEntity.descReq = description + CallerAutoPilotControlManager.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") + + } + + fun setOnClickListener(clickListener: ClickListener) { + this.clickListener = clickListener + } + + interface ClickListener { + fun onClose() + } + + 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,"uploadCosResp stat="+bagManager.uploadCosResp.stat) + 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){ + //遍历各个主机的硬盘空间信息 + if(bagManager.spaceInfoRespCount>0){ + spaceTotal = 0 + spaceUsed = 0 + spaceFree = 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){ + clBagHaveDataLayout.visibility = View.VISIBLE + clBagNoDataLayout.visibility = View.GONE + if(bagManager.bagsInfoRespCount>0){ + bagManagerEntity.bagsInfoResp.clear() + val originBagInfoList = ArrayList() + 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.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 == timeStr){ + containTime = true + } + } + if(!containTime || bagManagerEntity.bagsInfoResp.size ==0){ + //增加时间的 + 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 == it.key){ + containKey = true + } + } + if(!containKey){ + bagManagerEntity.bagsInfoResp.add(it) + } + } + } + } + + //更新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.uploadCosResp.key && bagManager.uploadCosResp.stat!=1){ + 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 + Log.i("sendBagManagerCmd","bagManagerEntity.keyReq="+bagManagerEntity.keyReq) + CallerAutoPilotControlManager.sendBagManagerCmd(bagManagerEntity) + } + } + } + //上传Cos执行完成 + if(bagManagerList.size == 0 && selectedBagNum != 0){ + ToastUtils.showShort("上传命令完成") + bagUploadDialog?.uploadCompleted() + tvCancelSelect.performClick() + } + + when (bagManager.uploadCosResp.stat) { + 0 -> { + ToastUtils.showShort("${bagManager.uploadCosResp.key} 上传cos桶成功") + } + 1 -> { + //执行中 + } + 2 -> { + ToastUtils.showShort("${bagManager.uploadCosResp.key} 上传cos桶执行python失败") + } + 3 -> { + ToastUtils.showShort("${bagManager.uploadCosResp.key} 上传cos桶拷贝过程失败") + } + 4 -> { + ToastUtils.showShort("${bagManager.uploadCosResp.key} 上传cos桶合并过程失败") + } + 5 -> { + ToastUtils.showShort("${bagManager.uploadCosResp.key} 上传cos桶上传过程失败") + } + else -> { + ToastUtils.showShort("${bagManager.uploadCosResp.key} 上传cos桶 ${bagManager.uploadCosResp.message}") + } + } + + } + //删除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() + bagManagerList.remove(deleteBagInfo) + //更新列表 +// bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) + } + } + //遍历列表,如当天Bag全部删除,同时把日期标题也删除更新列表 + deleteDataList.clear() + val titleIterator = bagManagerEntity.bagsInfoResp.iterator() + while(titleIterator.hasNext()){ + val titleBagInfo = titleIterator.next() + if(titleBagInfo.itemType == 1){ + val bagIterator = bagManagerEntity.bagsInfoResp.iterator() + var hasBag = false + var bagBagInfo: BagInfoEntity ?= null + while(bagIterator.hasNext()){ + bagBagInfo = bagIterator.next() + if(bagBagInfo.itemType == 0){ + bagBagInfo.timestamp.let { + if(it.contains(titleBagInfo.timestamp)){ + hasBag = true + } + } + } + } + if(!hasBag){ +// bagIterator.remove() + titleBagInfo.let { deleteDataList.add(it) } + } + } + } + + if(deleteDataList.isNotEmpty()){ + val deleteIterator = bagManagerEntity.bagsInfoResp.iterator() + while(deleteIterator.hasNext()){ + val deleteInfo = deleteIterator.next() + if(deleteDataList.contains(deleteInfo)){ + deleteIterator.remove() + } + } + } + + if(bagManagerList.size == 0){ + tvCancelSelect.performClick() + } + + if(bagManagerList.size>0){ + //继续执行删除命令 + bagManagerEntity.reqType = 4 + bagManagerEntity.keyReq = bagManagerList[0].key + CallerAutoPilotControlManager.sendBagManagerCmd(bagManagerEntity) + } + + //更新列表 + bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) + } + //修改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 + } + } + } + if(!isNameModify){ + //更新List + bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) + } + isNameModify = false + } + } + + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + CallerAutopilotRecordListenerManager.addListener(TAG, this) + bagManagerEntity.reqType = 2 + //遍历所有bag + CallerAutoPilotControlManager.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 + CallerAutoPilotControlManager.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 new file mode 100644 index 0000000000..00dd1145b0 --- /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,121 @@ +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; +import android.view.WindowManager; +import android.widget.ProgressBar; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.zhjt.mogo_core_function_devatools.R; + +import java.text.DecimalFormat; + +/** + * @author XuXinChao + * @description Bag包上传进度展示弹窗 + * @since: 2022/2/1 + */ +public class BagUploadDialog extends Dialog { + + private TextView tvCancelUpload;//取消上传 + private TextView tvCancel;//取消 + private TextView tvUploadDetail;//上传详情 + private ProgressBar viewUploadProgress;//上传进度条 + + 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); + } + + @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); + viewUploadProgress = findViewById(R.id.viewUploadProgress); + } + + private void initEvent(){ + //取消上传 + tvCancelUpload.setOnClickListener(v -> { + if(uploadListener!=null){ + uploadListener.cancelUpload(); + } + dismiss(); + }); + //取消 + tvCancel.setOnClickListener(v -> { + dismiss(); + }); + } + + @Override + public void onAttachedToWindow() { + super.onAttachedToWindow(); + } + + @Override + public void onDetachedFromWindow() { + super.onDetachedFromWindow(); + } + + public void setListener(BagUploadListener listener){ + uploadListener = listener; + } + + @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)"); + } + + @SuppressLint("SetTextI18n") + public void updateRemainUpload(int remainNum, Long remainSize){ + this.remainNum = remainNum; + this.remainSize = remainSize; + //更新进度条和进度文字 + 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); + } + + public void uploadCompleted(){ + dismiss(); + } + + 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 959f43ee8f..a3c03232d5 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 a0cd77525a..972abec769 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 1bcca50ca6..f2c675caec 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.data.map.MogoLocation import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener @@ -36,8 +39,10 @@ import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig import com.zhjt.mogo_core_function_devatools.badcase.record.RecordManager import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch +import mogo.telematics.pad.MessagePad import record_cache.RecordPanelOuterClass import java.io.File +import java.lang.StringBuilder import java.util.* @@ -77,17 +82,17 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList private lateinit var tvInitiativeCancel: TextView private var audioStatus = false - private var audioFileName: String? = null //录音文件名称 + private var audioFileName:String?=null //录音文件名称 private var uploadReason: StringBuilder = StringBuilder() //上报原因,标签 - @Volatile - private var recordKey: String? = null //录制bag包key - + private var recordKey: String?=null //录制bag包key @Volatile - private var recordFileName: String? = null //录制文件包名 - private var longitude: Double? = null - private var latitude: Double? = null + private var recordFileName: String?=null //录制文件包名 + private var longitude: Double?=null + private var latitude: Double?=null + + private var bagManagerEntity: BagManagerEntity = BagManagerEntity() private var mInViewX = 0f private var mInViewY = 0f @@ -107,9 +112,8 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList } @SuppressLint("SetTextI18n") - private fun initFloatWindow() { - mFloatLayout = - LayoutInflater.from(mActivity).inflate(R.layout.view_initiative_bad_case, null) as View + private fun initFloatWindow(){ + mFloatLayout = LayoutInflater.from(mActivity).inflate(R.layout.view_initiative_bad_case, null) as View mFloatLayout.setOnTouchListener(this) tvInitiativeNum = mFloatLayout.findViewById(R.id.tvInitiativeNum) @@ -128,17 +132,16 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList tvInitiativeReport = mFloatLayout.findViewById(R.id.tvInitiativeReport) tvInitiativeCancel = mFloatLayout.findViewById(R.id.tvInitiativeCancel) - if (BadCaseConfig.windowNum < 1) { + if(BadCaseConfig.windowNum<1){ BadCaseConfig.windowNum = 1 } tvInitiativeNum.text = BadCaseConfig.windowNum.toString() BadCaseConfig.windowNum++ - tvInitiativeTime.text = - "时间:${millis2String(System.currentTimeMillis(), TimeUtils.getHourMinSecondFormat())}" + tvInitiativeTime.text = "时间:${millis2String(System.currentTimeMillis(),TimeUtils.getHourMinSecondFormat())}" tvInitiativeIdentity.text = "身份:${BadCaseConfig.identity}" //采集结果回调监听 - CallerAutopilotRecordListenerManager.addListener(this.hashCode().toString(), this) + CallerAutopilotRecordListenerManager.addListener(this.hashCode().toString(),this) // 添加 ADAS车辆状态&定位 监听 CallerChassisLocationWGS84ListenerManager.addListener(this.hashCode().toString(), this) viewAudioButton.setOnClickListener { @@ -147,37 +150,37 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList } tvInitiativeReport.setOnClickListener { - if (!rbOne.isChecked && !rbTwo.isChecked && !rbThree.isChecked && - !rbFour.isChecked && !rbFive.isChecked && !rbSix.isChecked - ) { + if(!rbOne.isChecked && !rbTwo.isChecked && !rbThree.isChecked && + !rbFour.isChecked && !rbFive.isChecked && !rbSix.isChecked){ TipToast.shortTip("请选择至少一个Case") return@setOnClickListener } - if (rbOne.isChecked) { + uploadReason.clear() + if(rbOne.isChecked){ uploadReason.append("严重画龙 ") } - if (rbTwo.isChecked) { + if(rbTwo.isChecked){ uploadReason.append("速度过慢 ") } - if (rbThree.isChecked) { + if(rbThree.isChecked){ uploadReason.append("感知、定位、地图等其他 ") } - if (rbFour.isChecked) { + if(rbFour.isChecked){ uploadReason.append("速度过快 ") } - if (rbFive.isChecked) { + if(rbFive.isChecked){ uploadReason.append("存在碰撞风险 ") } - if (rbSix.isChecked) { + if(rbSix.isChecked){ uploadReason.append("点刹、顿挫") } - if (audioStatus) { + if(audioStatus){ audioStatus = !audioStatus setAudio(audioStatus) Handler().postDelayed({ - uploadAudio() - }, 1000) - } else { + uploadAudio() + },1000) + }else{ uploadAudio() } } @@ -200,10 +203,10 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList } } - var countDownTimer: CountDownTimer? = null + var countDownTimer: CountDownTimer?=null - private fun setAudio(status: Boolean) { - if (status) { + private fun setAudio(status: Boolean){ + if(status){ //开始录音 audioFileName = "Audio_${System.currentTimeMillis()}_BadCase" RecordManager.getInstance().start(audioFileName) @@ -211,11 +214,11 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList viewAudioButton.setImageResource(R.drawable.icon_bad_case_audio_select) tvAudioCountDown.visibility = View.VISIBLE //开始倒计时 - if (countDownTimer == null) { + if(countDownTimer==null){ countDownTimer = object : CountDownTimer(60000, 1000) { override fun onTick(millisUntilFinished: Long) { - tvAudioCountDown.text = "${millisUntilFinished / 1000}S" + tvAudioCountDown.text = "${millisUntilFinished/1000}S" } override fun onFinish() { @@ -228,7 +231,7 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList } countDownTimer?.start() } - } else { + }else{ //结束倒计时 countDownTimer?.cancel() countDownTimer?.onFinish() @@ -238,13 +241,11 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList } - private fun uploadAudio() { + private fun uploadAudio(){ val singlePath = "/mnt/sdcard/mogo/DataCollection/${audioFileName}.wav" val file = File(singlePath) - if (file.exists()) { - LogInfoManagerFactory.createAudioUpload(mActivity.applicationContext, - "Audio", - singlePath, + if(file.exists()){ + LogInfoManagerFactory.createAudioUpload(mActivity.applicationContext,"Audio",singlePath, object : OnUploadListener { override fun onUploadSuccess(filePath: String, downloadUrl: String) { CallerLogger.d("$M_DEVA$TAG", "语音文件上传成功:downloadUrl=$downloadUrl") @@ -260,7 +261,7 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList removeUploadListener(singlePath) } }) - } else { + }else{ //上传到服务器 upload(null) } @@ -270,7 +271,7 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList * 将语音文件上传Cos监听移除 * @param filePath 文件路径 */ - private fun removeUploadListener(filePath: String) { + private fun removeUploadListener(filePath: String){ val pkgInfo: List = filePath.substring( filePath.lastIndexOf("/") + 1, filePath.lastIndexOf(".") @@ -283,21 +284,21 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList * 将记录上传到服务器 * @param downloadUrl 语音文件下载地址 */ - private fun upload(downloadUrl: String?) { - GlobalScope.launch { + private fun upload(downloadUrl: String?){ + GlobalScope.launch{ val uploadResult = presenter.upload(mutableMapOf().also { itx -> - itx["carLicense"] = AppConfigInfo.plateNumber ?: "" //车牌号 - itx["filename"] = recordFileName ?: "" //bag包文件地址 + itx["carLicense"] = AppConfigInfo.plateNumber?:"" //车牌号 + itx["filename"] = recordFileName?:"" //bag包文件地址 itx["filesize"] = "0" //bag包文件大小 - itx["key"] = recordKey ?: "" //key - itx["reason"] = uploadReason.toString() ?: "" //采集原因 + itx["key"] = recordKey?:"" //key + itx["reason"] = uploadReason.toString() //采集原因 itx["duration"] = BadCaseConfig.totalDuration.toString() //采集时长,固定为20S itx["startTime"] = System.currentTimeMillis().toString() //上报时间(时间戳格式) itx["channel"] = "1" //渠道 itx["carSn"] = MoGoAiCloudClientConfig.getInstance().sn //SN itx["userRole"] = BadCaseConfig.identity //采集者角色 - itx["audioUrl"] = downloadUrl ?: "" //音频COS地址 - itx["mapVersion"] = BadCaseConfig.dockerVersion ?: "" //工控机版本 + itx["audioUrl"] = downloadUrl?:"" //音频COS地址 + itx["mapVersion"] = BadCaseConfig.dockerVersion ?:"" //工控机版本 itx["eyeVersion"] = AppUtils.getAppVersionName() //鹰眼版本 itx["coordinate"] = "latitude:${latitude};longitude:${longitude}" //坐标 @@ -306,6 +307,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 + CallerAutoPilotControlManager.sendBagManagerCmd(bagManagerEntity) + } BadCaseConfig.windowNum-- clickListener?.closeWindow() } @@ -346,19 +356,28 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList mWindowParams!!.y = metrics.heightPixels - BarUtils.getStatusBarHeight()-950 mWindowManager!!.addView(mFloatLayout, mWindowParams) //开启录包 - if (recordCaseEntity != null) { - CallerAutoPilotControlManager.recordPackage( - recordCaseEntity.caseId, - Random(SystemClock.elapsedRealtime()).nextInt(), - BadCaseConfig.totalDuration, - BadCaseConfig.previousDuration, - recordCaseEntity.topicList - ) - } else { - CallerAutoPilotControlManager.recordPackage( - BadCaseConfig.type, Random(SystemClock.elapsedRealtime()).nextInt(), - BadCaseConfig.totalDuration, BadCaseConfig.previousDuration - ) + if(recordCaseEntity!=null){ + CallerAutoPilotControlManager.recordPackage(recordCaseEntity.caseId,Random(SystemClock.elapsedRealtime()).nextInt(), + BadCaseConfig.totalDuration, BadCaseConfig.previousDuration,recordCaseEntity.topicList) + }else{ + CallerAutoPilotControlManager.recordPackage(BadCaseConfig.type,Random(SystemClock.elapsedRealtime()).nextInt(), + BadCaseConfig.totalDuration, BadCaseConfig.previousDuration) + } + } + } + + 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 } } } @@ -373,13 +392,12 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList override fun onAutopilotRecordResult(recordPanel: RecordPanelOuterClass.RecordPanel) { CallerLogger.d("${M_DEVA}${TAG}", "-- 收到工控机录制任务回调 -- $recordPanel") - ThreadUtils.runOnUiThread { - if (recordKey == null) { + if(recordKey==null){ recordKey = recordPanel.key.toString() BadCaseConfig.recordKeyList.add(recordPanel.key) } - if (recordFileName == null) { + if(recordFileName==null){ recordFileName = recordPanel.filename } } 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 3459ecf586..bf0429ecf6 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 @@ -6,6 +6,8 @@ import android.graphics.Color import android.graphics.PixelFormat import android.os.CountDownTimer import android.os.Handler +import android.os.Parcel +import android.os.Parcelable import android.util.DisplayMetrics import android.view.* import android.widget.CheckBox @@ -15,10 +17,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.map.MogoLocation import com.mogo.eagle.core.data.msgbox.MsgBoxBean import com.mogo.eagle.core.data.msgbox.RecordBagMsg import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationWGS84Listener +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger @@ -28,12 +33,13 @@ import com.mogo.eagle.core.utilcode.util.* import com.mogo.eagle.core.utilcode.util.TimeUtils.millis2String import com.zhidao.loglib.call.LogInfoManagerFactory import com.zhidao.loglib.upload.OnUploadListener -import com.zhidao.loglib.upload.UploadManager import com.zhjt.mogo_core_function_devatools.R import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig import com.zhjt.mogo_core_function_devatools.badcase.record.RecordManager import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch +import mogo.telematics.pad.MessagePad +import com.zhidao.loglib.upload.UploadManager import me.jessyan.autosize.utils.AutoSizeUtils import org.greenrobot.eventbus.EventBus import java.io.File @@ -56,14 +62,16 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene private lateinit var mFloatLayout: View private var audioStatus = false - private var audioFileName: String? = null //录音文件名称 + 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 //录制文件包名 - private var boxBean: MsgBoxBean? = null - private var longitude: Double? = null - private var latitude: Double? = null + private var recordKey: String?=null //录制bag包key + private var recordFileName: String?=null //录制文件包名 + private var boxBean: MsgBoxBean ?= null + private var longitude: Double?=null + private var latitude: Double?=null private var mInViewX = 0f private var mInViewY = 0f @@ -73,7 +81,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene private var mInScreenY = 0f private var clickListener: ClickListener? = null - var countDownTimer: CountDownTimer? = null + var countDownTimer: CountDownTimer?=null private lateinit var tvPassiveNum: TextView private lateinit var tvPassiveTime: TextView @@ -96,9 +104,8 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene } @SuppressLint("SetTextI18n") - private fun initFloatWindow() { - mFloatLayout = - LayoutInflater.from(mActivity).inflate(R.layout.view_passive_bad_case, null) as View + private fun initFloatWindow(){ + mFloatLayout = LayoutInflater.from(mActivity).inflate(R.layout.view_passive_bad_case, null) as View mFloatLayout.setOnTouchListener(this) tvPassiveNum = mFloatLayout.findViewById(R.id.tvPassiveNum) tvPassiveTime = mFloatLayout.findViewById(R.id.tvPassiveTime) @@ -108,13 +115,12 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene tvPassiveReport = mFloatLayout.findViewById(R.id.tvPassiveReport) tvPassiveCancel = mFloatLayout.findViewById(R.id.tvPassiveCancel) flReasonLayout = mFloatLayout.findViewById(R.id.flReasonLayout) - if (BadCaseConfig.windowNum < 1) { + if(BadCaseConfig.windowNum<1){ BadCaseConfig.windowNum = 1 } tvPassiveNum.text = BadCaseConfig.windowNum.toString() BadCaseConfig.windowNum++ - tvPassiveTime.text = - "时间:${millis2String(System.currentTimeMillis(), TimeUtils.getHourMinSecondFormat())}" + tvPassiveTime.text = "时间:${millis2String(System.currentTimeMillis(),TimeUtils.getHourMinSecondFormat())}" tvPassiveIdentity.text = "身份:${BadCaseConfig.identity}" // 添加 ADAS车辆状态&定位 监听 CallerChassisLocationWGS84ListenerManager.addListener(TAG, this) @@ -124,17 +130,17 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene } tvPassiveReport.setOnClickListener { - if (uploadReason.isEmpty()) { + if(uploadReason.isEmpty()){ TipToast.shortTip("请选择至少一个Case") return@setOnClickListener } - if (audioStatus) { + if(audioStatus){ audioStatus = !audioStatus setAudio(audioStatus) Handler().postDelayed({ uploadAudio() - }, 1000) - } else { + },1000) + }else{ uploadAudio() } //删除记录 @@ -162,8 +168,8 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene } } - private fun setAudio(status: Boolean) { - if (status) { + private fun setAudio(status: Boolean){ + if(status){ //开始录音 audioFileName = "Audio_${System.currentTimeMillis()}_BadCase" RecordManager.getInstance().start(audioFileName) @@ -171,11 +177,11 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene viewAudioButton.setImageResource(R.drawable.icon_bad_case_audio_select) tvAudioCountDown.visibility = View.VISIBLE //开始倒计时 - if (countDownTimer == null) { + if(countDownTimer==null){ countDownTimer = object : CountDownTimer(60000, 1000) { override fun onTick(millisUntilFinished: Long) { - tvAudioCountDown.text = "${millisUntilFinished / 1000}S" + tvAudioCountDown.text = "${millisUntilFinished/1000}S" } override fun onFinish() { @@ -188,7 +194,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene } countDownTimer?.start() } - } else { + }else{ //结束倒计时 countDownTimer?.cancel() countDownTimer?.onFinish() @@ -198,13 +204,11 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene } - private fun uploadAudio() { + private fun uploadAudio(){ val singlePath = "/mnt/sdcard/mogo/DataCollection/${audioFileName}.wav" val file = File(singlePath) - if (file.exists()) { - LogInfoManagerFactory.createAudioUpload(mActivity.applicationContext, - "Audio", - singlePath, + if(file.exists()){ + LogInfoManagerFactory.createAudioUpload(mActivity.applicationContext,"Audio",singlePath, object : OnUploadListener { override fun onUploadSuccess(filePath: String, downloadUrl: String) { CallerLogger.d("$M_DEVA$TAG", "语音文件上传成功:downloadUrl=$downloadUrl") @@ -220,7 +224,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene removeUploadListener(singlePath) } }) - } else { + }else{ //上传到服务器 upload(null) } @@ -230,7 +234,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene * 将语音文件上传Cos监听移除 * @param filePath 文件路径 */ - private fun removeUploadListener(filePath: String) { + private fun removeUploadListener(filePath: String){ val pkgInfo: List = filePath.substring( filePath.lastIndexOf("/") + 1, filePath.lastIndexOf(".") @@ -243,21 +247,21 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene * 将记录上传到服务器 * @param downloadUrl 语音文件下载地址 */ - private fun upload(downloadUrl: String?) { - GlobalScope.launch { + private fun upload(downloadUrl: String?){ + GlobalScope.launch{ val uploadResult = presenter.upload(mutableMapOf().also { itx -> - itx["carLicense"] = AppConfigInfo.plateNumber ?: "" //车牌号 - itx["filename"] = recordFileName ?: "" //bag包文件地址 + itx["carLicense"] = AppConfigInfo.plateNumber?:"" //车牌号 + itx["filename"] = recordFileName?:"" //bag包文件地址 itx["filesize"] = "0" //bag包文件大小 - itx["key"] = recordKey ?: "" //key + itx["key"] = recordKey?:"" //key itx["reason"] = uploadReason //采集原因 itx["duration"] = BadCaseConfig.totalDuration.toString() //采集时长,固定为20S itx["startTime"] = System.currentTimeMillis().toString() //上报时间(时间戳格式) itx["channel"] = "0" //渠道 itx["carSn"] = MoGoAiCloudClientConfig.getInstance().sn //SN itx["userRole"] = BadCaseConfig.identity //采集者角色 - itx["audioUrl"] = downloadUrl ?: "" //音频COS地址 - itx["mapVersion"] = BadCaseConfig.dockerVersion ?: "" //工控机版本 + itx["audioUrl"] = downloadUrl?:"" //音频COS地址 + itx["mapVersion"] = BadCaseConfig.dockerVersion ?:"" //工控机版本 itx["eyeVersion"] = AppUtils.getAppVersionName() //鹰眼版本 itx["coordinate"] = "latitude:${latitude};longitude:${longitude}" //坐标 @@ -266,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 + CallerAutoPilotControlManager.sendBagManagerCmd(bagManagerEntity) + } BadCaseConfig.windowNum-- clickListener?.closeWindow() } @@ -309,33 +322,28 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene // 默认固定位置,靠屏幕右边缘的中间 mWindowManager!!.defaultDisplay.getMetrics(metrics) mWindowParams!!.x = metrics.widthPixels - mWindowParams!!.y = metrics.heightPixels - BarUtils.getStatusBarHeight() - 950 + mWindowParams!!.y = metrics.heightPixels - BarUtils.getStatusBarHeight()-950 mWindowManager!!.addView(mFloatLayout, mWindowParams) } - GlobalScope.launch { + GlobalScope.launch{ presenter.loadBadCases(true).also { ThreadUtils.runOnUiThread { it.iterator().forEach { val checkBox = CheckBox(mActivity) checkBox.setTextColor(Color.WHITE) - val lp = FlexboxLayout.LayoutParams( - FlexboxLayout.LayoutParams.WRAP_CONTENT, - FlexboxLayout.LayoutParams.WRAP_CONTENT - ) - checkBox.buttonDrawable = - mActivity.resources.getDrawable(R.drawable.badcase_radio_button_style) - checkBox.setPadding( + val lp = FlexboxLayout.LayoutParams(FlexboxLayout.LayoutParams.WRAP_CONTENT, + FlexboxLayout.LayoutParams.WRAP_CONTENT) + checkBox.buttonDrawable = mActivity.resources.getDrawable(R.drawable.badcase_radio_button_style) + checkBox.setPadding(SizeUtils.dp2px(10f), SizeUtils.dp2px(10f), SizeUtils.dp2px(10f), - SizeUtils.dp2px(10f), - SizeUtils.dp2px(10f) - ) - checkBox.textSize = AutoSizeUtils.dp2px(mActivity, 18f).toFloat() + SizeUtils.dp2px(10f)) + checkBox.textSize = AutoSizeUtils.dp2px(mActivity,18f).toFloat() checkBox.text = it.reason checkBox.isChecked = it.isChecked checkBox.setOnCheckedChangeListener(this@PassiveBadCaseWindow) - flReasonLayout.addView(checkBox, lp) + flReasonLayout.addView(checkBox,lp) } } } @@ -345,13 +353,13 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene override fun onCheckedChanged(buttonView: CompoundButton?, isChecked: Boolean) { buttonView?.text?.let { - if (isChecked) { - if (!uploadReason.contains(it)) { + if(isChecked){ + if(!uploadReason.contains(it)){ uploadReason += it } - } else { - if (uploadReason.contains(it)) { - uploadReason = uploadReason.replace(it.toString(), "") + }else{ + if(uploadReason.contains(it)){ + uploadReason = uploadReason.replace(it.toString(),"") } } @@ -365,7 +373,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene if (mFloatLayout.parent != null) mWindowManager!!.removeView(mFloatLayout) } - fun setRecord(msgBoxBean: MsgBoxBean) { + fun setRecord(msgBoxBean: MsgBoxBean){ boxBean = msgBoxBean val recordBagMsg = (msgBoxBean.bean as RecordBagMsg) recordKey = recordBagMsg.key.toString() 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..036f2cb2b0 --- /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,87 @@ +package com.zhjt.mogo_core_function_devatools.badcase.biz; + +import android.app.Activity; +import android.app.Dialog; +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;//取消 + private Activity mActivity; + + private ClickListener clickListener; + + public SpaceWarningDialog(@NonNull Activity activity) { + super(activity, R.style.bad_case_dialog); + mActivity = activity; + } + + @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 -> { + //跳转录包管理页面 +// if(mActivity!=null){ +// CallerDevaToolsManager.INSTANCE.showBadCaseManagerView(mActivity); +// } + if(clickListener!=null){ + clickListener.showBadCaseManagerView(); + } + dismiss(); + }); + //取消 + tvCancel.setOnClickListener(v -> { + //取消弹窗 + dismiss(); + }); + } + + public void setClickListener(ClickListener clickListener){ + this.clickListener = clickListener; + } + + @Override + public void onAttachedToWindow() { + super.onAttachedToWindow(); + } + + @Override + public void onDetachedFromWindow() { + super.onDetachedFromWindow(); + } + + public interface ClickListener{ + void showBadCaseManagerView(); + } + +} 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..d3c8abc803 --- /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,175 @@ +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 +import android.widget.CheckBox +import android.widget.EditText +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.mogo.eagle.core.data.badcase.BagDescriptionEntity +import com.mogo.eagle.core.data.badcase.BagInfoEntity +import com.zhjt.mogo_core_function_devatools.R +import java.text.DecimalFormat + +/** + * @author XuXinChao + * @description Bag包管理列表适配器 + * @since: 2022/12/19 + */ +class BagManagerListAdapter: RecyclerView.Adapter() { + + private var data:List ?= null + private var bagClickListener: BagClickListener ?= null + private val format = DecimalFormat("0.00") + + fun setData(data: List?){ + this.data = data + notifyDataSetChanged() + } + + 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: 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) + } + + val textWatcher: TextWatcher = object : TextWatcher { + override fun beforeTextChanged( + charSequence: CharSequence, + i: Int, + i1: Int, + i2: Int + ) { + } + + override fun onTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {} + override fun afterTextChanged(editable: Editable) { + bagInfoEntity.description?.let { desc-> + 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){ + //已上报 + 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 + } + //大小 + 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}" + } + } + } + } + } + + 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) + 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) + } + + fun setListener(listener: BagClickListener){ + bagClickListener = listener + } + + interface BagClickListener{ + //选择Bag包 + fun onClick(bagInfoEntity: BagInfoEntity,isChecked: Boolean) + //上报BI平台 + fun uploadBI(bagInfoEntity: BagInfoEntity) + //编辑Bag包描述信息 + fun editDescription(key: Long,description: BagDescriptionEntity) + //听录音 + fun bagAudio(key: Long,audioUrl: String) + } + +} \ 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/consts/BadCaseConfig.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/consts/BadCaseConfig.kt index 44c7041d9a..f7c6fcd06f 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/consts/BadCaseConfig.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/consts/BadCaseConfig.kt @@ -1,5 +1,7 @@ package com.zhjt.mogo_core_function_devatools.badcase.consts +import com.mogo.eagle.core.data.badcase.BagInfoEntity + /** * @author XuXinChao * @description 录包配置参数 @@ -32,5 +34,8 @@ object BadCaseConfig { //自定义Topic清单列表 @JvmField var customTopicList: ArrayList = 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/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/java/com/zhjt/mogo_core_function_devatools/binding/BindingCarManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/binding/BindingCarManager.kt index 2e08b89f0a..a1cbd52ce6 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/binding/BindingCarManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/binding/BindingCarManager.kt @@ -9,11 +9,14 @@ import com.mogo.eagle.core.data.app.AppConfigInfo.role import com.mogo.eagle.core.data.bindingcar.ModifyBindingcarInfo import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.config.HmiBuildConfig +import com.mogo.eagle.core.data.obu.MogoObuConst import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotCarConfigListener import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotCarConfigListenerManager +import com.mogo.eagle.core.function.call.obu.CallerObuApiManager import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils.isDriver import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils.isPassenger 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.logger.scene.SceneConstant.Companion.M_DEVA import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr import com.zhjt.mogo_core_function_devatools.upgrade.IPCUpgradeManager.Companion.ipcUpgradeManager @@ -59,9 +62,6 @@ class BindingCarManager : IMoGoAutopilotCarConfigListener { if (carConfigResp != null && !TextUtils.isEmpty(carConfigResp.macAddress)) { Log.d("Upgrade", "MoGoHandAdasMsgManager address = " + carConfigResp.macAddress) getBindingCarInfo(carConfigResp.macAddress, MoGoAiCloudClientConfig.getInstance().sn) - - //obu的升级,只需要司机屏连接 - queryObuUpgrade(carConfigResp.macAddress) } } @@ -164,14 +164,18 @@ class BindingCarManager : IMoGoAutopilotCarConfigListener { fun queryAppUpgrade() { UpgradeAppNetWorkManager.getInstance() .getAppUpgradeInfo(mContext, mAddress, role.toString() + "") + } /** * 司机屏 处理obu升级即可,乘客屏不需要处理 - * + * obu的升级,只需要司机屏连接 */ - private fun queryObuUpgrade(macAddress: String) { - ObuUpgradeAppNetWorkManager.getInstance().getObuUpgradeInfo(mContext, macAddress) + fun queryObuUpgrade(obuVersionName: String) { + if (screenType == 1) { + CallerLogger.d("${SceneConstant.M_OBU}${MogoObuConst.TAG_UPGRADE_OBU}","queryObuUpgrade isConnected = ${CallerObuApiManager.isConnected()} --- mAddress = $mAddress") + ObuUpgradeAppNetWorkManager.getInstance().getObuUpgradeInfo(mContext, mAddress, obuVersionName) + } } } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/binding/BindingCarNetWorkManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/binding/BindingCarNetWorkManager.kt index 9daa99f962..36443407ea 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/binding/BindingCarNetWorkManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/binding/BindingCarNetWorkManager.kt @@ -56,8 +56,6 @@ class BindingCarNetWorkManager private constructor() { widevineIDWithMd5: String?, screenType: Int ) { -// String macAddress1 = "48:b0:2d:4d:33:40"; -// String sn = "X2020220417KA94QIN"; val request = BindingCarRequest( macAddress, widevineIDWithMd5, @@ -152,29 +150,39 @@ class BindingCarNetWorkManager private constructor() { } private fun updateCarVrIconRes(brandId: String?) { + d(SceneConstant.M_BINDING + TAG, "CarModelChange : ${DebugConfig.isCarModelChange()}") if(!DebugConfig.isCarModelChange()){ return } if (brandId == null || brandId.isEmpty()) { return } + d(SceneConstant.M_BINDING + TAG, "getDefaultId() : ${getDefaultId()} ---- brandId = $brandId") if (getDefaultId() == brandId) { return } d(SceneConstant.M_BINDING + TAG, "updateCarVrIconRes : $brandId") when (brandId) { - "1" -> { + "1" -> { //东风 CallerMapUIServiceManager.getMapUIController()?.changeCurrentIcon(R.raw.chuzuche) HdMapBuildConfig.currentCarVrIconRes = R.raw.chuzuche } - "2" -> { + "2" -> { //红旗 CallerMapUIServiceManager.getMapUIController()?.changeCurrentIcon(R.raw.hq_h9) HdMapBuildConfig.currentCarVrIconRes = R.raw.hq_h9 } - "3" -> { + "3" -> { //金旅 CallerMapUIServiceManager.getMapUIController()?.changeCurrentIcon(R.raw.xiaobache) HdMapBuildConfig.currentCarVrIconRes = R.raw.xiaobache } + "4" -> { //开沃 + CallerMapUIServiceManager.getMapUIController()?.changeCurrentIcon(R.raw.xiaobache) + HdMapBuildConfig.currentCarVrIconRes = R.raw.xiaobache + } + "5" -> { //福田 + CallerMapUIServiceManager.getMapUIController()?.changeCurrentIcon(R.raw.huanwei) + HdMapBuildConfig.currentCarVrIconRes = R.raw.huanwei + } else -> { CallerMapUIServiceManager.getMapUIController()?.changeCurrentIcon(R.raw.chuzuche) HdMapBuildConfig.currentCarVrIconRes = R.raw.chuzuche @@ -186,6 +194,8 @@ class BindingCarNetWorkManager private constructor() { return when (HdMapBuildConfig.currentCarVrIconRes) { R.raw.chuzuche -> "1" R.raw.xiaobache -> "3" + R.raw.xiaobache -> "4" + R.raw.huanwei -> "5" else -> "1" } } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/scene/SceneManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/scene/SceneManager.kt index 9b2d4ec691..b554611acd 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/scene/SceneManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/scene/SceneManager.kt @@ -66,7 +66,7 @@ class SceneManager { sceneModuleTAG.map[TAXI] = SceneModule(true, M_TAXI) sceneModuleTAG.map[TAXI_P] = SceneModule(true, M_TAXI_P) sceneModuleTAG.map[SWEEPER] = SceneModule(true, M_SWEEPER) - sceneModuleTAG.map[OTHER] = SceneModule(false, M_OTHER) + sceneModuleTAG.map[OTHER] = SceneModule(true, M_OTHER) sceneLogTAG.map[TAXI] = SceneTAG(false) sceneLogTAG.map[BUS] = SceneTAG(false) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/ObuUpgradeAppNetWorkManager.java b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/ObuUpgradeAppNetWorkManager.java index cf5a8832bd..08169d44e9 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/ObuUpgradeAppNetWorkManager.java +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/ObuUpgradeAppNetWorkManager.java @@ -3,17 +3,17 @@ package com.zhjt.mogo_core_function_devatools.upgrade; import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BINDING; import android.content.Context; +import android.util.Log; import com.mogo.cloud.passport.MoGoAiCloudClientConfig; import com.mogo.commons.constants.HostConst; import com.mogo.eagle.core.data.bindingcar.UpgradeAppInfo; +import com.mogo.eagle.core.data.obu.MogoObuConst; import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager; -import com.mogo.eagle.core.function.call.hmi.CallerHmiManager; import com.mogo.eagle.core.network.MoGoRetrofitFactory; import com.mogo.eagle.core.network.utils.GsonUtil; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.AppUtils; - import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.annotations.NonNull; @@ -50,15 +50,15 @@ public class ObuUpgradeAppNetWorkManager { /** * 获取obu升级信息,obu升级服务端使用app升级接口,根据screenType区分类型 - * mac :工控机mac地址 + * mac :工控机mac地址, * screenType : 类型 */ - public void getObuUpgradeInfo(Context context, String mac) { + public void getObuUpgradeInfo(Context context, String mac, String versionName) { // String sn = "X20202203105S688HZ"; -// String mac = "48:b0:2d:3a:bc:78"; +// String mac1 = "48:b0:2d:4d:33:40"; + String sn = MoGoAiCloudClientConfig.getInstance().getSn(); - String obuVersionName = String.valueOf(AppUtils.getAppVersionCode()); // TODO 获取obu的版本号, string和int 服务端处理 - CallerLogger.INSTANCE.d(M_BINDING + TAG, "getObuUpgradeInfo mac = " + mac + "---sn = " + sn + "---obuVersionName =" + obuVersionName); + CallerLogger.INSTANCE.d(M_BINDING + TAG, "getObuUpgradeInfo mac = " + mac + " ---sn = " + sn + " ---versionName = " + versionName); UpgradeAppRequest request = new UpgradeAppRequest(sn, mac, "7"); RequestBody requestBody = RequestBody.create(MediaType.get("application/json;charset=UTF-8"), GsonUtil.jsonFromObject(request)); mUpgradeApiService.getUpgradeInfo(requestBody) @@ -72,10 +72,9 @@ public class ObuUpgradeAppNetWorkManager { @Override public void onNext(@NonNull UpgradeAppInfo info) { if (info != null && info.result != null) { - CallerLogger.INSTANCE.d(M_BINDING + TAG, "getObuUpgradeInfo url = " + info.result.getAppUrl() + "----name = " + info.result.getVersionName() + "--obuVersionName =" + obuVersionName + "--info.result = " + info.result); - if (!String.valueOf(info.result.getVersionName()).equals(obuVersionName)) { - //下载 TAG和文件名 TODO - CallerDevaToolsManager.INSTANCE.downLoadPackage("OBU", info.result.getAppUrl()); + CallerLogger.INSTANCE.d(M_BINDING + TAG, "getObuUpgradeInfo appFileName = " + info.result.getAppFileName() + " ----url = " + info.result.getAppUrl() + " ----name = " + info.result.getVersionName() + " --obuVersionName =" + versionName + " ---info.result = " + info.result); + if (!String.valueOf(info.result.getVersionName()).equals(versionName)) { //判断是否下载,当文件名称不一致的时候,就下载 + CallerDevaToolsManager.INSTANCE.downLoadPackage(info.result.getAppFileName(), info.result.getAppUrl()); } } else { CallerLogger.INSTANCE.d(M_BINDING + TAG, "getObuUpgradeInfo onNext info == null"); @@ -84,7 +83,7 @@ public class ObuUpgradeAppNetWorkManager { @Override public void onError(Throwable e) { - + CallerLogger.INSTANCE.e(M_BINDING + TAG, "getObuUpgradeInfo e = " + e); } @Override diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeManager.kt index 3fdbdce9b6..e0acfc917a 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeManager.kt @@ -4,14 +4,17 @@ import android.app.NotificationManager import android.content.Context import androidx.core.app.NotificationCompat import com.elegant.utils.UiThreadHandler +import com.mogo.eagle.core.data.obu.MogoObuConst import com.mogo.eagle.core.function.api.devatools.IMogoDevaToolsUpgradeListener import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsUpgradeListenerManager import com.mogo.eagle.core.function.call.hmi.CallerHmiManager.updateStatusBarDownloadView +import com.mogo.eagle.core.function.call.obu.CallerObuApiManager import com.mogo.eagle.core.utilcode.breakpoint.Config import com.mogo.eagle.core.utilcode.breakpoint.bean.ThreadBean import com.mogo.eagle.core.utilcode.breakpoint.callback.IDownload import com.mogo.eagle.core.utilcode.breakpoint.utils.DownloadUtils 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.logger.scene.SceneConstant.Companion.M_DEVA import com.mogo.eagle.core.utilcode.util.AppUtils import com.mogo.eagle.core.utilcode.util.ZipUtils @@ -29,12 +32,18 @@ class UpgradeManager : IDownload { } private var map: Map? = null + private var mDownloadFileName: String? = null fun downLoadPackage(context: Context, downloadKey: String,downloadUrl: String) { + CallerLogger.d("${SceneConstant.M_OBU}${MogoObuConst.TAG_UPGRADE_OBU}", "UpgradeManager downLoadPackage = " + downloadUrl?.contains(".zip") + "----downloadKey = $downloadKey ---downloadUrl = $downloadUrl") + if (downloadUrl?.contains(".zip")) { + mDownloadFileName = downloadKey + } + DownloadUtils.downLoad( context, downloadUrl, - Config.downLoadPath, + if (downloadUrl?.contains(".zip")) Config.downLoadObuPath else Config.downLoadPath, downloadKey, 5, this @@ -81,7 +90,7 @@ class UpgradeManager : IDownload { } override fun onFinished(downloadUrl: String?, threadBean: ThreadBean?) { - if (downloadUrl != null) { + if (downloadUrl != null) { //TODO 需要判断是否是apk文件 AppUtils.installApp(Config.downLoadPath + downloadUrl.substring(downloadUrl.lastIndexOf("/") + 1)) } if (downloadUrl != null) { @@ -119,7 +128,7 @@ class UpgradeManager : IDownload { } /** - * 鹰眼app下载监听 + * 鹰眼app下载监听 liyz */ fun updateUpgradeProgress(context: Context) { val builder = NotificationCompat.Builder(context) @@ -148,7 +157,8 @@ class UpgradeManager : IDownload { }, 1000) } - override fun onError(url: String?, errorMsg: String?) {} + override fun onError(url: String?, errorMsg: String?) { + } }) } @@ -162,23 +172,37 @@ class UpgradeManager : IDownload { override fun onStart(url: String?) {} override fun onPause(url: String?) {} override fun onProgress(url: String?, length: Int) { - } override fun onFinished(url: String?) { - //下载完成,解压文件 TODO + //下载完成,解压文件 try { - val files = ZipUtils.unzipFile("", "") - //传给obu升级 - + val files = ZipUtils.unzipFile(Config.downLoadObuPath + mDownloadFileName, Config.downLoadUnzipObuPath) + CallerLogger.d("${SceneConstant.M_OBU}${MogoObuConst.TAG_UPGRADE_OBU}", " onFinished file = ${Config.downLoadObuPath + mDownloadFileName} -----files = $files ") + //1传给obu升级,升级成功,2需要删除相应文件夹 + var md5Path = "" + var tarPath = "" + for (f in files) { + if (f.path.contains(".md5")) { + md5Path = f.path + } + if (f.path.contains(".gz")) { + tarPath = f.path + } + } + CallerLogger.d("${SceneConstant.M_OBU}${MogoObuConst.TAG_UPGRADE_OBU}", "updateObuUpgradeStatus ---md5Path = $md5Path -----tarPath = $tarPath ") + CallerObuApiManager.uploadObuPack(arrayOf(md5Path, tarPath)) } catch (e: IOException) { - //解压失败 - + //解压失败,删除文件夹 + CallerObuApiManager.deleteObuFile() e.printStackTrace() } } - override fun onError(url: String?, errorMsg: String?) {} + override fun onError(url: String?, errorMsg: String?) { + //下载失败,删除文件夹 + CallerObuApiManager.deleteObuFile() + } }) } 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 0000000000..2959045ff3 Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable-xhdpi/icon_bag_audio.png differ 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 0000000000..5f4ea0176b Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable-xhdpi/icon_bag_no_data.png differ 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/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 0000000000..09ffe565d7 Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_bag_edit.png differ 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/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/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/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..0f76ebdba2 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_bag_upload.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + \ 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..5cfa0f954f --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_space_warning.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + \ 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..8cd8a75b48 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_manager.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_time_title.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_time_title.xml new file mode 100644 index 0000000000..38ccd6bf86 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_time_title.xml @@ -0,0 +1,16 @@ + + + + + + \ 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..6a86a27676 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/layout_badcase_manager.xml @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/build.gradle b/core/function-impl/mogo-core-function-hmi/build.gradle index 51edc43054..6e3fe588c5 100644 --- a/core/function-impl/mogo-core-function-hmi/build.gradle +++ b/core/function-impl/mogo-core-function-hmi/build.gradle @@ -82,7 +82,6 @@ dependencies { compileOnly rootProject.ext.dependencies.mogo_core_utils compileOnly rootProject.ext.dependencies.mogo_core_function_datacenter compileOnly rootProject.ext.dependencies.mogo_core_function_call - compileOnly project(':libraries:mogo-adas') } else { api project(':test:crashreport-apmbyte') @@ -91,7 +90,6 @@ dependencies { api project(':core:mogo-core-res') compileOnly project(':core:mogo-core-utils') compileOnly project(':core:mogo-core-function-call') - compileOnly project(':libraries:mogo-adas') } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt index 406fdd97ee..735db45a88 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt @@ -39,6 +39,7 @@ import com.mogo.eagle.core.function.hmi.ui.widget.StatusBarView import com.mogo.eagle.core.utilcode.kotlin.safeCancel import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils 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.logger.scene.SceneConstant.Companion.M_HMI import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.zhjt.service_biz.BizConfig @@ -87,6 +88,8 @@ class MoGoHmiProvider : IMoGoHmiProvider { ) } + private val ttsMap = mutableMapOf() + /** * 不展示顶部弹窗,其它保留 */ @@ -99,6 +102,19 @@ class MoGoHmiProvider : IMoGoHmiProvider { direction: WarningDirectionEnum, expireTime: Long ) { + //30秒内同一个事件只出现一次 TODO 临时添加,后面宏宇统一在数据中心处理 + if (ttsMap.containsKey(v2xType)) { + var oldTime = ttsMap[v2xType] + var timeDiff = (System.currentTimeMillis() - oldTime!!) / 1000 + if (timeDiff < 30) { + return + } + ttsMap.remove(v2xType) + ttsMap[v2xType] = System.currentTimeMillis() + } else { + ttsMap[v2xType] = System.currentTimeMillis() + } + CallerLogger.d("${SceneConstant.M_OBU}${TAG}", "warningV2X v2xType = $v2xType ---alertContent = $alertContent ---ttsContent = $ttsContent ") val playTTS = !AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) context?.let { val warningContent = alertContent ?: EventTypeEnumNew.getWarningContent(v2xType) 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 8592c0bcb3..948d93eaec 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 @@ -33,6 +33,8 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A private var data: ArrayList ?= null private val operation: Int = 1 + private val operationReturn: Int = 10 + private val operationStop: Int = 11 private val notice: Int = 2 private val v2x: Int = 3 private val report: Int = 4 @@ -55,6 +57,16 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A val view = LayoutInflater.from(parent.context).inflate(R.layout.item_msg_bubble_operation,parent,false) return BubbleOperationHolder(view) } + operationReturn -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_msg_bubble_operation_return, parent, false) + return BubbleOperationReturnHolder(view) + } + operationStop -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_msg_bubble_operation_stop, parent, false) + return BubbleOperationStopHolder(view) + } report -> { val view = LayoutInflater.from(parent.context).inflate(R.layout.item_msg_bubble_report,parent,false) return BubbleReportHolder(view) @@ -87,6 +99,23 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A } } } + //运营平台还车通知 + is BubbleOperationReturnHolder -> { + data?.let { + val operationReturnMsg = it[position].bean as OperationMsg + holder.tvOperationReturnContent.text = operationReturnMsg.content + holder.tvOperationReturnTime.text = + TimeUtils.millis2String(operationReturnMsg.timestamp, getHourMinFormat()) + } + } + //运营平台靠边停车 + is BubbleOperationStopHolder -> { + data?.let { + val operationStopMsg = it[position].bean as OperationMsg + holder.tvOperationStopTime.text = + TimeUtils.millis2String(operationStopMsg.timestamp, getHourMinFormat()) + } + } is BubbleReportHolder -> { data?.let { val msgBoxBean = it[position] @@ -187,7 +216,16 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A override fun getItemViewType(position: Int): Int { return if(data!![position].type == MsgBoxType.OPERATION){ - operation + if((data!![position].bean as OperationMsg).type == 0){ + //运营平台还车通知 + operationReturn + }else if((data!![position].bean as OperationMsg).type == 1){ + //运营平台靠边停车 + operationStop + }else{ + //普通运营平台 + operation + } }else if(data!![position].type == MsgBoxType.REPORT){ report }else if(data!![position].type == MsgBoxType.NOTICE){ @@ -214,6 +252,17 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A var clBubbleOperationLayout: RoundCanClickConstraintLayout = itemView.findViewById(R.id.clBubbleOperationLayout) } + //运营平台还车通知 + class BubbleOperationReturnHolder(itemView: View): RecyclerView.ViewHolder(itemView){ + var tvOperationReturnTime: TextView = itemView.findViewById(R.id.tvOperationReturnTime) + var tvOperationReturnContent: TextView = itemView.findViewById(R.id.tvOperationReturnContent) + } + + //运营平台靠边停车通知 + class BubbleOperationStopHolder(itemView: View): RecyclerView.ViewHolder(itemView){ + var tvOperationStopTime: TextView = itemView.findViewById(R.id.tvOperationStopTime) + } + //Notice class BubbleNoticeHolder(itemView: View): RecyclerView.ViewHolder(itemView){ var ivNoticeImage: ImageView = itemView.findViewById(R.id.ivNoticeImage) 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 95ea8caef9..b020fd0ee7 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 @@ -35,6 +35,8 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : private var reportBean: MsgBoxBean ?= null private val operation: Int = 1 + private val operationReturn: Int = 10 + private val operationStop: Int = 11 private val notice: Int = 2 private val v2x: Int = 3 private val report: Int = 5 @@ -72,6 +74,16 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : .inflate(R.layout.item_msg_box_operation, parent, false) return MsgBoxOperation(view) } + operationReturn -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_msg_box_operation_return, parent, false) + return MsgBoxOperationReturn(view) + } + operationStop -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_msg_box_operation_stop, parent, false) + return MsgBoxOperationStop(view) + } notice -> { val view = LayoutInflater.from(parent.context) .inflate(R.layout.item_msg_box_notice, parent, false) @@ -244,6 +256,23 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : } } } + //运营平台还车通知 + is MsgBoxOperationReturn -> { + data?.let { + val operationReturnMsg = it[position].bean as OperationMsg + holder.tvOperationReturnContent.text = operationReturnMsg.content + holder.tvOperationReturnTime.text = + TimeUtils.millis2String(operationReturnMsg.timestamp, getHourMinFormat()) + } + } + //运营平台靠边停车 + is MsgBoxOperationStop -> { + data?.let { + val operationStopMsg = it[position].bean as OperationMsg + holder.tvOperationStopTime.text = + TimeUtils.millis2String(operationStopMsg.timestamp, getHourMinFormat()) + } + } is MsgBoxNotice -> { data?.let { val noticeFrCloudMsg = it[position].bean as NoticeFrCloudMsg @@ -314,7 +343,16 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : override fun getItemViewType(position: Int): Int { return if (data!![position].type == MsgBoxType.OPERATION) { - operation + if((data!![position].bean as OperationMsg).type == 0){ + //运营平台还车通知 + operationReturn + }else if((data!![position].bean as OperationMsg).type == 1){ + //运营平台靠边停车 + operationStop + }else{ + //普通运营平台 + operation + } } else if (data!![position].type == MsgBoxType.NOTICE) { notice } else if (data!![position].type == MsgBoxType.V2X && data!![position].sourceType == DataSourceType.SUMMARY) { @@ -365,6 +403,17 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : var tvOperationContentOpen: TextView = itemView.findViewById(R.id.tvOperationContentOpen) } + //运营平台还车通知 + class MsgBoxOperationReturn(itemView: View) : RecyclerView.ViewHolder(itemView){ + var tvOperationReturnTime: TextView = itemView.findViewById(R.id.tvOperationReturnTime) + var tvOperationReturnContent: TextView = itemView.findViewById(R.id.tvOperationReturnContent) + } + + //运营平台靠边停车通知 + class MsgBoxOperationStop(itemView: View) : RecyclerView.ViewHolder(itemView){ + var tvOperationStopTime: TextView = itemView.findViewById(R.id.tvOperationStopTime) + } + //Notice class MsgBoxNotice(itemView: View) : RecyclerView.ViewHolder(itemView) { var ivNoticeImage: ImageView = itemView.findViewById(R.id.ivNoticeImage) 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 94edd6d2b6..0f59f5787f 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 @@ -9,7 +9,6 @@ import android.graphics.Color import android.os.Build import android.text.Html import android.util.AttributeSet -import android.util.Log import android.view.LayoutInflater import android.view.View import androidx.annotation.RequiresApi @@ -40,6 +39,7 @@ import com.mogo.eagle.core.data.deva.scene.SceneModule import com.mogo.eagle.core.data.enums.TrafficTypeEnum import com.mogo.eagle.core.data.gnss.AccelerationEntity import com.mogo.eagle.core.data.map.MogoLocation +import com.mogo.eagle.core.data.obu.MogoObuConst import com.mogo.eagle.core.data.obu.ObuStatusInfo import com.mogo.eagle.core.data.report.ReportEntity import com.mogo.eagle.core.function.api.autopilot.* @@ -406,14 +406,13 @@ internal class DebugSettingView @JvmOverloads constructor( //展示OBU控制中心 obuControllerLayout.visibility = View.VISIBLE tbVehicleStateController.isChecked = true - //展示HMI控制中心 - hmiObuLayout.visibility = View.VISIBLE + } else { buttonView.setCompoundDrawables(null, null, iconRight, null) //隐藏OBU控制中心 obuControllerLayout.visibility = View.GONE tbVehicleStateController.isChecked = false - hmiObuLayout.visibility = View.GONE + } } @@ -565,7 +564,7 @@ internal class DebugSettingView @JvmOverloads constructor( // 初始化OBU IP信息 val ipAddress = - SharedPrefsMgr.getInstance(context).getString(MoGoConfig.OBU_IP, "192.168.1.199") + SharedPrefsMgr.getInstance(context).getString(MoGoConfig.OBU_IP, MogoObuConst.OBU_DEFAULT_IP) etObuIP.setText(ipAddress) etObuIP.text?.let { etObuIP.setSelection(it.length) } @@ -1055,29 +1054,6 @@ internal class DebugSettingView @JvmOverloads constructor( HmiBuildConfig.isShowSnBindingView = !isChecked } - /** - * obu弱势交通控制 - */ - tbObuWeaknessTraffic.setOnCheckedChangeListener { _, isChecked -> - // 默认开启 - HmiBuildConfig.isShowObuWeaknessTrafficView = !isChecked - } - - /** - * 云端弱势交通控制 - */ - tbCloudWeaknessTraffic.setOnCheckedChangeListener { _, isChecked -> - // 默认关闭 - HmiBuildConfig.isShowObuWeaknessTrafficView = isChecked - } - - /** - * 限速数据,优先使用obu,默认打开 - */ - tbRoadLimitSpeed.setOnCheckedChangeListener { _, isChecked -> - HmiBuildConfig.isShowObuLimitSpeedView = isChecked - } - /** * 实时加速度面板控制 */ @@ -1653,6 +1629,28 @@ internal class DebugSettingView @JvmOverloads constructor( tbIsDemoMode.text = "开启美化模式" } + //obu TODO 后面会添加很多os那边需要显示的内容 + obuVersionNameTv.text = Html.fromHtml( + "OBU版本号:${ + if (AppConfigInfo.isConnectObu) { + " 1.0" + } else { + "异常" + } + }" + ) + + obuConnectStatusTv.text = Html.fromHtml( + "OBU连接状态:${ + if (AppConfigInfo.isConnectObu) { + "正常" + } else { + "异常" + } + }" + ) + + } /** 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 ffd67f3131..116662754b 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 @@ -8,6 +8,7 @@ import androidx.constraintlayout.widget.ConstraintLayout import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.config.HmiBuildConfig import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig +import com.mogo.eagle.core.data.obu.MogoObuConst import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsFuncConfigListener import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager @@ -182,7 +183,7 @@ internal class SOPSettingView @JvmOverloads constructor( tbObu.isChecked = CallerObuApiManager.isConnected() tbObu.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { - CallerObuApiManager.resetObuIpAddress("192.168.1.199") + CallerObuApiManager.resetObuIpAddress(MogoObuConst.OBU_DEFAULT_IP) } else { //断开链接 CallerObuApiManager.disConnectObu() diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/ToolsView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/ToolsView.kt index 62341fb157..a765f0434a 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/ToolsView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/ToolsView.kt @@ -53,6 +53,11 @@ class ToolsView private constructor() { override fun showSOPSettingView() { sopView.toggle(it) } + + 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 4a40e3c053..f120cf33e1 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 @@ -100,6 +100,10 @@ internal class AutoPilotAndCheckView @JvmOverloads constructor( sopLayout.setOnClickListener { clickListener?.showSOPSettingView() } + managerLayout.setOnClickListener { + //录包管理页面 + clickListener?.showBadCaseManagerView() + } ivDebugPanel.setOnClickListener { clickListener?.showDebugPanelView() @@ -225,6 +229,7 @@ internal 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/java/com/mogo/eagle/core/function/hmi/ui/vehicle/TakeOverView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/vehicle/TakeOverView.kt index 29cd185384..ceb0ec8cce 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/vehicle/TakeOverView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/vehicle/TakeOverView.kt @@ -13,7 +13,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener import com.mogo.eagle.core.function.call.hmi.CallerHmiManager import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.utilcode.util.ThreadUtils -import com.zhidao.support.adas.high.common.MogoReport +import com.zhjt.mogo.adas.data.bean.MogoReport import mogo_msg.MogoReportMsg class TakeOverView @JvmOverloads constructor( diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/LimitingVelocityView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/LimitingVelocityView.kt index de83239e19..a631acac8e 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/LimitingVelocityView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/LimitingVelocityView.kt @@ -42,10 +42,10 @@ class LimitingVelocityView constructor( if (limitingVelocity > 0) { visibility = View.VISIBLE tvLimitingVelocity.text = "$limitingVelocity" - tvLimitingSource.text = DataSourceType.getName(sourceType) + tvLimitingSource?.text = DataSourceType.getName(sourceType) } else { visibility = View.GONE - tvLimitingSource.text = "" + tvLimitingSource?.text = "" } } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/TapPositionView.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/TapPositionView.java index c8de687a2a..60cc5b0106 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/TapPositionView.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/TapPositionView.java @@ -2,9 +2,7 @@ package com.mogo.eagle.core.function.hmi.ui.widget; import android.content.Context; import android.content.res.TypedArray; -import android.graphics.Color; import android.util.AttributeSet; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/TrafficDataView.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/TrafficDataView.java index 31e0ebe1a6..b074fff41c 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/TrafficDataView.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/TrafficDataView.java @@ -15,6 +15,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.constraintlayout.widget.ConstraintLayout; +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotPlanningActionsListener; import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisBrakeStateListener; import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisGearStateListener; import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisSteeringStateListener; @@ -32,6 +33,7 @@ import com.mogo.eagle.core.utilcode.util.ThreadUtils; import org.jetbrains.annotations.NotNull; import chassis.Chassis; +import mogo.telematics.pad.MessagePad; import chassis.ChassisStatesOuterClass; import planning.RoboSweeperTaskIndexOuterClass; @@ -44,7 +46,8 @@ public class TrafficDataView extends ConstraintLayout implements IMoGoChassisSteeringStateListener, IMoGoChassisGearStateListener , IMoGoChassisBrakeStateListener, - IMoGoChassisThrottleStateListener { + IMoGoChassisThrottleStateListener, + IMoGoAutopilotPlanningActionsListener { private static final String TAG = "TrafficDataView"; private TapPositionView tapPositionView; private TextView speedTextView; @@ -116,7 +119,7 @@ public class TrafficDataView extends ConstraintLayout implements CallerChassisGearStateListenerManager.INSTANCE.addListener(TAG, this); CallerChassisBrakeStateListenerManager.INSTANCE.addListener(TAG, this); CallerChassisThrottleStateListenerManager.INSTANCE.addListener(TAG, this); - CallerPlanningActionsListenerManager.INSTANCE.addListener(TAG, planningActionMsg -> acceleration = planningActionMsg.getDestinationAcc()); + CallerPlanningActionsListenerManager.INSTANCE.addListener(TAG, this); } private void initView(@NonNull Context context) { @@ -138,6 +141,10 @@ public class TrafficDataView extends ConstraintLayout implements CallerPlanningActionsListenerManager.INSTANCE.removeListener(TAG); } + @Override + public void pncActions(@NonNull MessagePad.PlanningActionMsg planningActionMsg) { + acceleration = planningActionMsg.getDestinationAcc(); + } /** * 方向盘转向角 左+右- 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 cbfbab04bf..bc404b047d 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 @@ -6,13 +6,11 @@ import android.util.AttributeSet import android.view.LayoutInflater import android.widget.LinearLayout import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo -import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.function.main.AppListActivity -import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.util.ActivityUtils import com.mogo.eagle.core.utilcode.util.AppUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler @@ -41,11 +39,8 @@ class VersionNameView @JvmOverloads constructor( } private fun initView(){ - //版本水印只在司机端展示 - if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){ - showCurrentPadVersion() - showCurrentMapVersion() - } + showCurrentPadVersion() + showCurrentMapVersion() // 调试入口,应对M1、M2没有安装Launcher的情况 setOnLongClickListener { @@ -72,7 +67,7 @@ class VersionNameView @JvmOverloads constructor( UiThreadHandler.post { tvMapVersionName?.let { if (!dockerVersion.isNullOrEmpty()) { - it.text = " ; MAP:${dockerVersion}" + it.text = "MAP:${dockerVersion}" } } } @@ -80,18 +75,12 @@ class VersionNameView @JvmOverloads constructor( override fun onAttachedToWindow() { super.onAttachedToWindow() - //版本水印只在司机端展示 - if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){ - CallerAutoPilotStatusListenerManager.addListener(TAG, this) - } + CallerAutoPilotStatusListenerManager.addListener(TAG, this) } override fun onDetachedFromWindow() { super.onDetachedFromWindow() - //版本水印只在司机端展示 - if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){ - CallerAutoPilotStatusListenerManager.removeListener(TAG) - } + CallerAutoPilotStatusListenerManager.removeListener(TAG) } override fun onAutopilotStatusResponse(autoPilotStatusInfo: AutopilotStatusInfo) { 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 0000000000..8dc2dff73f Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/debug_icon_bag_manager.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_msg_box_operation_return.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_msg_box_operation_return.png new file mode 100644 index 0000000000..d1363d1a96 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_msg_box_operation_return.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_msg_box_operation_stop.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_msg_box_operation_stop.png new file mode 100644 index 0000000000..1ba1c633ec Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_msg_box_operation_stop.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_operation_return.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_operation_return.xml new file mode 100644 index 0000000000..dd210d1341 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_operation_return.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_operation_stop.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_operation_stop.xml new file mode 100644 index 0000000000..bae20dc545 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_operation_stop.xml @@ -0,0 +1,54 @@ + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_operation_return.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_operation_return.xml new file mode 100644 index 0000000000..224dc865f1 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_operation_return.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_operation_stop.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_operation_stop.xml new file mode 100644 index 0000000000..e6b647840f --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_operation_stop.xml @@ -0,0 +1,52 @@ + + + + + + + + + + \ No newline at end of file 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 ec1ceea5e6..6b77eb7543 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 @@ -148,6 +148,35 @@ + + + + + + + + - - - - + - + - + + + + + - diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_m1_msg_box_button.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_m1_msg_box_button.xml index 0eb0cb4f85..16d9e8869c 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_m1_msg_box_button.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_m1_msg_box_button.xml @@ -25,6 +25,8 @@ app:layout_constraintCircle="@id/cbMsgBoxM1" app:layout_constraintCircleAngle="35" app:layout_constraintCircleRadius="25dp" - tools:ignore="MissingConstraints" /> + tools:ignore="MissingConstraints" + android:visibility="gone" + /> \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_version_name.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_version_name.xml index 30319d1e89..8109c27c76 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_version_name.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_version_name.xml @@ -2,7 +2,7 @@ + android:orientation="vertical"> \ 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 a792f63bf1..81a4373158 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 @@ -23,6 +23,7 @@ 调试面板 录包设置 运营面板 + 录包管理 车速设置 账户信息 系统运行 diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/CircleQueue.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/CircleQueue.java index 5f7b50180e..a4faef0d56 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/CircleQueue.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/CircleQueue.java @@ -24,18 +24,10 @@ public class CircleQueue { objQueue.add(obj); } - public void deleteObj(ObjQueue obj) { - objQueue.remove(obj); - } - public List getLastThreeFrame() { return objQueue.subList(objQueue.size() - 3, objQueue.size()); } - public List getLastFiveFrame() { - return objQueue.subList(objQueue.size() - 5, objQueue.size()); - } - public List getPreFrame() { return objQueue.subList(0, objQueue.size()); } @@ -44,6 +36,10 @@ public class CircleQueue { return objQueue.lastElement(); } + public void clear(){ + objQueue.clear(); + } + @Override public String toString() { return "CircleQueue{" + diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/IdentifyOriginDataDrawer.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/IdentifyOriginDataDrawer.kt index 72052c3a59..ee7b05a06f 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/IdentifyOriginDataDrawer.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/IdentifyOriginDataDrawer.kt @@ -102,7 +102,6 @@ class IdentifyOriginDataDrawer : Identify { @SuppressLint("NewApi") private fun filterTrafficData(trafficData: List): HashMap { mFilterTrafficData.clear() - trafficDataUuidList.clear() for (data in trafficData) { // 过滤掉未知感知数据 if (TrackerSourceColorHelper.filterData(data)) { @@ -110,13 +109,12 @@ class IdentifyOriginDataDrawer : Identify { } var temp: TrackedObject = data val uuid = "" + data.uuid - //首次过来的数据不添加,首次未添加的感知物在调用完绘制方法后再塞入cache map val cacheData = mMarkersCaches[uuid] if (cacheData != null) { val color = TrackerSourceColorHelper.getDefaultColor(data) temp = data.toBuilder().setColor(color).build() - mFilterTrafficData[uuid] = temp } + mFilterTrafficData[uuid] = temp mMarkersCaches[uuid] = temp trafficDataUuidList.add(uuid) } diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/MapIdentifySubscriber.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/MapIdentifySubscriber.kt index fa308abe33..247ccf5524 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/MapIdentifySubscriber.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/MapIdentifySubscriber.kt @@ -94,21 +94,6 @@ class MapIdentifySubscriber private constructor() : IMoGoIdentifyListener, IMoGo } } - override fun updateTrackerFusionData(trackObject: TrackedObject?) { - super.updateTrackerFusionData(trackObject) - try { - if (FunctionBuildConfig.isObuWarningFusionUnion) { - ThreadUtils.getSinglePool().execute { - //todo emArrow - } - } else { - - } - } catch (e: Exception) { - e.printStackTrace() - } - } - override fun updateTrackerWarningInfo(trafficData: TrafficData) { super.updateTrackerWarningInfo(trafficData) try { diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackManager.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackManager.java index 907f04ce8d..2e33808a9b 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackManager.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackManager.java @@ -50,7 +50,7 @@ public class TrackManager { * 记录每次实际绘制的交通元素UUID */ @SuppressLint("NewApi") - private final HashMap trafficDataUuid = new HashMap<>(); + private final ConcurrentHashMap trafficDataUuid = new ConcurrentHashMap<>(); /** * 过滤后的数据集合 @@ -101,7 +101,7 @@ public class TrackManager { trackObj = cacheTrack; MessagePad.TrackedObject cache = cacheTrack.getCache(); if (cache != null) { - //相对静止物体并且非obu数据,则不改变,为感知融合同位置物体,使用缓存数据做覆盖 + //相对静止物体 感知融合同位置物体,使用缓存数据做覆盖 if (cacheTrack.relativeStatic()) { if (data.getColor() != null && !data.getColor().isEmpty()) { cache = cache.toBuilder().setColor(data.getColor()).build(); @@ -112,10 +112,10 @@ public class TrackManager { uuid = findSameValue; trackObj.updateObj(data); } else { - trackObj = new TrackObj(data); + trackObj = new TrackObj(data,s2CellId,s2LatLng); } } else { - trackObj = new TrackObj(data); + trackObj = new TrackObj(data,s2CellId,s2LatLng); } } mFilterTrafficData.put(uuid, trackObj.getCache()); @@ -150,17 +150,23 @@ public class TrackManager { } public synchronized void removeKey(String key) { - mMarkersCaches.remove(key); cellIdCaches.remove(key); + mMarkersCaches.remove(key); + WarningHelper.INSTANCE.remove(key); MogoMarkerManager.getInstance(AbsMogoApplication.getApp()) .removeMarker(key); } @SuppressLint("NewApi") public void clearAll() { + MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).clearAllMarker(); + cellIdCaches.clear(); trafficDataUuid.clear(); WarningHelper.INSTANCE.clear(); - mMarkersCaches.forEach((uuid, trackObj) -> removeKey(uuid)); + mMarkersCaches.forEach((uuid, trackObj) -> { + trackObj.clear(); + }); + mMarkersCaches.clear(); } } diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackObj.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackObj.java index 0a1d3829b7..55ef457a88 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackObj.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackObj.java @@ -5,8 +5,6 @@ import static com.mogo.eagle.core.function.business.identify.TrackManager.LIMIT_ import android.annotation.SuppressLint; import com.mogo.eagle.core.data.enums.TrafficTypeEnum; -import com.mogo.eagle.core.data.map.CenterLine; -import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager; import com.mogo.eagle.core.utilcode.geometry.S2CellId; import com.mogo.eagle.core.utilcode.geometry.S2LatLng; import com.mogo.eagle.core.utilcode.util.CoordinateUtils; @@ -22,26 +20,18 @@ public class TrackObj { private final CircleQueue circleQueue = new CircleQueue(6); private S2CellId s2CellId; //s2 id权重 private S2LatLng s2LatLng; //s2 经纬度 - private double recentlyTime; //用于缓存帧数判断,暂定缓存1秒数据,中间如果有物体未出现,1秒后删除 - private double roadAngle; //道路航向 private int[] typeArray = new int[3]; private int typeWeight; //类型权重 private double lat; private double lon; private double speedAverage; - public TrackObj(MessagePad.TrackedObject data) { + public TrackObj(MessagePad.TrackedObject data, S2CellId cellId, S2LatLng latLng) { circleQueue.addQueue(new ObjQueue(data.getHeading(), data.getSpeed(), data.getLatitude(), data.getLongitude(), data.getType())); - recentlyTime = data.getSatelliteTime(); lat = data.getLatitude(); lon = data.getLongitude(); - s2LatLng = S2LatLng.fromDegrees(data.getLatitude(), data.getLongitude()); - s2CellId = S2CellId.fromLatLng(s2LatLng).parent(22); //需要验证22前后 - CenterLine centerLine = CallerMapUIServiceManager.INSTANCE.getMapUIController().getCenterLineInfo(lon, lat, -1); - if (centerLine != null && centerLine.getAngle() != 0) { - roadAngle = centerLine.getAngle(); - } - + s2LatLng = latLng; + s2CellId = cellId; //需要验证22前后 } private MessagePad.TrackedObject cacheData; @@ -50,14 +40,12 @@ public class TrackObj { public void updateObj(MessagePad.TrackedObject data) { cacheData = data; correct(); - recentlyTime = data.getSatelliteTime(); circleQueue.addQueue(new ObjQueue(cacheData.getHeading(), cacheData.getSpeed(), data.getLatitude(), data.getLongitude(), data.getType())); } private void correct() { calAverageSpeedAndType(); calLoc(); -// calHeading(); } @SuppressLint("NewApi") @@ -80,8 +68,10 @@ public class TrackObj { } speedAverage = cal / objQueueList.size(); } - typeArray = Arrays.stream(typeArray).sorted().toArray(); - typeWeight = typeArray[typeArray.length / 2] == 0 ? cacheData.getType() : typeArray[typeArray.length / 2]; + if(typeArray.length > 0){ + typeArray = Arrays.stream(typeArray).sorted().toArray(); + typeWeight = typeArray[typeArray.length / 2] == 0 ? cacheData.getType() : typeArray[typeArray.length / 2]; + } // 重新给静止物体赋值速度 if (relativeStatic()) { @@ -105,26 +95,6 @@ public class TrackObj { } } - private void calHeading() { - //更正数据,速度小于LIMIT_SPEED使用上一帧数据 -// if (relativeStatic()) { -// if (roadAngle != 0.0) { -// CenterLine centerLine = CallerHDMapManager.INSTANCE.getCenterLineInfo(lon, lat, -1); -// if (centerLine != null && centerLine.getAngle() != 0) { -// cacheData = cacheData.toBuilder().setHeading(centerLine.getAngle()).build(); -// } else { -// cacheData = cacheData.toBuilder().setHeading(circleQueue.getLastFrame().getHeading()).build(); -// } -// } else { -// cacheData = cacheData.toBuilder().setHeading(circleQueue.getLastFrame().getHeading()).build(); -// } -// } - } - - public double getRecentlyTime() { - return recentlyTime; - } - public long getCellIdPos() { return s2CellId.pos(); } @@ -167,12 +137,6 @@ public class TrackObj { } } - public boolean isFourWheelType() { - return typeWeight != TrafficTypeEnum.TYPE_TRAFFIC_ID_PEOPLE.getType() - && typeWeight != TrafficTypeEnum.TYPE_TRAFFIC_ID_BICYCLE.getType() - && typeWeight != TrafficTypeEnum.TYPE_TRAFFIC_ID_MOTO.getType(); - } - private double[] getCenterPoint(List objQueueList) { int total = objQueueList.size(); double X = 0, Y = 0, Z = 0; @@ -202,12 +166,18 @@ public class TrackObj { return d; } + public void clear(){ + circleQueue.clear(); + s2CellId = null; + s2LatLng = null; + typeArray = null; + } + @Override public String toString() { return "TrackObj{" + "circleQueue=" + circleQueue + ", s2CellId=" + s2CellId + - ", recentlyTime=" + recentlyTime + ", cacheData=" + cacheData + '}'; } diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackerSourceColorHelper.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackerSourceColorHelper.kt index d98984e337..d530f02c48 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackerSourceColorHelper.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/TrackerSourceColorHelper.kt @@ -46,9 +46,9 @@ object TrackerSourceColorHelper { return "" } - if (isV2I(data).second) { - color = "#00AEFFFF" - } +// if (isV2I(data).second) { +// color = "#00AEFFFF" +// } //level : 2 if (isObu(data).second) { @@ -62,14 +62,9 @@ object TrackerSourceColorHelper { } } - //融合结果 level : 1 - if (isFusion(data)) { - color = "#9900ffFF" - } - //僵尸车 if(data.addAttribute == AdditionalAttribute.ATTR_ZOMBIE){ - color = "#D1E5FDFF" + color = "#AE7887FF" } // pnc预警 diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/WarningHelper.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/WarningHelper.kt index 2d7a5c69a4..81f546cb3d 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/WarningHelper.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/WarningHelper.kt @@ -139,6 +139,12 @@ object WarningHelper { } } + fun remove(key:String){ + pncWarningBeautyTrafficData.remove(key) + pncWarningOriginTrafficData.remove(key) + obuWarningTrafficData.remove(key) + } + fun clear() { pncWarningBeautyTrafficData.clear() pncWarningOriginTrafficData.clear() diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/view/SmallMapView.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/view/SmallMapView.kt index 3578eb3ce4..5c3d4a6c13 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/view/SmallMapView.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/view/SmallMapView.kt @@ -101,7 +101,7 @@ class SmallMapView @JvmOverloads constructor( fun drawablePolyline() { clearPolyline() if (mAMap != null) { - if (mCoordinatesLatLng.size > 2) { + if (mCoordinatesLatLng.size >= 2) { // 设置开始结束Marker位置 mStartMarker!!.position = mCoordinatesLatLng[0] mEndMarker!!.position = mCoordinatesLatLng[mCoordinatesLatLng.size - 1] diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/OverMapView.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/OverMapView.kt index 7470a9932c..ba19fa3bb6 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/OverMapView.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/OverMapView.kt @@ -71,6 +71,10 @@ class OverMapView @JvmOverloads constructor( private var resetDrawableMarginRight: Int = -1 private var resetDrawableMarginBottom: Int = -1 private var isClearArrived: Boolean = false + private var leftPadding: Int = 100 + private var topPadding: Int = 100 + private var rightPadding: Int = 100 + private var bottomPadding: Int = 100 private var mMapView: TextureMapView? = null private var mAMap: AMap? = null @@ -136,6 +140,10 @@ class OverMapView @JvmOverloads constructor( AutoSizeUtils.dp2px(context, 40f) ) isClearArrived = typedArray.getBoolean(R.styleable.OverMapView_isClearArrived, false) + leftPadding = typedArray.getInt(R.styleable.OverMapView_leftPadding, 100) + topPadding = typedArray.getInt(R.styleable.OverMapView_topPadding, 100) + rightPadding = typedArray.getInt(R.styleable.OverMapView_rightPadding, 100) + bottomPadding = typedArray.getInt(R.styleable.OverMapView_bottomPadding, 100) typedArray.recycle() initView(context) } catch (e: Exception) { @@ -559,10 +567,10 @@ class OverMapView @JvmOverloads constructor( mAMap!!.moveCamera( CameraUpdateFactory.newLatLngBoundsRect( boundsBuilder.build(), - 100, - 100, - 100, - 100 + AutoSizeUtils.dp2px(context, leftPadding.toFloat()), + AutoSizeUtils.dp2px(context, rightPadding.toFloat()), + AutoSizeUtils.dp2px(context, topPadding.toFloat()), + AutoSizeUtils.dp2px(context, bottomPadding.toFloat()) ) ) mAMap!!.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)) diff --git a/core/function-impl/mogo-core-function-map/src/main/res/values/attrs.xml b/core/function-impl/mogo-core-function-map/src/main/res/values/attrs.xml index 0d3349fc35..15a5585362 100644 --- a/core/function-impl/mogo-core-function-map/src/main/res/values/attrs.xml +++ b/core/function-impl/mogo-core-function-map/src/main/res/values/attrs.xml @@ -24,5 +24,10 @@ + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/HttpDnsStartUp.kt b/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/HttpDnsStartUp.kt index 34b96faae4..80c1c7fe10 100644 --- a/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/HttpDnsStartUp.kt +++ b/core/function-impl/mogo-core-function-startup/src/main/java/com/mogo/eagle/core/function/startup/stageone/HttpDnsStartUp.kt @@ -20,6 +20,8 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_CLOUD_CONNECT_FAIL import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_CLOUD_CONNECT_LOST import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_CLOUD_CONNECT_SUCCESS +import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_CLOUD_PASSPORT_ERROR +import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_CLOUD_PASSPORT_TOKEN import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_CLOUD_RECONNECT import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_CLOUD import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_CONNECT_STATUS @@ -133,12 +135,7 @@ class HttpDnsStartUp : AndroidStartup() { HttpDnsSimpleLocation(envConfig.cityCode, envConfig.lat, envConfig.lon) return httpDnsSimpleLocation } - var mogoLocation: MogoLocation? = null - val locationClient = - CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02() - if (locationClient != null) { - mogoLocation = locationClient - } + val mogoLocation: MogoLocation? = CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02() if (mogoLocation != null && mogoLocation.latitude != 0.0 && mogoLocation.longitude != 0.0) { // 更新 httpDnsSimpleLocation = if ( @@ -169,6 +166,15 @@ class HttpDnsStartUp : AndroidStartup() { // 初始化SDK,可以设置状态回调来监听 MoGoAiCloudClient.getInstance().init(context, clientConfig).addTokenCallbacks( object : IMoGoTokenCallback { + + @ChainLog( + linkChainLog = CHAIN_LINK_LOG_CONNECT_STATUS, + linkCode = CHAIN_LINK_CLOUD, + endpoint = PAD, + nodeAliasCode = CHAIN_ALIAS_CODE_CLOUD_PASSPORT_TOKEN, + paramIndexes = [0, 1], + clientPkFileName = "sn" + ) override fun onTokenGot(token: String, sn: String) { clientConfig.token = token // 由于存在token过期问题,在更新后会回调至此处,增加二次判定 @@ -184,6 +190,14 @@ class HttpDnsStartUp : AndroidStartup() { } } + @ChainLog( + linkChainLog = CHAIN_LINK_LOG_CONNECT_STATUS, + linkCode = CHAIN_LINK_CLOUD, + endpoint = PAD, + nodeAliasCode = CHAIN_ALIAS_CODE_CLOUD_PASSPORT_ERROR, + paramIndexes = [1], + clientPkFileName = "sn" + ) override fun onError(code: Int, msg: String) { CallerLogger.d( "$M_MAIN$TAG", @@ -338,4 +352,5 @@ class HttpDnsStartUp : AndroidStartup() { HttpDnsSimpleLocation("010", 1.0, 1.0) } } + } \ No newline at end of file diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagDescriptionEntity.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagDescriptionEntity.kt new file mode 100644 index 0000000000..823e6dfb24 --- /dev/null +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagDescriptionEntity.kt @@ -0,0 +1,12 @@ +package com.mogo.eagle.core.data.badcase + +/** + * @author XuXinChao + * @description bag附加信息(录音,备注,接管信息) + * @since: 2023/2/2 + */ +data class BagDescriptionEntity(var description: String,// bag接管描述或重命名信息 + var hasAudio: Boolean,// 此bag是否具有录音文件 + var audioUrl: String,// bag附加录音文件的文件名 + var reportBI: Boolean //上报BI状态 + ) \ No newline at end of file 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 new file mode 100644 index 0000000000..8b15aee887 --- /dev/null +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagInfoEntity.kt @@ -0,0 +1,20 @@ +package com.mogo.eagle.core.data.badcase + +/** + * @author XuXinChao + * @description 单个key值对应的包信息 + * @since: 2023/2/1 + */ +class BagInfoEntity(){ + var key: Long = 0// bag key值 + var totalSize: Long = 0// 所有子包或合并后的包的总大小 + var timestamp: String = ""// 时间戳 + 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包勾选状态,默认为未勾选 + var itemType: Int = 0 //0是正常Bag包,1为时间Title + var timeStr: String = "" +} \ 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..21bf91c857 --- /dev/null +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/badcase/BagManagerEntity.kt @@ -0,0 +1,15 @@ +package com.mogo.eagle.core.data.badcase + +/** + * @author XuXinChao + * @description 包管理请求 + * @since: 2023/2/1 + */ +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-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-data/src/main/java/com/mogo/eagle/core/data/bindingcar/AppInfo.java b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/bindingcar/AppInfo.java index 86c04140ab..9e731a91b0 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/bindingcar/AppInfo.java +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/bindingcar/AppInfo.java @@ -17,6 +17,7 @@ public class AppInfo implements Serializable { private String installType; // 升级类型 1:提示升级 2:静默升级 3:强制升级 private String beginTime; private String endTime; + private String appFileName; public String getAppUrl() { return appUrl; @@ -90,6 +91,14 @@ public class AppInfo implements Serializable { this.endTime = endTime; } + public String getAppFileName() { + return appFileName; + } + + public void setAppFileName(String appFileName) { + this.appFileName = appFileName; + } + @Override public String toString() { return "AppInfo{" + @@ -102,6 +111,7 @@ public class AppInfo implements Serializable { ", installType='" + installType + '\'' + ", beginTime='" + beginTime + '\'' + ", endTime='" + endTime + '\'' + + ", appFileName='" + appFileName + '\'' + '}'; } } 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 9e6508a3d3..16487b5bb0 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 @@ -1,5 +1,6 @@ package com.mogo.eagle.core.data.config +import chassis.Chassis import com.mogo.eagle.core.data.deva.net.UrlConfig import com.mogo.eagle.core.utilcode.util.GsonUtils @@ -95,7 +96,7 @@ object FunctionBuildConfig { */ @Volatile @JvmField - var isObuWarningFusionUnion = false + var isObuWarningFusionUnion = true /** * 当前APP的身份模式 @@ -123,7 +124,7 @@ object FunctionBuildConfig { /** * 自车位置使用哪种外部数据源 - * 0 = Android系统 + * 0 = Android系统/GD * 1 = 工控机 * 2 = OBU */ @@ -213,4 +214,10 @@ object FunctionBuildConfig { @JvmField var urlJson: UrlConfig = GsonUtils.fromJson("{\"och_url\":\"https://tech.zhidaohulian.com\"}", UrlConfig::class.java) + /** + * 最外层设置的Url + */ + @Volatile + @JvmField + var unableLaunchAutopilotGear: Set? = null } \ No newline at end of file diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt index b3b4418ca4..0d44eb84ee 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt @@ -56,14 +56,16 @@ class ChainConstant { const val CHAIN_ALIAS_CODE_RECORD_NATIVE_LEAK = "CHAIN_ALIAS_CODE_RECORD_NATIVE_LEAK" + const val CHAIN_ALIAS_CODE_INIT_ENV_RESTART = "CHAIN_ALIAS_CODE_INIT_ENV_RESTART" + const val CHAIN_ALIAS_CODE_APP_INFO_CONFIG_UPDATE = "CHAIN_ALIAS_CODE_APP_INFO_CONFIG_UPDATE" + const val CHAIN_ALIAS_CODE_FUNC_CONFIG_CHANGED = "CHAIN_ALIAS_CODE_FUNC_CONFIG_CHANGED" + + const val CHAIN_ALIAS_CODE_CLOUD_PASSPORT_TOKEN = "CHAIN_ALIAS_CODE_CLOUD_PASSPORT_TOKEN" + const val CHAIN_ALIAS_CODE_CLOUD_PASSPORT_ERROR = "CHAIN_ALIAS_CODE_CLOUD_PASSPORT_ERROR" const val CHAIN_ALIAS_CODE_CLOUD_CONNECT_FAIL = "CHAIN_ALIAS_CODE_CLOUD_CONNECT_FAIL" const val CHAIN_ALIAS_CODE_CLOUD_CONNECT_SUCCESS = "CHAIN_ALIAS_CODE_CLOUD_CONNECT_SUCCESS" const val CHAIN_ALIAS_CODE_CLOUD_RECONNECT = "CHAIN_ALIAS_CODE_CLOUD_RECONNECT" const val CHAIN_ALIAS_CODE_CLOUD_CONNECT_LOST = "CHAIN_ALIAS_CODE_CLOUD_CONNECT_LOST" - const val CHAIN_ALIAS_CODE_CLOUD_CONNECT_ERROR = "CHAIN_ALIAS_CODE_CLOUD_CONNECT_ERROR" - const val CHAIN_ALIAS_CODE_HTTP_DNS_CHANGED = "CHAIN_ALIAS_CODE_HTTP_DNS_CHANGED" - const val CHAIN_ALIAS_CODE_FUNC_CONFIG_CHANGED = "CHAIN_ALIAS_CODE_FUNC_CONFIG_CHANGED" - const val CHAIN_ALIAS_CODE_APP_INFO_CONFIG_UPDATE = "CHAIN_ALIAS_CODE_APP_INFO_CONFIG_UPDATE" const val CHAIN_ALIAS_CODE_CLOUD_V2N = "CHAIN_ALIAS_CODE_CLOUD_V2N" const val CHAIN_ALIAS_CODE_INIT_ON_MAP_LOADED = "CHAIN_ALIAS_CODE_INIT_ON_MAP_LOADED" diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoObuConst.java b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/obu/MogoObuConst.java similarity index 74% rename from core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoObuConst.java rename to core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/obu/MogoObuConst.java index 8134f27b41..a80d836f78 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/obu/MogoObuConst.java +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/obu/MogoObuConst.java @@ -1,4 +1,4 @@ -package com.mogo.eagle.core.function.datacenter.obu; +package com.mogo.eagle.core.data.obu; /** * author : lxiiaopeng @@ -10,10 +10,20 @@ public class MogoObuConst { /** * 自研obu的tag */ - public static final String TAG_MOGO_OBU = "MogoObu"; - public static final String TAG_MOGO_NEW_OBU = "MogoNewObu"; + /** + * 自研obu 默认ip obu的taxi和bus的ip已经全部统一成1网段ip + */ + public static String OBU_DEFAULT_IP = "192.168.1.199"; +// public static String OBU_DEFAULT_IP = "192.168.0.53"; //obu室内环境 + + /** + * obu 升级tag + */ + public static final String TAG_UPGRADE_OBU = "TagUpgradeObu"; + + // OBU 场景测试 // 场景类型 public static String BROADCAST_OBU_TYPE_EXTRA_KEY = "obuType"; diff --git a/core/mogo-core-function-api/build.gradle b/core/mogo-core-function-api/build.gradle index f1f7db0430..a00eb95edb 100644 --- a/core/mogo-core-function-api/build.gradle +++ b/core/mogo-core-function-api/build.gradle @@ -53,7 +53,6 @@ dependencies { } else { compileOnly project(':core:mogo-core-data') compileOnly project(':libraries:mogo-obu') - compileOnly project(':libraries:mogo-adas') compileOnly project(':libraries:mogo-map-api') } } diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotControlProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotControlProvider.kt index e1c50cce6c..cc070805e1 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotControlProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotControlProvider.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 IMoGoAutopilotControlProvider : 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/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-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 8a2650d7a0..0de776cdd9 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 @@ -105,6 +105,11 @@ interface IDevaToolsProvider : IProvider { */ fun showFeedbackWindow(ctx: Context) + /** + * 展示录包管理页面 + */ + fun showBadCaseManagerView(context: Context) + /** * 下载指定包 */ @@ -172,6 +177,11 @@ interface IDevaToolsProvider : IProvider { */ fun queryAppUpgrade() + /** + * 查询obu是否有更新 + */ + fun queryObuUpgrade(obuVersionName: String) + fun getEnvConfig(): EnvConfig? fun getEnvCityName():String 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 10251bc371..4909f11220 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 @@ -16,4 +16,8 @@ interface IMoGoObuProvider : IMoGoFunctionServerProvider { fun isConnected(): Boolean fun setObuLog(isChecked: Boolean) + + fun uploadObuPack(filePathArray: Array) + + fun deleteObuFile() } \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/obu/IMoGoObuStatusListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/obu/IMoGoObuStatusListener.kt index 72980475f5..8361926b37 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/obu/IMoGoObuStatusListener.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/obu/IMoGoObuStatusListener.kt @@ -1,7 +1,6 @@ package com.mogo.eagle.core.function.api.obu import com.mogo.eagle.core.data.traffic.TrafficData -import mogo.telematics.pad.MessagePad /** * @author xiaoyuzhou @@ -17,13 +16,6 @@ interface IMoGoObuStatusListener { } - /** - * obu Tracker data - */ - fun updateTrackerFusionData(trackObject: MessagePad.TrackedObject?){ - - } - /** * 更新obu Tracker 预警信息 */ diff --git a/core/mogo-core-function-call/build.gradle b/core/mogo-core-function-call/build.gradle index 343680a5b4..79e9f9fa8b 100644 --- a/core/mogo-core-function-call/build.gradle +++ b/core/mogo-core-function-call/build.gradle @@ -51,9 +51,7 @@ dependencies { implementation rootProject.ext.dependencies.mogo_core_utils implementation rootProject.ext.dependencies.mogocommons } else { - compileOnly project(':core:mogo-core-utils') compileOnly project(':core:mogo-core-data') - compileOnly project(':libraries:mogo-adas') compileOnly project(':libraries:mogo-obu') api project(':libraries:mogo-map-api') api project(':core:mogo-core-function-api') diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt index 1140e23f39..6798098a60 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.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 @@ -268,6 +269,19 @@ object CallerAutoPilotControlManager { } } + /** + * 获取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/autopilot/CallerAutopilotRecordListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutopilotRecordListenerManager.kt index 5ae8d5a153..5eb0bfa59c 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,5 +1,6 @@ package com.mogo.eagle.core.function.call.autopilot +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 @@ -34,4 +35,15 @@ object CallerAutopilotRecordListenerManager : CallerBase) { + providerApi.uploadObuPack(filePathArray) + } + + /** + * 删除obu文件夹 + */ + fun deleteObuFile() { + providerApi.deleteObuFile() + } + } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuWarningListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuWarningListenerManager.kt index 0e94a35120..04b9defdea 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuWarningListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuWarningListenerManager.kt @@ -20,13 +20,6 @@ object CallerObuWarningListenerManager : CallerBase() { } } - fun invokeTrackerFusionData(trackObject: MessagePad.TrackedObject?){ - M_LISTENERS.forEach { - val listener = it.value - listener.updateTrackerFusionData(trackObject) - } - } - fun invokeTrackerWarningInfo(trafficData: TrafficData) { M_LISTENERS.forEach { val listener = it.value diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/Config.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/Config.java index 987c395343..b92e60027b 100644 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/Config.java +++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/Config.java @@ -16,5 +16,8 @@ public class Config { public final static String downLoadObuPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/obu/"; + public final static String downLoadUnzipObuPath = Environment.getExternalStorageDirectory().getAbsolutePath() + + "/obuunzip/"; + public final static String DOWN_LOAD_TAG = "Package-DownLoad"; } diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/thread/DownloadThread.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/thread/DownloadThread.java index c20becc8ee..77be24236a 100644 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/thread/DownloadThread.java +++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/thread/DownloadThread.java @@ -51,7 +51,7 @@ public class DownloadThread extends Thread { int start = threadBean.getStart() + threadBean.getFinished(); connection.setRequestProperty("Range","bytes="+start+"-"+threadBean.getEnd()); //设置写入位置 - File file = new File(Config.downLoadPath,fileBean.getFileName()); + File file = new File(fileBean.getFileName().contains(".zip") ? Config.downLoadObuPath : Config.downLoadPath,fileBean.getFileName()); raf = new RandomAccessFile(file,"rwd"); raf.seek(start); //开始下载 diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/utils/DownloadUtils.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/utils/DownloadUtils.java index 05c06c7508..59ff2b83e5 100644 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/utils/DownloadUtils.java +++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/breakpoint/utils/DownloadUtils.java @@ -2,6 +2,7 @@ package com.mogo.eagle.core.utilcode.breakpoint.utils; import android.content.Context; import android.content.Intent; +import android.util.Log; import com.mogo.eagle.core.utilcode.breakpoint.bean.FileBean; import com.mogo.eagle.core.utilcode.breakpoint.callback.IDownload; diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/mogo/logger/scene/Scene.kt b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/mogo/logger/scene/Scene.kt index 2296f0c794..ba858110fb 100644 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/mogo/logger/scene/Scene.kt +++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/mogo/logger/scene/Scene.kt @@ -57,7 +57,7 @@ class Scene { val routeMap = SceneLogCache(mutableMapOf(), true) sceneCache[M_OLD_ROUTE] = routeMap //初始化其他模块,方便定位索引 - val otherMap = SceneLogCache(mutableMapOf(), false) + val otherMap = SceneLogCache(mutableMapOf(), true) sceneCache[M_OTHER] = otherMap //初始化TAXI val taxiMap = SceneLogCache(mutableMapOf(), true) diff --git a/foudations/mogo-commons/build.gradle b/foudations/mogo-commons/build.gradle index 40dba94f37..0a7b572142 100644 --- a/foudations/mogo-commons/build.gradle +++ b/foudations/mogo-commons/build.gradle @@ -58,15 +58,11 @@ dependencies { if (Boolean.valueOf(USE_MAVEN_PACKAGE)) { api rootProject.ext.dependencies.mogoaicloudservicesdk api rootProject.ext.dependencies.ttsbase - api rootProject.ext.dependencies.mogo_core_data - implementation rootProject.ext.dependencies.mogo_core_utils api rootProject.ext.dependencies.mogo_core_network } else { api project(":foudations:mogo-aicloud-services-sdk") api project(":tts:tts-base") - - implementation project(':core:mogo-core-utils') api project(':core:mogo-core-data') api project(':core:mogo-core-network') diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java index e8d509617b..534f80f4d6 100644 --- a/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java @@ -6,6 +6,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.tts.base.IMogoTTS; import com.mogo.tts.base.IMogoTTSCallback; +import com.mogo.tts.base.MultiLangTtsEntity; import com.mogo.tts.base.PreemptType; /** @@ -52,9 +53,24 @@ public class AIAssist { private AIAssist(Context context) { try { // 暂时换成反射,解决死锁问题 - Class clazz = Class.forName("com.mogo.tts.pad.PadTTS"); - mTTS = (IMogoTTS) clazz.getConstructor().newInstance(); - mTTS.init(context); + Class clazz1 = null; + Class clazz2 = null; + try { + clazz1 = Class.forName("com.mogo.tts.pad.PadTTS"); + } catch (Exception ignored) {} + + try { + clazz2 = Class.forName("com.mogo.tts.iflytek.IFlyTekTts"); + } catch (Exception ignored) {} + + if (clazz1 != null) { + mTTS = (IMogoTTS) clazz1.getConstructor().newInstance(); + } else if (clazz2 != null) { + mTTS = (IMogoTTS) clazz2.getConstructor().newInstance(); + } + if (mTTS != null) { + mTTS.init(context); + } // mTTS = (IMogoTTS) ARouter.getInstance().build(MogoTTSConstants.API_PATH).navigation(context.getApplicationContext()); } catch (Exception e) { e.printStackTrace(); @@ -101,7 +117,7 @@ public class AIAssist { */ public void speakTTSVoice(String text) { if (mTTS != null) { - mTTS.speakTTSVoice(text); + mTTS.speakTTSVoiceWithLevel(text, LEVEL0); } } @@ -122,6 +138,18 @@ public class AIAssist { } } + /** + * 支持多语言的Tts + * @param ttsEntity: 多语言Entity + * @param level: 等级由低到高为0、1、2、3,分别对应p3、p2、p1、p0 + * @param callback + */ + public void speakMultiLangTTSWithLevel(MultiLangTtsEntity ttsEntity, int level, IMogoTTSCallback callback) { + if (mTTS != null) { + mTTS.speakMultiLangTTSWithLevel(ttsEntity, level, callback); + } + } + /** * 语音播报 * diff --git a/gradle.properties b/gradle.properties index 89a64966b2..a561aea8b3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -63,26 +63,26 @@ BIZCONFIG_VERSION=1.3.2 SERVICE_BIZ_VERSION=1.2.4 ################ 外部依赖引用 ################ # loglib -LOGLIB_VERSION=1.5.10 +LOGLIB_VERSION=1.5.11 ######## MogoAiCloudSDK Version ######## # 网络请求LOGLIB_VERSION -MOGO_NETWORK_VERSION=1.4.4.8 +MOGO_NETWORK_VERSION=1.4.4.9 # 鉴权 -MOGO_PASSPORT_VERSION=1.4.4.8 +MOGO_PASSPORT_VERSION=1.4.4.9 # 常链接 -MOGO_SOCKET_VERSION=1.4.4.8 +MOGO_SOCKET_VERSION=1.4.4.9 # 数据采集 -MOGO_REALTIME_VERSION=1.4.4.8 +MOGO_REALTIME_VERSION=1.4.4.9 # 探路,道路事件发布,获取 -MOGO_TANLU_VERSION=1.4.4.8 +MOGO_TANLU_VERSION=1.4.4.9 # 直播推流 -MOGO_LIVE_VERSION=1.4.4.8 +MOGO_LIVE_VERSION=1.4.4.9 # 直播拉流 -MOGO_TRAFFICLIVE_VERSION=1.4.4.8 +MOGO_TRAFFICLIVE_VERSION=1.4.4.9 # 定位服务 -MOGO_LOCATION_VERSION=1.4.4.8 +MOGO_LOCATION_VERSION=1.4.4.9 # 远程通讯模块 -MOGO_TELEMATIC_VERSION=1.4.4.8 +MOGO_TELEMATIC_VERSION=1.4.4.9 ######## MogoAiCloudSDK Version ######## # 自研地图 MAP_SDK_VERSION=2.10.0.9 @@ -123,6 +123,7 @@ TTS_DI_VERSION=2.1.16.10 TTS_ZHI_VERSION=2.1.16.10 TTS_PAD_VERSION=2.1.16.10 TTS_NOOP_VERSION=2.1.16.10 +TTS_IFLYTEK_VERSION=2.1.16.10 # 自研地图 MAP_CUSTOM_VERSION=2.1.16.10 diff --git a/gradle/uploadsdk.gradle b/gradle/uploadsdk.gradle new file mode 100644 index 0000000000..1da0e1cf8e --- /dev/null +++ b/gradle/uploadsdk.gradle @@ -0,0 +1,74 @@ +apply plugin: 'maven' +apply plugin: 'maven-publish' + +task loggerSourcesJar(type: Jar) { + classifier = 'sources' + if (plugins.hasPlugin("java-library")) { + from sourceSets.main.java.srcDirs + } else if (plugins.hasPlugin("com.android.library")) { + from android.sourceSets{ + main{ + java{ + com.mogo.eagle.core.function.datacenter + } + } + } + } else if (plugins.hasPlugin('groovy')) { + from sourceSets.main.groovy.srcDirs + } +} + +artifacts { + archives loggerSourcesJar +} + +task loggerUpload(dependsOn: [uploadArchives, loggerSourcesJar]) { +} + +uploadArchives { + repositories { + mavenDeployer { + + println project.name + + String versionNameKey = "${project.name.replace("-", "_").toUpperCase()}_VERSION" + String versionName = getVersionNameValue(versionNameKey) + println versionName + + if (versionName == null || versionName.equals("")) { + project.logger.error("undefined versionName in root gradle.properties by ${versionNameKey}") + } + + pom.project { + packaging = 'aar' + groupId = GROUP + artifactId = POM_ARTIFACT_ID + version = versionName + } + + repository(url: rootProject.RELEASE_REPOSITORY_URL) { + authentication(userName: rootProject.USERNAME, password: rootProject.PASSWORD) + } + + snapshotRepository(url: rootProject.SNAPSHOT_REPOSITORY_URL) { + authentication(userName: rootProject.USERNAME, password: rootProject.PASSWORD) + } + } + } +} + +def getVersionNameValue(String key) { + File file = rootProject.file('gradle.properties') + String value = "" + if (file.exists()) { + //加载资源 + InputStream inputStream = file.newDataInputStream(); + Properties properties = new Properties() + properties.load(inputStream) + + if (properties.containsKey(key)) { + value = properties.getProperty(key) + } + } + return value +} diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MogoReport.java b/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/data/bean/MogoReport.java similarity index 99% rename from libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MogoReport.java rename to libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/data/bean/MogoReport.java index 3365f70734..c0dcddf7ad 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MogoReport.java +++ b/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/data/bean/MogoReport.java @@ -1,4 +1,4 @@ -package com.zhidao.support.adas.high.common; +package com.zhjt.mogo.adas.data.bean; /** * 监控事件报告中定义的事件以及解释 diff --git a/libraries/mogo-adas/build.gradle b/libraries/mogo-adas/build.gradle index d862918df2..ec4c1cd795 100644 --- a/libraries/mogo-adas/build.gradle +++ b/libraries/mogo-adas/build.gradle @@ -71,18 +71,7 @@ dependencies { implementation rootProject.ext.dependencies.mogoservicebiz //okhttp3的依赖 implementation 'com.squareup.okhttp3:okhttp:3.12.3' - // parser -// implementation rootProject.ext.dependencies.gson implementation project(':libraries:mogo-adas-data') - // logger - //implementation 'com.orhanobut:logger:2.2.0' - //ProtoBuf -// implementation 'com.google.protobuf:protobuf-java:3.6.1' -// implementation 'com.google.protobuf:protoc:3.6.1' -// implementation 'com.google.protobuf:protobuf-java-util:3.6.1' - -// api project(path: ':lib_recorder') -// api "com.zhidao.support.recorder:recorder:1.0.0.3" } task androidSourcesJar(type: Jar) { 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 3c38a18599..dcdc047c72 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 @@ -4,6 +4,9 @@ import com.zhidao.support.adas.high.common.autopilot.ability.AutopilotAbilityMan import com.zhidao.support.adas.high.subscribe.SubscribeInterfaceOptions; import java.util.HashSet; +import java.util.Set; + +import chassis.Chassis; /** * Date:2019/5/31。 @@ -126,13 +129,13 @@ public class AdasOptions { } /** - * 身份/车型 + * 不能启动自驾的档位 * - * @param identityMode 车型 + * @param unableLaunchAutopilotGear 档位 * @return */ - public Builder setIdentityMode(String identityMode) { - options.setIdentityMode(identityMode); + public Builder setUnableLaunchAutopilotGear(Set unableLaunchAutopilotGear) { + options.setUnableLaunchAutopilotGear(unableLaunchAutopilotGear); return this; } @@ -153,7 +156,7 @@ public class AdasOptions { options.ipcAssignIP = null; options.ipcFixationIP = null; options.subscribeInterfaceOptions = null; - options.setIdentityMode(""); + options.setUnableLaunchAutopilotGear(null); return options; } @@ -197,7 +200,7 @@ public class AdasOptions { this.subscribeInterfaceOptions = subscribeInterfaceOptions; } - public void setIdentityMode(String identityMode) { - AutopilotAbilityManager.getInstance().setIdentityMode(identityMode); + public void setUnableLaunchAutopilotGear(Set unableLaunchAutopilotGear) { + AutopilotAbilityManager.getInstance().setUnableLaunchAutopilotGear(unableLaunchAutopilotGear); } } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/chain/AdasChain.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/chain/AdasChain.java index f67d0f3f3d..7289402419 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/chain/AdasChain.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/chain/AdasChain.java @@ -5,7 +5,7 @@ public class AdasChain { public static final int CHAIN_LINK_ADAS = 1; public static final int CHAIN_LINK_LOG_CONNECT_STATUS = 0; - public static final int CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT = 1; + public static final int CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT = 2; public static final String CHAIN_ALIAS_CODE_INIT = "PAD_ADAS_INIT"; public static final String CHAIN_ALIAS_CODE_STATUS_CHANGE_REASON = "CHAIN_ALIAS_CODE_STATUS_CHANGE_REASON"; 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 9c6ce3ea4c..d6e4188abc 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 @@ -1,10 +1,7 @@ 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; @@ -31,10 +28,6 @@ public class AutopilotAbility230 { } private void onCallback() { - //金旅、开沃小巴乘客端 不能启动自动驾驶 - if (AutopilotAbilityManager.getInstance().isBusPassenger()) { - return; - } boolean isAutopilotAbility = true;//是否能启动自动驾驶 String unableAutopilotReason = null;//不能启动自动驾驶原因 //检测底盘相关 @@ -47,36 +40,14 @@ public class AutopilotAbility230 { } } if (isAutopilotAbility) { - /** - * 档位状态判断 目前判断的车型包括 东风Taxi 红旗Taxi 金旅Bus 金旅M1 金旅M1 福田清扫车 开沃 - * TODO 如果 identityMode 未赋值以及目前已知其他车型判断逻辑跟东风Taxi和红旗 走 - */ - //开沃任何档位都能启动自驾 - if (!AutopilotAbilityManager.getInstance().isBusDriverVan()) { - if (chassisStates.hasGearSystemStates()) { - Chassis.GearPosition gear = chassisStates.getGearSystemStates().getGearPosition(); - //金旅Bus和清扫车 档位不正常 - if (AutopilotAbilityManager.getInstance().isBusDriver()) { - if (gear == Chassis.GearPosition.GEAR_N || gear == Chassis.GearPosition.GEAR_R) { - isAutopilotAbility = false; - unableAutopilotReason = "档位不正常"; - } - } else if (AutopilotAbilityManager.getInstance().isSweeperDriverFutian()) { - 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 = "档位不正常"; - } - } + if (chassisStates.hasGearSystemStates()) { + Chassis.GearPosition gear = chassisStates.getGearSystemStates().getGearPosition(); + if (!AutopilotAbilityManager.getInstance().isLaunchAutopilot(gear)) { + isAutopilotAbility = false; + unableAutopilotReason = "档位不正常"; } } } - //TODO 关于手刹:不同车型的实现不同所以目前没法使用此字段 // if (isAutopilotAbility) { // //电子驻车制动系统 @@ -88,9 +59,7 @@ public class AutopilotAbility230 { // } // } } - if (AutopilotAbilityManager.getInstance().getListener() != null) { - AutopilotAbilityManager.getInstance().getListener().onAutopilotAbility(isAutopilotAbility, unableAutopilotReason); - } + AutopilotAbilityManager.getInstance().onAutopilotAbility(isAutopilotAbility, unableAutopilotReason); } public synchronized void start() { @@ -114,5 +83,4 @@ public class AutopilotAbility230 { } - } 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 01bf359101..0c459e56a6 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 @@ -45,10 +45,6 @@ public class AutopilotAbility250 { } private void onCallback(SystemStatusInfo.StatusInfo statusInfo) { - //金旅、开沃小巴乘客端 不能启动自动驾驶 - if (AutopilotAbilityManager.getInstance().isBusPassenger()) { - return; - } boolean isAutopilotAbility = true;//是否能启动自动驾驶 String unableAutopilotReason = null;//不能启动自动驾驶原因 //检测节点状态相关 @@ -122,36 +118,14 @@ public class AutopilotAbility250 { } } if (isAutopilotAbility) { - /** - * 档位状态判断 目前判断的车型包括 东风Taxi 红旗Taxi 金旅Bus 金旅M1 金旅M1 福田清扫车 开沃 - * TODO 如果 identityMode 未赋值以及目前已知其他车型判断逻辑跟东风Taxi和红旗 走 - */ - //开沃任何档位都能启动自驾 - if (!AutopilotAbilityManager.getInstance().isBusDriverVan()) { - if (chassisStates.hasGearSystemStates()) { - Chassis.GearPosition gear = chassisStates.getGearSystemStates().getGearPosition(); - //金旅Bus和清扫车 档位不正常 - if (AutopilotAbilityManager.getInstance().isBusDriver()) { - if (gear == Chassis.GearPosition.GEAR_N || gear == Chassis.GearPosition.GEAR_R) { - isAutopilotAbility = false; - unableAutopilotReason = "档位不正常"; - } - } else if (AutopilotAbilityManager.getInstance().isSweeperDriverFutian()) { - 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 = "档位不正常"; - } - } + if (chassisStates.hasGearSystemStates()) { + Chassis.GearPosition gear = chassisStates.getGearSystemStates().getGearPosition(); + if (!AutopilotAbilityManager.getInstance().isLaunchAutopilot(gear)) { + isAutopilotAbility = false; + unableAutopilotReason = "档位不正常"; } } } - //TODO 关于手刹:不同车型的实现不同所以目前没法使用此字段 // if (isAutopilotAbility) { // //电子驻车制动系统 @@ -163,9 +137,7 @@ public class AutopilotAbility250 { // } // } } - if (AutopilotAbilityManager.getInstance().getListener() != null) { - AutopilotAbilityManager.getInstance().getListener().onAutopilotAbility(isAutopilotAbility, unableAutopilotReason); - } + AutopilotAbilityManager.getInstance().onAutopilotAbility(isAutopilotAbility, unableAutopilotReason); } public synchronized void start() { 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 1e80fe6805..5ba1d3d65b 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 @@ -3,18 +3,19 @@ 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.Set; 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 mogo.telematics.pad.MessagePad; import system_master.SystemStatusInfo; @@ -38,37 +39,14 @@ public class AutopilotAbilityManager { private AutopilotAbility250 autopilotAbility250; private Timer startTimer; /** - * 身份/车型 + * 不能启动自动驾驶的档位 */ - private String identityMode; + private Set unableLaunchAutopilotGear; public interface OnAutopilotAbilityListener { void onStatusQuery();//查询是被调用 } - /** - * 身份规则定义根据app/productFlavors/README.md - * * taxi司机屏 Taxi_Driver_Base (东风、红旗司机端) - * * taxi乘客屏 Taxi_Passenger_Base (东风、红旗乘客端) - * * bus司机屏 Bus_Driver_Base (金旅小巴司机端) - * * Bus_Driver_Van (开沃小巴司机端) - * * bus乘客屏 Bus_Passenger_Base (金旅、开沃小巴乘客端) - * * Bus_Passenger_M1 (M1小巴乘客端) - * * Bus_Passenger_M2 (M2小巴乘客端) - * * 清扫车 Sweeper_Driver_FT (福田清扫车司机端) - *

- * 此定义不区分角色,只区分业务线和车型 - */ - private interface IDENTITY_MODE { - String TAXI_DRIVER_BASE = "Taxi_Driver_Base";//(东风、红旗司机端) - String TAXI_PASSENGER_BASE = "Taxi_Passenger_Base";//(东风、红旗乘客端) - String BUS_DRIVER_BASE = "Bus_Driver_Base";//(金旅小巴司机端) - String BUS_DRIVER_VAN = "Bus_Driver_Van";//(开沃小巴司机端) - String BUS_PASSENGER_BASE = "Bus_Passenger_Base";//(金旅、开沃小巴乘客端) - String BUS_PASSENGER_M1 = "Bus_Passenger_M1";//(M1小巴乘客端) - String BUS_PASSENGER_M2 = "Bus_Passenger_M2";//(M2小巴乘客端) - String SWEEPER_DRIVER_FT = "Sweeper_Driver_FT";//(福田清扫车司机端) - } private AutopilotAbilityManager() { } @@ -84,8 +62,22 @@ public class AutopilotAbilityManager { return INSTANCE; } - public void setIdentityMode(String identityMode) { - this.identityMode = identityMode; + public void setUnableLaunchAutopilotGear(Set unableLaunchAutopilotGear) { + this.unableLaunchAutopilotGear = unableLaunchAutopilotGear; + } + + /** + * 获取当前档位是否能启动自动驾驶 如果不传递默认可以启动 + * 不能启动自驾档位规则:app/README.md/不能启动自动驾驶的档位 + * + * @param currentGear 当前档位 + * @return 是否能启动自驾 + */ + public boolean isLaunchAutopilot(Chassis.GearPosition currentGear) { + if (unableLaunchAutopilotGear != null && !unableLaunchAutopilotGear.isEmpty()) { + return !unableLaunchAutopilotGear.contains(currentGear); + } + return true; } public void setCarConfig(MessagePad.CarConfigResp carConfig) { @@ -95,7 +87,7 @@ public class AutopilotAbilityManager { if (version != -1) { stopTimer(); dockerVersion = version; - Log.i("dddd", "工控机版本=" + dockerVersion); + CupidLogUtils.i(TAG, "工控机版本=" + dockerVersion); initAutopilotAbility(); } } @@ -105,8 +97,10 @@ public class AutopilotAbilityManager { this.listener = listener; } - public OnAdasListener getListener() { - return listener; + public void onAutopilotAbility(boolean isAutopilotAbility, String unableAutopilotReason) { + if (listener != null) { + listener.onAutopilotAbility(isAutopilotAbility, unableAutopilotReason); + } } public void setHandler(Handler handler) { @@ -243,32 +237,4 @@ public class AutopilotAbilityManager { } return version; } - - /** - * 金旅、开沃小巴乘客端 - */ - public boolean isBusPassenger() { - return IDENTITY_MODE.BUS_PASSENGER_BASE.equalsIgnoreCase(identityMode); - } - - /** - * 开沃小巴司机端 - */ - public boolean isBusDriverVan() { - return IDENTITY_MODE.BUS_DRIVER_VAN.equalsIgnoreCase(identityMode); - } - - /** - * 金旅小巴司机端 - */ - public boolean isBusDriver() { - return IDENTITY_MODE.BUS_DRIVER_BASE.equalsIgnoreCase(identityMode); - } - - /** - * 福田清扫车司机端 - */ - public boolean isSweeperDriverFutian() { - return IDENTITY_MODE.SWEEPER_DRIVER_FT.equalsIgnoreCase(identityMode); - } } 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 e146fca77c..e939c4c5ce 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 @@ -7,7 +7,7 @@ import com.zhidao.support.adas.high.AdasChannel; import com.zhidao.support.adas.high.OnAdasListener; import com.zhidao.support.adas.high.common.AutopilotReview; import com.zhidao.support.adas.high.common.CupidLogUtils; -import com.zhidao.support.adas.high.common.MogoReport; +import com.zhjt.mogo.adas.data.bean.MogoReport; import com.zhidao.support.adas.high.protocol.RawData; import java.util.HashSet; diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.java index 07ba7245d8..5fad00ad88 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.java @@ -46,6 +46,11 @@ public interface IMogoMap { */ IMogoMarker addMarker(String tag, MogoMarkerOptions options); + /** + * 清除所有marker + */ + void clearAllMarkers(); + /** * 批量更新锚点位置 * diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarkerManager.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarkerManager.java index 8e7e2db59f..f4c23bb89b 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarkerManager.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarkerManager.java @@ -38,6 +38,11 @@ public interface IMogoMarkerManager { */ List addMarkers(String tag, ArrayList options, boolean moveToCenter); + /** + * 清除所有marker + */ + void clearAllMarker(); + /** * 批量更新锚点位置 * diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.java b/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.java index d471356be8..bdb37aee1a 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.java @@ -6,7 +6,6 @@ import android.graphics.Point; import android.util.Pair; import com.mogo.eagle.core.data.config.FunctionBuildConfig; -import com.mogo.eagle.core.data.map.MogoLatLng; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.map.center.CenterLine; import com.mogo.map.marker.AMapInfoWindowAdapter; @@ -108,6 +107,13 @@ public class AMapWrapper implements IMogoMap { return mogoMarker; } + @Override + public void clearAllMarkers() { + if (sAMap != null) { + sAMap.clearAllMarkers(); + } + } + @SuppressLint("NewApi") @Override public void updateBatchMarkerPosition(HashMap optionsArrayList) { diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMarkerManager.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMarkerManager.java index ceb1a65a6b..db9333517e 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMarkerManager.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMarkerManager.java @@ -71,6 +71,15 @@ public class MogoMarkerManager implements IMogoMarkerManager { } } + @Override + public void clearAllMarker() { + try{ + MogoMap.getInstance().getMogoMap().clearAllMarkers(); + }catch (Exception e){ + e.printStackTrace(); + } + } + @Override public void updateBatchMarkerPosition(HashMap optionsArrayList) { try { diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/location/GDLocationClient.kt b/libraries/mogo-map/src/main/java/com/mogo/map/location/GDLocationClient.kt index 8945ded1cf..12c3dbaa96 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/location/GDLocationClient.kt +++ b/libraries/mogo-map/src/main/java/com/mogo/map/location/GDLocationClient.kt @@ -107,11 +107,23 @@ class GDLocationClient private constructor(context: Context) : AMapLocationListe CallerGaoDeMapLocationListenerManager.invokeMoGoLocationChanged(lastGaoDeLocation) mapLocation = aMapLocation + // 本地SP缓存城市Code val cityCode = aMapLocation.cityCode - if (cityCode != null && !cityCode.isEmpty()) { + if (cityCode != null && cityCode.isNotEmpty()) { mCityCode = aMapLocation.cityCode SharedPrefsMgr.getInstance(AbsMogoApplication.getApp()) .putString(SharedPrefsConstants.LOCATION_CITY_CODE, cityCode) + + SharedPrefsMgr.getInstance(AbsMogoApplication.getApp()) + .putString( + SharedPrefsConstants.LOCATION_LATITUDE, + aMapLocation.latitude.toString() + ) + SharedPrefsMgr.getInstance(AbsMogoApplication.getApp()) + .putString( + SharedPrefsConstants.LOCATION_LONGITUDE, + aMapLocation.longitude.toString() + ) } } diff --git a/libraries/mogo-obu/src/main/java/com/zhidao/support/obu/ObuManager.java b/libraries/mogo-obu/src/main/java/com/zhidao/support/obu/ObuManager.java index 9af04efdeb..2c95eb0da2 100644 --- a/libraries/mogo-obu/src/main/java/com/zhidao/support/obu/ObuManager.java +++ b/libraries/mogo-obu/src/main/java/com/zhidao/support/obu/ObuManager.java @@ -17,6 +17,7 @@ import com.mogo.support.obu.model.MogoObuRsiWarningData; import com.mogo.support.obu.model.MogoObuRsmWarningData; import com.mogo.support.obu.model.MogoObuRvWarningData; import com.mogo.support.obu.model.MogoObuSpatWarningData; +import com.mogo.support.obu.model.MogoObuSystemBConfigData; import com.mogo.support.obu.model.advance.AccFourAxes; import com.mogo.support.obu.model.advance.DateTime; import com.mogo.support.obu.model.advance.NodeId; @@ -107,14 +108,13 @@ public class ObuManager { /** * 获取当前OBU软件版本 - * 需主动调用获取{@link MogoObuManager#getObuVersion(Context, String, OnUpgradeListener)} * * @return 版本 null表示 无法连接OBU;无法获取版本; * @since 1.1.0 */ @Nullable - public String getObuVersion() { - return MogoObuManager.getInstance().getObuVersion(); + public MogoObuSystemBConfigData getObuSystemBConfig() { + return MogoObuManager.getInstance().getObuSystemBConfig(); } /** @@ -271,64 +271,43 @@ public class ObuManager { /** - * 检查更新 + * 获取OBu配置信息 * * @param obuIp OBU IP * @param listener 升级回调 - * @since 1.1.0 - */ - public boolean checkObuUpgrade(@NonNull Context context, @NonNull String obuIp, OnUpgradeListener listener) { - return MogoObuManager.getInstance().checkObuUpgrade(context, obuIp, listener); - } - - /** - * 检查更新 - * - * @param context 上下文 - * @param obuIp OBU IP - * @param isUpgradeNow 是否立即升级 - * false:OBU设备下次上电时执行升级程序 - * ture: OBU设备立即执行升级程序 TODO 警告:执行立即升级时请确保车辆是静止状态。车辆在运行过程中升级设备可能会影响驾驶,严重时可能造成安全隐患!!! - * @param listener 升级回调 - * @return 是否调用成功 - * @since 1.1.0 - */ - public boolean checkObuUpgrade(@NonNull Context context, @NonNull String obuIp, boolean isUpgradeNow, OnUpgradeListener listener) { - return MogoObuManager.getInstance().checkObuUpgrade(context, obuIp, isUpgradeNow, listener); - } - - /** - * 获取当前连接OBU的版本号 - * 如果调用 {@link MogoObuManager#checkObuUpgrade(Context, String, OnUpgradeListener)}方法可以不用调用此方法,检查更新会获取版本号 - * - * @param context 上下文 - * @param obuIp OBU IP - * @param listener 升级回调 * @return 是否调用成功 * @since 1.1.0 */ - public boolean getObuVersion(@NonNull Context context, @NonNull String obuIp, OnUpgradeListener listener) { - return MogoObuManager.getInstance().getObuVersion(context, obuIp, listener); + public boolean readSystemBConfig(Context context, @NonNull String obuIp, OnUpgradeListener listener) { + return MogoObuManager.getInstance().readSystemBConfig(context, obuIp, listener); } /** - * 传入升级包版本 + * 上传升级包到OBU 非立即执行升级程序 * - * @param newVersion 升级包版本 + * @param obuIp OBU IP + * @param upgradePackage 升级包文件绝对路径 只能包含 升级包MD5文件和升级包文件 + * @param listener 升级回调 * @since 1.1.0 */ - public void setObuUpgradePackageVersion(@NonNull String newVersion) { - MogoObuManager.getInstance().setObuUpgradePackageVersion(newVersion); + public boolean uploadUpgradePackage(@NonNull String obuIp, @NonNull String[] upgradePackage, OnUpgradeListener listener) { + return MogoObuManager.getInstance().uploadUpgradePackage(obuIp, upgradePackage, false, listener); } /** - * 传入升级包 + * 上传升级包到OBU * - * @param newUpgradePackage 升级包文件绝对路径 只能包含 升级包MD5文件和升级包文件 + * @param obuIp OBU IP + * @param upgradePackage 升级包文件绝对路径 只能包含 升级包MD5文件和升级包文件 + * @param isUpgradeNow 是否立即升级 + * false:OBU设备下次上电时执行升级程序 + * ture: OBU设备立即执行升级程序 TODO 警告:执行立即升级时请确保车辆是静止状态。车辆在运行过程中升级设备可能会影响驾驶,严重时可能造成安全隐患!!! + * @param listener 升级回调 + * @return 是否调用成功 * @since 1.1.0 */ - public void setObuUpgradePackage(@NonNull String[] newUpgradePackage) { - MogoObuManager.getInstance().setObuUpgradePackage(newUpgradePackage); + public boolean uploadUpgradePackage(@NonNull String obuIp, @NonNull String[] upgradePackage, boolean isUpgradeNow, OnUpgradeListener listener) { + return MogoObuManager.getInstance().uploadUpgradePackage(obuIp, upgradePackage, isUpgradeNow, listener); } /** @@ -336,10 +315,11 @@ public class ObuManager { * * @since 1.1.0 */ - public void stopObuUpgrade() { - MogoObuManager.getInstance().stopObuUpgrade(); + public void stopProcess() { + MogoObuManager.getInstance().stopProcess(); } + private final OnMogoObuListener mogoObuListener = new OnMogoObuListener() { @Override public void onConnectStatus(int connectStatus) { diff --git a/libraries/mogo-obu/src/main/java/com/zhidao/support/obu/Test.java b/libraries/mogo-obu/src/main/java/com/zhidao/support/obu/Test.java deleted file mode 100644 index ae77b6d424..0000000000 --- a/libraries/mogo-obu/src/main/java/com/zhidao/support/obu/Test.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.zhidao.support.obu; - -import com.mogo.support.obu.constants.MogoObuConstants; -import com.mogo.support.obu.model.MogoObuHvBasicsData; -import com.mogo.support.obu.model.advance.AccFourAxes; -import com.mogo.support.obu.model.advance.VehBasics; -import com.mogo.support.obu.model.advance.VehControl; -import com.mogo.support.obu.model.advance.VehSize; - -public class Test { - - private int have(int unitMask, int mask) { - unitMask += mask; - return unitMask; - } - - public void buildMogoObuHvBasicsData() { - int vehBasicsUnitMask = 0; - vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.ID); - vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.SEC_MARK); - vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.LATITUDE); - vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.LONGITUDE); - vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.ELEVATION); - vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.SPEED); - vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.HEADING); - vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.ACC_FOUR_AXES); - vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.VEH_SIZE); - vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.VEH_CLASS); - vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.VEH_CONTROL_MSG); - vehBasicsUnitMask = have(vehBasicsUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.TARGET_POSITION); - VehBasics vehBasics = new VehBasics(vehBasicsUnitMask); - vehBasics.setId("aaa"); - vehBasics.setLatitude(10000000); - vehBasics.setLongitude(20000000); - vehBasics.setElevation(2000); - vehBasics.setSpeed(3000); - vehBasics.setHeading(4000); - vehBasics.setAccFourAxes(new AccFourAxes(200, 201, 202, 203)); - vehBasics.setVehSize(new VehSize(300, 301, 302)); - vehBasics.setVehClass(303); - - int vehControlUnitMask = 0; - vehControlUnitMask = have(vehControlUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_CONTROL.BRAKE_PEDAL_STATUS); - vehControlUnitMask = have(vehControlUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_CONTROL.TRANSMISSION_STATUS); - vehControlUnitMask = have(vehControlUnitMask, MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_CONTROL.EXTERIOR_LIGHTS); - VehControl vehControl = new VehControl(vehControlUnitMask); - vehControl.setBrakePedalStatus(401); - vehControl.setTransmissionStatus(402); - vehControl.setExteriorLights(403); - vehBasics.setVehControlMsg(vehControl); - vehBasics.setTargetPosition(8); - MogoObuHvBasicsData data = new MogoObuHvBasicsData(1, vehBasics); - } -} diff --git a/libraries/mogo-obu/src/main/res/values/strings.xml b/libraries/mogo-obu/src/main/res/values/strings.xml deleted file mode 100644 index 1be2af6934..0000000000 --- a/libraries/mogo-obu/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - mogo-obu - diff --git a/settings.gradle b/settings.gradle index b04aa2b3f4..253517d62f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -50,6 +50,7 @@ include ':libraries:mogo-obu' // 语音 include ':tts:tts-base' include ':tts:tts-pad' +include ':tts:tts-iflytek' // 测试DEBUG include ':test:crashreport' diff --git a/test/crashreport-apmbyte/src/main/java/com/mogo/test/crashreport/apm/ApmCrashReportProvider.java b/test/crashreport-apmbyte/src/main/java/com/mogo/test/crashreport/apm/ApmCrashReportProvider.java index 40bab898f4..407880933c 100644 --- a/test/crashreport-apmbyte/src/main/java/com/mogo/test/crashreport/apm/ApmCrashReportProvider.java +++ b/test/crashreport-apmbyte/src/main/java/com/mogo/test/crashreport/apm/ApmCrashReportProvider.java @@ -1,7 +1,6 @@ package com.mogo.test.crashreport.apm; import android.content.Context; -import android.util.Log; import com.alibaba.android.arouter.facade.annotation.Route; import com.apm.insight.AttachUserData; @@ -59,7 +58,6 @@ public class ApmCrashReportProvider implements ITestCrashReportProvider { boolean isDebug = DebugConfig.isDebug(); if (provider != null) { Boolean enabled = provider.isDebugEnabled(); - Log.d("ApmCrashReportProvider", "--- isDebugEnabled:" + enabled); if (enabled != null) { isDebug = enabled; } @@ -80,7 +78,6 @@ public class ApmCrashReportProvider implements ITestCrashReportProvider { mCityCode = SharedPrefsMgr.getInstance(context).getString(SharedPrefsConstants.LOCATION_CITY_CODE); mLat = SharedPrefsMgr.getInstance(context).getString(SharedPrefsConstants.LOCATION_LATITUDE); mLogt = SharedPrefsMgr.getInstance(context).getString(SharedPrefsConstants.LOCATION_LONGITUDE); -// Log.d(TAG, "cityCode = " + mCityCode + " --lat = " +mLat + " --logt = " + mLogt); //地图版本 String mapSDKVersion = DebugConfig.getMapVersion(); map.put("MAP_SDK_VERSION", mapSDKVersion); diff --git a/tts/tts-base/src/main/java/com/mogo/tts/base/IMogoTTS.java b/tts/tts-base/src/main/java/com/mogo/tts/base/IMogoTTS.java index c6940c17a7..03334594db 100644 --- a/tts/tts-base/src/main/java/com/mogo/tts/base/IMogoTTS.java +++ b/tts/tts-base/src/main/java/com/mogo/tts/base/IMogoTTS.java @@ -64,6 +64,12 @@ interface IMogoTTS extends IProvider { */ void speakTTSVoice( String tts, PreemptType type, IMogoTTSCallback callback ); + void speakMultiLangTTSWithLevel( + MultiLangTtsEntity ttsEntity, + int level, + IMogoTTSCallback callback + ); + void stopSpeakTts(String text); void stopTts(); diff --git a/tts/tts-base/src/main/java/com/mogo/tts/base/LanguageType.kt b/tts/tts-base/src/main/java/com/mogo/tts/base/LanguageType.kt new file mode 100644 index 0000000000..887dadc17e --- /dev/null +++ b/tts/tts-base/src/main/java/com/mogo/tts/base/LanguageType.kt @@ -0,0 +1,7 @@ +package com.mogo.tts.base + +enum class LanguageType(val langName: String) { + CHINESE("chinese"), + ENGLISH("english"), + KOREAN("korean") +} \ No newline at end of file diff --git a/tts/tts-base/src/main/java/com/mogo/tts/base/MultiLangTtsEntity.kt b/tts/tts-base/src/main/java/com/mogo/tts/base/MultiLangTtsEntity.kt new file mode 100644 index 0000000000..eec6615703 --- /dev/null +++ b/tts/tts-base/src/main/java/com/mogo/tts/base/MultiLangTtsEntity.kt @@ -0,0 +1,42 @@ +package com.mogo.tts.base + +data class MultiLangTtsEntity( + private var ttsList: List +) { + private val stringBuffer by lazy { + StringBuffer() + } + + private var ttsIndex = 0 + + fun ttsNext(): LangTtsEntity? { + return if (ttsIndex in ttsList.indices) { + ttsList[ttsIndex++] + } else { + null + } + } + + override fun toString(): String { + return stringBuffer.let { + it.setLength(0) + ttsList.forEachIndexed { index, langTtsEntity -> + if (index != ttsList.size - 1) { + it.append("${langTtsEntity};") + } else { + it.append(langTtsEntity) + } + } + it.toString() + } + } +} + +data class LangTtsEntity( + var ttsContent: String, + var language: LanguageType +) { + override fun toString(): String { + return "ttsContent is:$ttsContent,language is:${language.langName}" + } +} \ No newline at end of file diff --git a/tts/tts-iflytek/.gitignore b/tts/tts-iflytek/.gitignore new file mode 100644 index 0000000000..42afabfd2a --- /dev/null +++ b/tts/tts-iflytek/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/tts/tts-iflytek/build.gradle b/tts/tts-iflytek/build.gradle new file mode 100644 index 0000000000..5b3aae988a --- /dev/null +++ b/tts/tts-iflytek/build.gradle @@ -0,0 +1,62 @@ +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") + + 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' + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + implementation fileTree(dir: "libs", include: ["*.jar"]) + implementation rootProject.ext.dependencies.androidxappcompat + + implementation rootProject.ext.dependencies.arouter + kapt rootProject.ext.dependencies.aroutercompiler + + api rootProject.ext.dependencies.aiassist + api rootProject.ext.dependencies.aiassistReplace + + if (Boolean.valueOf(USE_MAVEN_PACKAGE)) { + implementation rootProject.ext.dependencies.ttsbase + implementation rootProject.ext.dependencies.mogo_core_utils + } else { + implementation project(":tts:tts-base") + implementation project(':core:mogo-core-utils') + } +} + +apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString() \ No newline at end of file diff --git a/tts/tts-iflytek/consumer-rules.pro b/tts/tts-iflytek/consumer-rules.pro new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tts/tts-iflytek/gradle.properties b/tts/tts-iflytek/gradle.properties new file mode 100644 index 0000000000..42e1ef3b19 --- /dev/null +++ b/tts/tts-iflytek/gradle.properties @@ -0,0 +1,3 @@ +GROUP=com.mogo.tts +POM_ARTIFACT_ID=tts-iflytek +VERSION_CODE=1 diff --git a/tts/tts-iflytek/libs/Msc.jar b/tts/tts-iflytek/libs/Msc.jar new file mode 100644 index 0000000000..fe502fb3e5 Binary files /dev/null and b/tts/tts-iflytek/libs/Msc.jar differ diff --git a/tts/tts-iflytek/proguard-rules.pro b/tts/tts-iflytek/proguard-rules.pro new file mode 100644 index 0000000000..481bb43481 --- /dev/null +++ b/tts/tts-iflytek/proguard-rules.pro @@ -0,0 +1,21 @@ +# 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/tts/tts-iflytek/src/main/AndroidManifest.xml b/tts/tts-iflytek/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..098e30a5d9 --- /dev/null +++ b/tts/tts-iflytek/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/tts/tts-iflytek/src/main/java/com/mogo/tts/iflytek/IFlyTekTts.kt b/tts/tts-iflytek/src/main/java/com/mogo/tts/iflytek/IFlyTekTts.kt new file mode 100644 index 0000000000..f0752af30c --- /dev/null +++ b/tts/tts-iflytek/src/main/java/com/mogo/tts/iflytek/IFlyTekTts.kt @@ -0,0 +1,378 @@ +package com.mogo.tts.iflytek + +import android.content.Context +import android.os.Bundle +import android.os.Looper +import android.util.Pair +import androidx.annotation.Keep +import com.iflytek.cloud.* +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.i +import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.tts.base.* +import java.util.* + +@Keep +class IFlyTekTts : IMogoTTS, InitListener { + companion object { + const val TAG = "IFlyTekTts" + } + + private var context: Context? = null + + private var ttsEngine: SpeechSynthesizer? = null + private var engineType = SpeechConstant.TYPE_CLOUD + + private var voicer: String = "xiaoyan" + private var voicerEntries: Array? = null + + // 等级由低到高为0、1、2、3,默认为-1表示没有正在tts的 + private var curTtsLevel = -1 + + // 由于主动打断不会有回调事件,所以主动打断时清掉map中被打断的text和callback + private var curTtsContent = "" + private var curTtsEntity: MultiLangTtsEntity? = null + private val linkedList = LinkedList>() + + // 上一次语音合成的语言 + private var lastLang = LanguageType.CHINESE + + private val speakVoiceMap by lazy { + HashMap() + } + + override fun init(context: Context) { + this.context = context + + // 应用程序入口处调用,避免手机内存过小,杀死后台进程后通过历史intent进入Activity造成SpeechUtility对象为null + // 如在Application中调用初始化,需要在Mainifest中注册该Applicaiton + // 注意:此接口在非主进程调用会返回null对象,如需在非主进程使用语音功能,请增加参数:SpeechConstant.FORCE_LOGIN+"=true" + // 参数间使用半角“,”分隔。 + // 设置你申请的应用appid,请勿在'='与appid之间添加空格及空转义符 + // 注意: appid 必须和下载的SDK保持一致,否则会出现10407错误 + SpeechUtility.createUtility(context, "appid=0c498b42") + ttsEngine = SpeechSynthesizer.createSynthesizer(context, this) + voicerEntries = context.resources?.getStringArray(R.array.voicer_cloud_values) + } + + override fun initTts(sn: String?) {} + + override fun onInit(code: Int) { + if (code != ErrorCode.SUCCESS) { + CallerLogger.e( + TAG, + "初始化失败,错误码为:$code,请点击网址https://www.xfyun.cn/document/error-code查询解决方案" + ) + } + } + + override fun release() { + ttsEngine?.stopSpeaking() + ttsEngine?.destroy() + } + + override fun flush() { + } + + override fun speakTTSVoice(tts: String?) { + + } + + override fun speakTTSVoice(tts: String?, callback: IMogoTTSCallback?) { + } + + override fun speakTTSVoice(tts: String?, type: PreemptType?, callback: IMogoTTSCallback?) { + } + + override fun speakTTSVoiceWithLevel(tts: String?, level: Int) { + speakTTSVoiceWithLevel(tts, level, null) + } + + override fun speakTTSVoiceWithLevel(tts: String?, level: Int, callBack: IMogoTTSCallback?) { + if (tts.isNullOrEmpty()) return + speakMultiLangTTSWithLevel(MultiLangTtsEntity(listOf(LangTtsEntity(tts, LanguageType.CHINESE))), level, callBack) + } + + override fun speakMultiLangTTSWithLevel( + ttsEntity: MultiLangTtsEntity, + level: Int, + callBack: IMogoTTSCallback? + ) { + if (callBack != null) { + speakVoiceMap[ttsEntity.toString()] = callBack + } + speakMultiLangTTSWithLevel(ttsEntity, level) + } + + override fun stopSpeakTts(text: String?) { + stopTts() + } + + override fun stopTts() { + curTtsEntity?.let { + val string = it.toString() + if (speakVoiceMap.containsKey(string)) { + speakVoiceMap.remove(string) + } + curTtsEntity = null + } + curTtsContent = "" + curTtsLevel = -1 + ttsEngine?.stopSpeaking() + } + + override fun speakQAndACmd(tts: String?, callback: IMogoTTSCallback?) { + } + + override fun speakQAndACmd( + tts: String?, + okWords: Array?, + cancelWords: Array?, + callback: IMogoTTSCallback? + ) { + } + + override fun registerUnWakeupCommand( + cmd: String?, + cmdWords: Array?, + callback: IMogoTTSCallback? + ) { + } + + override fun unregisterUnWakeupCommand(cmd: String?) { + } + + override fun unregisterUnWakeupCommand(cmd: String?, callback: IMogoTTSCallback?) { + } + + override fun startAIAssist(context: Context?) { + } + + override fun startAIAssist(context: Context?, status: Int) { + } + + override fun breakOffSpeak() { + } + + // 降序插入Tts(目前Level0、1可排队) + private fun insertTts(ttsEntity: MultiLangTtsEntity, level: Int) { + var index = -1 + for (i in linkedList.indices.reversed()) { + val nodeLevel = linkedList[i].second + // 只有高优先级才插入到前面,等于的情况下是插到后面 + if (level > nodeLevel) { + index = i + } + } + if (index >= 0) { + linkedList.add(index, Pair(ttsEntity, level)) + } else { + linkedList.addLast(Pair(ttsEntity, level)) + } + for (ttsPair in linkedList) { + d(TAG, "tts文本为:" + ttsPair.first + ",level为:" + ttsPair.second) + } + d(TAG, "===================") + } + + private fun speakMultiLangTTSWithLevel(ttsEntity: MultiLangTtsEntity, ttsLevel: Int) { + ttsEngine?.let { + if (ttsLevel == curTtsLevel) { + // 对应p3、p2级别的排队 + if (ttsLevel == 0 || ttsLevel == 1) { + d(TAG, "===================") + d(TAG, "插入消息:$ttsEntity,level为:$ttsLevel") + insertTts(ttsEntity, ttsLevel) + return + } else { + // 打断并合成新的 + stopTts() + d(TAG, "非Level1同级别打断!") + } + } else { + // 将要TTS的比现在正在TTS的优先级高 + if (ttsLevel > curTtsLevel) { + if (curTtsLevel >= 0) { + // 打断并合成高优先级的 + stopTts() + } + d(TAG, "高优先级打断低级别的!") + } else { + if (ttsLevel == 0 || ttsLevel == 1) { + d(TAG, "===================") + d(TAG, "插入消息:$ttsEntity,level为:$ttsLevel") + insertTts(ttsEntity, ttsLevel) + } + return + } + } + curTtsLevel = ttsLevel + curTtsEntity = ttsEntity + // 合成并播放 + d(TAG, "tts准备合成:$ttsEntity,curTtsLevel为:$curTtsLevel") + startSpeak(ttsEntity.ttsNext()) + } + } + + private fun startSpeak(langTtsEntity: LangTtsEntity?) { + langTtsEntity?.let { + if (it.language != lastLang) { + updateVoicer(it.language) + updateTtsParam() + lastLang = it.language + } + ttsEngine?.startSpeaking(it.ttsContent, ttsListener) + } + } + + private fun handleCompleteEvent() { + curTtsLevel = -1 + if (curTtsEntity != null) {// 多语言 + val langTtsEntity = curTtsEntity!!.ttsNext() + if (langTtsEntity != null) { + speakVoiceMap[curTtsEntity.toString()]?.onSpeakEnd(curTtsEntity.toString()) + ttsNextLanguage(langTtsEntity) + } else { + speakVoiceMap.remove(curTtsEntity.toString())?.onSpeakEnd(curTtsEntity.toString()) + curTtsEntity = null + ttsNextMultiLangEntity() + } + } else {// 单语言 + speakVoiceMap.remove(curTtsContent)?.onSpeakEnd(curTtsContent) + curTtsContent = "" + ttsNextMultiLangEntity() + } + } + + private fun handleErrorEvent(error: SpeechError) { + curTtsLevel = -1 + if (curTtsEntity != null) { + speakVoiceMap.remove(curTtsEntity.toString()) + ?.onSpeakError(curTtsEntity.toString(), error.message) + } else { + speakVoiceMap.remove(curTtsContent)?.onSpeakError(curTtsContent, error.message) + } + curTtsEntity = null + curTtsContent = "" + } + + private val ttsListener = object : SynthesizerListener { + override fun onSpeakBegin() { + + } + + override fun onBufferProgress(p0: Int, p1: Int, p2: Int, p3: String?) { + } + + override fun onSpeakPaused() { + } + + override fun onSpeakResumed() { + } + + override fun onSpeakProgress(p0: Int, p1: Int, p2: Int) { + } + + override fun onEvent(p0: Int, p1: Int, p2: Int, p3: Bundle?) { + + } + + /** + * error - 错误信息,若为null,则没有出现错误。 + * 在音频播放完成,或会话出现错误时,将回调此函数。 + * 若应用主动调用SpeechSynthesizer.stopSpeaking()停止会话,则不会回调此函数。 + */ + override fun onCompleted(error: SpeechError?) { + if (Thread.currentThread() == Looper.getMainLooper().thread) { + if (error == null) {// 播放完成 + handleCompleteEvent() + } else {// 播放出错 + handleErrorEvent(error) + } + } else { + UiThreadHandler.post { + if (error == null) { + handleCompleteEvent() + } else { + handleErrorEvent(error) + } + } + } + } + } + + /** + * 语音合成下一个MultiLangTtsEntity + */ + private fun ttsNextMultiLangEntity() { + if (!linkedList.isEmpty()) { + val ttsPair = linkedList.removeFirst() + i(TAG, "排队播放的下一条文本为:" + ttsPair.first + ",级别为:" + ttsPair.second) + curTtsLevel = ttsPair.second + startSpeak(ttsPair.first.ttsNext()) + } else { + i(TAG, "队列为空") + } + } + + /** + * 语音合成下一个MultiLangTtsEntity中的语言 + */ + private fun ttsNextLanguage(langTtsEntity: LangTtsEntity) { + startSpeak(langTtsEntity) + } + + private fun updateVoicer(language: LanguageType) { + voicerEntries?.let { + voicer = when (language) { + LanguageType.ENGLISH -> it[5] + LanguageType.KOREAN -> it[6] + else -> it[0] + } + } + } + + private fun updateTtsParam() { + // 清空参数 + ttsEngine?.setParameter(SpeechConstant.PARAMS, null) + // 根据合成引擎设置相应参数 + if (engineType == SpeechConstant.TYPE_CLOUD) { + ttsEngine?.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD) + // 支持实时音频返回,仅在 synthesizeToUri 条件下支持 + ttsEngine?.setParameter(SpeechConstant.TTS_DATA_NOTIFY, "1") + // ttsEngine?.setParameter(SpeechConstant.TTS_BUFFER_TIME,"1"); + // 设置在线合成发音人 + ttsEngine?.setParameter(SpeechConstant.VOICE_NAME, voicer) + //设置合成语速 + ttsEngine?.setParameter( + SpeechConstant.SPEED, "50" + ) + //设置合成音调 + ttsEngine?.setParameter( + SpeechConstant.PITCH, "50" + ) + //设置合成音量 + ttsEngine?.setParameter( + SpeechConstant.VOLUME, "50" + ) + } else { + ttsEngine?.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL) + ttsEngine?.setParameter(SpeechConstant.VOICE_NAME, "") + } + + //设置播放器音频流类型 + ttsEngine?.setParameter( + SpeechConstant.STREAM_TYPE, "3" + ) + // 设置播放合成音频打断音乐播放,默认为true + ttsEngine?.setParameter(SpeechConstant.KEY_REQUEST_FOCUS, "false") + + // 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限 + ttsEngine?.setParameter(SpeechConstant.AUDIO_FORMAT, "pcm") + ttsEngine?.setParameter( + SpeechConstant.TTS_AUDIO_PATH, + context?.getExternalFilesDir("msc")?.absolutePath + "/tts.pcm" + ) + } +} \ No newline at end of file diff --git a/tts/tts-iflytek/src/main/jniLibs/arm64-v8a/libmsc.so b/tts/tts-iflytek/src/main/jniLibs/arm64-v8a/libmsc.so new file mode 100644 index 0000000000..6a8f3f8862 Binary files /dev/null and b/tts/tts-iflytek/src/main/jniLibs/arm64-v8a/libmsc.so differ diff --git a/tts/tts-iflytek/src/main/res/values/strings.xml b/tts/tts-iflytek/src/main/res/values/strings.xml new file mode 100644 index 0000000000..b0dbcd1930 --- /dev/null +++ b/tts/tts-iflytek/src/main/res/values/strings.xml @@ -0,0 +1,17 @@ + + + + + xiaoyan + aisjiuxu + aisxping + aisjinger + aisbabyxu + + + x2_enus_catherine + + + zhimin + + \ No newline at end of file diff --git a/tts/tts-pad/src/main/java/com/mogo/tts/pad/PadTTS.java b/tts/tts-pad/src/main/java/com/mogo/tts/pad/PadTTS.java index ced07980ba..382f00303a 100644 --- a/tts/tts-pad/src/main/java/com/mogo/tts/pad/PadTTS.java +++ b/tts/tts-pad/src/main/java/com/mogo/tts/pad/PadTTS.java @@ -29,6 +29,7 @@ import com.mogo.eagle.core.utilcode.util.ThreadUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.tts.base.IMogoTTS; import com.mogo.tts.base.IMogoTTSCallback; +import com.mogo.tts.base.MultiLangTtsEntity; import com.mogo.tts.base.PreemptType; import com.zhidao.auto.platform.voice.VoiceClient; import com.zhidao.voicesdk.MogoVoiceManager; @@ -505,6 +506,11 @@ public class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsList } } + @Override + public void speakMultiLangTTSWithLevel(MultiLangTtsEntity ttsEntity, int level, IMogoTTSCallback callback) { + + } + /** * 问答类型语音注册:默认确认和取消 *