diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/autopilot/AutopilotStateModel.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/autopilot/AutopilotStateModel.kt index 80a50bbcdc..22cc906d09 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/autopilot/AutopilotStateModel.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/autopilot/AutopilotStateModel.kt @@ -154,12 +154,20 @@ class AutopilotStateModel : ViewModel(), IOchAutopilotStatusListener, ILineCall override fun startAutopilotTimeOut() { OchChainLogManager.writeChainLog("自驾信息","启动自驾超时失败") - startAutopilotFail() + if(OchAutoPilotStatusListenerManager.autopilotState == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING){ + autopilotStateChange() + }else { + startAutopilotFail() + } } override fun startAutopilotFailure(startFailedCode: String?, startFailedMessage: String?) { OchChainLogManager.writeChainLog("自驾信息","底盘强制失败原因:${startFailedCode}_${startFailedMessage}") - startAutopilotFail() + if(OchAutoPilotStatusListenerManager.autopilotState == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING){ + autopilotStateChange() + }else { + startAutopilotFail() + } } private fun startAutopilotFail(){ diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaDataSourceManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaDataSourceManager.kt index 24d297a733..62e247f538 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaDataSourceManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaDataSourceManager.kt @@ -14,6 +14,7 @@ import com.mogo.eagle.core.network.MoGoRetrofitFactory import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.eagle.core.utilcode.util.NetworkUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.och.common.module.biz.lansocket.LoginLanPassengerSocket import com.mogo.och.common.module.constant.OchCommonConst import com.mogo.och.common.module.network.OchCommonServiceCallback import com.mogo.och.common.module.network.OchCommonSubscribeImpl @@ -188,7 +189,7 @@ object MediaDataSourceManager { private fun getMediaDataFromMis(callback: OchCommonServiceCallback) { MediaPlayLogger.printInfoLog("getMediaDataFromMis:准备发送请求,driverSn=$driverSn") mNetworkService - ?.queryMediaDataFromMis(sn = driverSn, screenType = "2",) + ?.queryMediaDataFromMis(sn = LoginLanPassengerSocket.driverSn, screenType = "2",) ?.transformTry() ?.subscribe(OchCommonSubscribeImpl(context, callback, "getMediaDataFromMis")) } diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerFragment.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerFragment.kt index 0c3ba2dc4f..e4f2d06745 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerFragment.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerFragment.kt @@ -62,9 +62,9 @@ class MediaPlayerFragment : arrayListOf.addAll(list) UiThreadHandler.post { if (isNewData) { - imageVideoRotationView.setNewMediaData(arrayListOf) + imageVideoRotationView?.setNewMediaData(arrayListOf) } else { - imageVideoRotationView.setMediaData(arrayListOf) + imageVideoRotationView?.setMediaData(arrayListOf) } } } diff --git a/OCH/offline/driver/src/main/java/com/mogo/och/offline/model/OrderModel.java b/OCH/offline/driver/src/main/java/com/mogo/och/offline/model/OrderModel.java index 7f04703625..ca3026abb2 100644 --- a/OCH/offline/driver/src/main/java/com/mogo/och/offline/model/OrderModel.java +++ b/OCH/offline/driver/src/main/java/com/mogo/och/offline/model/OrderModel.java @@ -1085,12 +1085,18 @@ public class OrderModel { parameters.vehicleType = VEHICLE_TYPE; if (parameters.autoPilotLine == null) { parameters.autoPilotLine = new AutopilotControlParameters.AutoPilotLine( - busRoutesResult.getLineId(), busRoutesResult.getName(), - busRoutesResult.csvFileUrl, busRoutesResult.csvFileMd5, - busRoutesResult.txtFileUrl, busRoutesResult.txtFileMd5, - busRoutesResult.contrailSaveTime, busRoutesResult.carModel, - busRoutesResult.csvFileUrlDPQP, busRoutesResult.csvFileMd5DPQP, - busRoutesResult.txtFileUrlDPQP, busRoutesResult.txtFileMd5DPQP, + busRoutesResult.getLineId(), + busRoutesResult.getName(), + busRoutesResult.csvFileUrl==null?"":busRoutesResult.csvFileUrl, + busRoutesResult.csvFileMd5==null?"":busRoutesResult.csvFileMd5, + busRoutesResult.txtFileUrl==null?"":busRoutesResult.txtFileUrl, + busRoutesResult.txtFileMd5==null?"":busRoutesResult.txtFileMd5, + busRoutesResult.contrailSaveTime, + busRoutesResult.carModel, + busRoutesResult.csvFileUrlDPQP, + busRoutesResult.csvFileMd5DPQP, + busRoutesResult.txtFileUrlDPQP, + busRoutesResult.txtFileMd5DPQP, busRoutesResult.contrailSaveTimeDPQP); } diff --git a/OCH/offline/driver/src/main/java/com/mogo/och/offline/util/BusTrajectoryManager.java b/OCH/offline/driver/src/main/java/com/mogo/och/offline/util/BusTrajectoryManager.java index 4370689618..39005ec077 100644 --- a/OCH/offline/driver/src/main/java/com/mogo/och/offline/util/BusTrajectoryManager.java +++ b/OCH/offline/driver/src/main/java/com/mogo/och/offline/util/BusTrajectoryManager.java @@ -129,17 +129,12 @@ public class BusTrajectoryManager { } else { mAutoPilotLine.setLineId(routesResult.getLineId()); mAutoPilotLine.setLineName(routesResult.getName()); - mAutoPilotLine.setTrajUrl(routesResult.csvFileUrl); - mAutoPilotLine.setTrajMd5(routesResult.csvFileMd5); - mAutoPilotLine.setStopUrl(routesResult.txtFileUrl); - mAutoPilotLine.setStopMd5(routesResult.txtFileMd5); + mAutoPilotLine.setTrajUrl(routesResult.csvFileUrl==null?"":routesResult.csvFileUrl); + mAutoPilotLine.setTrajMd5(routesResult.csvFileMd5==null?"":routesResult.csvFileMd5); + mAutoPilotLine.setStopUrl(routesResult.txtFileUrl==null?"":routesResult.txtFileUrl); + mAutoPilotLine.setStopMd5(routesResult.txtFileMd5==null?"":routesResult.txtFileMd5); mAutoPilotLine.setTimestamp(routesResult.contrailSaveTime); - mAutoPilotLine.setVehicleModel(routesResult.carModel); - mAutoPilotLine.setTrajUrl_dpqp(routesResult.csvFileUrlDPQP); - mAutoPilotLine.setTrajMd5_dpqp(routesResult.csvFileMd5DPQP); - mAutoPilotLine.setStopUrl_dpqp(routesResult.txtFileUrlDPQP); - mAutoPilotLine.setStopMd5_dpqp(routesResult.txtFileMd5DPQP); - mAutoPilotLine.setTimestamp_dpqp(routesResult.contrailSaveTimeDPQP); + mAutoPilotLine.setVehicleModel(routesResult.carModel==null?"":routesResult.carModel); } } } diff --git a/OCH/offline/driver/src/main/res/layout/offline_base_fragment.xml b/OCH/offline/driver/src/main/res/layout/offline_base_fragment.xml index 34c7b6a068..64b4c69814 100644 --- a/OCH/offline/driver/src/main/res/layout/offline_base_fragment.xml +++ b/OCH/offline/driver/src/main/res/layout/offline_base_fragment.xml @@ -72,11 +72,11 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="@dimen/dp_71" - app:layout_constraintEnd_toEndOf="@+id/viewLimitingVelocity" + app:layout_constraintEnd_toEndOf="parent" app:layout_goneMarginEnd="40dp" app:layout_goneMarginTop="@dimen/dp_236" android:visibility="invisible" - app:layout_constraintTop_toBottomOf="@+id/viewLimitingVelocity"/> + app:layout_constraintTop_toBottomOf="@+id/ivCameraIcon"/> >( - taskAndsite.videoList, - object : TypeToken?>() {}.type - ) - temp?.videoList = list.toMutableList() + try { + val list = GsonUtils.fromJson>( + taskAndsite.videoList, + object : TypeToken?>() {}.type + ) + temp?.videoList = list.toMutableList() + }catch (e:Exception){ + temp?.videoList = null + } + } result.add(temp!!) // 正在进行中的任务 diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/EventModel.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/EventModel.kt index 7827658f17..daa2818b82 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/EventModel.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/EventModel.kt @@ -55,6 +55,10 @@ object EventModel : EventDb.EventCallback { private fun updateEvent(){ + if(isUpdating.get()){ + OchChainLogManager.writeChainLogDb("上报event","正在上传 等待下一次轮训 ${Thread.currentThread().name}") + return + } isUpdating.set(true) createDefault.onNext(isUpdating.get()) ThreadUtils.getSinglePool().submit { @@ -72,6 +76,7 @@ object EventModel : EventDb.EventCallback { override fun onSuccess(data: BaseData?) { waitUpdateEvent.forEach { it.updateStatus = EventDataBean.updated + it.upDateTime = System.currentTimeMillis() } OchChainLogManager.writeChainLogDb("上报event成功","$transformDb2Net ${Thread.currentThread().name}") EventDb.saveUpdateSuccess(waitUpdateEvent) diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/OrderModel.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/OrderModel.kt index acc8b5caac..b78c7fff71 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/OrderModel.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/OrderModel.kt @@ -457,6 +457,10 @@ object OrderModel { ToastUtils.showShort(ResourcesUtils.getString(R.string.shuttle_logout_error)) return@execute } + if(RepositoryManager.haveRunningTask()){ + ToastUtils.showShort(ResourcesUtils.getString(R.string.shuttle_logout_error_running)) + return@execute + } MapMakerManager.removeAllMapMarkerByOwner(TAG) BusTrajectoryManager.getInstance().stopTrajReqLoop(); LoginStatusManager.loginOut() diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/ThirdDeviceData.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/ThirdDeviceData.kt index fc866195cc..3dddd7cb5c 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/ThirdDeviceData.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/ThirdDeviceData.kt @@ -132,6 +132,7 @@ object ThirdDeviceData { busRoutesResult.name = lineInfo.lineName busRoutesResult.taskId = LineModel.currentTask!!.taskId!!.toInt() busRoutesResult.taskTime = LineModel.currentTask!!.taskStartTime!! + busRoutesResult.writeVersion = System.currentTimeMillis() val data = BusTransferData(if (LoginStatusManager.isLogin()) 1 else 0, busRoutesResult) val msg = TaskDetailsMsg(GsonUtils.toJson(data), BusinessType.shuttle) d(M_BUS + TAG, "sendTaskDetailsToClients = " + GsonUtils.toJson(msg)) diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/IRepository.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/IRepository.kt index 63c45f2f9d..575f7f61df 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/IRepository.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/IRepository.kt @@ -32,6 +32,10 @@ interface IRepository { fun reportCabinEvent(context: Context?, data: ShuttleEventRequest?, callback: OchCommonServiceCallback?) + fun haveRunningTask(): Boolean{ + return false + } + fun release() } \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/RepositoryManager.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/RepositoryManager.kt index 73f1a9439a..4f79fda2f0 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/RepositoryManager.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/RepositoryManager.kt @@ -96,6 +96,10 @@ object RepositoryManager { repository?.queryWriteoffCount(context,taskId,siteId,callback) } + fun haveRunningTask():Boolean{ + return repository?.haveRunningTask()?:false + } + fun haveDataWaitSyn(): Boolean { if(ProjectUtils.isSaas()&&AppIdentityModeUtils.isShuttle(FunctionBuildConfig.appIdentityMode)) { diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/MyDataBase.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/MyDataBase.kt index 590ba5a8ab..3d6e448dc8 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/MyDataBase.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/MyDataBase.kt @@ -12,6 +12,7 @@ import com.mogo.commons.env.Project import com.mogo.commons.env.ProjectUtils import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.eagle.core.utilcode.util.FileUtils import com.mogo.och.weaknet.repository.db.bean.ContrailDataBean import com.mogo.och.weaknet.repository.db.bean.EventDataBean import com.mogo.och.weaknet.repository.db.bean.LineDataBean @@ -30,7 +31,7 @@ import java.io.File //entities指定该数据库有哪些表,多张表就逗号分隔 //version指定数据库版本号,升级时需要用到 //数据库继承自RoomDatabase -@Database(entities = [ContrailDataBean::class, LineDataBean::class, SiteDataBean::class, TaskDataBean::class, TaskSiteDataBean::class, EventDataBean::class], version = 3) +@Database(entities = [ContrailDataBean::class, LineDataBean::class, SiteDataBean::class, TaskDataBean::class, TaskSiteDataBean::class, EventDataBean::class], version = 4) abstract class MyDataBase : RoomDatabase() { override fun getOpenHelper(): SupportSQLiteOpenHelper { @@ -82,11 +83,16 @@ abstract class MyDataBase : RoomDatabase() { } } + FileUtils.createOrExistsDir(ROOT_PATH) + return Room.databaseBuilder( AbsMogoApplication.getApp()!!.applicationContext, MyDataBase::class.java, ROOT_PATH+roomName ) .addMigrations(Migration1_2(1,2)) .addMigrations(Migration2_3(2,3)) + .addMigrations(Migration3_4(3,4)) + .addMigrations(Migration2_4(2,4)) + .fallbackToDestructiveMigration() .build() } val ROOT_PATH = Environment.getExternalStorageDirectory().absolutePath + File.separator + "Mogo" + File.separator + "APP_cache" + File.separator //程序外部存储跟目录 @@ -111,4 +117,20 @@ abstract class MyDataBase : RoomDatabase() { database.execSQL("ALTER TABLE ${TaskSiteDataBean.usedTaskDataTable} ADD COLUMN videoList TEXT"); } } + + class Migration3_4(val startVersion:Int,val endVersion:Int): Migration(startVersion,endVersion) { + override fun migrate(database: SupportSQLiteDatabase) { + database.execSQL("ALTER TABLE ${EventDataBean.evnetDataTable} ADD COLUMN msg_id TEXT") + database.execSQL("ALTER TABLE ${EventDataBean.evnetDataTable} ADD COLUMN update_time INTEGER") + } + } + + class Migration2_4(val startVersion:Int,val endVersion:Int): Migration(startVersion,endVersion) { + override fun migrate(database: SupportSQLiteDatabase) { + database.execSQL("ALTER TABLE ${SiteDataBean.siteDataTable} ADD COLUMN videoList TEXT"); + database.execSQL("ALTER TABLE ${TaskSiteDataBean.usedTaskDataTable} ADD COLUMN videoList TEXT"); + database.execSQL("ALTER TABLE ${EventDataBean.evnetDataTable} ADD COLUMN msg_id TEXT") + database.execSQL("ALTER TABLE ${EventDataBean.evnetDataTable} ADD COLUMN update_time INTEGER") + } + } } diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/bean/EventDataBean.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/bean/EventDataBean.kt index 9481b8222c..bfd343051b 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/bean/EventDataBean.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/bean/EventDataBean.kt @@ -80,7 +80,13 @@ data class EventDataBean( val eventSaveTime: Long = System.currentTimeMillis(), @ColumnInfo(name = "update_status", typeAffinity = ColumnInfo.INTEGER) - var updateStatus:Int = 0 + var updateStatus:Int = 0, + + @ColumnInfo(name = "msg_id", typeAffinity = ColumnInfo.TEXT) + var msgId:String? = "", + + @ColumnInfo(name = "update_time", typeAffinity = ColumnInfo.INTEGER) + var upDateTime:Long? = 0L, ) { companion object { diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/EventDb.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/EventDb.kt index a689f5d744..c375fe910a 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/EventDb.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/EventDb.kt @@ -1,6 +1,7 @@ package com.mogo.och.weaknet.repository.db.repository import com.mogo.och.common.module.biz.login.LoginStatusManager +import com.mogo.och.common.module.manager.cache.OchSPManager import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager import com.mogo.och.common.module.manager.loop.BizLoopManager import com.mogo.och.common.module.utils.DateTimeUtil @@ -40,6 +41,7 @@ object EventDb: IDbRepository { event.driverId = LoginStatusManager.getLoginInfo()?.driverId?:-1 event.siteId = 0L event.seq = 0 + event.msgId = "${OchSPManager.getSn()}_${DateTimeUtil.getCurrentTimeStamp()}" BizLoopManager.runInIoThread { eventDataDao?.insert(event) eventCallback?.notifySyn() @@ -65,6 +67,7 @@ object EventDb: IDbRepository { event.siteId = siteId event.driverId = LoginStatusManager.getLoginInfo()?.driverId?:-1 event.seq = seq + event.msgId = "${OchSPManager.getSn()}_${DateTimeUtil.getCurrentTimeStamp()}" BizLoopManager.runInIoThread { eventDataDao?.insert(event) eventCallback?.notifySyn() @@ -90,6 +93,7 @@ object EventDb: IDbRepository { event.driverId = LoginStatusManager.getLoginInfo()?.driverId?:-1L event.siteId = siteId event.seq = seq + event.msgId = "${OchSPManager.getSn()}_${DateTimeUtil.getCurrentTimeStamp()}" BizLoopManager.runInIoThread { eventDataDao?.insert(event) eventCallback?.notifySyn() @@ -108,6 +112,7 @@ object EventDb: IDbRepository { event.driverId = LoginStatusManager.getLoginInfo()?.driverId?:-1L event.siteId = 0L event.seq = 0 + event.msgId = "${OchSPManager.getSn()}_${DateTimeUtil.getCurrentTimeStamp()}" BizLoopManager.runInIoThread { eventDataDao?.insert(event) eventCallback?.notifySyn() diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/TaskDb.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/TaskDb.kt index c3e4d98a37..c56453a56f 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/TaskDb.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/TaskDb.kt @@ -56,8 +56,15 @@ object TaskDb : IDbRepository { taskDataDao.insert(*needAddDatas.toTypedArray()) } if (needMinusDatas.isNotEmpty()) { + val needSaveTask = mutableListOf() // 删除任务 - taskDataDao.delete(*needMinusDatas.toTypedArray()) + needMinusDatas.forEach { + if(it.status==TaskDataBean.useing||it.status==TaskDataBean.used){ + needSaveTask.add(it) + } + } + val failneedMinusDatas = needMinusDatas-needSaveTask + taskDataDao.delete(*failneedMinusDatas.toTypedArray()) } } } diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/impl/WeaknetRepository.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/impl/WeaknetRepository.kt index 6536b6d70f..9d8daaabdb 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/impl/WeaknetRepository.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/impl/WeaknetRepository.kt @@ -337,6 +337,14 @@ class WeaknetRepository : IRepository { weakNetInterface?.reportCabinEvent(context,data,callback) } + override fun haveRunningTask(): Boolean { + if(LineModel.currentTask==null){ + return false + }else{ + return true + } + } + override fun release() { weakNetInterface = null CallerLogger.d(TAG,"重置 weakNetInterface") diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/bizswitch/SwitchBizView.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/bizswitch/SwitchBizView.kt index 4c0bda28a9..6731c0d998 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/bizswitch/SwitchBizView.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/bizswitch/SwitchBizView.kt @@ -7,10 +7,13 @@ import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.findViewTreeViewModelStoreOwner import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager import com.mogo.och.common.module.utils.ResourcesUtils +import com.mogo.och.common.module.utils.RxUtils import com.mogo.och.common.module.wigets.WindowRelativeLayout import com.mogo.och.shuttle.weaknet.R import com.mogo.och.weaknet.repository.db.bean.LineDataBean +import io.reactivex.disposables.Disposable import kotlinx.android.synthetic.main.shuttle_weak_switch_biz.view.loading_biz import kotlinx.android.synthetic.main.shuttle_weak_switch_biz.view.swtichLine import kotlinx.android.synthetic.main.shuttle_weak_switch_biz.view.swtichTask @@ -34,6 +37,8 @@ class SwitchBizView: WindowRelativeLayout, SwtichBizeModel.SwtichLineViewCallbac private var viewModel: SwtichBizeModel?=null + private var queryTimeout: Disposable? = null + init { LayoutInflater.from(context).inflate(R.layout.shuttle_weak_switch_biz, this, true) @@ -57,9 +62,14 @@ class SwitchBizView: WindowRelativeLayout, SwtichBizeModel.SwtichLineViewCallbac // 展示loading页面 override fun showLoadingView(){ startLoading = System.currentTimeMillis() + CallerLogger.d(TAG,"开始展示 lading 时间:${startLoading}") loading_biz.visibility = VISIBLE swtichLine.visibility = GONE swtichTask.visibility = GONE + queryTimeout = RxUtils.createSubscribe(10_1000) { + OchChainLogManager.writeChainLog("Loading超时","loading 展示了10s") + viewModel?.queryRuningTask() + } } @@ -78,8 +88,8 @@ class SwitchBizView: WindowRelativeLayout, SwtichBizeModel.SwtichLineViewCallbac // 展示选择任务页面 override fun showSwitchTaskInfo() { + RxUtils.disposeSubscribe(queryTimeout) val endLoading = System.currentTimeMillis() - val dex = (100-(endLoading - startLoading)).takeIf { it>=0 }?:0 CallerLogger.d(TAG,"展示任务 lading 展示了 ${dex}毫秒") @@ -93,6 +103,7 @@ class SwitchBizView: WindowRelativeLayout, SwtichBizeModel.SwtichLineViewCallbac // 展示选择线路页面 override fun showSwtichLineView() { + RxUtils.disposeSubscribe(queryTimeout) val endLoading = System.currentTimeMillis() val dex = (100-(endLoading - startLoading)).takeIf { it>=0 }?:0 CallerLogger.d(TAG,"展示线路 lading 展示了 ${dex}毫秒") @@ -106,6 +117,7 @@ class SwitchBizView: WindowRelativeLayout, SwtichBizeModel.SwtichLineViewCallbac } // 展示正在进行的任务 override fun loadRunningTask() { + RxUtils.disposeSubscribe(queryTimeout) val endLoading = System.currentTimeMillis() val dex = (100-(endLoading - startLoading)).takeIf { it>=0 }?:0 CallerLogger.d(TAG,"展示运行中任务 lading 展示了 ${dex}毫秒") diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/bizswitch/SwtichBizeModel.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/bizswitch/SwtichBizeModel.kt index 3b8eff028a..aec2d1be72 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/bizswitch/SwtichBizeModel.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/bizswitch/SwtichBizeModel.kt @@ -36,6 +36,12 @@ class SwtichBizeModel : ViewModel(), IBusLinesCallback { } } + fun queryRuningTask(){ + ThreadUtils.getIoPool().execute { + OrderModel.queryBusRoutes() + } + } + fun loadingSwitchTask(lineInfo: LineDataBean) { d(LineModel.TAG, "loadingSwitchTask 查询线路的任务线路信息:${lineInfo}") viewCallback?.showSwitchTaskByLineInfo(lineInfo) diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/writeoff/WriteOffView.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/writeoff/WriteOffView.kt index 22d3e2efa5..665c35d960 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/writeoff/WriteOffView.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/writeoff/WriteOffView.kt @@ -6,11 +6,10 @@ import androidx.appcompat.widget.AppCompatTextView import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.findViewTreeViewModelStoreOwner import com.mogo.commons.AbsMogoApplication -import com.mogo.commons.env.ProjectUtils -import com.mogo.eagle.core.data.config.FunctionBuildConfig -import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.och.shuttle.weaknet.R import com.mogo.och.weaknet.repository.RepositoryManager +import com.mogo.och.weaknet.ui.taskrunning.TaskRunningAdapter class WriteOffView : AppCompatTextView, WriteOffViewModel.IwriteOffViewCallback { @@ -41,11 +40,9 @@ class WriteOffView : AppCompatTextView, WriteOffViewModel.IwriteOffViewCallback private fun startListenerWriteOff(){ viewModel?.setWriteOffCallback(this) - visibility = VISIBLE } private fun stopListenerWriteOff(){ viewModel?.setWriteOffCallback(null) - visibility = GONE if(RepositoryManager.supportWriteOff()) { val showText = AbsMogoApplication.getApp().getString(R.string.shuttle_write_off_count, 0) diff --git a/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_base_fragment.xml b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_base_fragment.xml index c06ce1320a..ca6121f7c8 100644 --- a/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_base_fragment.xml +++ b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_base_fragment.xml @@ -7,7 +7,7 @@ diff --git a/OCH/shuttle/driver_weaknet/src/main/res/values/strings.xml b/OCH/shuttle/driver_weaknet/src/main/res/values/strings.xml index 0d9eb141fa..f72f9d99eb 100644 --- a/OCH/shuttle/driver_weaknet/src/main/res/values/strings.xml +++ b/OCH/shuttle/driver_weaknet/src/main/res/values/strings.xml @@ -47,6 +47,7 @@ 取消 请在网络良好的区域完成任务信息同步后退出 + 请结束任务后再退出登录 暂无任务 核销%1$d人 diff --git a/OCH/shuttle/passenger_weaknet/src/main/java/m2/com/mogo/och/shuttle/weaknet/passenger/ui/widget/M2StatusBarView.kt b/OCH/shuttle/passenger_weaknet/src/main/java/m2/com/mogo/och/shuttle/weaknet/passenger/ui/widget/M2StatusBarView.kt index d758473488..2d4be3d1d2 100644 --- a/OCH/shuttle/passenger_weaknet/src/main/java/m2/com/mogo/och/shuttle/weaknet/passenger/ui/widget/M2StatusBarView.kt +++ b/OCH/shuttle/passenger_weaknet/src/main/java/m2/com/mogo/och/shuttle/weaknet/passenger/ui/widget/M2StatusBarView.kt @@ -53,7 +53,7 @@ class M2StatusBarView @JvmOverloads constructor( super.onAttachedToWindow() post { val params: ViewGroup.LayoutParams = getLayoutParams() - params.height = AutoSizeUtils.dp2px(context,40f) + params.height = AutoSizeUtils.dp2px(context,60f) layoutParams = params } //添加view控制 diff --git a/OCH/shuttle/passenger_weaknet/src/main/res/m2/drawable-nodpi/shuttle_p_m2_status_bar_logo.png b/OCH/shuttle/passenger_weaknet/src/main/res/m2/drawable-nodpi/shuttle_p_m2_status_bar_logo.png index 1f6ea692f5..71d8a4bdaa 100644 Binary files a/OCH/shuttle/passenger_weaknet/src/main/res/m2/drawable-nodpi/shuttle_p_m2_status_bar_logo.png and b/OCH/shuttle/passenger_weaknet/src/main/res/m2/drawable-nodpi/shuttle_p_m2_status_bar_logo.png differ diff --git a/OCH/shuttle/passenger_weaknet/src/main/res/m2/layout/shuttle_p_m2_view_status_bar.xml b/OCH/shuttle/passenger_weaknet/src/main/res/m2/layout/shuttle_p_m2_view_status_bar.xml index e98e87adc9..8d106b4337 100644 --- a/OCH/shuttle/passenger_weaknet/src/main/res/m2/layout/shuttle_p_m2_view_status_bar.xml +++ b/OCH/shuttle/passenger_weaknet/src/main/res/m2/layout/shuttle_p_m2_view_status_bar.xml @@ -1,46 +1,46 @@ + android:layout_height="@dimen/dp_60" + tools:ignore="MissingDefaultResource" + tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"> + android:layout_marginStart="@dimen/dp_40" + app:layout_constraintBottom_toBottomOf="@+id/iv_logon" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="@+id/iv_logon" + app:wifi_size="@dimen/dp_18" /> + android:layout_marginStart="@dimen/dp_32" + android:src="@drawable/shuttle_p_m2_blue_tooth_open" + app:layout_constraintBottom_toBottomOf="@+id/iv_logon" + app:layout_constraintStart_toEndOf="@+id/wifiStateView" + app:layout_constraintTop_toTopOf="@+id/iv_logon" /> + android:layout_marginStart="@dimen/dp_40" + android:src="@drawable/driver_connect_statis" + app:layout_constraintBottom_toBottomOf="@+id/iv_logon" + app:layout_constraintStart_toEndOf="@+id/blueToothView" + app:layout_constraintTop_toTopOf="@+id/iv_logon" /> + android:maxHeight="@dimen/dp_8" + android:minHeight="@dimen/dp_8" + android:progressDrawable="@drawable/shuttle_p_m2_power_seekbar_style" + app:layout_constraintBottom_toBottomOf="@+id/iv_logon" + app:layout_constraintRight_toLeftOf="@+id/tv_power_cos" + app:layout_constraintTop_toTopOf="@+id/iv_logon" /> + android:layout_height="wrap_content" + android:layout_marginRight="@dimen/dp_40" + android:textColor="@color/shuttle_p_m2_power_tv_color" + android:textSize="@dimen/dp_18" + app:layout_constraintBottom_toBottomOf="@+id/iv_logon" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="@+id/iv_logon" /> + app:isUseSkin="true" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" /> - - \ No newline at end of file + diff --git a/OCH/taxi/driver/src/main/res/layout/taxi_base_fragment.xml b/OCH/taxi/driver/src/main/res/layout/taxi_base_fragment.xml index 0122d3af7d..a71da62b6f 100644 --- a/OCH/taxi/driver/src/main/res/layout/taxi_base_fragment.xml +++ b/OCH/taxi/driver/src/main/res/layout/taxi_base_fragment.xml @@ -7,7 +7,7 @@ diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiTaskModel.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiTaskModel.kt index 77f79bbfd9..685e2506e8 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiTaskModel.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiTaskModel.kt @@ -58,6 +58,7 @@ import com.mogo.och.common.module.map.AmapNaviToDestinationModel import com.mogo.och.common.module.network.OchCommonServiceCallback import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil.coordinateConverterWgsToGcjLocations import com.mogo.och.common.module.utils.OCHThreadPoolManager +import com.mogo.och.common.module.utils.RxUtils import com.mogo.och.common.module.voice.VoiceNotice import com.mogo.och.data.bean.LineInfo import com.mogo.och.data.taxi.QueryCarOrderByNoRespBean @@ -637,6 +638,9 @@ object TaxiTaskModel { ToastUtils.showShort("到站接口请求出现异常,请稍后重试") DebugView.printErrorMsg("[上报ArriveSite] 到站接口请求出现异常,请稍后重试") } + RxUtils.createSubscribe { + submitArriveSite(siteId, isArriveAtEndSite,isArrivedNearestStation) + } } override fun onFail(code: Int, msg: String?) { @@ -644,6 +648,11 @@ object TaxiTaskModel { DebugView.printErrorMsg("[上报ArriveSite] failed, code=$code, msg=$msg") d(TAG, "code=$code msg=$msg") ToastUtils.showShort("到站接口请求出现异常,请稍后重试,code=$code msg=$msg") + if(msg?.contains("驾舱操作过快,请稍后重试")==true){ + RxUtils.createSubscribe { + submitArriveSite(siteId, isArriveAtEndSite,isArrivedNearestStation) + } + } } }) } diff --git a/OCH/taxi/unmanned-driver/src/main/res/layout/unmanned_taxi_base_fragment.xml b/OCH/taxi/unmanned-driver/src/main/res/layout/unmanned_taxi_base_fragment.xml index da0470911f..85d7e6d4f1 100644 --- a/OCH/taxi/unmanned-driver/src/main/res/layout/unmanned_taxi_base_fragment.xml +++ b/OCH/taxi/unmanned-driver/src/main/res/layout/unmanned_taxi_base_fragment.xml @@ -8,7 +8,7 @@ diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/pnc/V2NIdentifyDrawer.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/pnc/V2NIdentifyDrawer.kt index 3d5ed6d25d..6f0e2e5696 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/pnc/V2NIdentifyDrawer.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/pnc/V2NIdentifyDrawer.kt @@ -276,9 +276,9 @@ internal object V2NIdentifyDrawer: IEventDismissListener { AiRoadMarker.aiMakers.getOrPut(id) { AiRoadMarker().apply { try { - val current = abs(location.gnssSpeed) * 3.6f.toInt() - val min = abs(data.speedStraightMin * 3.6f).toInt() - val max = abs(data.speedStraightMax * 3.6f).toInt() + val current = abs(location.gnssSpeed).toInt() + val min = abs(data.speedStraightMin).toInt() + val max = abs(data.speedStraightMax).toInt() marker(Marker(id, EventTypeEnumNew.TYPE_SOCKET_ROAD_GREE_WAVE.poiType, destX, destY, 0.0, null, null, null), drawMarker = false, false) var alertTts = "" var alertContent = "" @@ -521,7 +521,7 @@ internal object V2NIdentifyDrawer: IEventDismissListener { } private fun drawGreenWave(crossSpeed: V2nCrossSpeed) { - if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nTotalSwitch) { + if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nTotalSwitch && FunctionBuildConfig.v2nGreenWave) { handler.removeMessages(MSG_WHAT_DRAW_GREEN_WAVE) handler.sendMessage(Message.obtain(handler, MSG_WHAT_DRAW_GREEN_WAVE, crossSpeed)) } @@ -587,4 +587,4 @@ internal object V2NIdentifyDrawer: IEventDismissListener { // val targetIds = event.exts.split(",") // } } -} \ 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/autopilot/telematic/TeleMsgHandler.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/telematic/TeleMsgHandler.kt index 2c14bbc3b0..4be8d66433 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/telematic/TeleMsgHandler.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/telematic/TeleMsgHandler.kt @@ -25,6 +25,7 @@ import com.mogo.eagle.core.function.call.cloud.CallerCloudListenerManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager import com.mogo.eagle.core.function.call.telematic.CallerTelematicListenerManager +import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant @@ -155,6 +156,42 @@ class TeleMsgHandler : IMsgHandler { } return } + if (it.protocolType == TelematicConstant.DRIVE_SEAT_VIDEO_STREAM_REQ) { + try { + Log.d(TAG, "乘客屏收到司机屏转发的驾驶位视频流开关 --- 1 ---") + val content = String(it.body, Charset.defaultCharset()) + Log.d(TAG, "乘客屏收到司机屏转发的驾驶位视频流开关 --- 2 ---:$content") + val data = GsonUtils.fromJson(content, Map::class.java) + val open = data["open"].toString().toInt() == 1 + val playUrl = data["playUrl"]?.toString() + //TODO yangyakun + if (open) { + if (playUrl != null) { + // 1. 获取视频播放控件 + val target = CallerDevaToolsManager.driveSeatVideoProvider()?.getDriveVideoView(playUrl) { event -> + + } + + if (target != null) { + // 2. 添加到一个ViewGroup上 + // 11: 第1个1代表运营面板开关打开,第2个1代表打开成功,告之司机端 + // 10: 第1个1代表运营面板开关打开,第2个0代表打开成功,告之司机端 + CallerTelematicManager.sendMsgToServer(TelematicConstant.DRIVE_SEAT_VIDEO_STREAM_RSP, "11".toByteArray()) + } + + } else { + CallerTelematicManager.sendMsgToServer(TelematicConstant.DRIVE_SEAT_VIDEO_STREAM_RSP, "10".toByteArray()) + } + } else { + //第1个0代表运营面板开关关闭,第2个1代表关闭成功,告之司机端; 相应的还有状态:00表示关闭失败 + CallerTelematicManager.sendMsgToServer(TelematicConstant.DRIVE_SEAT_VIDEO_STREAM_RSP, "01".toByteArray()) + } + } catch (t: Throwable) { + t.printStackTrace() + Log.e(TAG, "乘客屏收到司机屏转发的驾驶位视频流开关--- 3 ---", t) + } + return + } when (it.protocolType) { MogoProtocolMsg.NORMAL_DATA -> { try { @@ -349,6 +386,11 @@ class TeleMsgHandler : IMsgHandler { ) } + TelematicConstant.DRIVE_SEAT_VIDEO_STREAM_RSP -> { + // 来自客户端的响应 + CallerTelematicListenerManager.invokeReceivedMsg(TelematicConstant.DRIVE_SEAT_VIDEO_STREAM_RSP, it.body) + } + else -> { } } 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 b8f17f3570..cdf553419d 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 @@ -57,6 +57,8 @@ import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig import com.zhjt.mogo_core_function_devatools.binding.BindingCarManager import com.zhjt.mogo_core_function_devatools.block.MoGoBlockProviderImpl import com.zhjt.mogo_core_function_devatools.coldstart.ColdStartManager +import com.zhjt.mogo_core_function_devatools.driver.video.DriveSeatVideoProviderImpl +import com.mogo.eagle.core.function.api.driver.video.IDriveSeatVideoProvider import com.zhjt.mogo_core_function_devatools.env.EnvChangeManager import com.zhjt.mogo_core_function_devatools.exam.ExamControlManager import com.zhjt.mogo_core_function_devatools.funcconfig.FuncConfigCenter.Companion.bizConfigCenter @@ -125,6 +127,8 @@ class DevaToolsProvider : IDevaToolsProvider, IAppStateListener { ARouter.getInstance().build(MogoServicePaths.PATH_MAP_ROUTE_GUIDE).navigation() as? IMapRouteProvider } + private val driveSeatVideoProvider by lazy { DriveSeatVideoProviderImpl() } + @Volatile private var lastCanAutopilotStatus: Int? = null @@ -682,4 +686,8 @@ class DevaToolsProvider : IDevaToolsProvider, IAppStateListener { override fun takeOver(@TakeOverAnnotation takeOverAnnotation: Int) { TakeOverManager.takeOverManager.takeOver(takeOverAnnotation) } + + override fun driveSeatVideoProvider(): IDriveSeatVideoProvider { + return driveSeatVideoProvider + } } \ 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/driver/video/DriveSeatVideoProviderImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/driver/video/DriveSeatVideoProviderImpl.kt new file mode 100644 index 0000000000..a0e2e7c7a5 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/driver/video/DriveSeatVideoProviderImpl.kt @@ -0,0 +1,155 @@ +package com.zhjt.mogo_core_function_devatools.driver.video + +import android.os.Bundle +import android.text.TextUtils +import android.util.Log +import android.view.View +import androidx.core.view.doOnAttach +import androidx.core.view.doOnDetach +import com.mogo.commons.constants.HostConst +import com.mogo.eagle.core.data.BaseResponse +import com.mogo.eagle.core.data.app.AppConfigInfo +import com.mogo.eagle.core.function.api.driver.video.IDriveSeatVideoProvider +import com.mogo.eagle.core.function.api.driver.video.IDriveSeatVideoProvider.Event +import com.mogo.eagle.core.function.api.driver.video.IDriveSeatVideoProvider.Event.Failed +import com.mogo.eagle.core.function.api.driver.video.IDriveSeatVideoProvider.Event.Loading +import com.mogo.eagle.core.function.api.driver.video.IDriveSeatVideoProvider.Event.Playing +import com.mogo.eagle.core.network.MoGoRetrofitFactory +import com.mogo.eagle.core.utilcode.util.AppStateManager +import com.tencent.liteav.basic.log.TXCLog +import com.tencent.rtmp.ITXLivePlayListener +import com.tencent.rtmp.TXLiveConstants +import com.tencent.rtmp.TXLivePlayConfig +import com.tencent.rtmp.TXLivePlayer +import com.tencent.rtmp.ui.TXCloudVideoView +import com.zhjt.mogo_core_function_devatools.driver.video.vo.VideoUrlData +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import retrofit2.http.GET +import retrofit2.http.Headers +import retrofit2.http.Query +import java.lang.ref.WeakReference + +class DriveSeatVideoProviderImpl: IDriveSeatVideoProvider { + + companion object { + private const val TAG = "DriveSeatVideoProvider" + } + + @Volatile + private var target: WeakReference? = null + + @Volatile + private var timer: Job? = null + + private val scope by lazy { CoroutineScope(Dispatchers.IO + SupervisorJob()) } + + private var data: VideoUrlData? = null + + internal interface IVideoLiveUrlApi { + @Headers("Content-Type:application/json;charset=UTF-8") + @GET("/eagleEye-mis/camera/monitor/watch/status") + suspend fun requestVideoLiveUrl(@Query(value = "numberPlate") numberPlate: String, @Query("cameraType") cameraType: Int, @Query("protocolType") protocolType: Int): BaseResponse + } + + + override suspend fun requestVideoInfo(): VideoUrlData? { + val plateNumber = AppConfigInfo.plateNumber + if (TextUtils.isEmpty(plateNumber)) { + Log.e(TAG, "-- isVideoLiveUsable -- plate number is empty.") + return null + } + val resp = getApi()?.requestVideoLiveUrl(plateNumber, 2, 2) ?: return null + Log.e(TAG, "-- isVideoLiveUsable -- receive response: {code: ${resp.code}, msg: ${resp.msg}, result: ${resp.result}}") + data = resp.result + return resp.result + } + + override fun getDriveVideoView(playUrl: String, playCallback: ((Event) -> Unit)?): View? { + val activity = AppStateManager.currentActivity() ?: return null + val t = target?.get() + if (t != null) { + return t + } + val x = TXCloudVideoView(activity) + Log.d(TAG, "getDriveVideoView --> $playUrl") + x.doOnAttach { + Log.d(TAG, "onAttachToWindow --> $playUrl") + val player = TXLivePlayer(activity) + player.setPlayerView(x) + player.setMute(true) + TXCLog.setLevel(4) + val config = TXLivePlayConfig() + config.setConnectRetryCount(30) + player.setConfig(config) + player.enableHardwareDecode(true) + player.startPlay(playUrl, TXLivePlayer.PLAY_TYPE_LIVE_RTMP) + player.setPlayListener(object : ITXLivePlayListener { + + override fun onPlayEvent(event: Int, bundle: Bundle?) { + Log.d(TAG, "直播信息 => event: $event, playUrl: $playUrl, bundle: $bundle") + if (event == TXLiveConstants.PLAY_EVT_PLAY_LOADING) { + Log.d(TAG, "play loading...") + playCallback?.invoke(Loading) + } else if (event == TXLiveConstants.PLAY_EVT_PLAY_BEGIN) { + Log.d(TAG, "play begin...") + start() + playCallback?.invoke(Playing) + } else { + if (event < 0) { + Log.d(TAG, "play failed...$event, bundle: $bundle") + stop() + playCallback?.invoke(Failed(bundle?.toString() ?: "播放失败")) + } + } + } + + override fun onNetStatus(bundle: Bundle?) { + Log.d(TAG, "直播信息 => onNetStatus -> $bundle") + } + }) + + x.doOnDetach { + Log.d(TAG, "-- onDetachedFromWindow ---: $playUrl") + try { + player.stopPlay(true) + stop() + } finally { + target?.clear() + } + } + } + target = WeakReference(x) + return x + } + + + override fun getLastData(): VideoUrlData? { + return data + } + + private fun start() { + timer?.cancel() + scope.launch { + val result = requestVideoInfo() + if (result != null) { + data = result + } + delay(5000) + }.also { + timer = it + } + } + + private fun stop() { + timer?.cancel() + } + + private fun getApi(): IVideoLiveUrlApi? { + return MoGoRetrofitFactory.getInstanceNoCallAdapter(HostConst.getHost()).create(IVideoLiveUrlApi::class.java) + } +} \ 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/workorder/adapter/TakeOverListAdapter.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/adapter/TakeOverListAdapter.kt index 46b76449c1..a2f26adcfd 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/adapter/TakeOverListAdapter.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/adapter/TakeOverListAdapter.kt @@ -45,11 +45,13 @@ class TakeOverListAdapter(private val context: Context): RecyclerView.Adapter(KEY_DRIVE_SEAT_VIDEO_STREAM)?.also { + it.isEnabled = CallerDevaToolsManager.driveSeatVideoProvider()?.requestVideoInfo()?.livePlayUrl?.isNotEmpty() ?: false + } + } + } + + override fun onDestroyView() { + super.onDestroyView() + CallerTelematicListenerManager.removeListener(TAG) } override fun getDefaultVal(pref: Preference): Any? { @@ -758,6 +779,30 @@ class OperatePanelLayout : LinearLayout { return super.onPreferenceClick(preference) } + override fun onReceivedMsg(type: Int, byteArray: ByteArray) { + if (type == TelematicConstant.DRIVE_SEAT_VIDEO_STREAM_RSP) { + val s = String(byteArray) + clickEventAnalytics("视频流驾驶位开头-RSP->$s", false) + lifecycleScope.launchWhenResumed { + when(s) { + "01" -> { + //关闭成功 + FunctionBuildConfig.isDriveSeatVideoStream = false + preferenceScreen.findPreferenceReal(KEY_DRIVE_SEAT_VIDEO_STREAM)?.also { changeValue(it, false) } + } + "11" -> { + //打开成功 + FunctionBuildConfig.isDriveSeatVideoStream = true + preferenceScreen.findPreferenceReal(KEY_DRIVE_SEAT_VIDEO_STREAM)?.also { changeValue(it, true) } + } + else -> { + //关闭失败或打开失败 + } + } + } + } + } + override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { when (preference.key) { KEY_FAULT_REPORT_TIP -> { @@ -848,6 +893,15 @@ class OperatePanelLayout : LinearLayout { clickEventAnalytics("清扫云控业务", isChecked) return true } + KEY_DRIVE_SEAT_VIDEO_STREAM -> { + val isChecked = newValue as? Boolean ?: false + clickEventAnalytics("视频流驾驶位开关", isChecked) + val map = HashMap() + map["open"] = if (isChecked) "1" else "0" + map["playUrl"] = CallerDevaToolsManager.driveSeatVideoProvider()?.getLastData()?.livePlayUrl ?: "" + CallerTelematicManager.sendMsgToAllClients(TelematicConstant.DRIVE_SEAT_VIDEO_STREAM_REQ, toJson(map).toByteArray()) + return false + } } return super.onPreferenceChange(preference, newValue) } 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 7b0887f6e5..6dadffc3f0 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,6 +9,8 @@ import android.content.Intent import android.graphics.Color import android.graphics.drawable.ColorDrawable import android.os.Build +import android.os.Environment +import android.os.Environment.* import android.os.Process import android.text.Html import android.text.TextUtils @@ -116,6 +118,7 @@ import com.mogo.eagle.core.utilcode.util.AppUtils import com.mogo.eagle.core.utilcode.util.BarUtils import com.mogo.eagle.core.utilcode.util.CommonUtils import com.mogo.eagle.core.utilcode.util.DeviceUtils +import com.mogo.eagle.core.utilcode.util.FileUtils import com.mogo.eagle.core.utilcode.util.KeyboardUtils import com.mogo.eagle.core.utilcode.util.NetworkUtils import com.mogo.eagle.core.utilcode.util.ParseVersionUtils @@ -143,6 +146,7 @@ import kotlinx.android.synthetic.main.view_debug_setting.view.btChangeEnv import kotlinx.android.synthetic.main.view_debug_setting.view.btnAppReboot import kotlinx.android.synthetic.main.view_debug_setting.view.btnBrakeThreshold import kotlinx.android.synthetic.main.view_debug_setting.view.btnConnectServerIp +import kotlinx.android.synthetic.main.view_debug_setting.view.btnDeleteDB import kotlinx.android.synthetic.main.view_debug_setting.view.btnDisconnectIpc import kotlinx.android.synthetic.main.view_debug_setting.view.btnDrawFusion import kotlinx.android.synthetic.main.view_debug_setting.view.btnHdVisualAdjust @@ -319,6 +323,8 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import mogo.telematics.pad.MessagePad import mogo_msg.MogoReportMsg +import java.io.File +import java.io.File.* import java.text.SimpleDateFormat import java.util.Date import java.util.Timer @@ -1414,6 +1420,18 @@ internal class DebugSettingView @JvmOverloads constructor( CallerAutoPilotControlManager.connectSpecifiedServer(ip) } } + btnDeleteDB.setOnClickListener { + try{ + val ROOT_PATH = getExternalStorageDirectory().absolutePath + separator + "Mogo" + separator + "APP_cache" + separator + val dbDir = File(ROOT_PATH) + if(dbDir.exists()&&dbDir.isDirectory){ + FileUtils.deleteFilesInDir(dbDir) + } + }catch (e:Exception){ + + } + + } //是否开启异常上报 tbReportWarning.isChecked = FunctionBuildConfig.isReportWarning 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 7f647fddaa..004dec529e 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 @@ -1345,12 +1345,23 @@ +