Merge branch 'dev_robotaxi-d-app-module_2110_220915_2.11.0' into 'test_robotaxi-d-app-module_2110_220915_2.11.0.1'

Dev robotaxi d app module 2110 220915 2.11.0

See merge request zhjt/AndroidApp/MoGoEagleEye!295
This commit is contained in:
wangmingjun
2022-10-21 11:50:12 +00:00
14 changed files with 199 additions and 61 deletions

View File

@@ -456,6 +456,8 @@ public class BusOrderModel {
CallerLogger.INSTANCE.d(M_BUS + TAG, "abortTask success: " + o);
clearNativeTag();
if (o.code == 0){ // 重置成功
clearNativeTag();
clearBusStationDatas();
queryBusRoutes();
startOrStopQueryPassengerWriteOff(false);
}
@@ -838,6 +840,7 @@ public class BusOrderModel {
CallerLogger.INSTANCE.d(M_BUS + TAG, "endTask success: " + o);
if (o.code == 0){
clearNativeTag();
clearBusStationDatas();
queryBusRoutes();// 重新获取任务
startOrStopQueryPassengerWriteOff(false);
ttsTips(mContext.getString(R.string.bus_end_task_tip));

View File

@@ -7,6 +7,7 @@ apply plugin: 'kotlin-android-extensions'
apply plugin: 'android-aspectjx'
apply plugin: 'bugly'
def isReleaseBuild = isReleaseBuild()
//apply ByteX宿主
if (!isAndroidTestBuild()) {
apply plugin: 'bytex'
@@ -38,14 +39,23 @@ if (!isAndroidTestBuild()) {
if (!isAndroidTestBuild()) {
apply plugin: 'bytex.threadOpt'
thread_opt {
enable !isReleaseBuild
enableInDebug !isReleaseBuild
logLevel "DEBUG"
}
}
if (!isAndroidTestBuild()) {
apply plugin: 'LancetX'
LancetX {
enable true
enableInDebug true
logLevel "DEBUG"
//白名单中的类不进行替换
// white_list = [
// 'leakcanary.*',
// 'com.loc.*'
// ]
weaveGroup {
leak_canary_crash_fix {
enable !isReleaseBuild
}
}
}
}
@@ -249,6 +259,7 @@ dependencies {
debugImplementation rootProject.ext.dependencies.debugleakcanary
releaseImplementation rootProject.ext.dependencies.releaseleakcanary
implementation rootProject.ext.dependencies.android_start_up
implementation rootProject.ext.dependencies.lancetx_runtime
// // 暂不使用Shizuku-API
// implementation rootProject.ext.dependencies.shizuku_provider
@@ -373,3 +384,12 @@ boolean isAndroidTestBuild() {
}
return false
}
boolean isReleaseBuild() {
for (String s : gradle.startParameter.taskNames) {
if (s.contains("Release") | s.contains("release")) {
return true
}
}
return false
}

View File

@@ -0,0 +1,51 @@
package com.mogo.launcher.lancet
import android.database.sqlite.*
import androidx.annotation.*
import com.knightboost.lancet.api.*
import com.knightboost.lancet.api.annotations.*
import com.knightboost.lancet.api.annotations.Weaver
/**
* 此类主要用来修正三方库引起的崩溃
*/
@Keep
@Weaver
@Group("leak_canary_crash_fix")
class LeakCanaryCrashFix {
@Insert
@TargetClass("leakcanary.internal.activity.db.ScopedLeaksDb\$DbOpener")
@TargetMethod(methodName = "getReadableDatabase")
fun proxyGetReadableSQLiteDb(): SQLiteDatabase? {
try {
return Origin.call() as SQLiteDatabase?
} catch (t: Throwable) {
t.printStackTrace()
}
return null
}
@Insert
@TargetClass("leakcanary.internal.activity.db.ScopedLeaksDb\$DbOpener")
@TargetMethod(methodName = "getWritableDatabase")
fun proxyGetWritableSQLiteDb(): SQLiteDatabase? {
try {
return Origin.call() as SQLiteDatabase?
} catch (t: Throwable) {
t.printStackTrace()
}
return null
}
@Insert
@TargetClass("leakcanary.internal.activity.db.ScopedLeaksDb\$DbOpener")
@TargetMethod(methodName = "close")
fun proxyClose() {
try {
Origin.callVoid()
} catch (t: Throwable) {
t.printStackTrace()
}
}
}

View File

@@ -38,6 +38,7 @@ buildscript {
classpath 'com.mogo.cloud:systrace:1.0.1'
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18'
classpath 'com.mogo.sticky:service:1.0.8'
classpath 'io.github.knight-zxw:lancet-plugin:0.0.1'
// classpath ("com.tencent.matrix:matrix-gradle-plugin:0.6.6") { changing = true }
}

View File

@@ -237,7 +237,11 @@ ext {
koomxhook : "com.kuaishou.koom:xhook-static:2.2.0",
//========================= Koom ======================
recyclerviewadapterhelper : "io.github.cymchad:BaseRecyclerViewAdapterHelper:3.0.4"
recyclerviewadapterhelper : "io.github.cymchad:BaseRecyclerViewAdapterHelper:3.0.4",
//========================= LancetX ===================
lancetx_runtime : "io.github.knight-zxw:lancet-runtime:0.0.1"
]
android = [
launcherApplicationId : "com.mogo.launcher",

View File

@@ -197,6 +197,8 @@ class MoGoAutopilotProvider :
.build()
AdasManager.getInstance()
.create(options, MoGoAdasMsgConnectStatusListenerImpl())
// 监听ADAS-SDK获取到的工控机数据
AdasManager.getInstance().setOnAdasListener(MoGoAdasListenerImpl())
// 接收司机屏发过来的感知、定位等数据
listenDeviceData()
}

View File

@@ -1,17 +1,17 @@
package com.mogo.eagle.core.function.hmi.ui.widget
import android.content.Context
import android.graphics.Color
import android.graphics.*
import android.location.Location
import android.util.AttributeSet
import android.util.*
import android.view.Gravity
import android.widget.FrameLayout
import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.eagle.core.data.constants.MogoServicePaths
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.map.MogoMapUIController
import com.mogo.eagle.core.utilcode.util.*
import com.mogo.map.*
import com.mogo.map.navi.IMogoCarLocationChangedListener2
import com.mogo.service.IMogoServiceApis
import java.util.*
@@ -38,6 +38,11 @@ class SpeedPanelView @JvmOverloads constructor(
var mSpeedLimmit = 60;
private val timer by lazy {
Timer()
}
init {
initEvent(context)
@@ -61,29 +66,30 @@ class SpeedPanelView @JvmOverloads constructor(
}
}
private val timerTask = object : TimerTask() {
override fun run() {
if (mLatLng != null) {
mSpeedLimmit = MogoMapUIController.getInstance()
.getLimitSpeed(mLatLng!!.longitude, mLatLng!!.latitude, mLatLng!!.bearing)
UiThreadHandler.post {
val speed = (mLatLng!!.speed * 3.6f).toInt()
mSpeedChartView.setArcColor(Color.parseColor(if (speed > mSpeedLimmit) "#DB3137" else "#3E77F6"))
mSpeedChartView.setValues(speed)
setBackgroundResource(if (speed > mSpeedLimmit) R.drawable.yi_biao_pan_bg_speeding else R.drawable.yi_biao_pan_bg_nor)
private var timerTask : TimerTask? = null
override fun onAttachedToWindow() {
super.onAttachedToWindow() // 注册位置回调
mMogoServiceApis.registerCenterApi.registerCarLocationChangedListener(TAG, this)
// 开启定时查询速度
timerTask?.cancel()
val task = object : TimerTask() {
override fun run() {
if (mLatLng != null) {
mSpeedLimmit = MogoMapUIController.getInstance()
.getLimitSpeed(mLatLng!!.longitude, mLatLng!!.latitude, mLatLng!!.bearing)
UiThreadHandler.post {
val speed = (mLatLng!!.speed * 3.6f).toInt()
mSpeedChartView.setArcColor(Color.parseColor(if (speed > mSpeedLimmit) "#DB3137" else "#3E77F6"))
mSpeedChartView.setValues(speed)
setBackgroundResource(if (speed > mSpeedLimmit) R.drawable.yi_biao_pan_bg_speeding else R.drawable.yi_biao_pan_bg_nor)
}
}
}
}
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
// 注册位置回调
mMogoServiceApis.registerCenterApi
.registerCarLocationChangedListener(TAG, this)
// 开启定时查询速度
Timer().schedule(timerTask, Date(), 100)
this.timerTask = task
timer.schedule(task, Date(), 100)
}
override fun onDetachedFromWindow() {
@@ -92,7 +98,7 @@ class SpeedPanelView @JvmOverloads constructor(
mMogoServiceApis.registerCenterApi
.unregisterMogoLocationListener(TAG)
try {
timerTask.cancel()
timerTask?.cancel()
} catch (e: Exception) {
e.printStackTrace()
}

View File

@@ -63,7 +63,6 @@ public class V2XScenarioManager implements IV2XScenarioManager {
Intent intent = new Intent(V2XConst.BROADCAST_SCENE_ACTION);
intent.putExtra(V2XConst.BROADCAST_SCENE_EXTRA_KEY, v2XMessageEntity);
LocalBroadcastManager.getInstance(Utils.getApp()).sendBroadcast(intent);
AiRoadMarker.INSTANCE.clear();
// 如果没有拿到之前的,根据类型分发
switch (v2XMessageEntity.getType()) {
case V2XMessageEntity.V2XTypeEnum.ALERT_ROAD_WARNING:

View File

@@ -13,8 +13,10 @@ import androidx.lifecycle.Lifecycle.Event.ON_DESTROY
import com.mogo.eagle.core.data.map.*
import com.mogo.eagle.core.data.map.MapRoadInfo.StopLine
import com.mogo.eagle.core.function.api.map.listener.*
import com.mogo.eagle.core.function.api.v2x.*
import com.mogo.eagle.core.function.call.map.*
import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager.OnRoadListener
import com.mogo.eagle.core.function.call.v2x.*
import com.mogo.eagle.core.function.v2x.events.scenario.scene.road.*
import com.mogo.eagle.core.utilcode.kotlin.*
import com.mogo.eagle.core.utilcode.mogo.logger.*
@@ -62,6 +64,23 @@ object AiRoadMarker {
}
}
private val onClearAllMarker = object : OnClearAllMarker {
override fun onClearAllMarkers() {
val marker = this@AiRoadMarker.marker.get()
if (marker != null) {
unMarker(marker)
}
}
override fun onClearAllMarkers(tag: String) {
val marker = this@AiRoadMarker.marker.get()
if (marker != null) {
unMarker(marker)
}
}
}
private val markers = ConcurrentSet<Marker>()
private val options by lazy {
@@ -174,11 +193,13 @@ object AiRoadMarker {
private fun onCreate() {
CallerMapRoadListenerManager.registerRoadListener(TAG, onRoadListener)
CallMarkersClearManager.addAllMarkersClearListener(TAG, onClearAllMarker)
CallerMapLocationListenerManager.addListener(TAG, onLocationListener, true)
}
private fun onDestroy() {
CallerMapRoadListenerManager.unRegisterRoadListener(TAG)
CallMarkersClearManager.removeAllMarkersClearListener(TAG)
CallerMapLocationListenerManager.removeListener(TAG, true)
pool.shutdownNow()
removeLine()
@@ -201,7 +222,15 @@ object AiRoadMarker {
}
fun marker(marker: Marker, drawMarker: Boolean) {
handler.removeCallbacks(checkExpiredTask)
val location = carLocation.get() ?: return
if (markers.contains(marker)) {
Logger.d(TAG, "--- enqueue --- cache hit ---")
return
}
synchronized(markers) {
markers += marker
}
this.marker.set(marker)
//施工中心点前方的自车行驶方向上300米距离
val l1 = MogoMap.getInstance().mogoMap.getCenterLineRangeInfo(marker.poi_lon, marker.poi_lat, location.third.toFloat(), 300f)
@@ -295,19 +324,7 @@ object AiRoadMarker {
markers -= marker
removeLine()
V2XAiRoadEventMarker.removeMarkers(null)
}
fun clear() {
hideLine()
V2XAiRoadEventMarker.removeMarkers(null)
}
fun restore() {
showLine()
val marker = marker.get()
if (marker != null) {
marker(marker, false)
}
handler.removeCallbacks(checkExpiredTask)
}
private fun hideLine() {

View File

@@ -0,0 +1,8 @@
package com.mogo.eagle.core.function.api.v2x
interface OnClearAllMarker {
fun onClearAllMarkers()
fun onClearAllMarkers(tag: String)
}

View File

@@ -0,0 +1,34 @@
package com.mogo.eagle.core.function.call.v2x
import com.mogo.eagle.core.function.api.v2x.*
import java.util.concurrent.*
object CallMarkersClearManager {
private val listeners by lazy { ConcurrentHashMap<String, ArrayList<OnClearAllMarker>>() }
fun addAllMarkersClearListener(tag: String, listener: OnClearAllMarker) {
var ll = listeners[tag]
if (ll == null) {
ll = ArrayList()
}
ll.add(listener)
listeners[tag] = ll
}
fun removeAllMarkersClearListener(tag: String) {
listeners.remove(tag)
}
fun invokeClearAllMarkers() {
listeners.values.flatten().forEach {
it.onClearAllMarkers()
}
}
fun invokeClearAllMarkersOfTag(tag: String) {
listeners.values.flatten().forEach {
it.onClearAllMarkers(tag)
}
}
}

View File

@@ -175,4 +175,4 @@ ADAS_DATA_LIB_CHILD_VERSION=.0
# 线程优化版本
THREAD_OPT_VERSION=3.0.1
THREAD_OPT_VERSION=3.0.2

View File

@@ -3,6 +3,7 @@ package com.mogo.map;
import android.content.Context;
import com.mogo.eagle.core.data.map.MogoLatLng;
import com.mogo.eagle.core.function.call.v2x.CallMarkersClearManager;
import com.mogo.map.marker.IMogoMarker;
import com.mogo.map.marker.IMogoMarkerManager;
import com.mogo.map.marker.MogoMarkerOptions;
@@ -100,11 +101,13 @@ public class MogoMarkerManager implements IMogoMarkerManager {
@Override
public void removeMarkers( String tag ) {
CallMarkersClearManager.INSTANCE.invokeClearAllMarkersOfTag(tag);
MogoMarkersHandler.getInstance().remove( tag );
}
@Override
public void removeMarkers() {
CallMarkersClearManager.INSTANCE.invokeClearAllMarkers();
MogoMarkersHandler.getInstance().removeAll();
}
@@ -115,6 +118,7 @@ public class MogoMarkerManager implements IMogoMarkerManager {
@Override
public void inVisibleAllMarkers() {
CallMarkersClearManager.INSTANCE.invokeClearAllMarkers();
MogoMarkersHandler.getInstance().inVisibleAll();
}

View File

@@ -1,11 +1,7 @@
package com.mogo.module.service.routeoverlay;
import android.os.SystemClock;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo;
import com.mogo.eagle.core.data.config.FunctionBuildConfig;
import com.mogo.eagle.core.data.map.MogoLocation;
@@ -16,16 +12,11 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPlanningListenerManager;
import com.mogo.eagle.core.function.call.map.CallerMapLocationListenerManager;
import com.mogo.eagle.core.utilcode.mogo.logger.Logger;
import org.jetbrains.annotations.NotNull;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import mogo.telematics.pad.MessagePad;
import mogo_msg.MogoReportMsg;
import system_master.SystemStatusInfo;
@@ -75,11 +66,13 @@ public class MogoRouteOverlayManager implements
return;
}
if (isArriveAtStation.get() && autopilotMode.get() != 1) {
Logger.d(TAG, "--- onLocationChanged 1 -- [isDemo1: " + FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData + ",isDemo2:" +FunctionBuildConfig.isDemoMode + ",isGps:" + isGps + ",mode:" + autopilotMode.get() + ",lon:" + location.getLongitude() + ",lat:" + location.getLatitude() + ",angle:" + location.getBearing() + "]");
RouteOverlayDrawer.getInstance().clearMogoRouteOverlay();
return;
}
boolean force = FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData;
if (!force && autopilotMode.get() != 1) {
Logger.d(TAG, "--- onLocationChanged 2 -- [isDemo1: " + FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData + ",isDemo2:" +FunctionBuildConfig.isDemoMode + ",isGps:" + isGps + ",mode:" + autopilotMode.get() + ",lon:" + location.getLongitude() + ",lat:" + location.getLatitude() + ",angle:" + location.getBearing() + "]");
RouteOverlayDrawer.getInstance().clearMogoRouteOverlay();
return;
}
@@ -87,11 +80,11 @@ public class MogoRouteOverlayManager implements
if (!queue.isEmpty()) {
List<MessagePad.TrajectoryPoint> items = queue.pollLast();
if (items != null && !items.isEmpty()) {
Logger.d(TAG, "--- onLocationChanged -- [isDemo1: " + FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData + ",isDemo2:" +FunctionBuildConfig.isDemoMode + ",isGps:" + isGps + ",mode:" + autopilotMode.get() + ",lon:" + location.getLongitude() + ",lat:" + location.getLatitude() + ",angle:" + location.getBearing() + "]");
RouteOverlayDrawer.getInstance().drawTrajectoryList(items, location.getBearing());
}
}
}
}
@Override
@@ -100,10 +93,6 @@ public class MogoRouteOverlayManager implements
@Override
public void onAutopilotStatusResponse(@NotNull AutopilotStatusInfo autoPilotStatusInfo) {
if (FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData) {
isArriveAtStation.set(false);
return;
}
int mode = autoPilotStatusInfo.getPilotmode();
if (mode == 1) {
isArriveAtStation.set(false);