diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java
index a833aaaafd..f35d8258c0 100644
--- a/app/src/main/java/com/mogo/launcher/MogoApplication.java
+++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java
@@ -1,9 +1,13 @@
package com.mogo.launcher;
+import com.mogo.commons.debug.DebugConfig;
+import com.mogo.eagle.core.function.api.devatools.strict.IStrictModeProvider;
+import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager;
import com.mogo.eagle.core.function.call.startup.CallerStartUpManager;
import com.mogo.eagle.core.function.main.MainMoGoApplication;
import com.mogo.eagle.core.utilcode.mogo.logger.LogLevel;
import com.mogo.eagle.core.utilcode.mogo.logger.Logger;
+import com.mogo.eagle.core.utilcode.util.SharedPrefs;
import com.mogo.launcher.crash.CrashSystem;
import com.mogo.launcher.startup.ARouterStartUp;
import com.mogo.launcher.startup.ConfigStartUp;
@@ -21,9 +25,21 @@ public class MogoApplication extends MainMoGoApplication {
ARouterStartUp.init(this);
ConfigStartUp.init(this);
CallerStartUpManager.initStageOne();
+ tryEnableStrictMode();
super.onCreate();
}
+ private void tryEnableStrictMode() {
+ IStrictModeProvider strict = CallerDevaToolsManager.INSTANCE.strict();
+ if (DebugConfig.isDebug() && strict != null) {
+ boolean enabled = SharedPrefs.getInstance(this).getBoolean("MOGO_STRICT_MODE_ENABLED", false);
+ Logger.e("StrictMode", "isEnabled:" + enabled);
+ if (enabled) {
+ strict.enable();
+ }
+ }
+ }
+
@Override
protected void initCrashConfig() {
CrashSystem crashSystem = CrashSystem.getInstance(this);
diff --git a/config.gradle b/config.gradle
index dc2bd1e3d3..c2c71ebf9c 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_beta4',
+ mogoobu : 'com.mogo.support.obu:mogo-obu:1.1.0_beta5',
// google
googlezxing : "com.google.zxing:core:3.3.3",
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 c653f4bca4..1401d33981 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
@@ -16,6 +16,7 @@ import com.mogo.eagle.core.data.deva.scene.SceneTAG
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.function.api.devatools.IDevaToolsProvider
import com.mogo.eagle.core.function.api.devatools.apm.*
+import com.mogo.eagle.core.function.api.devatools.strict.*
import com.mogo.eagle.core.function.call.map.*
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.zhjt.mogo_core_function_devatools.apm.*
@@ -35,6 +36,7 @@ import com.zhjt.mogo_core_function_devatools.report.IPCReportManager
import com.zhjt.mogo_core_function_devatools.report.IPCReportManager.Companion.iPCReportManager
import com.zhjt.mogo_core_function_devatools.scene.SceneManager.Companion.sceneManager
import com.zhjt.mogo_core_function_devatools.status.StatusManager
+import com.zhjt.mogo_core_function_devatools.strict.*
import com.zhjt.mogo_core_function_devatools.trace.TraceManager.Companion.traceManager
import com.zhjt.mogo_core_function_devatools.tts.TtsManager.Companion.ttsManager
import com.zhjt.mogo_core_function_devatools.upgrade.UpgradeManager.Companion.upgradeManager
@@ -48,7 +50,9 @@ class DevaToolsProvider : IDevaToolsProvider {
private var mContext: Context? = null
- private val apmEnvProvider by lazy { ApmEnvProviderImpl }
+ private val apmEnvProvider by lazy { ApmEnvProviderImpl() }
+
+ private val strictModeProvider by lazy { StrictModeProviderImpl() }
@Volatile
private var mDockerVersion: String? = null
@@ -253,4 +257,5 @@ class DevaToolsProvider : IDevaToolsProvider {
override fun queryObuUpgrade(obuVersionName: String) {
bindingCarManager.queryObuUpgrade(obuVersionName)
}
+ override fun strict(): IStrictModeProvider = strictModeProvider
}
\ 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 146ce9adc3..ddc8257335 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
@@ -17,9 +17,9 @@ import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicReference
import kotlin.coroutines.*
-object ApmEnvProviderImpl: IApmEnvProvider, CoroutineScope {
+class ApmEnvProviderImpl: IApmEnvProvider, CoroutineScope {
- private const val TAG = "ApmEnvProvider"
+ private val TAG = "ApmEnvProvider"
private val scope by lazy { CoroutineScope(Dispatchers.IO + SupervisorJob()) }
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/strict/StrictModeProviderImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/strict/StrictModeProviderImpl.kt
new file mode 100644
index 0000000000..b364363093
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/strict/StrictModeProviderImpl.kt
@@ -0,0 +1,34 @@
+package com.zhjt.mogo_core_function_devatools.strict
+
+import android.os.*
+import android.os.StrictMode.ThreadPolicy.Builder
+import android.os.StrictMode.VmPolicy
+import com.mogo.eagle.core.function.api.devatools.strict.*
+
+/**
+ * 严格模式功能管理
+ * 1. 监测主线程磁盘读写
+ * 2. 监测主线程网络请求
+ * 3. 监测磁盘输入输出流使用异常(未及时关闭)
+ * 4. 监测数据库查询操作异常(cursor使用未关闭)
+ * 5. 监测资源类型不匹配(TypedValue)
+ * 6. 监测文件读写未使用Buffer(增加buffer可以减少系统调用,降低性能损耗)
+ */
+class StrictModeProviderImpl: IStrictModeProvider {
+
+
+ override fun enable() {
+ StrictMode.setThreadPolicy(
+ Builder()
+ .detectAll()
+ .penaltyLog()
+ .penaltyDropBox()
+ .build())
+ StrictMode.setVmPolicy(
+ VmPolicy.Builder()
+ .detectAll()
+ .penaltyLog()
+ .penaltyDropBox()
+ .build())
+ }
+}
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt
index eba7451134..c32a366d08 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
@@ -7,6 +7,7 @@ import android.content.ClipboardManager
import android.content.Context
import android.graphics.Color
import android.os.Build
+import android.os.Process
import android.text.Html
import android.util.AttributeSet
import android.util.Log
@@ -64,9 +65,7 @@ import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.ui.logcatch.ILogViewListener
import com.mogo.eagle.core.function.hmi.ui.logcatch.LogInfoView
import com.mogo.eagle.core.function.hmi.ui.widget.DemoModeView
-import com.mogo.eagle.core.utilcode.kotlin.currentPadding
-import com.mogo.eagle.core.utilcode.kotlin.lifecycleOwner
-import com.mogo.eagle.core.utilcode.kotlin.onClick
+import com.mogo.eagle.core.utilcode.kotlin.*
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.LogLevel
@@ -81,7 +80,7 @@ import com.mogo.map.uicontroller.VisualAngleMode.*
import kotlinx.android.synthetic.main.view_debug_setting.view.*
import kotlinx.android.synthetic.main.view_debug_setting.view.tbRouteDynamicEffect
import kotlinx.android.synthetic.main.view_sop_setting.view.*
-import kotlinx.coroutines.launch
+import kotlinx.coroutines.*
import mogo.telematics.pad.MessagePad
import mogo_msg.MogoReportMsg
import java.text.SimpleDateFormat
@@ -621,6 +620,18 @@ internal class DebugSettingView @JvmOverloads constructor(
tbIsDemoMode.visibility = View.GONE
}
+ tbIsStrictMode?.also {
+ it.isChecked = SharedPrefs.getInstance(Utils.getApp()).getBoolean("MOGO_STRICT_MODE_ENABLED", false)
+ it.setOnCheckedChangeListener { _, isChecked ->
+ SharedPrefs.getInstance(Utils.getApp()).putBoolean("MOGO_STRICT_MODE_ENABLED", isChecked)
+ scope.launch {
+ ToastUtils.showShort("配置生效, 2秒后重启应用...")
+ delay(2000)
+ restartApp()
+ }
+ }
+ }
+
// 雨天模式,上一次勾选的数据
tbIsRainMode.isChecked = FunctionBuildConfig.isRainMode
//雨天模式
@@ -1628,11 +1639,10 @@ internal class DebugSettingView @JvmOverloads constructor(
mRouteInfoSize = 0
if (FunctionBuildConfig.isDemoMode) {
- tbIsDemoMode.text = "关闭美化模式"
+ tbIsDemoMode?.text = "关闭美化模式"
} else {
- tbIsDemoMode.text = "开启美化模式"
+ tbIsDemoMode?.text = "开启美化模式"
}
-
//obu信息,排查obu相关问题使用
tvObuInfoContent.text = mObuInfoStr
@@ -2035,6 +2045,11 @@ internal class DebugSettingView @JvmOverloads constructor(
}
}
+ private fun restartApp() {
+ Utils.getApp().startActivity(Utils.getApp().packageManager.getLaunchIntentForPackage(Utils.getApp().packageName))
+ Process.killProcess(Process.myPid())
+ }
+
override fun fwThreadClose() {
refreshTraceInfo()
}
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt
index 52281e673c..1418bac233 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt
@@ -141,7 +141,12 @@ class SystemVersionView @JvmOverloads constructor(
}
}
- updateHDDataCacheStatus(CallerMapUIServiceManager.isCityDataCached())
+ ThreadUtils.getIoPool().execute {
+ val isCached = CallerMapUIServiceManager.isCityDataCached()
+ UiThreadHandler.post {
+ updateHDDataCacheStatus(isCached)
+ }
+ }
if(AdUpgradeStateHelper.isConfirmUpgrade()){
//将角标改为“下载中”
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml
index 20f98d2738..fbd4be94fa 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml
@@ -229,6 +229,18 @@
android:layout_height="1dp"
android:background="#F0F0F0" />
+
+
GCJ02 坐标
val gcj20Location =
CoordinateTransform.WGS84ToGCJ02(gnssInfo.longitude, gnssInfo.latitude)
- mGnssInfo?.let {
- mGnssInfo!!.longitude = gcj20Location[0]
- mGnssInfo!!.latitude = gcj20Location[1]
+ // 克隆定位数据,防止原数据被篡改导致位置跳变
+ mGnssInfo = gnssInfo.copy(gnssInfo, gcj20Location[0], gcj20Location[1])
- M_LISTENERS.forEach {
- val tag = it.key
- // 获取数据监听需要的HZ
- val hz = M_LISTENERS_HZ[tag]
- if (hz != null && hz > 0) {
- val hzTime = (1.0 / hz.toDouble()) * 1000
- // 获取最后一次回调的时间
- val hzLastSendTime = M_LISTENERS_HZ_LAST_SEND_TIME[tag]
- if (hzLastSendTime != null && hzLastSendTime > 0) {
- // 计算是否进入下一次回调周期
- val nowTime = TimeUtils.getNowMills()
- if (nowTime - hzLastSendTime > hzTime) {
- syncLocationCallback(tag, it, mGnssInfo!!, sourceType)
- }
- } else {
- syncLocationCallback(tag, it, mGnssInfo!!, sourceType)
+ M_LISTENERS.forEach {
+ val tag = it.key
+ // 获取数据监听需要的HZ
+ val hz = M_LISTENERS_HZ[tag]
+ if (hz != null && hz > 0) {
+ val hzTime = (1.0 / hz.toDouble()) * 1000
+ // 获取最后一次回调的时间
+ val hzLastSendTime = M_LISTENERS_HZ_LAST_SEND_TIME[tag]
+ if (hzLastSendTime != null && hzLastSendTime > 0) {
+ // 计算是否进入下一次回调周期
+ val nowTime = TimeUtils.getNowMills()
+ if (nowTime - hzLastSendTime > hzTime) {
+ syncLocationCallback(tag, it, mGnssInfo, sourceType)
}
} else {
- //Logger.d(TAG, "没设置监听频率,使用默认5HZ")
- val hzTime = (1.0 / 5) * 1000
- // 获取最后一次回调的时间
- val hzLastSendTime = M_LISTENERS_HZ_LAST_SEND_TIME[tag]
- if (hzLastSendTime != null && hzLastSendTime > 0) {
- // 计算是否进入下一次回调周期
- val nowTime = TimeUtils.getNowMills()
- if (nowTime - hzLastSendTime > hzTime) {
- syncLocationCallback(tag, it, mGnssInfo!!, sourceType)
- }
- } else {
- syncLocationCallback(tag, it, mGnssInfo!!, sourceType)
+ syncLocationCallback(tag, it, mGnssInfo, sourceType)
+ }
+ } else {
+ //Logger.d(TAG, "没设置监听频率,使用默认5HZ")
+ val hzTime = (1.0 / 5) * 1000
+ // 获取最后一次回调的时间
+ val hzLastSendTime = M_LISTENERS_HZ_LAST_SEND_TIME[tag]
+ if (hzLastSendTime != null && hzLastSendTime > 0) {
+ // 计算是否进入下一次回调周期
+ val nowTime = TimeUtils.getNowMills()
+ if (nowTime - hzLastSendTime > hzTime) {
+ syncLocationCallback(tag, it, mGnssInfo, sourceType)
}
+ } else {
+ syncLocationCallback(tag, it, mGnssInfo, sourceType)
}
}
}
diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerChassisLocationWGS84ListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerChassisLocationWGS84ListenerManager.kt
index 7c38e0fad2..6c2465f0d9 100644
--- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerChassisLocationWGS84ListenerManager.kt
+++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerChassisLocationWGS84ListenerManager.kt
@@ -17,7 +17,7 @@ object CallerChassisLocationWGS84ListenerManager : CallerBase 0) {
ArrayList points = stopLine.points;
if (carLoc != null) {
- /**
- * //地图组提供的高德坐标切到WGS84坐标系
- * var cal = LonLatPoint(point!!.lon, point!!.lat)
- * if(!point!!.provider.equals(MapAutoApi.GPS_FLAG)){
- * cal = MapTools.switchLonLatWGS84(cal)
- * }
- */
- String provider = carLoc.getProvider();
- //CallerLogger.INSTANCE.d(M_MAP + TAG, "car_loc: " + carLoc + "");
- if (!MapAutoApi.GPS_FLAG.equals(provider)) {
- //CallerLogger.INSTANCE.d(M_MAP + TAG, "convert before: car_loc: {lon: " + carLoc.getLongitude() + ", lat: " + carLoc.getLatitude() + "}");
- LonLatPoint p = new LonLatPoint(carLoc.getLongitude(), carLoc.getLatitude());
- p = MapTools.INSTANCE.switchLonLatWGS84(p);
- carLoc.setLongitude(p.longitude);
- carLoc.setLatitude(p.latitude);
- //CallerLogger.INSTANCE.d(M_MAP + TAG, "convert after: car_loc: {lon: " + carLoc.getLongitude() + ", lat: " + carLoc.getLatitude() + "}");
- }
- //CallerLogger.INSTANCE.d(M_MAP + TAG, "onStopLineInfo:stop_line" + stopLine + ", car_loc:{lon: " + carLoc.getLatitude() + ", lat: " + carLoc.getLongitude() + "}");
+// //CallerLogger.INSTANCE.d(M_MAP + TAG, "onStopLineInfo:stop_line" + stopLine + ", car_loc:{lon: " + carLoc.getLatitude() + ", lat: " + carLoc.getLongitude() + "}");
MapRoadInfo.StopLine stopInfo = convert(stopLine);
LonLatPoint p1 = points.get(0);
LonLatPoint p2 = points.get(points.size() - 1);