Merge branch 'dev_robotaxi-d_240807_6.6.0' into tmp_6.7.0_arrow

This commit is contained in:
EmArrow
2024-09-09 11:29:13 +08:00
21 changed files with 806 additions and 146 deletions

View File

@@ -50,6 +50,7 @@ object LineManager : CallerBase<ILineCallback>() {
function.invoke(start,end)
}
}
OchChainLogManager.writeChainLog("异常情况","startStation:${startStation}__endStation:${endStation}")
}
fun getStationsWithContrai(function: (start:BusStationBean,end:BusStationBean,contrai: ContraiInfo) -> Unit){
startStation?.let { start->
@@ -59,6 +60,7 @@ object LineManager : CallerBase<ILineCallback>() {
}
}
}
OchChainLogManager.writeChainLog("异常情况","startStation:${startStation}__endStation:${endStation}__contraiInfo:${contraiInfo}")
}
fun getStationsWithLine(function: (start:BusStationBean,end:BusStationBean,lineInfo: LineInfo) -> Unit){
@@ -69,6 +71,7 @@ object LineManager : CallerBase<ILineCallback>() {
}
}
}
OchChainLogManager.writeChainLog("异常情况","startStation:${startStation}__endStation:${endStation}__lineInfos:${lineInfos}")
}
fun getStationsWithLineAndContrai(function: (start:BusStationBean,end:BusStationBean,lineInfo: LineInfo,contrai: ContraiInfo) -> Unit){
startStation?.let { start->
@@ -80,12 +83,14 @@ object LineManager : CallerBase<ILineCallback>() {
}
}
}
OchChainLogManager.writeChainLog("异常情况","startStation:${startStation}__endStation:${endStation}__lineInfos:${lineInfos}__contraiInfo:${contraiInfo}")
}
fun getStartStation(function: (start:BusStationBean) -> Unit){
startStation?.let { start ->
function.invoke(start)
}
OchChainLogManager.writeChainLog("异常情况","startStation:${startStation}")
}
@JvmStatic

View File

@@ -32,8 +32,8 @@ class VisualViewModel : ViewModel(),
}
override fun onSceneChanged(scene: Scene) {
if (scene.isCanSwitch) {// 可切换
when (scene.angle) {
if (scene.isCanSwitch()) {// 可切换
when (scene.getVisualAngleMode()) {
VisualAngleMode.MODE_MEDIUM_SIGHT -> {
UiThreadHandler.post({
this.viewCallback?.setViewShow(true)

View File

@@ -58,7 +58,6 @@ abstract class FacadeProvider : IMoGoFunctionProvider, ILoginCallback {
private fun showFragment() {
val supportFragmentManager: FragmentManager? = activity?.supportFragmentManager
injectStatusBar()
val fragment = if (LoginStatusManager.isLogin()) {
val fragment = getFragment()
LoginStatusManager.resetFragment()
@@ -70,6 +69,7 @@ abstract class FacadeProvider : IMoGoFunctionProvider, ILoginCallback {
commonService?.resetFragment()
LoginStatusManager.getFragment()
}
injectStatusBar()
d(TAG, "切换 fragment:${fragment}")
@@ -199,7 +199,6 @@ abstract class FacadeProvider : IMoGoFunctionProvider, ILoginCallback {
}
override fun onBusinessChangeDebug(businessEnum: BusinessEnum) {
injectStatusBar()
if (businessEnum == BusinessEnum.None) {
CallerHmiManager.hideToolsView()
ToggleDebugView.toggleDebugView.dismiss()
@@ -224,6 +223,7 @@ abstract class FacadeProvider : IMoGoFunctionProvider, ILoginCallback {
back.commitAllowingStateLoss()
}
}
injectStatusBar()
}
private fun injectStatusBar() {
@@ -235,10 +235,16 @@ abstract class FacadeProvider : IMoGoFunctionProvider, ILoginCallback {
contentView.fitsSystemWindows = false
decorView.clipToPadding = false
var statusBarView = decorView.findViewWithTag<View>("status_bar")
if(statusBarView!=null){
return
}
val statusBar = commonService?.getStatusBarView(it)
if(statusBarView==null){
}else{
if(statusBar == statusBarView||statusBar==null){
return
}else{
removeStatusBar()
}
}
statusBarView = statusBar ?: StatusBarView(it)
statusBarView.tag = "status_bar"
val statusBarLP = FrameLayout.LayoutParams(

View File

@@ -0,0 +1,577 @@
{
"formatVersion": 1,
"database": {
"version": 2,
"identityHash": "66522c4500a3e7f83bfcabf98096c6bd",
"entities": [
{
"tableName": "contrail_data_table",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `line_id` INTEGER, `csv_file_url` TEXT, `csv_file_md5` TEXT, `txt_file_url` TEXT, `txt_file_md5` TEXT, `contrail_save_time` INTEGER, `md5` TEXT)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "lineId",
"columnName": "line_id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "csvFileUrl",
"columnName": "csv_file_url",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "csvFileMd5",
"columnName": "csv_file_md5",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "txtFileUrl",
"columnName": "txt_file_url",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "txtFileMd5",
"columnName": "txt_file_md5",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "contrailSaveTime",
"columnName": "contrail_save_time",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "md5",
"columnName": "md5",
"affinity": "TEXT",
"notNull": false
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_contrail_data_table_line_id",
"unique": false,
"columnNames": [
"line_id"
],
"orders": [],
"createSql": "CREATE INDEX IF NOT EXISTS `index_contrail_data_table_line_id` ON `${TABLE_NAME}` (`line_id`)"
},
{
"name": "index_contrail_data_table_md5",
"unique": false,
"columnNames": [
"md5"
],
"orders": [],
"createSql": "CREATE INDEX IF NOT EXISTS `index_contrail_data_table_md5` ON `${TABLE_NAME}` (`md5`)"
}
],
"foreignKeys": []
},
{
"tableName": "line_data_table",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `line_id` INTEGER, `line_name` TEXT, `end_station_name` TEXT, `line_get_time` INTEGER NOT NULL)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "lineId",
"columnName": "line_id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "lineName",
"columnName": "line_name",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "endStationName",
"columnName": "end_station_name",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "linegetTime",
"columnName": "line_get_time",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_line_data_table_line_id",
"unique": false,
"columnNames": [
"line_id"
],
"orders": [],
"createSql": "CREATE INDEX IF NOT EXISTS `index_line_data_table_line_id` ON `${TABLE_NAME}` (`line_id`)"
}
],
"foreignKeys": []
},
{
"tableName": "site_data_table",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `site_id` INTEGER, `line_id` INTEGER, `name` TEXT, `name_kr` TEXT, `seq` INTEGER, `gcj_lon` REAL, `gcj_lat` REAL, `lon` REAL, `lat` REAL, `introduction` TEXT, `is_play_tts` INTEGER, `md5` TEXT)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "siteId",
"columnName": "site_id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "lineId",
"columnName": "line_id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "name",
"columnName": "name",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "nameKr",
"columnName": "name_kr",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "seq",
"columnName": "seq",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "gcjLon",
"columnName": "gcj_lon",
"affinity": "REAL",
"notNull": false
},
{
"fieldPath": "gcjLat",
"columnName": "gcj_lat",
"affinity": "REAL",
"notNull": false
},
{
"fieldPath": "lon",
"columnName": "lon",
"affinity": "REAL",
"notNull": false
},
{
"fieldPath": "lat",
"columnName": "lat",
"affinity": "REAL",
"notNull": false
},
{
"fieldPath": "introduction",
"columnName": "introduction",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "isPlayTts",
"columnName": "is_play_tts",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "md5",
"columnName": "md5",
"affinity": "TEXT",
"notNull": false
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_site_data_table_site_id",
"unique": false,
"columnNames": [
"site_id"
],
"orders": [],
"createSql": "CREATE INDEX IF NOT EXISTS `index_site_data_table_site_id` ON `${TABLE_NAME}` (`site_id`)"
},
{
"name": "index_site_data_table_line_id",
"unique": false,
"columnNames": [
"line_id"
],
"orders": [],
"createSql": "CREATE INDEX IF NOT EXISTS `index_site_data_table_line_id` ON `${TABLE_NAME}` (`line_id`)"
}
],
"foreignKeys": []
},
{
"tableName": "task_data_table",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `task_id` INTEGER, `line_id` INTEGER, `task_data` INTEGER, `task_start_time` INTEGER, `start_time` INTEGER, `end_time` INTEGER, `task_get_time` INTEGER NOT NULL, `status` INTEGER)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "taskId",
"columnName": "task_id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "lineId",
"columnName": "line_id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "taskDate",
"columnName": "task_data",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "taskStartTime",
"columnName": "task_start_time",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "startTime",
"columnName": "start_time",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "endtime",
"columnName": "end_time",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "taskgetTime",
"columnName": "task_get_time",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "status",
"columnName": "status",
"affinity": "INTEGER",
"notNull": false
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_task_data_table_task_id",
"unique": false,
"columnNames": [
"task_id"
],
"orders": [],
"createSql": "CREATE INDEX IF NOT EXISTS `index_task_data_table_task_id` ON `${TABLE_NAME}` (`task_id`)"
},
{
"name": "index_task_data_table_line_id",
"unique": false,
"columnNames": [
"line_id"
],
"orders": [],
"createSql": "CREATE INDEX IF NOT EXISTS `index_task_data_table_line_id` ON `${TABLE_NAME}` (`line_id`)"
}
],
"foreignKeys": []
},
{
"tableName": "used_task_data_table",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `task_id` INTEGER, `line_id` INTEGER, `site_id` INTEGER, `line_name` TEXT, `name` TEXT, `name_kr` TEXT, `seq` INTEGER, `gcj_lon` REAL, `gcj_lat` REAL, `lon` REAL, `lat` REAL, `driving_status` INTEGER, `leaving` INTEGER, `arrived_time` INTEGER, `leave_time` INTEGER, `introduction` TEXT, `is_play_tts` INTEGER, `event_save_time` INTEGER NOT NULL)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "taskId",
"columnName": "task_id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "lineId",
"columnName": "line_id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "siteId",
"columnName": "site_id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "lineName",
"columnName": "line_name",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "name",
"columnName": "name",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "nameKr",
"columnName": "name_kr",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "seq",
"columnName": "seq",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "gcjLon",
"columnName": "gcj_lon",
"affinity": "REAL",
"notNull": false
},
{
"fieldPath": "gcjLat",
"columnName": "gcj_lat",
"affinity": "REAL",
"notNull": false
},
{
"fieldPath": "lon",
"columnName": "lon",
"affinity": "REAL",
"notNull": false
},
{
"fieldPath": "lat",
"columnName": "lat",
"affinity": "REAL",
"notNull": false
},
{
"fieldPath": "drivingStatus",
"columnName": "driving_status",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "leaving",
"columnName": "leaving",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "arrivedTime",
"columnName": "arrived_time",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "leaveTime",
"columnName": "leave_time",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "introduction",
"columnName": "introduction",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "isPlayTts",
"columnName": "is_play_tts",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "eventSaveTime",
"columnName": "event_save_time",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [],
"foreignKeys": []
},
{
"tableName": "event_data_table",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `event_type` TEXT, `lineId` INTEGER, `lineName` TEXT, `task_id` INTEGER, `task_start_time` INTEGER, `business_time` INTEGER, `write_version` INTEGER, `site_id` INTEGER, `seq` INTEGER, `driver_id` INTEGER, `event_save_time` INTEGER NOT NULL, `update_status` INTEGER NOT NULL)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "eventType",
"columnName": "event_type",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "lineId",
"columnName": "lineId",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "lineName",
"columnName": "lineName",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "taskId",
"columnName": "task_id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "taskStartTime",
"columnName": "task_start_time",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "businessTime",
"columnName": "business_time",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "writeVersion",
"columnName": "write_version",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "siteId",
"columnName": "site_id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "seq",
"columnName": "seq",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "driverId",
"columnName": "driver_id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "eventSaveTime",
"columnName": "event_save_time",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "updateStatus",
"columnName": "update_status",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_event_data_table_event_save_time",
"unique": false,
"columnNames": [
"event_save_time"
],
"orders": [],
"createSql": "CREATE INDEX IF NOT EXISTS `index_event_data_table_event_save_time` ON `${TABLE_NAME}` (`event_save_time`)"
}
],
"foreignKeys": []
}
],
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '66522c4500a3e7f83bfcabf98096c6bd')"
]
}
}

View File

@@ -18,15 +18,9 @@ data class ShuttleEventRequest(val requestId: String, val sn: String, val busine
val md5Hex = DigestUtils.md5Hex(waitUpdateEvent.toString())
val eventList4Request = mutableListOf<Event>()
var tempEvent:Event?=null
var driverId = 0L
LoginStatusManager.getLoginInfo()?.let {
if(it.driverId>0){
driverId = it.driverId
}
}
waitUpdateEvent.forEach {
tempEvent = Event(it.eventType,
EventData(it.taskId,it.businessTime,it.writeVersion,it.siteId,it.seq,driverId)
EventData(it.taskId,it.businessTime,it.writeVersion,it.siteId,it.seq,it.driverId)
)
eventList4Request.add(tempEvent!!)
}

View File

@@ -4,6 +4,8 @@ import android.os.Environment
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase
import androidx.sqlite.db.SupportSQLiteOpenHelper
import com.mogo.commons.AbsMogoApplication
import com.mogo.och.weaknet.database.bean.ContrailDataBean
@@ -24,7 +26,7 @@ import java.io.File
//entities指定该数据库有哪些表多张表就逗号分隔
//version指定数据库版本号升级时需要用到
//数据库继承自RoomDatabase
@Database(entities = [ContrailDataBean::class, LineDataBean::class, SiteDataBean::class, TaskDataBean::class, TaskSiteDataBean::class, EventDataBean::class], version = 1)
@Database(entities = [ContrailDataBean::class, LineDataBean::class, SiteDataBean::class, TaskDataBean::class, TaskSiteDataBean::class, EventDataBean::class], version = 2)
abstract class MyDataBase : RoomDatabase() {
@@ -33,6 +35,7 @@ abstract class MyDataBase : RoomDatabase() {
val instance: MyDataBase = Room.databaseBuilder(
AbsMogoApplication.getApp()!!.applicationContext, MyDataBase::class.java, ROOT_PATH+DATABASE_NAME
)
.addMigrations(Migration1_2(1,2))
.build()
}
@@ -56,4 +59,10 @@ abstract class MyDataBase : RoomDatabase() {
//结合单例模式完成数据库实例创建
get() = SingleTon.instance
}
class Migration1_2(val startVersion:Int,val endVersion:Int): Migration(startVersion,endVersion) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE ${EventDataBean.evnetDataTable} ADD COLUMN driver_id INTEGER");
}
}
}

View File

@@ -67,6 +67,12 @@ data class EventDataBean(
@ColumnInfo(name = "seq", typeAffinity = ColumnInfo.INTEGER)
var seq: Int? = null,
/**
* 站点排序
*/
@ColumnInfo(name = "driver_id", typeAffinity = ColumnInfo.INTEGER)
var driverId: Long? = null,
/**
* 存储此条数据时时间戳
*/

View File

@@ -1,5 +1,6 @@
package com.mogo.och.weaknet.database.repository
import com.mogo.och.common.module.biz.login.LoginStatusManager
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.weaknet.database.MyDataBase
@@ -27,6 +28,7 @@ object EventRepository {
event.taskStartTime = taskStartTime
event.businessTime = DateTimeUtil.getCurrentTimeStamp()
event.writeVersion = DateTimeUtil.getCurrentTimeStamp()
event.driverId = LoginStatusManager.getLoginInfo()?.driverId?:-1
event.siteId = 0L
event.seq = 0
DbThreadUtils.runInIoThread {
@@ -52,6 +54,7 @@ object EventRepository {
event.businessTime = DateTimeUtil.getCurrentTimeStamp()
event.writeVersion = DateTimeUtil.getCurrentTimeStamp()
event.siteId = siteId
event.driverId = LoginStatusManager.getLoginInfo()?.driverId?:-1
event.seq = seq
DbThreadUtils.runInIoThread {
eventDataDao?.insert(event)
@@ -75,6 +78,7 @@ object EventRepository {
event.lineName = lineName
event.businessTime = DateTimeUtil.getCurrentTimeStamp()
event.writeVersion = DateTimeUtil.getCurrentTimeStamp()
event.driverId = LoginStatusManager.getLoginInfo()?.driverId?:-1L
event.siteId = siteId
event.seq = seq
DbThreadUtils.runInIoThread {
@@ -92,6 +96,7 @@ object EventRepository {
event.taskStartTime = taskStartTime
event.businessTime = DateTimeUtil.getCurrentTimeStamp()
event.writeVersion = DateTimeUtil.getCurrentTimeStamp()
event.driverId = LoginStatusManager.getLoginInfo()?.driverId?:-1L
event.siteId = 0L
event.seq = 0
DbThreadUtils.runInIoThread {

View File

@@ -362,6 +362,7 @@ object OrderModel {
*/
private fun startAutopilot(isRestart: Boolean) {
val temp = initAutopilotControlParameters()
/**
* 存在Session
*/
@@ -767,7 +768,7 @@ object OrderModel {
if(parameters==null){
ToastUtils.showShort("未设置起始或终点站点")
}
return null
return parameters
}
fun setTrajectoryStation(isClean:Boolean) {

View File

@@ -54,8 +54,6 @@ class RunningTaskManagerView: WindowRelativeLayout, RunningTastViewModel.Running
}
private fun initView(){
clLayout.setOnClickListener {
}
//关闭BadCase管理窗口
ivTaskRunningClose.setOnClickListener {
clickListener?.onClose()

View File

@@ -33,8 +33,8 @@ class DebugViewModel : ViewModel(),
}
override fun onSceneChanged(scene: Scene) {
if (scene.isCanSwitch) {// 可切换
when (scene.angle) {
if (scene.isCanSwitch()) {// 可切换
when (scene.getVisualAngleMode()) {
VisualAngleMode.MODE_MEDIUM_SIGHT -> {
UiThreadHandler.post({
this.viewCallback?.setViewShow(true)
@@ -76,9 +76,9 @@ class DebugViewModel : ViewModel(),
CallerVisualAngleManager.getCurrentScene().let {
val default = Default()
when (it.angle) {
when (it.getVisualAngleMode()) {
VisualAngleMode.MODE_MEDIUM_SIGHT -> {
if(default.angle==VisualAngleMode.MODE_MEDIUM_SIGHT){
if(default.getVisualAngleMode()==VisualAngleMode.MODE_MEDIUM_SIGHT){
CallerVisualAngleManager.changeScene(LongSight())
}
}
@@ -87,7 +87,7 @@ class DebugViewModel : ViewModel(),
CallerVisualAngleManager.changeScene(Default())
}
VisualAngleMode.MAP_STYLE_VR_SKY_BOX -> {
if(default.angle==VisualAngleMode.MAP_STYLE_VR_SKY_BOX){
if(default.getVisualAngleMode()==VisualAngleMode.MAP_STYLE_VR_SKY_BOX){
CallerVisualAngleManager.changeScene(LongSight())
}
}

View File

@@ -130,7 +130,7 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis
CallerFsm2024ListenerManager.addListener(TAG,this)
CallerAutopilotStatisticsListenerManager.addListener(TAG,this)
CallerOrderListenerManager.addListener(TAG,this)
CallerAutoPilotStatusListenerManager.addListener(TAG,this)
CallerAutoPilotStatusListenerManager.addListener("RecordViewManager",this)
CallerChassisStatesListenerManager.addListener(TAG,this)
}
checkDelete(context)

View File

@@ -152,7 +152,7 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider {
override fun changeScene(scene: Scene) {
prevJob?.safeCancel()
scope.launch {
val delay = scene.delay
val delay = scene.getDelay()
if (delay > 0) {
delay(delay)
}
@@ -165,8 +165,8 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider {
verifyPrior = false
}
if (verifyPrior) {
val lastPriority = prev?.priority ?: Int.MIN_VALUE
val currentPriority = scene.priority
val lastPriority = prev?.getPriority() ?: Int.MIN_VALUE
val currentPriority = scene.getPriority()
if (lastPriority > currentPriority) {
return@launch
}
@@ -182,18 +182,19 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider {
}
private fun doChangeAngle(target: Scene) {
val angle = target.angle
val angle = target.getVisualAngleMode()
CallerMapUIServiceManager.getMapUIController()?.also {
Log.d(TAG, "--- doChangeAngle --- $target")
val prev = prevScene.get()
try {
if (!target.isCanTouch) {
if (!target.isCanTouch()) {
CallerMapUIServiceManager.getMapUIController()?.setAllGesturesEnabled(false)
} else {
CallerMapUIServiceManager.getMapUIController()?.setAllGesturesEnabled(true)
}
val screenToOriginDis = target.getScreenToOriginDis()
when(screenToOriginDis) {
ScreenToOriginDis.NONE -> {}
DEFAULT -> CallerMapUIServiceManager.getMapUIController()?.setScreenToOriginDis(4.0f)
UP -> CallerMapUIServiceManager.getMapUIController()?.setScreenToOriginDis(3.0f)
DOWN -> CallerMapUIServiceManager.getMapUIController()?.setScreenToOriginDis(5.0f)
@@ -206,9 +207,9 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider {
notifyChanged(target)
}
prevScene.set(target)
if (target.displayThreshold > 0) {
if (target.getDisplayThreshold() > 0) {
scope.launch {
delay(target.displayThreshold)
delay(target.getDisplayThreshold())
doChangeAngle(Default())
}
}

View File

@@ -1,8 +1,11 @@
package com.mogo.eagle.core.function.angle.scenes
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.api.map.angle.Scene
import com.mogo.eagle.core.function.api.map.angle.ScreenToOriginDis
import com.mogo.eagle.core.function.api.map.angle.ScreenToOriginDis.DOWN
import com.mogo.eagle.core.function.api.map.angle.ScreenToOriginDis.NONE
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.map.uicontroller.VisualAngleMode
import com.mogo.map.uicontroller.VisualAngleMode.MAP_STYLE_VR_ANGLE_CROSS_NEW
import java.util.concurrent.TimeUnit
@@ -10,28 +13,32 @@ import java.util.concurrent.TimeUnit
/**
* 十字路口
*/
class CrossRoad(private val delayTime: Long = 0, private val unit: TimeUnit = TimeUnit.SECONDS): Scene {
override val angle: VisualAngleMode
get() = MAP_STYLE_VR_ANGLE_CROSS_NEW
class CrossRoad(private val delayTime: Long = 0, unit: TimeUnit = TimeUnit.SECONDS) :
Scene(delayTime, unit) {
override val priority: Int = 0
override val displayThreshold: Long
get() = -1
override fun getVisualAngleMode(): VisualAngleMode {
if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) {
return VisualAngleMode.MAP_STYLE_VR_ANGLE_CROSS
}
return MAP_STYLE_VR_ANGLE_CROSS_NEW
}
override val delay: Long
get() = unit.toMillis(delayTime)
override fun isCanTouch(): Boolean {
return false
}
override val isCanSwitch: Boolean
get() = false
override val isCanTouch: Boolean
get() = false
override fun isCanSwitch(): Boolean {
return false
}
override fun toString(): String {
return "CrossRoad(delayTime=${delayTime}, priority=${priority}, displayThreshold: ${displayThreshold}, priority=${priority})"
return "CrossRoad(delayTime=${delayTime}, priority=${getPriority()}, displayThreshold: ${getDisplayThreshold()}, priority=${getPriority()})"
}
override fun getScreenToOriginDis(): ScreenToOriginDis {
if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) {
return NONE
}
return DOWN
}
}

View File

@@ -1,37 +1,29 @@
package com.mogo.eagle.core.function.angle.scenes
import android.util.Log
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.api.map.angle.Scene
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.map.uicontroller.VisualAngleMode
import com.mogo.map.uicontroller.VisualAngleMode.MODE_MEDIUM_SIGHT
import java.util.concurrent.TimeUnit
/**
* 默认视图
* @param delay: 表示多少稍后默认值为2
* @param unit: 时间单位,默认为秒
*/
class Default(val delayTime: Long = 0, val unit: TimeUnit = TimeUnit.SECONDS, val forceClosePrev: Boolean = false): Scene(delayTime, unit) {
class Default(val delayTime: Long = 0, val unit: TimeUnit = TimeUnit.SECONDS, val forceClosePrev: Boolean = false): Scene {
override val angle: VisualAngleMode
get() = CallerMapUIServiceManager.getMapUIController()?.getVrAngleDefaultMode() ?: MODE_MEDIUM_SIGHT
override val priority: Int = 0
override val displayThreshold: Long
get() = 0
override val delay: Long
get() = unit.toMillis(delayTime)
override val isCanSwitch: Boolean
get() = true
override val isCanTouch: Boolean
get() = true
override fun getVisualAngleMode(): VisualAngleMode {
Log.d("Default", "---- 1 --------------")
if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) {
Log.d("Default", "---- 2 --------------")
return VisualAngleMode.MAP_STYLE_VR_ERHAI_B2
}
return CallerMapUIServiceManager.getMapUIController()?.getVrAngleDefaultMode() ?: MODE_MEDIUM_SIGHT
}
override fun toString(): String {
return "Default(delay=$delay, unit=$unit, angle=$angle, priority=$priority, closePrevious=$forceClosePrev)"
return "Default(delay=${getDelay()}, unit=$unit, angle=${getVisualAngleMode()}, priority=${getPriority()}, closePrevious=$forceClosePrev)"
}
}

View File

@@ -5,21 +5,13 @@ import com.mogo.map.uicontroller.VisualAngleMode
import com.mogo.map.uicontroller.VisualAngleMode.MODE_LONG_SIGHT
import java.util.concurrent.TimeUnit
class LongSight(private val delayTime: Long = 0, private val unit: TimeUnit = TimeUnit.SECONDS): Scene {
class LongSight(private val delayTime: Long = 0, private val unit: TimeUnit = TimeUnit.SECONDS): Scene(delayTime, unit) {
override val angle: VisualAngleMode
get() = MODE_LONG_SIGHT
override val priority: Int
get() = 0
override val displayThreshold: Long
get() = -1
override fun getVisualAngleMode(): VisualAngleMode {
return MODE_LONG_SIGHT
}
override val delay: Long
get() = unit.toMillis(delayTime)
override val isCanSwitch: Boolean
get() = true
override val isCanTouch: Boolean
get() = true
override fun toString(): String {
return "LongSight(delayTime=${delayTime}, priority=${getPriority()}, displayThreshold: ${getDisplayThreshold()}, priority=${getPriority()})"
}
}

View File

@@ -1,33 +1,27 @@
package com.mogo.eagle.core.function.angle.scenes
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.api.map.angle.Scene
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.map.uicontroller.VisualAngleMode
import com.mogo.map.uicontroller.VisualAngleMode.MAP_STYLE_VR_ERHAI_B2
import com.mogo.map.uicontroller.VisualAngleMode.MODE_MEDIUM_SIGHT
import java.util.concurrent.TimeUnit
/**
* 道路事件
*/
class RoadEvent(private val delayTime: Long, private val unit: TimeUnit): Scene {
class RoadEvent(delayTime: Long, unit: TimeUnit): Scene(delayTime, unit) {
override val angle: VisualAngleMode = CallerMapUIServiceManager.getMapUIController()?.getVrAngleDefaultMode() ?: MODE_MEDIUM_SIGHT
override val priority: Int = 0
override val displayThreshold: Long
get() = -1
override val delay: Long
get() = unit.toMillis(delayTime)
override fun toString(): String {
return "RoadEvent(priority=${priority}, displayThreshold: ${displayThreshold}, priority=${priority}"
override fun getVisualAngleMode(): VisualAngleMode {
if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) {
return MAP_STYLE_VR_ERHAI_B2
}
return CallerMapUIServiceManager.getMapUIController()?.getVrAngleDefaultMode() ?: MODE_MEDIUM_SIGHT
}
override val isCanSwitch: Boolean
get() = true
override val isCanTouch: Boolean
get() = true
override fun toString(): String {
return "RoadEvent(mode: ${getVisualAngleMode()}, priority=${getPriority()}, displayThreshold: ${getDisplayThreshold()},"
}
}

View File

@@ -8,18 +8,21 @@ import java.util.concurrent.TimeUnit
/**
* 漫游场景
*/
class Roma(val delayTime: Long = 2, val unit: TimeUnit = TimeUnit.SECONDS): Scene {
class Roma(val delayTime: Long = 2, val unit: TimeUnit = TimeUnit.SECONDS): Scene(delayTime, unit) {
override val angle: VisualAngleMode
get() = MAP_STYLE_VR_ROMA
override val priority: Int
get() = 1
override val displayThreshold: Long
get() = -1
override val delay: Long
get() = unit.toMillis(delayTime)
override val isCanSwitch: Boolean
get() = false
override val isCanTouch: Boolean
get() = false
override fun getVisualAngleMode(): VisualAngleMode {
return MAP_STYLE_VR_ROMA
}
override fun isCanTouch(): Boolean {
return false
}
override fun isCanSwitch(): Boolean {
return false
}
override fun getPriority(): Int {
return 1
}
}

View File

@@ -2,23 +2,62 @@ package com.mogo.eagle.core.function.api.map.angle
import com.mogo.eagle.core.function.api.map.angle.ScreenToOriginDis.DEFAULT
import com.mogo.map.uicontroller.*
interface IAttach {
val angle: VisualAngleMode
val priority: Int
val displayThreshold: Long //最大展示时长 > 0; 表示最长展示多长时间, -1 表示,一直展示,直到触发默认视角, 0: 默认视角专用值,
val delay: Long // 延迟多长时间切换
val isCanSwitch: Boolean // 是否可切换
val isCanTouch: Boolean // 是否响应地图触摸事件
fun getScreenToOriginDis(): ScreenToOriginDis = DEFAULT
}
import java.util.concurrent.TimeUnit
enum class ScreenToOriginDis {
DEFAULT,
UP,
DOWN
NONE,
DEFAULT,
UP,
DOWN
}
interface Scene: IAttach
abstract class Scene(private val delay: Long, private val unit: TimeUnit = TimeUnit.SECONDS) {
/**
* 获取当前视角场景的视角类型,此返回值要与地图支持的视角类型匹配
*/
abstract fun getVisualAngleMode(): VisualAngleMode
/**
* 当前视角场景的优先级,优先级越高,表示可以打断优先级低的视角场景
*/
open fun getPriority(): Int = 0
/**
* 单位:(毫秒)
* 表示多长时间之后切换到当前视角场景
*/
final fun getDelay(): Long = unit.toMillis(delay)
/**
* 单位:(毫秒)
* 最大展示时长 > 0; 表示最长展示多长时间, -1 表示,一直展示,直到触发默认视角, 0: 默认视角专用值,
* @return
* 大于0: 此场景对应的视角展示指定时长后,自动切换到默认视角场景
* 小于0: 一直展示此场景的视角,直到比此场景优先级:[getPriority]更高的场景触发时,才会终止
*/
open fun getDisplayThreshold(): Long = 0
/**
* 用于业务层视角切换按钮的使能状态
* @return true: 可以切换; false:不可以切换
*/
open fun isCanSwitch(): Boolean = true
/**
* 用于控制高精地图控件(MapAutoView)是否禁掉所有手势
* @return true: 响应地图控件的触摸事件及手势false:不响应地图控件的触摸事件及手势
*/
open fun isCanTouch(): Boolean = true
/**
* 返回自车相对于地图控件的位置
* @return
* 1. [ScreenToOriginDis.NONE]: 不设置
* 2. [ScreenToOriginDis.DEFAULT]: 默认的位置
* 3. [ScreenToOriginDis.UP]: 偏上
* 4. [ScreenToOriginDis.DOWN]: 偏下
*/
open fun getScreenToOriginDis(): ScreenToOriginDis = DEFAULT
}

View File

@@ -1,6 +1,9 @@
package com.mogo.commons.utils
import android.content.Context
import android.os.Handler
import android.os.Looper
import android.util.Log
import androidx.annotation.Keep
import androidx.collection.ArrayMap
import com.elegant.analytics.Analytics
@@ -15,7 +18,10 @@ import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.util.AppUtils
import com.mogo.eagle.core.utilcode.util.DateTimeUtils
import com.mogo.eagle.core.utilcode.util.NetworkUtils
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.eagle.core.utilcode.util.Utils
import org.json.JSONObject
import java.util.TimerTask
/**
* 埋点&数据统计 管理
@@ -23,6 +29,23 @@ import org.json.JSONObject
*/
object MogoAnalyticUtils {
var network_is_available = false
private val handler = Handler(Looper.getMainLooper())
private val runnable = object : Runnable {
override fun run() {
NetworkUtils.isAvailableByPingAsync("49.233.99.26", object : Utils.Consumer<Boolean> {
override fun accept(isAvailable: Boolean) {
network_is_available = isAvailable
}
})
// 这里执行你的任务
// 重新安排下一个任务
handler.postDelayed(this, 5000) // 每隔5秒执行一次
}
}
@Keep
fun init(context: Context?, isDebug: Boolean) {
// 1 - debug 近实时上报积累一条埋点上报或者积累3秒上报一次。
@@ -44,6 +67,9 @@ object MogoAnalyticUtils {
}
}
Analytics.getInstance().start(context)
// 启动定时任务
handler.post(runnable)
}
/**
@@ -54,12 +80,24 @@ object MogoAnalyticUtils {
*/
fun track(event: String?, properties: MutableMap<String, Any>) {
try {
properties["network_type"] = NetworkUtils.getNetworkType()
// 自动驾驶工控机相关信息
properties["plate_number"] = AppConfigInfo.plateNumber
properties["docker_version"] = AppConfigInfo.dockerVersion
properties["ipc_mac_address"] = AppConfigInfo.iPCMacAddress
properties["protocol_version_number"] = AppConfigInfo.protocolVersionNumber
properties["ad_hd_map_version"] = AppConfigInfo.adHdMapVersion
properties["car_type"] =
AppIdentityModeUtils.getCarType(FunctionBuildConfig.appIdentityMode).name
// 网络状态监听
properties["network_address"] = NetworkUtils.getIPAddress(true)
properties["network_type"] = NetworkUtils.getNetworkType().name
properties["network_ssid"] = NetworkUtils.getSSID()
properties["network_wifi_enabled "] = NetworkUtils.getWifiEnabled()
properties["network_is_available"] = NetworkUtils.isAvailable()
properties["network_is_available_by_ping"] = NetworkUtils.isAvailableByPing("49.233.99.26")
properties["network_is_available"] = network_is_available
} catch (e: Exception) {
e.printStackTrace()
properties["network_type"] = "获取设备网络状态错误"
}
Analytics.getInstance().track(event, properties)
@@ -106,14 +144,6 @@ object MogoAnalyticUtils {
AppIdentityModeUtils.getProduct(FunctionBuildConfig.appIdentityMode).name
map["time"] = DateTimeUtils.getTimeText(DateTimeUtils.yyyy_MM_dd_HH_mm_ss_SSS)
// 自动驾驶工控机相关信息
map["plate_number"] = AppConfigInfo.plateNumber
map["docker_version"] = AppConfigInfo.dockerVersion
map["ipc_mac_address"] = AppConfigInfo.iPCMacAddress
map["protocol_version_number"] = AppConfigInfo.protocolVersionNumber
map["ad_hd_map_version"] = AppConfigInfo.adHdMapVersion
map["car_type"] = AppIdentityModeUtils.getCarType(FunctionBuildConfig.appIdentityMode).name
return map
}
}

View File

@@ -21,7 +21,7 @@ object HDMapUtils {
// map["0335"] = 1303 //秦皇岛市
// map["0310"] = 1304 //邯郸市
// map["0319"] = 1305 //邢台市
// map["0312"] = 1306 //保定市
map["0312"] = 1306 //保定市
// map["0313"] = 1307 //张家口市
// map["0314"] = 1308 //承德市
// map["0317"] = 1309 //沧州市
@@ -124,7 +124,7 @@ object HDMapUtils {
// map["0578"] = 3311 //丽水市
//安徽
// map["0551"] = 3401 //合肥市
map["0551"] = 3401 //合肥市
// map["0553"] = 3402 //芜湖市
// map["0552"] = 3403 //蚌埠市
// map["0554"] = 3404 //淮南市
@@ -166,7 +166,7 @@ object HDMapUtils {
// map["0793"] = 3611 //上饶市
//山东
// map["0531"] = 3701 //济南市
map["0531"] = 3701 //济南市
// map["0532"] = 3702 //青岛市
// map["0533"] = 3703 //淄博市
// map["0632"] = 3704 //枣庄市
@@ -204,7 +204,7 @@ object HDMapUtils {
//湖北
// map["0714"] = 4202 //黄石市
// map["0719"] = 4203 //十堰市
map["0719"] = 4203 //十堰市
// map["0717"] = 4205 //宜昌市
// map["0710"] = 4206 //襄阳市
map["0711"] = 4207 //鄂州市
@@ -217,7 +217,7 @@ object HDMapUtils {
// map["0718"] = 4228 //恩施土家族苗族自治州
//湖南
// map["0731"] = 4301 //长沙市
map["0731"] = 4301 //长沙市
map["0733"] = 4302 //株洲市
// map["0732"] = 4303 //湘潭市
map["0734"] = 4304 //衡阳市
@@ -256,7 +256,7 @@ object HDMapUtils {
//广西
map["0771"] = 4501 //南宁市
// map["0772"] = 4502 //柳州市
map["0772"] = 4502 //柳州市
// map["0773"] = 4503 //桂林市
// map["0774"] = 4504 //梧州市
// map["0779"] = 4505 //北海市
@@ -271,8 +271,8 @@ object HDMapUtils {
// map["1771"] = 4514 //崇左市
//海南
// map["0898"] = 4601 //海口市
// map["0899"] = 4602 //三亚市
map["0898"] = 4601 //海口市
map["0899"] = 4602 //三亚市
// map["2898"] = 4603 //三沙市
// map["0805"] = 4604 //儋州市
@@ -356,6 +356,7 @@ object HDMapUtils {
//青海
map["0971"] = 6301 //西宁市
map["0974"] = 6325 //海南藏族自治州
// map["0972"] = 6302 //海东市
//宁夏