Merge branch 'dev_robotaxi-d_230809_6.0.0' into dev_robotaxi-d_230809_6.0.0_refactor

# Conflicts:
#	OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiBeingTaskFragment.kt
#	OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/base/TaxiFragment.kt
This commit is contained in:
aibingbing
2023-08-21 19:54:55 +08:00
57 changed files with 527 additions and 2914 deletions

View File

@@ -1,14 +1,21 @@
package com.magic.mogo.och.charter.manager
import com.magic.mogo.och.charter.R
import com.magic.mogo.och.charter.constant.CharterConst
import com.magic.mogo.och.charter.model.DriverM1Model.Companion.get
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters.AutoPilotLine
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.MsgBoxType
import com.mogo.eagle.core.data.msgbox.OperationMsg
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager.sendTrajectoryDownloadReq
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.util.ActivityUtils
import com.mogo.eagle.core.utilcode.util.GsonUtils
import com.mogo.och.common.module.biz.constant.LoginStatusManager
import com.mogo.och.common.module.utils.SoundPoolHelper
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
@@ -80,6 +87,16 @@ object CharterTrajectoryManager {
// 5. 轨迹管理_轨迹下载超时
d(SceneConstant.M_CHARTER_D + TAG, "onAutopilotGuardian() 轨迹下载超时")
// ToastUtils.showShort("轨迹下载超时");
} else if ("IMAP_TRA_LOADED" == guardianInfo.getCode()) {
CallerMsgBoxManager.saveMsgBox(
MsgBoxBean(
MsgBoxType.OPERATION,
OperationMsg(
System.currentTimeMillis(), "请尽快操作车辆至适当位置掉头!", -1
)
)
)
SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(ActivityUtils.getTopActivity(), R.raw.startautopilot)
} else if ("ISSM_FUNC_AUTO_PILOT_READY" == guardianInfo.getCode()) {
// 收到ssm的自动驾驶变为ready再次下发轨迹下载.解决域控重启或者102域控启动太早107节点初始化未完成导致的轨迹未进行下载。
d(SceneConstant.M_CHARTER_D + TAG, "onAutopilotGuardian() ssm ready再次发起下载")

View File

@@ -23,12 +23,16 @@ import com.mogo.commons.voice.AIAssist
import com.mogo.eagle.core.data.BaseData
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters
import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.MsgBoxType
import com.mogo.eagle.core.data.msgbox.OperationMsg
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener
import com.mogo.eagle.core.function.api.telematic.IReceivedMsgListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager.startAutoPilot
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
import com.mogo.eagle.core.function.call.telematic.CallerTelematicListenerManager
import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager.sendMsgToAllClients
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
@@ -76,8 +80,8 @@ class DriverM1Model {
// 运营类型
private val VEHICLE_TYPE : Int = 10
private var mControllerStatusCallback //Model->PresenterVR mode等
: IDriverM1ControllerStatusCallback? = null
//Model->PresenterVR mode等
private var mControllerStatusCallback: IDriverM1ControllerStatusCallback? = null
private var mOrderCallback: DriverM1OrderCallback? = null
@@ -110,7 +114,7 @@ class DriverM1Model {
fun init(context: Context) {
mContext = context
// 定位监听
CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 10,mMapLocationListener)
CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 10, mMapLocationListener)
//开启自驾后 异常信息返回
OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(mAdasStartFailureListener)
@@ -118,18 +122,20 @@ class DriverM1Model {
// 监听运营信息
registerSocketMessageListener(
OCHSocketMessageManager.msgMonitorType,
mOnSystemMessageListener)
mOnSystemMessageListener
)
//监听开门
registerSocketMessageListener(
OCHSocketMessageManager.msgOperateDoorType,
mOnDoorMessageListener)
mOnDoorMessageListener
)
//监听订单结束
registerSocketMessageListener(
OCHSocketMessageManager.msgOrderClosedType,
mOnOrderClosedMessageListener)
mOnOrderClosedMessageListener
)
//监听核销乘客
registerSocketMessageListener<WriteOffPassenger>( //监听核销乘客
registerSocketMessageListener(
OCHSocketMessageManager.msgWriteOffPassengerType,
mWriteOffPassengerOnMessageListener
)
@@ -149,45 +155,7 @@ class DriverM1Model {
// 调用Disposable.dispose() 时候会出现InterruptedException 导致出现崩溃
// The exception could not be delivered to the consumer because it has already canceled/disposed
// the flow or the excTeption has nowhere to go to begin with
RxJavaPlugins.setErrorHandler(object : Consumer<Throwable?> {
override fun accept(e: Throwable?) {
var e = e
if (e is UndeliverableException) {
e = e.cause!!
d(SceneConstant.M_CHARTER_D + TAG, "UndeliverableException")
}
if (e is IOException) { //
// fine, irrelevant network problem or API that throws on cancellation
d(SceneConstant.M_CHARTER_D + TAG, "IOException")
return
}
if (e is InterruptedException) {
// fine, some blocking code was interrupted by a dispose call
d(SceneConstant.M_CHARTER_D + TAG, "InterruptedException")
return
}
if (e is NullPointerException || e is IllegalArgumentException) {
// that's likely a bug in the application
d(SceneConstant.M_CHARTER_D + TAG, "NullPointerException or IllegalArgumentException")
Thread.currentThread().uncaughtExceptionHandler.uncaughtException(
Thread.currentThread(),
e
)
return
}
if (e is IllegalStateException) {
// that's a bug in RxJava or in a custom operator
d(SceneConstant.M_CHARTER_D + TAG, "IllegalStateException")
Thread.currentThread().uncaughtExceptionHandler.uncaughtException(
Thread.currentThread(),
e
)
return
}
d(SceneConstant.M_CHARTER_D + TAG, "Undeliverable exception")
}
})
RxUtils.errCatch()
}
fun setChangeDestCallback(callback: ChangeDestCallback?){
@@ -267,18 +235,18 @@ class DriverM1Model {
private fun showChangerDestCommitDialog(changeDestMsg: ChangeDestMsg) {
if (!TextUtils.isEmpty(changeDestMsg.destSiteName) && !TextUtils.isEmpty(changeDestMsg.lineName)){
if (changeDestMsg.lineId == currentChangeDestMsg?.lineId){//同一条路线切换站点不需要再确认
//if (changeDestMsg.lineId == currentChangeDestMsg?.lineId){//同一条路线切换站点不需要再确认
currentChangeDestMsg = changeDestMsg
changeDest()
return
}
//} 不用司机端确认直接保存
currentChangeDestMsg = changeDestMsg
// currentChangeDestMsg = changeDestMsg
UiThreadHandler.post{
mChangeDestCallback?.showCommitDialog("确认路线站点",
"请确认是否前往 "+ changeDestMsg.lineName+ changeDestMsg.destSiteName + " 站点")
}
// UiThreadHandler.post{
// mChangeDestCallback?.showCommitDialog("确认路线站点",
// "请确认是否前往 "+ changeDestMsg.lineName+ changeDestMsg.destSiteName + " 站点")
// }
}
}
@@ -819,6 +787,17 @@ class DriverM1Model {
CallerAutoPilotControlManager.cancelAutoPilot()
queryCurrentServiceStatus()
sendCommitMsgToClient(true,writeVersion)
CallerMsgBoxManager.saveMsgBox(
MsgBoxBean(
MsgBoxType.OPERATION,
OperationMsg(
System.currentTimeMillis(),
"即将前往路线${currentChangeDestMsg!!.lineName}、站点${currentChangeDestMsg!!.destSiteName};如需掉头请尽快操作车辆至适当位置!",
-1
)
)
)
SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(ActivityUtils.getTopActivity(), R.raw.startautopilot)
}
}

View File

@@ -159,16 +159,6 @@
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--隐藏态下的 美化模式按钮-->
<com.mogo.eagle.core.function.hmi.ui.switch.DemoModeHiddenSwitch
android:layout_width="120dp"
android:layout_height="100dp"
android:layout_marginStart="40dp"
android:layout_marginBottom="200dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="SpeakableTextPresentCheck" />
<RelativeLayout
android:id="@+id/module_mogo_och_autopilot_status"
android:layout_width="@dimen/module_mogo_och_autopilot_status_bg_width"

View File

@@ -1,6 +1,8 @@
package com.mogo.och.bus.passenger.bean.response
import com.mogo.commons.AbsMogoApplication
import com.mogo.eagle.core.data.BaseData
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil
/**
*
@@ -20,13 +22,50 @@ data class OrderInfoResponse(val data: OrderInfo?) : BaseData() {
val siteNameKr: String?,//站点名称
var wgs84Lat: Double?,
var wgs84Lon: Double?,
var gcj02Lat: Double?,
var gcj02Lon: Double?,
val startTime: Long?,//开始时间
val endTime: Long?,//结束时间
val passengerPhone: String?,//乘客手机号
var arriveStatus:Int?,//1:未到达 2:到达
)
){
var gcj02Lat: Double?=null
get() {
if(field!=null){
return field
}
if(wgs84Lat!=null&&wgs84Lon!=null){
val coordinateConverterWgsToGcj =
CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(
AbsMogoApplication.getApp(),
wgs84Lon!!,
wgs84Lat!!
)
field = coordinateConverterWgsToGcj.latitude
gcj02Lon = coordinateConverterWgsToGcj.longitude
return field
}else{
return null
}
}
var gcj02Lon: Double?=null
get() {
if(field!=null){
return field
}
if(wgs84Lat!=null&&wgs84Lon!=null){
val coordinateConverterWgsToGcj =
CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(
AbsMogoApplication.getApp(),
wgs84Lon!!,
wgs84Lat!!
)
field = coordinateConverterWgsToGcj.longitude
gcj02Lat = coordinateConverterWgsToGcj.latitude
return field
}else{
return null
}
}
}
companion object{
val ARRIVING = 1
val ARRIVED = 2

View File

@@ -46,13 +46,13 @@ import com.mogo.och.common.module.manager.OCHAdasAbilityManager
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.common.module.utils.PinYinUtil
import com.mogo.och.common.module.utils.RxUtils
import com.mogo.och.common.module.voice.VoiceManager
import com.mogo.och.common.module.voice.VoiceNotice
import io.reactivex.Observable
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
import mogo.telematics.pad.MessagePad
import mogo_msg.MogoReportMsg
import java.util.*
import java.util.concurrent.ConcurrentHashMap
import java.util.concurrent.TimeUnit
@@ -78,13 +78,6 @@ object CharterPassengerModel {
var mAutoStatusChnageListener =
ConcurrentHashMap<String, ICharterPassengerAutoStatusChangeCallback>()
// 定位监听
private val mControllerStatusCallbackMap =
ConcurrentHashMap<String, IBusPassengerControllerStatusCallback>()
// 当前位置坐标
private var mLocationGCJ02: MogoLocation? = null
// 订单信息 有订单有线路结束订单
@Volatile
private var orderInfo: OrderInfoResponse.OrderInfo? = null
@@ -135,7 +128,6 @@ object CharterPassengerModel {
private fun releaseListeners() {
CallerAutoPilotStatusListenerManager.removeListener(mGoAutopilotStatusListener)
CallerChassisLocationGCJ02ListenerManager.removeListener(TAG)
CallerPlanningRottingListenerManager.removeListener(moGoAutopilotPlanningListener)
}
@@ -145,8 +137,6 @@ object CharterPassengerModel {
.registerIntentListener(ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener)
// 自动驾驶状态变化监听
CallerAutoPilotStatusListenerManager.addListener(TAG, mGoAutopilotStatusListener)
// 定位监听
CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 4, mMapLocationListener)
// 自动驾驶路线规划接口 返回自动驾驶轨迹
CallerPlanningRottingListenerManager.addListener(TAG, moGoAutopilotPlanningListener)
// 登录状态监听
@@ -154,14 +144,6 @@ object CharterPassengerModel {
}
// region 设置业务回调
fun setControllerStatusCallback(tag: String, callback: IBusPassengerControllerStatusCallback?) {
if (tag.isBlank()) return
if (callback == null) {
mControllerStatusCallbackMap.remove(tag)
return
}
mControllerStatusCallbackMap[tag] = callback
}
fun setAutoStatusCallback(tag: String, callback: ICharterPassengerAutoStatusChangeCallback?) {
if (tag.isBlank()) return
@@ -201,18 +183,6 @@ object CharterPassengerModel {
// endregion
// region 设置外部回调
// 定位监听
private val mMapLocationListener: IMoGoChassisLocationGCJ02Listener =
object : IMoGoChassisLocationGCJ02Listener {
override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) {
if (null == mogoLocation) return
mLocationGCJ02 = mogoLocation
for (callback in mControllerStatusCallbackMap.values) {
callback.onCarLocationChanged(mogoLocation)
}
}
}
// 自动驾驶状态监听
private val mGoAutopilotStatusListener: IMoGoAutopilotStatusListener =
object : IMoGoAutopilotStatusListener {
@@ -222,6 +192,15 @@ object CharterPassengerModel {
}
}
override fun onAutopilotGuardian(guardianInfo: MogoReportMsg.MogoReportMessage?) {
super.onAutopilotGuardian(guardianInfo)
guardianInfo?.let {
if (it.code=="IMAP_TRA_LOADED") {
ToastCharterUtils.showShort("请等待车辆完成掉头后再出发吧~")
}
}
}
override fun onAutopilotArriveAtStation(arrivalNotification: MessagePad.ArrivalNotification?) {
d(M_BUS_P + TAG, "底盘给到站信息")
arriveDest()
@@ -387,17 +366,11 @@ object CharterPassengerModel {
d(M_BUS_P + TAG, "设置车模")
}
if (this.orderInfo?.siteId != orderData.siteId) {
val coordinateConverterWgsToGcj =
CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(
mContext,
order.wgs84Lon!!,
order.wgs84Lat!!
)
this.carTypeChageListener?.setEndStationCallBack(
order.siteId,
order.siteName,
coordinateConverterWgsToGcj.longitude,
coordinateConverterWgsToGcj.latitude
order.gcj02Lon!!,
order.gcj02Lat!!
)
}
this.orderInfo?.orderNo?.let {
@@ -422,19 +395,13 @@ object CharterPassengerModel {
this.orderInfo = orderData
}
//计算终点距离
mLocationGCJ02?.let { currentInfo ->
CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().let { currentInfo ->
// 两点之间的距离
val coordinateConverterWgsToGcj =
CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(
mContext,
order.wgs84Lon!!,
order.wgs84Lat!!
)
val calculateLineDistance = CoordinateUtils.calculateLineDistance(
currentInfo.longitude,
currentInfo.latitude,
coordinateConverterWgsToGcj.longitude,
coordinateConverterWgsToGcj.latitude
order.gcj02Lon!!,
order.gcj02Lat!!
)
// 小于15m到站
if (calculateLineDistance < CharterPassengerConst.ARRIVE_AT_START_STATION_DISTANCE && calculateLineDistance > 0) {
@@ -520,7 +487,7 @@ object CharterPassengerModel {
if (data.orderNo != null && data.orderNo.isNotEmpty()) {// 订单进行中
return
}
// 结束路距计算
// 结束路距计算 订单结束了
endCalculateDistanceLoop()
// 停止时间校准
endCalibrationLoop()
@@ -673,7 +640,7 @@ object CharterPassengerModel {
*/
private fun calculateDistance() {
//mLocation gcj坐标
mLocationGCJ02?.let {
CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().let {
orderInfo?.let { order ->
d(M_BUS_P + "calculateDistance", "订单信息:$order")
if (order.siteId == null || order.siteId == 0L ||
@@ -691,15 +658,9 @@ object CharterPassengerModel {
}
// 启动轨迹计算
var lastSumLength = 0f
val orderLonLat =
CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(
mContext,
order.wgs84Lon!!,
order.wgs84Lat!!
)
val mogoLocation = MogoLocation()
mogoLocation.longitude = orderLonLat.longitude
mogoLocation.latitude = orderLonLat.latitude
mogoLocation.longitude = order.gcj02Lon!!
mogoLocation.latitude = order.gcj02Lat!!
lastSumLength = CoordinateUtils.calculateLineDistance(
it.longitude,
@@ -785,7 +746,7 @@ object CharterPassengerModel {
var distanceMap: MutableMap<Float, Int> = TreeMap()
// 计算所有点的距离
data.forEachIndexed { index, siteInfo ->
mLocationGCJ02?.let { currentInfo ->
CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().let { currentInfo ->
// 两点之间的距离
val calculateLineDistance = CoordinateUtils.calculateLineDistance(
currentInfo.longitude,
@@ -833,7 +794,7 @@ object CharterPassengerModel {
if (middle == 0) {
return Pair(1, false)
}
mLocationGCJ02?.let {
CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().let {
// 仅计算 距离最近的站点middle 附近5个坐标的夹角
// middle middle-1
// middle middle+1
@@ -987,7 +948,7 @@ object CharterPassengerModel {
cleanRoutePoints()
// 到站结束自驾
CallerAutoPilotControlManager.cancelAutoPilot()
// 结束路距计算
// 结束路距计算 到达目的站点
endCalculateDistanceLoop()
// 到站置距离位0
invokeStationDistanceListener(-1, -1)
@@ -1037,7 +998,7 @@ object CharterPassengerModel {
}
// 到站结束自驾
CallerAutoPilotControlManager.cancelAutoPilot()
// 停止路距计算
// 停止路距计算 选择新的站点后
endCalculateDistanceLoop()
// 到站置距离位0
invokeStationDistanceListener(-1, -1)
@@ -1104,9 +1065,6 @@ object CharterPassengerModel {
if (!checkCurrentOCHOrder()) {
e(M_BUS_P + TAG, "no order or order is empty.")
return null
}
mLocationGCJ02?.let {
}
val parameters = AutopilotControlParameters()
orderInfo?.let { orderInfo ->

View File

@@ -1,385 +0,0 @@
package com.mogo.och.bus.passenger.presenter
import androidx.lifecycle.LifecycleOwner
import com.elegant.utils.UiThreadHandler
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
import com.mogo.eagle.core.function.api.telematic.IReceivedMsgListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
import com.mogo.eagle.core.function.call.telematic.CallerTelematicListenerManager
import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS_P
import com.mogo.eagle.core.utilcode.util.GsonUtils
import com.mogo.och.bus.passenger.utils.ToastCharterUtils
import com.mogo.och.common.module.manager.loopmanager.LoopInfo
import com.mogo.och.bus.passenger.bean.event.EventLineSites
import com.mogo.och.bus.passenger.bean.response.LineInfoListResponse
import com.mogo.och.bus.passenger.bean.response.LineInfoResponse
import com.mogo.och.bus.passenger.bean.response.SiteInfoResponse
import com.mogo.och.bus.passenger.model.CharterPassengerModel
import com.mogo.och.bus.passenger.model.IOrderStatusChangeListener
import com.mogo.och.bus.passenger.model.OrderStatusEnum
import com.mogo.och.common.module.manager.loopmanager.BizLoopManager
import com.mogo.och.bus.passenger.net.BusPassengerServiceManager
import com.mogo.och.bus.passenger.ui.selectline.M1OrderLineFragment
import com.mogo.och.common.module.bean.dpmsg.BaseDPMsg
import com.mogo.och.common.module.bean.dpmsg.ChangeDestMsg
import com.mogo.och.common.module.bean.dpmsg.DPMsgType
import com.mogo.och.common.module.bean.dpmsg.LineSite
import com.mogo.och.common.module.biz.constant.OchCommonConst
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
import com.mogo.och.common.module.manager.StopSideStatusManager
import com.mogo.och.common.module.utils.RxUtils
import io.reactivex.disposables.Disposable
import org.greenrobot.eventbus.EventBus
class BusPassengerFunctionOrderPresenter(view: M1OrderLineFragment?) :
BusBasePassengerFunctionDevicePresenter<M1OrderLineFragment?>(view), IOrderStatusChangeListener {
companion object{
const val TAGLINELOOP = "LineSiteViewLineLoop"
const val TAG = "BusPassengerFunctionOrderPresenter"
}
// 成功提交给后台得线路
private var checkLine: LineInfoResponse.LineInfo? = null
// 成功提交给后台得终点站点
private var checkSite: SiteInfoResponse.SiteInfo? = null
// 下一个站点
private var currentSite: SiteInfoResponse.SiteInfo? = null
// 向司机端端提交的临时线路
private var tempCheckLine: LineInfoResponse.LineInfo? = null
// 向司机端临时提交的终点站点
private var tempCheckSite: SiteInfoResponse.SiteInfo? = null
private var subscribeSelectSite: Disposable? = null
override fun onCreate(owner: LifecycleOwner) {
super.onCreate(owner)
CharterPassengerModel.setStatusChangeListener(TAG,this)
CallerTelematicListenerManager.addListener(TAG, msgReceived)
val currentOrderStatus = CharterPassengerModel.getCurrentOrderStatus()
needRunUI(currentOrderStatus)
extracted()
}
private fun extracted() {
val currentOrderStatus = CharterPassengerModel.getCurrentOrderStatus()
if (currentOrderStatus == OrderStatusEnum.OrderNoLine || currentOrderStatus == OrderStatusEnum.OrdersWithLine) {
val hasSetLineAndSite = CharterPassengerModel.hasSetLineAndSite()
if (hasSetLineAndSite != null) {// 已经设置了线路和站点
checkLine = hasSetLineAndSite.first
checkSite = hasSetLineAndSite.second
}
mView?.setEnableSiteStatus(false)
queryLineList()
}
}
/**
* 重置数据
*/
fun resetData() {
tempCheckLine = null
tempCheckSite = null
if(checkLine==null){// 没有提交线路
queryLineList()
mView?.setEnableSiteStatus(true)
}else{
checkLine?.let {
mView?.setEnableSiteStatus(false)
mView?.lineAdapterSubmit(it)
querySitesByLineId(it)
}
}
}
private fun querySitesByLineId(checkLine: LineInfoResponse.LineInfo) {
context?.let {
BusPassengerServiceManager.queryLineSiteList(
context,
checkLine.lineId.toString(),
object : OchCommonServiceCallback<SiteInfoResponse> {
override fun onSuccess(data: SiteInfoResponse?) {
if (data?.data == null) return
val siteInfos = data.data
EventBus.getDefault().post(EventLineSites(checkLine,siteInfos,false))
if (siteInfos.isNotEmpty()) {
// 计算当前站点是那个
val calculateCurrentSite =
CharterPassengerModel.calculateCurrentSite(siteInfos)
val first = calculateCurrentSite.first// 可用站点
if(first<0){
// 所有站点不可用
currentSite = siteInfos[siteInfos.size-1]
currentSite!!.isNear = calculateCurrentSite.second
mView?.siteAdapterEnableIndex(siteInfos.size-1)
}else{
//
val index = if(first==0) {
0
}else if (first <= siteInfos.size-1) {
first-1
} else {
siteInfos.size - 1
}
currentSite = siteInfos[index]
currentSite!!.isNear = calculateCurrentSite.second
mView?.siteAdapterEnableIndex(index)
}
siteInfos.forEach {
if (it.siteId == checkSite?.siteId) {
it.isCheck = true
return@forEach
}
}
}
mView?.siteAdapterSetData(siteInfos)
}
override fun onFail(code: Int, msg: String?) {
ToastCharterUtils.showShort("查询站点失败")
mView?.setVisableByTrun(showNetError = true)
}
override fun onError() {
super.onError()
ToastCharterUtils.showShort("查询站点失败")
mView?.setVisableByTrun(showNetError = true)
}
})
}
}
private fun queryLineList() {
mView?.setVisableByTrun(showLoading = true)
context?.let {
BusPassengerServiceManager.queryLineList(it, object :
OchCommonServiceCallback<LineInfoListResponse> {
override fun onSuccess(data: LineInfoListResponse?) {
if (data?.data == null) return
mView?.setVisableByTrun(showBiz = true)
mView?.lineAdapterSetData(data.data,checkLine)
}
override fun onFail(code: Int, msg: String) {
ToastCharterUtils.showShort("查询线路失败")
mView?.setVisableByTrun(showNetError = true)
}
override fun onError() {
super.onError()
mView?.setVisableByTrun(showNetError = true)
}
})
}
}
override fun onResume(owner: LifecycleOwner) {
super.onResume(owner)
}
override fun onDestroy(owner: LifecycleOwner) {
super.onDestroy(owner)
CallerLogger.d(M_BUS_P + TAG, "onDestroy")
RxUtils.disposeSubscribe(subscribeSelectSite)
BizLoopManager.removeLoopFunction(TAGLINELOOP)
CharterPassengerModel.setStatusChangeListener(TAG,null)
CallerTelematicListenerManager.removeListener(TAG)
}
/**
* 接收司机屏反馈信息
*/
private val msgReceived = object : IReceivedMsgListener {
override fun onReceivedMsg(type: Int, byteArray: ByteArray) {
UiThreadHandler.post {
if (type == OchCommonConst.BUSINESS_STRING) {
val msg = GsonUtils.fromJson(
String(byteArray),
BaseDPMsg::class.java
) as BaseDPMsg
if (msg.type == DPMsgType.TYPE_CHANGE_DEST.type) {
val msg = GsonUtils.fromJson(
String(byteArray),
ChangeDestMsg::class.java
) as ChangeDestMsg
CallerLogger.d(M_BUS_P + BaseDPMsg.TAG, "接受数据:切换站点${msg}")
if (msg.isConfirmed) {
if(msg.arriveStatus==2){
return@post
}
ToastCharterUtils.showShort("站点确定")
mView?.setEnableSiteStatus(true)
checkLine = tempCheckLine
checkSite = tempCheckSite
tempCheckLine = null
tempCheckSite = null
checkLine?.let {
mView?.lineAdapterSubmit(it)
}
mView?.hideDataDriverAgree()
CharterPassengerModel.cleanbroadcastListInfo(checkSite)
CharterPassengerModel.queryOrder()
} else {
ToastCharterUtils.showShort("司机端拒绝请重新选择")
mView?.hideDataDriverRefuse()
}
RxUtils.disposeSubscribe(subscribeSelectSite)
BizLoopManager.removeLoopFunction(TAGLINELOOP)
}
}
}
}
}
fun changeSites(siteList: MutableList<SiteInfoResponse.SiteInfo>){
if (!CallerTelematicManager.getClientConnStatus()) {
ToastCharterUtils.showLong("乘客屏无法连接司机屏请联系安全员")
return
}
val sentDataSite: MutableList<LineSite> = mutableListOf()
siteList.forEach {
sentDataSite.add(it.copy2Mas())
}
tempCheckSite?.let { siteInfo ->
val orderNo = CharterPassengerModel.getCurrentOrderInfo()?.orderNo ?: ""
val msg = ChangeDestMsg(
orderNo,
siteInfo.lineId!!.toInt(),
siteInfo.lineName!!,
currentSite!!.siteId!!.toInt(),
currentSite!!.siteName!!,
siteInfo.siteId!!.toInt(),
siteInfo.siteName!!,
false,
1,
0,
sentDataSite
)
CallerTelematicManager.sendMsgToServer(
OchCommonConst.BUSINESS_STRING,
GsonUtils.toJson(msg).toByteArray()
)
CallerLogger.d(M_BUS_P + BaseDPMsg.TAG, "发送数据:切换站点${msg}")
}
mView?.hideDataWaitDriverMsg()
// 启动查看和司机端链接
BizLoopManager.setLoopFunction(
TAGLINELOOP,
LoopInfo(3, ::checkServerStatus)
)
RxUtils.disposeSubscribe(subscribeSelectSite)
subscribeSelectSite = RxUtils.createSubscribe(120_000){
ToastCharterUtils.showShort("请联系安全员确认")
mView?.hideDataDriverRefuse()
}
}
private fun checkServerStatus() {
if (!CallerTelematicManager.getClientConnStatus()) {
ToastCharterUtils.showShort("断开和司机端连接、请联系安全员")
BizLoopManager.removeLoopFunction(TAGLINELOOP)
mView?.hideDataDriverRefuse()
CallerLogger.d(M_BUS_P + TAG, "endAni666")
}
}
override fun onStatusChange(currentStatus: OrderStatusEnum) {
UiThreadHandler.post {
needRunUI(currentStatus)
}
}
private fun needRunUI(currentStatus: OrderStatusEnum){
when (currentStatus) {
OrderStatusEnum.OrderNoLine -> {
mView?.setVisableByTrun(showBiz = true)
extracted()
}
OrderStatusEnum.OrdersWithLine ->{
mView?.setVisableByTrun(showBiz = true)
}
else ->{
mView?.setVisableByTrun(showNorOrder = true)
}
}
}
fun canSwitchLine():Boolean {
val gnssSpeed =
CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().gnssSpeed
if (gnssSpeed < 0.5) {
when (CallerAutoPilotStatusListenerManager.getState()) {
IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE -> {// 不可自动驾驶
return true
}
IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE -> {//
return true
}
IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING -> {
// 自动驾驶中
return when (StopSideStatusManager.stopSiteStatus) {
StopSideStatusManager.Status.EndingSuccess -> {
true
}
else ->{
ToastCharterUtils.showShort("自动驾驶中无法切换线路")
false
}
}
}
IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING -> {
ToastCharterUtils.showShort("因车辆正在平行驾驶中无法切换线路")
return false
}
else -> {}
}
} else {
ToastCharterUtils.showShort("请停车后再修改目的地~")
return false
}
return true
}
fun checkLineClick(lineInfo: LineInfoResponse.LineInfo) {
checkLine4View()
tempCheckLine = lineInfo
querySitesByLineId(lineInfo)
}
private fun checkLine4View(){
tempCheckSite = null
mView?.setEnableSiteStatus(false)
}
fun checkSiteClick(siteInfo: SiteInfoResponse.SiteInfo?) {
tempCheckSite = siteInfo
if(checkSite!=null){
checkSite?.let {
if (it.siteId == siteInfo?.siteId) {// 站点相同 隐藏所有提交按钮
mView?.setEnableSiteStatus(false)
} else {
if(it.lineId == siteInfo?.lineId){// 线路相同显示单独提交
mView?.setEnableSiteStatus(true)
}else{
if(siteInfo==null){//没有选站点隐藏所有提交
mView?.setEnableSiteStatus(false)
}else {
mView?.setEnableSiteStatus(true)
}
}
}
}
}else{
mView?.setEnableSiteStatus(true)
}
}
}

View File

@@ -1,23 +0,0 @@
package com.mogo.och.bus.passenger.presenter
import androidx.lifecycle.LifecycleOwner
import com.mogo.och.bus.passenger.model.CharterPassengerModel
import com.mogo.och.bus.passenger.ui.dialogfragment.M1ContainFragment
class BusPassengerFunctionPresenter(view: M1ContainFragment?) :
BusBasePassengerFunctionDevicePresenter<M1ContainFragment?>(view) {
companion object{
private const val TAG = "BusPassengerFunctionPresenter"
}
override fun onCreate(owner: LifecycleOwner) {
super.onCreate(owner)
}
override fun onDestroy(owner: LifecycleOwner) {
super.onDestroy(owner)
}
fun haveOrder(): Boolean {
return CharterPassengerModel.hasOrder()
}
}

View File

@@ -1,245 +0,0 @@
package com.mogo.och.bus.passenger.presenter
import androidx.lifecycle.LifecycleOwner
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.bus.passenger.ui.softcontrol.M1SoftFragment
import com.mogo.och.bus.passenger.utils.ToastCharterUtils
import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorCallback
import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorStatusManager
import com.mogo.och.common.module.manager.devicemanage.data.AirconditionStatus
import com.mogo.och.common.module.manager.devicemanage.data.HeaterStatue
import com.mogo.och.common.module.manager.devicemanage.data.LightStatus
import io.reactivex.disposables.Disposable
class BusPassengerFunctionSoftPresenter(view: M1SoftFragment?) :
BusBasePassengerFunctionDevicePresenter<M1SoftFragment?>(view),
LightAirconditionDoorCallback {
companion object {
private const val TAG = "BusPassengerFunctionSoftPresenter"
}
private var subscribeLightTop1: Disposable?=null
private var subscribeLightTop2: Disposable?=null
private var subscribeLightAtmosphere: Disposable?=null
private var airconditionDisposable: Disposable?=null
private var heaterDisposable: Disposable?=null
override fun onCreate(owner: LifecycleOwner) {
super.onCreate(owner)
LightAirconditionDoorStatusManager.addListener(TAG, this)
}
override fun onDestroy(owner: LifecycleOwner) {
super.onDestroy(owner)
LightAirconditionDoorStatusManager.removeListener(TAG)
}
/**
* 空调状态变化
*/
override fun onAirconditionStatusCallback(heaterIsOpen: Boolean, airconditionStatus: AirconditionStatus, isFirst: Boolean) {
CallerLogger.d(SceneConstant.M_BUS_P + TAG,
"回写--空调开关:${LightAirconditionDoorStatusManager.airconditionStatus.isOpen}" +
"空调温度:${LightAirconditionDoorStatusManager.airconditionStatus.temperature}" +
"空调模式:${LightAirconditionDoorStatusManager.airconditionStatus.pattert}" +
"空调风速:${LightAirconditionDoorStatusManager.airconditionStatus.windSpeed}")
UiThreadHandler.post {
if(airconditionStatus.isOpen){
mView?.setAirconditionHeaterView(
airconditionStatus.isOpen,
heaterIsOpen,
airconditionStatus.temperature,
airconditionStatus.pattert,
airconditionStatus.windSpeed
)
}else{
mView?.setAirconditionHeaterView(
airconditionStatus.isOpen,
heaterIsOpen,
airconditionStatus.temperature,
0,
0
)
}
}
}
/**
* 暖风机状态变化
*/
override fun onHeaterStatusCallback(airconditionIsOpen:Boolean, heaterStatue: HeaterStatue, isFirst: Boolean) {
CallerLogger.d(SceneConstant.M_BUS_P + TAG,
"回写--暖风机开关:${heaterStatue.isOpen}" +
"风速:${heaterStatue.windSpeed}")
UiThreadHandler.post {
if(heaterStatue.isOpen) {
mView?.setAirconditionHeaterView(
airconditionIsOpen,
heaterStatue.isOpen,
0,
0,
heaterStatue.windSpeed
)
}else{
mView?.setAirconditionHeaterView(
airconditionIsOpen,
heaterStatue.isOpen,
0,
0,
0
)
}
}
}
/**
* 灯状态变化
*/
override fun onLightTop1Callback(lightStatus: LightStatus, isFirst: Boolean) {
CallerLogger.d(SceneConstant.M_BUS_P + TAG,
"回写--顶灯1开关:${lightStatus.isOpenLight1}" +
"顶灯2开关:${lightStatus.isOpenLight2}" +
"氛围灯开关:${lightStatus.isOpenatmosphere}")
UiThreadHandler.post {
mView?.setLightTop1View(lightStatus.isOpenLight1,isFirst)
}
}
/**
* 灯状态变化
*/
override fun onLightTop2Callback(lightStatus: LightStatus, isFirst: Boolean) {
CallerLogger.d(SceneConstant.M_BUS_P + TAG,
"回写--顶灯1开关:${lightStatus.isOpenLight1}" +
"顶灯2开关:${lightStatus.isOpenLight2}" +
"氛围灯开关:${lightStatus.isOpenatmosphere}")
UiThreadHandler.post {
mView?.setLightTop2View(lightStatus.isOpenLight2,isFirst)
mView?.setLightView(lightStatus.isOpenLight1,lightStatus.isOpenLight2)
}
}
/**
* 灯状态变化
*/
override fun onLightAtmosphereCallback(lightStatus: LightStatus, isFirst: Boolean) {
CallerLogger.d(SceneConstant.M_BUS_P + TAG,
"回写--顶灯1开关:${lightStatus.isOpenLight1}" +
"顶灯2开关:${lightStatus.isOpenLight2}" +
"氛围灯开关:${lightStatus.isOpenatmosphere}")
UiThreadHandler.post {
mView?.setLightAtmosphereView(lightStatus.isOpenatmosphere,isFirst)
}
}
/**
* 设置空调
*/
fun openAndSetAircondition(modeCmd: Int, windSpeedCmd: Int, temperatureCmd: Int) {
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "" +
"打开空调,模式$modeCmd--档位${windSpeedCmd}--温度:$temperatureCmd")
CallerAutoPilotControlManager.sendRoboBusJinlvM1AirConditionerCmd(1,modeCmd,windSpeedCmd,temperatureCmd)
disposeSubscribe(airconditionDisposable)
airconditionDisposable = createSubscribe(10000){
if (!LightAirconditionDoorStatusManager.airconditionStatus.isOpen&&
LightAirconditionDoorStatusManager.airconditionStatus.windSpeed!=windSpeedCmd&&
LightAirconditionDoorStatusManager.airconditionStatus.temperature!=temperatureCmd&&
LightAirconditionDoorStatusManager.airconditionStatus.pattert!=modeCmd) {
ToastCharterUtils.showShort("控制系统繁忙,请稍后再试")
}
}
}
fun closeAircondition(modeCmd: Int, windSpeedCmd: Int, temperatureCmd: Int) {
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "关闭空调")
CallerAutoPilotControlManager.sendRoboBusJinlvM1AirConditionerCmd(2,modeCmd,windSpeedCmd,temperatureCmd)
disposeSubscribe(airconditionDisposable)
airconditionDisposable = createSubscribe(10000){
if (LightAirconditionDoorStatusManager.airconditionStatus.isOpen) {
ToastCharterUtils.showShort("控制系统繁忙,请稍后再试")
}
}
}
/**
* 设置暖风
*/
fun openAndSetHeader(windSpeedCmd: Int) {
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "打开暖风机、档位${windSpeedCmd}")
CallerAutoPilotControlManager.sendRoboBusJinlvM1HeaderCmd(1,windSpeedCmd)
disposeSubscribe(heaterDisposable)
heaterDisposable = createSubscribe(10000){
if (!LightAirconditionDoorStatusManager.heaterStatue.isOpen&&
LightAirconditionDoorStatusManager.heaterStatue.windSpeed!=windSpeedCmd) {
ToastCharterUtils.showShort("暖风机操作未生效,请稍后重试吧~")
}
}
}
fun closeHeader(){
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "关闭暖风机")
CallerAutoPilotControlManager.sendRoboBusJinlvM1HeaderCmd(2,0)
disposeSubscribe(heaterDisposable)
heaterDisposable = createSubscribe(10000){
if (LightAirconditionDoorStatusManager.heaterStatue.isOpen) {
ToastCharterUtils.showShort("暖风机操作未生效,请稍后重试吧~")//还是开着的
}
}
}
fun setLightData1(leftLight: Boolean){
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "顶灯2:$leftLight")
disposeSubscribe(subscribeLightTop1)
if(leftLight){
CallerAutoPilotControlManager.sendRoboBusJinlvM1MainLamp1Cmd(1)
subscribeLightTop1 = createSubscribe{
if (!LightAirconditionDoorStatusManager.lightStatus.isOpenLight1) {
ToastCharterUtils.showShort("控制系统繁忙,请稍后再试")
}
}
}else{
CallerAutoPilotControlManager.sendRoboBusJinlvM1MainLamp1Cmd(2)
subscribeLightTop1 = createSubscribe{
if (LightAirconditionDoorStatusManager.lightStatus.isOpenLight1) {
ToastCharterUtils.showShort("控制系统繁忙,请稍后再试")
}
}
}
}
fun setLightData2(rightLight: Boolean){
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "顶灯1:$rightLight")
disposeSubscribe(subscribeLightTop2)
if(rightLight){
CallerAutoPilotControlManager.sendRoboBusJinlvM1MainLamp2Cmd(1)
subscribeLightTop2 = createSubscribe{
if (!LightAirconditionDoorStatusManager.lightStatus.isOpenLight2) {
ToastCharterUtils.showShort("控制系统繁忙,请稍后再试")
}
}
}else{
CallerAutoPilotControlManager.sendRoboBusJinlvM1MainLamp2Cmd(2)
subscribeLightTop2 = createSubscribe{
if (LightAirconditionDoorStatusManager.lightStatus.isOpenLight2) {
ToastCharterUtils.showShort("控制系统繁忙,请稍后再试")
}
}
}
}
fun setAtmosphereLightData2(atmosphereLight: Boolean){
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "氛围灯:$atmosphereLight")
disposeSubscribe(subscribeLightAtmosphere)
if (atmosphereLight) {
CallerAutoPilotControlManager.sendRoboBusJinlvM1SmallLampCmd(1)
subscribeLightAtmosphere = createSubscribe{
if (!LightAirconditionDoorStatusManager.lightStatus.isOpenatmosphere) {
ToastCharterUtils.showShort("控制系统繁忙,请稍后再试")
}
}
} else {
CallerAutoPilotControlManager.sendRoboBusJinlvM1SmallLampCmd(2)
subscribeLightAtmosphere = createSubscribe{
if (LightAirconditionDoorStatusManager.lightStatus.isOpenatmosphere) {
ToastCharterUtils.showShort("控制系统繁忙,请稍后再试")
}
}
}
}
}

View File

@@ -1,6 +0,0 @@
package com.mogo.och.bus.passenger.presenter
import com.mogo.och.bus.passenger.ui.video.M1VideoFragment
class BusPassengerFunctionVideoPresenter(view: M1VideoFragment?) :
BusBasePassengerFunctionDevicePresenter<M1VideoFragment?>(view)

View File

@@ -1,10 +1,8 @@
package com.mogo.och.bus.passenger.presenter
import androidx.lifecycle.LifecycleOwner
import com.mogo.och.bus.passenger.R
import com.mogo.och.bus.passenger.bean.response.OrderInfoResponse
import com.mogo.och.bus.passenger.model.CharterPassengerModel
import com.mogo.och.bus.passenger.ui.dialogfragment.M1ContainFragment
import com.mogo.och.bus.passenger.ui.dialogfragment.NoviceGuidanceFragment
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.common.module.utils.RxUtils

View File

@@ -1,79 +0,0 @@
package com.mogo.och.bus.passenger.presenter
import androidx.lifecycle.LifecycleOwner
import com.mogo.eagle.core.data.BaseData
import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS_P
import com.mogo.eagle.core.utilcode.util.GsonUtils
import com.mogo.och.bus.passenger.utils.ToastCharterUtils
import com.mogo.och.bus.passenger.callback.ITimeCallback
import com.mogo.och.bus.passenger.model.CharterPassengerModel
import com.mogo.och.bus.passenger.ui.orderinfo.OrderInfoFragment
import com.mogo.och.common.module.bean.dpmsg.BaseDPMsg
import com.mogo.och.common.module.bean.dpmsg.EndOrderMsg
import com.mogo.och.common.module.biz.constant.OchCommonConst
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
import com.mogo.och.common.module.utils.DateTimeUtil
class OrderInfoPresenter(view: OrderInfoFragment?) :
BusBasePassengerFunctionDevicePresenter<OrderInfoFragment?>(view), ITimeCallback {
companion object{
private const val TAG = "OrderInfoPresenter"
}
override fun onCreate(owner: LifecycleOwner) {
super.onCreate(owner)
CharterPassengerModel.setOrderLeftTimeListeners(TAG,this)
getDataInfo()
}
private fun getDataInfo() {
val currentOrderInfo = CharterPassengerModel.getCurrentOrderInfo()
currentOrderInfo?.let {
mView?.setPhone(it.passengerPhone?:"")
try {
mView?.setStartTimeAndEndTime(
DateTimeUtil.formatLongToString(it.startTime!!, DateTimeUtil.HH_mm),
DateTimeUtil.formatLongToString(it.endTime!!, DateTimeUtil.HH_mm))
}catch (e:Exception){
e.printStackTrace()
}
}
}
override fun onDestroy(owner: LifecycleOwner) {
super.onDestroy(owner)
CharterPassengerModel.setOrderLeftTimeListeners(TAG,null)
}
override fun setOrderTimeCallBack(timeInSecond: Long) {
val leftTime = DateTimeUtil.second2Time(timeInSecond)
mView?.setLeftTime(leftTime)
}
fun endOrder() {
CharterPassengerModel.endOrder(object : OchCommonServiceCallback<BaseData> {
override fun onSuccess(data: BaseData?) {
if (null != data && 0 == data.code) {
ToastCharterUtils.showShort("结束成功")
CharterPassengerModel.setEndOrderStatus()
mView?.closeDialogContaion()
val msg = EndOrderMsg(
CharterPassengerModel.getCurrentOrderInfo()?.orderNo?:"",
)
CallerTelematicManager.sendMsgToServer(
OchCommonConst.BUSINESS_STRING,
GsonUtils.toJson(msg).toByteArray()
)
CallerLogger.d(M_BUS_P + BaseDPMsg.TAG, "发送数据:结束订单${msg}")
}
}
override fun onFail(code: Int, msg: String) {
ToastCharterUtils.showShort("$code:$msg")
}
})
}
}

View File

@@ -20,15 +20,16 @@ import com.mogo.eagle.core.function.api.hmi.view.IStatusViewLayout;
@Route( path = MogoServicePaths.PATH_STATUS_VIEW_MANAGER )
public class StatusViewManager implements IStatusViewLayout {
private StatusBarView statusBarView;
@NonNull
@Override
public View getStatusView(Context context) {
return new StatusBarView(context);
return statusBarView;
}
@Override
public void init(Context context) {
statusBarView = new StatusBarView(context);
}
}

View File

@@ -5,16 +5,21 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.alibaba.android.arouter.launcher.ARouter
import com.amap.api.maps.model.LatLng
import com.mogo.commons.AbsMogoApplication
import com.mogo.commons.mvp.MvpFragment
import com.mogo.eagle.core.data.config.HdMapBuildConfig
import com.mogo.eagle.core.data.constants.MogoServicePaths
import com.mogo.eagle.core.function.api.hmi.view.IStatusViewLayout
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager.getMapUIController
import com.mogo.eagle.core.function.hmi.ui.msgbox.MMsgBoxButtonView
import com.mogo.eagle.core.function.view.SiteMarkerBean
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS_P
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.map.listener.IMogoMapListener
import com.mogo.map.listener.MogoMapListenerHandler
import com.mogo.map.uicontroller.VisualAngleMode
import com.mogo.och.bus.passenger.R
import com.mogo.och.bus.passenger.bean.event.EventLineSites
@@ -23,8 +28,8 @@ import com.mogo.och.bus.passenger.presenter.BusPassengerPresenter
import com.mogo.och.bus.passenger.ui.bottom.BottomBar
import com.mogo.och.bus.passenger.ui.bottom.BottomClickView
import com.mogo.och.bus.passenger.ui.dialogfragment.M1CarUserNoOrderFragment
import com.mogo.och.bus.passenger.ui.dialogfragment.M1ContainFragment
import com.mogo.och.bus.passenger.ui.dialogfragment.NoviceGuidanceFragment
import com.mogo.och.bus.passenger.ui.statusbar.StatusBarView
import com.mogo.och.bus.passenger.utils.ToastCharterUtils
import com.mogo.och.common.module.biz.constant.LoginStatusManager
import kotlinx.android.synthetic.main.m1_main_fragment.*
@@ -37,10 +42,8 @@ import java.lang.ref.WeakReference
* @author: wangmingjun
* @date: 2022/4/12
*/
class MainFragment :
MvpFragment<MainFragment?, BusPassengerPresenter?>() {
class MainFragment : MvpFragment<MainFragment?, BusPassengerPresenter?>(), IMogoMapListener {
private var bpFunctionGroupDialogFragment: WeakReference<M1ContainFragment>? = null
private var m1CarUserNoOrderFragment: WeakReference<M1CarUserNoOrderFragment>? = null
private var noviceGuidanceFragment: WeakReference<NoviceGuidanceFragment>? = null
@@ -61,7 +64,16 @@ class MainFragment :
}
}
private var statusBarView: StatusBarView? = null
override fun getLayoutId(): Int {
(ARouter.getInstance().build(MogoServicePaths.PATH_STATUS_VIEW_MANAGER)
.navigation() as? IStatusViewLayout)?.apply {
val statusView = getStatusView(requireContext())
if (statusView is StatusBarView) {
statusBarView = statusView
}
}
return R.layout.m1_main_fragment
}
@@ -117,6 +129,7 @@ class MainFragment :
BottomBar.SelectView.VIDEO -> showBizView(showVideo = true)
else -> {
showBizView()
statusBarView?.setBackgroudColor(R.color.bus_p_m1_80ffffff)
}
}
return false
@@ -145,6 +158,7 @@ class MainFragment :
controller.changeZoom2(0.8f)
}
}
MogoMapListenerHandler.mogoMapListenerHandler.registerHostMapListener(TAG, this)
}
fun setCarMode(type: Int) {
@@ -159,39 +173,30 @@ class MainFragment :
) {
if (orderinfo) {
biz_orderinfo.visibility = View.VISIBLE
statusBarView?.setBackgroudColor(R.color.bus_p_m1_80ffffff)
} else {
biz_orderinfo.visibility = View.GONE
}
if (softControl) {
biz_softcontrol.visibility = View.VISIBLE
statusBarView?.setBackgroudColor(R.color.bus_p_m1_40ffffff)
} else {
biz_softcontrol.visibility = View.GONE
}
if (selectLine) {
biz_selectline.visibility = View.VISIBLE
statusBarView?.setBackgroudColor(R.color.bus_p_m1_80ffffff)
} else {
biz_selectline.visibility = View.GONE
}
if (showVideo) {
biz_video.visibility = View.VISIBLE
statusBarView?.setBackgroudColor(R.color.bus_p_m1_40ffffff)
} else {
biz_video.visibility = View.GONE
}
}
private fun openSettingPage(tab: String) {
if (bpFunctionGroupDialogFragment?.get() == null) {
bpFunctionGroupDialogFragment = WeakReference(M1ContainFragment.newInstance())
}
val bpFunctionGroup = bpFunctionGroupDialogFragment?.get()
M1ContainFragment.openSettingPage(
childFragmentManager,
parentFragmentManager,
bpFunctionGroup,
tab
)
}
fun setCarModle(rawInfo: Int) {
getMapUIController()?.changeCurrentIcon(rawInfo)
HdMapBuildConfig.currentCarVrIconRes = rawInfo
@@ -221,9 +226,6 @@ class MainFragment :
super.onResume()
mapBizView.onResume()
omvOverMap.onResume()
UiThreadHandler.postDelayed({
getMapUIController()?.setAllGesturesEnabled(false)
},200)
}
override fun onSaveInstanceState(outState: Bundle) {
@@ -249,9 +251,12 @@ class MainFragment :
EventBus.getDefault().unregister(this)
}
override fun onMapLoaded() {
super.onMapLoaded()
getMapUIController()?.setAllGesturesEnabled(false)
}
fun showOpenAndCloseDoor() {
val bpFunctionGroup = bpFunctionGroupDialogFragment?.get()
bpFunctionGroup?.dismissAllowingStateLoss()
val noviceGuidanceFragment = noviceGuidanceFragment?.get()
noviceGuidanceFragment?.dismissAllowingStateLoss()

View File

@@ -1,322 +0,0 @@
package com.mogo.och.bus.passenger.ui.dialogfragment
import android.content.DialogInterface
import android.os.Bundle
import android.util.Log
import android.view.View
import android.view.WindowManager
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentTransaction
import com.mogo.commons.AbsMogoApplication
import com.mogo.commons.mvp.MvpDialogFragment
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS_P
import com.mogo.eagle.core.utilcode.util.*
import com.mogo.och.bus.passenger.R
import com.mogo.och.bus.passenger.bean.event.EventLineSites
import com.mogo.och.bus.passenger.presenter.BusPassengerFunctionPresenter
import com.mogo.och.bus.passenger.ui.selectline.M1OrderLineFragment
import com.mogo.och.bus.passenger.ui.softcontrol.M1SoftFragment
import com.mogo.och.bus.passenger.ui.video.M1VideoFragment
import com.mogo.och.bus.passenger.ui.orderinfo.OrderInfoFragment
import com.mogo.och.bus.passenger.ui.bottom.BottomBar
import com.mogo.och.bus.passenger.ui.bottom.BottomClickView
import com.mogo.och.bus.passenger.utils.ToastCharterUtils
import com.mogo.och.common.module.biz.constant.LoginStatusManager
import com.mogo.och.common.module.manager.debug.DebugViewWatchDogFragment
import kotlinx.android.synthetic.main.m1_contain_fragment.*
import org.greenrobot.eventbus.EventBus
/**
* @author: yangyakun
* @date: 2023/1/28
*/
class M1ContainFragment :
MvpDialogFragment<M1ContainFragment?, BusPassengerFunctionPresenter?>() {
var tab: String = VIDEOTAB
var fragmentTag: String = M1VideoFragment.TAG
var fragment: Fragment? = null
var closeThis:ContainDismiss = object :ContainDismiss{
override fun closeDialog() {
dismissAllowingStateLoss()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
CallerLogger.d(M_BUS_P+ TAG, "onCreate")
super.onCreate(savedInstanceState)
arguments?.let {
tab = it.getString(SELECTTAB, VIDEOTAB)
}
savedInstanceState?.let {
tab = it.getString(SELECTTAB, tab)
}
setStyle(STYLE_NO_TITLE, R.style.DialogFullScreen) //dialog全屏
}
private fun setCheckView() { //todo yakun 优化
CallerLogger.d(M_BUS_P+ TAG, "setCheckView")
when (tab) {
VIDEOTAB -> {
fragment =childFragmentManager.findFragmentByTag(M1VideoFragment.TAG)
?: M1VideoFragment.newInstance()
bb_bottom_bar.setCheckIndex(BottomBar.SelectView.VIDEO)
cl_container.setBackgroundResource(R.drawable.m1_function_bg)
fragmentTag = M1VideoFragment.TAG
}
SETTINGSOFTTAB -> {
fragment =childFragmentManager.findFragmentByTag(M1SoftFragment.TAG)
?: M1SoftFragment.newInstance()
bb_bottom_bar.setCheckIndex(BottomBar.SelectView.SETTING)
cl_container.setBackgroundResource(R.drawable.m1_function_bg)
fragmentTag = M1SoftFragment.TAG
}
ORDERINFO -> {
fragment =childFragmentManager.findFragmentByTag(OrderInfoFragment.TAG)
?: OrderInfoFragment.newInstance(closeThis)
bb_bottom_bar.setCheckIndex(BottomBar.SelectView.ORDERINFO)
cl_container.background = null
fragmentTag = OrderInfoFragment.TAG
}
SELECTLINE ->{
fragment =childFragmentManager.findFragmentByTag(M1OrderLineFragment.TAG)
?: M1OrderLineFragment.newInstance(closeThis)
bb_bottom_bar.setCheckIndex(BottomBar.SelectView.LINE)
cl_container.background = null
fragmentTag = M1OrderLineFragment.TAG
}
else -> {}
}
CallerLogger.d(M_BUS_P+ TAG, "fragment:$fragment")
fragment?.let {
val beginTransaction = childFragmentManager.beginTransaction()
beginTransaction
.replace(R.id.fl_function_group, it, fragmentTag)
.commitNow()
}
}
override fun getLayoutId(): Int = R.layout.m1_contain_fragment
override fun getTagName(): String = TAG
override fun initViews() {
//dialog?.setCancelable(false)
CallerLogger.d(M_BUS_P+ TAG, "initViews")
setCheckView()
cl_container.setOnClickListener {
dismissAllowingStateLoss()
}
// bb_bottom_bar.setSettingClickListener{
// CallerLogger.d(M_BUS_P+ TAG, "initViews---$tab")
// if(tab==SETTINGSOFTTAB) {
// dismissAllowingStateLoss()
// }else{
// tab = SETTINGSOFTTAB
// setCheckView()
// }
// }
// bb_bottom_bar.setLineClickListener{
// CallerLogger.d(M_BUS_P+ TAG, "initViews---$tab")
// if(tab==SELECTLINE) {
// dismissAllowingStateLoss()
// }else{
// tab = SELECTLINE
// setCheckView()
// }
// }
// bb_bottom_bar.setOrderInfoClickListener{
// if (LoginStatusManager.isLogin()) {
// if(mPresenter?.haveOrder()==true){
//
// }else{
// ToastCharterUtils.showShort("请确认订单")
// return@setOrderInfoClickListener
// }
// }else{
// ToastCharterUtils.showShort(AbsMogoApplication.getApp().getString(R.string.m1_please_login_driver))
// return@setOrderInfoClickListener
// }
//
// CallerLogger.d(M_BUS_P+ TAG, "initViews---$tab")
// if(tab==ORDERINFO) {
// dismissAllowingStateLoss()
// }else{
// tab = ORDERINFO
// setCheckView()
// }
// }
bb_bottom_bar.setApplyClickListener(object : BottomClickView.ApplyClickLintener{
override fun onApplyClick() {
dismissAllowingStateLoss()
}
})
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
CallerLogger.d(M_BUS_P+ TAG, "onViewCreated")
dialog?.window?.let {
BarUtils.hideStatusBarAndSticky(it)
it.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
dialog?.setOnShowListener { _ ->
it.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
BarUtils.hideStatusBarAndSticky(it)
}
}
}
override fun onDismiss(dialog: DialogInterface) {
super.onDismiss(dialog)
EventBus.getDefault().post(EventLineSites(null,null,true))
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
CallerLogger.d(M_BUS_P+ TAG, "onSaveInstanceState")
context?.let {
SharedPrefs.getInstance(it).putString(SELECTTAB, tab)
}
}
override fun createPresenter(): BusPassengerFunctionPresenter =
BusPassengerFunctionPresenter(this)
/**
* 重写父类show()方法
* 避免出现java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
*/
override fun show(manager: FragmentManager, tag: String?) {
try {
var cls = this.javaClass.superclass ?: return
while (true) {
if (cls.name == "java.lang.Object") {
break
}
cls = cls.superclass!!
if (cls == DialogFragment::class.java) {
break
}
}
val mDismissed = cls.getDeclaredField("mDismissed")
val mShownByMe = cls.getDeclaredField("mShownByMe")
mDismissed.isAccessible = true
mShownByMe.isAccessible = true
mDismissed.setBoolean(this, false)
mShownByMe.setBoolean(this, true)
if (isAdded) {
return
}
val ft: FragmentTransaction = manager.beginTransaction()
ft.add(this, tag)
ft.commitAllowingStateLoss()
} catch (e: Exception) {
Log.e("DialogFragment", "show", e.fillInStackTrace())
}
}
override fun onViewStateRestored(savedInstanceState: Bundle?) {
CallerLogger.d(M_BUS_P+ TAG, "onViewStateRestored")
when (tab) {
VIDEOTAB -> {
}
SETTINGSOFTTAB -> {}
ORDERINFO -> {}
SELECTLINE -> {}
else -> {}
}
super.onViewStateRestored(savedInstanceState)
}
companion object {
const val TAG = "M1ContainFragment"
/**
* 娱乐视频
*/
const val VIDEOTAB = "VideoTab"
/**
* 空调、暖风、灯和剩余设置
*/
const val SETTINGSOFTTAB = "SettingSoftTab"
/**
* 订单信息
*/
const val ORDERINFO = "OrderInfo"
/**
* 选择线路
*/
const val SELECTLINE = "SelectLine"
const val SELECTTAB = "SELECTTAB"
@JvmStatic
fun newInstance(): M1ContainFragment {
val args = Bundle()
val fragment = M1ContainFragment()
CallerLogger.d(M_BUS_P + TAG, "创建新的Fragment")
fragment.arguments = args
return fragment
}
fun openSettingPage(
childFragmentManager: FragmentManager,
parentFragmentManager: FragmentManager,
bpFunctionGroup: M1ContainFragment?,
tab: String
) {
val fragmentByTag: Fragment? = childFragmentManager.findFragmentByTag(TAG)
if (fragmentByTag is DialogFragment) {
if (fragmentByTag.dialog != null && fragmentByTag.dialog!!.isShowing) {
CallerLogger.d(M_BUS_P + TAG, "正在展示")
return
}
if (fragmentByTag.dialog != null && fragmentByTag.isAdded) {
if (AppStateManager.currentActivity() == null) { // 没有在当前应用内 在启动页面关闭应用
CallerLogger.d(M_BUS_P + TAG, "权限验证")
return
}
}
}
bpFunctionGroup?.arguments?.putString(SELECTTAB, tab)
if (bpFunctionGroup != null) {
if (bpFunctionGroup.dialog != null && bpFunctionGroup.dialog!!.isShowing) {
CallerLogger.d(M_BUS_P + DebugViewWatchDogFragment.TAG, "正在展示")
return
}
if (ClickUtils.isFastClick()) {
if (bpFunctionGroup.isAdded) {
CallerLogger.d(M_BUS_P + DebugViewWatchDogFragment.TAG, "已经添加")
return
}
bpFunctionGroup.show(parentFragmentManager, TAG)
CallerLogger.d(M_BUS_P + TAG, "展示$tab---$bpFunctionGroup")
} else {
CallerLogger.d(M_BUS_P + TAG, "dialog 1s内执行一次")
}
}
}
}
interface ContainDismiss{
fun closeDialog()
}
interface ChangeCheck{
fun changeChange()
}
}

View File

@@ -11,7 +11,7 @@ import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.och.bus.passenger.R
import com.mogo.och.taxi.passenger.widget.animutils.AnimationsContainer
import com.mogo.och.common.module.utils.FrameAnimatorContainer
import kotlinx.android.synthetic.main.m1_devices_lock_unlock.view.aciv_screen_lock
import kotlinx.android.synthetic.main.m1_devices_lock_unlock.view.aciv_screen_lock_bg
import kotlinx.android.synthetic.main.m1_devices_lock_unlock.view.aciv_screen_unlock_ani
@@ -30,7 +30,7 @@ class LockAndUnlockView : ConstraintLayout, LockManager.LockStatusCallback {
val TAG = "UnLockView"
private var animations: AnimationsContainer? = null
private var animations: FrameAnimatorContainer? = null
private var downType: DownType = DownType.NONE
private var handler: Handler?=null
@@ -55,9 +55,9 @@ class LockAndUnlockView : ConstraintLayout, LockManager.LockStatusCallback {
super.onAttachedToWindow()
LockManager.setAutoStatusCallback(TAG, this)
aciv_screen_unlock_ani?.let {
animations = AnimationsContainer(R.array.openlock, 24, it)
animations = FrameAnimatorContainer(R.array.openlock, 24, it,initFirstFrame = false)
animations!!.setOnAnimStopListener(object :
AnimationsContainer.OnAnimationStoppedListener {
FrameAnimatorContainer.OnAnimationStoppedListener {
override fun AnimationStopped() {
it.setImageDrawable(null)
}

View File

@@ -1,82 +0,0 @@
package com.mogo.och.bus.passenger.ui.orderinfo
import android.os.Bundle
import android.view.View
import com.mogo.commons.mvp.MvpFragment
import com.mogo.och.bus.passenger.R
import com.mogo.och.bus.passenger.presenter.OrderInfoPresenter
import com.mogo.och.bus.passenger.ui.dialogfragment.M1ContainFragment
import kotlinx.android.synthetic.main.m1_devices_fragment.*
/**
* @author: yangyakun
* @date: 2023/1/28
*/
class OrderInfoFragment :
MvpFragment<OrderInfoFragment?, OrderInfoPresenter?>() {
private var dismiss: M1ContainFragment.ContainDismiss?=null
override fun getLayoutId(): Int = R.layout.m1_devices_fragment
override fun getTagName(): String = TAG
override fun initViews() {
initListener()
}
private fun initListener() {
actv_end_order_submit.setOnClickListener {
mPresenter?.endOrder()
}
actv_contain_order.setOnClickListener {
this.dismiss?.closeDialog()
}
actv_end_order.setOnClickListener {
cl_order_info.visibility = View.GONE
cl_order_info_endorder_comfit.visibility = View.VISIBLE
}
}
fun setStartTimeAndEndTime(startTime:String,endTime:String){
actv_order_times.text = "$startTime-$endTime"
}
fun setPhone(phone:String){
if(phone.length>8) {
//截取电话号码前三位
val phoneNumPre = phone.substring(0, 3);
//截取电话号码后四位
val phoneNumFix = phone.substring(7);
actv_order_phone.text = "$phoneNumPre****$phoneNumFix"
}else{
actv_order_phone.text = phone
}
}
fun setLeftTime(leftTime:String){
actv_left_time.text = "剩余时间 $leftTime"
}
fun setContainDismiss(dismiss: M1ContainFragment.ContainDismiss) {
this.dismiss = dismiss
}
fun closeDialogContaion(){
this.dismiss?.closeDialog()
}
override fun createPresenter(): OrderInfoPresenter =
OrderInfoPresenter(this)
companion object {
const val TAG = "OrderInfoFragment"
@JvmStatic
fun newInstance(dismiss: M1ContainFragment.ContainDismiss): OrderInfoFragment {
val args = Bundle()
val fragment = OrderInfoFragment()
fragment.arguments = args
fragment.setContainDismiss(dismiss)
return fragment
}
}
}

View File

@@ -1,268 +0,0 @@
package com.mogo.och.bus.passenger.ui.selectline
import android.animation.ObjectAnimator
import android.graphics.drawable.AnimationDrawable
import android.os.Bundle
import android.view.View
import android.view.animation.LinearInterpolator
import androidx.recyclerview.widget.LinearLayoutManager
import com.elegant.utils.UiThreadHandler
import com.mogo.commons.mvp.MvpFragment
import com.mogo.eagle.core.utilcode.kotlin.onClick
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.och.bus.passenger.utils.ToastCharterUtils
import com.mogo.och.bus.passenger.R
import com.mogo.och.bus.passenger.bean.response.LineInfoResponse
import com.mogo.och.bus.passenger.bean.response.SiteInfoResponse
import com.mogo.och.bus.passenger.model.CharterPassengerModel
import com.mogo.och.bus.passenger.presenter.BusPassengerFunctionOrderPresenter
import com.mogo.och.bus.passenger.ui.selectline.adapter.OrderLineItemAdapter
import com.mogo.och.bus.passenger.ui.selectline.adapter.OrderSiteItemAdapter
import com.mogo.och.bus.passenger.ui.dialogfragment.M1ContainFragment
import com.mogo.och.bus.passenger.ui.selectline.layoutmanage.BottomDecoration
import com.mogo.och.common.module.utils.RxUtils
import io.reactivex.disposables.Disposable
import kotlinx.android.synthetic.main.m1_order_fragment.*
import kotlinx.android.synthetic.main.m1_order_loading.iv_loading_wait_ent
import me.jessyan.autosize.utils.AutoSizeUtils
/**
* @author: yangyakun
* @date: 2023/1/28
*/
class M1OrderLineFragment :
MvpFragment<M1OrderLineFragment?, BusPassengerFunctionOrderPresenter?>() {
private var dismiss: M1ContainFragment.ContainDismiss? = null
private lateinit var lineAdapter: OrderLineItemAdapter
private lateinit var siteAdapter: OrderSiteItemAdapter
val lineList = mutableListOf<LineInfoResponse.LineInfo>()
val siteList = mutableListOf<SiteInfoResponse.SiteInfo>()
private var subscribeDirverAgree: Disposable? = null
private var subscribeDirverRefuse: Disposable? = null
private val loadingAni =
ObjectAnimator.ofFloat(iv_loading_wait_ent, "rotation", 0f, 90f, 180f, 270f, 360f)
.apply {
repeatCount = -1
interpolator = LinearInterpolator()
duration = 1000
}
override fun getLayoutId(): Int {
return R.layout.m1_order_fragment
}
override fun getTagName(): String {
return TAG
}
override fun initViews() {
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "initViews")
lineAdapter = OrderLineItemAdapter(requireContext(), lineList)
siteAdapter = OrderSiteItemAdapter(requireContext(), siteList)
loadingAni.target = iv_loading_wait_ent
rlv_line_list.layoutManager =
LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
rlv_line_list.addItemDecoration(
BottomDecoration(
AutoSizeUtils.dp2px(context, 60f)
)
)
rlv_line_list.adapter = lineAdapter
rv_site_list.layoutManager =
LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
rv_site_list.addItemDecoration(
BottomDecoration(
AutoSizeUtils.dp2px(context, 90f)
)
)
rv_site_list.adapter = siteAdapter
initListener()
}
private fun initListener() {
lineAdapter.checkChangeListener = object : OrderLineItemAdapter.CheckListener {
override fun canSwitchLine(): Boolean {
return true
}
override fun onCheckListener(lineInfo: LineInfoResponse.LineInfo) {
mPresenter?.checkLineClick(lineInfo)
siteAdapter.clearCheck()
}
}
siteAdapter.checkChangeListener = object : OrderSiteItemAdapter.CheckListener {
override fun canSwitchLine(): Boolean {
return mPresenter?.canSwitchLine()?:true
}
override fun onCheckListener(siteInfo: SiteInfoResponse.SiteInfo?) {
// 设置临时选中的
mPresenter?.checkSiteClick(siteInfo)
}
}
tv_site_cancle.onClick {
mPresenter?.resetData()
}
tv_site_submit.onClick {
mPresenter?.changeSites(siteList)
}
}
/**
* 设置是否可用选择站点
*/
fun setEnableSiteStatus(cancleAndSubmit: Boolean) {
if (cancleAndSubmit) {
g_side_cancle_submit_group?.visibility = View.VISIBLE
} else {
g_side_cancle_submit_group?.visibility = View.GONE
}
}
fun hideDataWaitDriverMsg() {
g_lines_sites_data?.visibility = View.GONE
g_loading_group?.visibility = View.VISIBLE
iv_loading_wait_driver?.let {
val animationDrawable = it.drawable as AnimationDrawable
animationDrawable.start()
}
}
fun showSelectData() {
UiThreadHandler.post {
g_lines_sites_data?.visibility = View.VISIBLE
g_loading_group?.visibility = View.GONE
group_driver_agrenn_line?.visibility = View.GONE
aciv_driver_refuse_group?.visibility = View.GONE
}
}
fun hideDataDriverAgree(){
group_driver_agrenn_line?.visibility = View.VISIBLE
aciv_driver_refuse_group?.visibility = View.GONE
g_loading_group?.visibility = View.GONE
g_lines_sites_data?.let {
it.visibility = View.GONE
subscribeDirverAgree = RxUtils.createSubscribe(3_000) {
dismiss?.closeDialog()
}
}
}
fun hideDataDriverRefuse(){
group_driver_agrenn_line?.visibility = View.GONE
aciv_driver_refuse_group?.visibility = View.VISIBLE
g_loading_group?.visibility = View.GONE
g_lines_sites_data?.let {
it.visibility = View.GONE
subscribeDirverRefuse = RxUtils.createSubscribe(3_000) {
showSelectData()
}
}
}
fun setVisableByTrun(
showBiz: Boolean = false,
showNetError: Boolean = false,
showNorOrder: Boolean = false,
showLoading: Boolean = false
) {
if(showBiz){
// 选择线路页面
m1_order_noorder?.visibility = View.GONE
m1_order_neterror?.visibility = View.GONE
lsv_line_site?.visibility = View.VISIBLE
m1_order_loading?.visibility = View.GONE
return
}
if(showNetError){
m1_order_noorder?.visibility = View.GONE
m1_order_neterror?.visibility = View.VISIBLE
lsv_line_site?.visibility = View.GONE
m1_order_loading?.visibility = View.GONE
return
}
if(showNorOrder){
m1_order_noorder?.visibility = View.VISIBLE
m1_order_neterror?.visibility = View.GONE
lsv_line_site?.visibility = View.GONE
m1_order_loading?.visibility = View.GONE
return
}
if(showLoading){
m1_order_noorder?.visibility = View.GONE
m1_order_neterror?.visibility = View.GONE
lsv_line_site?.visibility = View.GONE
m1_order_loading?.visibility = View.VISIBLE
if (!loadingAni.isRunning) {
loadingAni.start()
}
}
}
fun go2StartCar() {
dismiss?.closeDialog()
}
override fun createPresenter(): BusPassengerFunctionOrderPresenter {
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "createPresenter")
return BusPassengerFunctionOrderPresenter(this)
}
override fun onDestroyView() {
super.onDestroyView()
loadingAni.cancel()
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "onDestroyView")
RxUtils.disposeSubscribe(subscribeDirverAgree)
RxUtils.disposeSubscribe(subscribeDirverRefuse)
}
fun lineAdapterSubmit(lineInfo: LineInfoResponse.LineInfo) {
lineAdapter.submitLine(lineInfo)
}
fun lineAdapterSetData(
lineInfo: List<LineInfoResponse.LineInfo>,
checkLine: LineInfoResponse.LineInfo?
) {
lineAdapter.setDataList(lineInfo,checkLine)
}
fun siteAdapterSetData(siteInfo: List<SiteInfoResponse.SiteInfo>) {
siteAdapter.setDataList(siteInfo)
}
fun siteAdapterEnableIndex(index: Int) {
siteAdapter.setEnableIndex(index)
}
fun setContainDismiss(dismiss: M1ContainFragment.ContainDismiss) {
this.dismiss = dismiss
}
companion object {
const val TAG = "M1OrderLineFragment"
@JvmStatic
fun newInstance(dismiss: M1ContainFragment.ContainDismiss): M1OrderLineFragment {
val args = Bundle()
val fragment = M1OrderLineFragment()
fragment.arguments = args
fragment.setContainDismiss(dismiss)
return fragment
}
}
}

View File

@@ -3,7 +3,6 @@ package com.mogo.och.bus.passenger.ui.selectline
import androidx.lifecycle.ViewModel
import com.elegant.utils.UiThreadHandler
import com.mogo.commons.AbsMogoApplication
import com.mogo.eagle.core.data.BaseData
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
import com.mogo.eagle.core.function.api.telematic.IReceivedMsgListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
@@ -17,24 +16,20 @@ import com.mogo.och.bus.passenger.bean.event.EventLineSites
import com.mogo.och.bus.passenger.bean.response.LineInfoListResponse
import com.mogo.och.bus.passenger.bean.response.LineInfoResponse
import com.mogo.och.bus.passenger.bean.response.SiteInfoResponse
import com.mogo.och.bus.passenger.callback.ITimeCallback
import com.mogo.och.bus.passenger.model.CharterPassengerModel
import com.mogo.och.bus.passenger.model.IOrderStatusChangeListener
import com.mogo.och.bus.passenger.model.OrderStatusEnum
import com.mogo.och.bus.passenger.net.BusPassengerServiceManager
import com.mogo.och.bus.passenger.presenter.BusPassengerFunctionOrderPresenter
import com.mogo.och.bus.passenger.utils.ToastCharterUtils
import com.mogo.och.common.module.bean.dpmsg.BaseDPMsg
import com.mogo.och.common.module.bean.dpmsg.ChangeDestMsg
import com.mogo.och.common.module.bean.dpmsg.DPMsgType
import com.mogo.och.common.module.bean.dpmsg.EndOrderMsg
import com.mogo.och.common.module.bean.dpmsg.LineSite
import com.mogo.och.common.module.biz.constant.OchCommonConst
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
import com.mogo.och.common.module.manager.StopSideStatusManager
import com.mogo.och.common.module.manager.loopmanager.BizLoopManager
import com.mogo.och.common.module.manager.loopmanager.LoopInfo
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.common.module.utils.RxUtils
import io.reactivex.disposables.Disposable
import org.greenrobot.eventbus.EventBus

View File

@@ -1,735 +0,0 @@
package com.mogo.och.bus.passenger.ui.softcontrol
import android.animation.ObjectAnimator
import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.BitmapFactory
import android.graphics.drawable.ClipDrawable
import android.graphics.drawable.LayerDrawable
import android.media.AudioManager
import android.os.Bundle
import android.view.Gravity
import android.view.View
import android.view.animation.LinearInterpolator
import android.widget.RadioButton
import android.widget.SeekBar
import android.widget.SeekBar.OnSeekBarChangeListener
import android.widget.TextView
import androidx.core.content.ContextCompat
import com.mogo.commons.mvp.MvpFragment
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr
import com.mogo.eagle.core.utilcode.util.ClickUtils
import com.mogo.och.bus.passenger.utils.ToastCharterUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.bus.passenger.R
import com.mogo.och.bus.passenger.bean.Temperature
import com.mogo.och.bus.passenger.presenter.BusPassengerFunctionSoftPresenter
import com.mogo.och.bus.passenger.ui.softcontrol.adapter.TemperatureAdapter
import com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage.PagerCenterSnapHelper
import com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage.HorizontalDecoration
import com.mogo.och.bus.passenger.ui.selectline.layoutmanage.PickerLayoutManager
import com.mogo.och.common.module.utils.SoundPoolHelper
import com.mogo.och.common.module.wigets.MineGradientDrawable
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import kotlinx.android.synthetic.main.m1_soft_fragment.*
import me.jessyan.autosize.utils.AutoSizeUtils
import java.util.concurrent.TimeUnit
/**
* @author: yangyakun
* @date: 2023/1/28
*/
class M1SoftFragment :
MvpFragment<M1SoftFragment?, BusPassengerFunctionSoftPresenter?>() {
override fun getLayoutId(): Int = R.layout.m1_soft_fragment
override fun getTagName(): String = TAG
private var currentTemperature: Temperature? = null
private var subscribeAir: Disposable? = null
private var subscribeLightTop1: Disposable? = null
private var subscribeLightTop2: Disposable? = null
private var subscribeAtmosphere: Disposable? = null
private var subscribeAnimator: Disposable? = null
private var animator1: ObjectAnimator? = null
private val loadingAni = ObjectAnimator.ofFloat(iv_loading, "rotation", 0f, 90f ,180f, 270f, 360f).apply {
repeatCount = -1
interpolator = LinearInterpolator()
duration = 1000
}
override fun initViews() {
rg_select_function.setOnCheckedChangeListener { group, checkedId ->
when (checkedId) {
R.id.tv_setting_aircondition -> {
g_light_setting.visibility = View.GONE
g_voice_setting.visibility = View.GONE
if(loadingAni.isRunning){
iv_loading.visibility = View.VISIBLE
g_aircondition_setting.visibility = View.GONE
}else{
g_aircondition_setting.visibility = View.VISIBLE
}
}
R.id.tv_setting_lighting -> {
g_light_setting.visibility = View.VISIBLE
g_voice_setting.visibility = View.GONE
g_aircondition_setting.visibility = View.GONE
iv_loading.visibility = View.GONE
}
R.id.tv_setting_voice -> {
g_voice_setting.visibility = View.VISIBLE
g_aircondition_setting.visibility = View.GONE
g_light_setting.visibility = View.GONE
iv_loading.visibility = View.GONE
}
else -> {}
}
if(rb_pattern_heating.isChecked){
iv_temperature_select.visibility = View.GONE
}
}
rg_select_function.check(R.id.tv_setting_aircondition)
setAirconditionListener()
setAirConditionAni()
setLightListener()
setVoiceInfo()
}
private fun setAirConditionAni() {
dbv_wind.post {
dbv_wind?.let {
val measuredHeight = it.measuredHeight
animator1 = ObjectAnimator.ofInt(it, "showHeight", 0, measuredHeight).apply {
duration = 1000
repeatCount = ValueAnimator.INFINITE
if(rg_setting_windspeed.checkedRadioButtonId!=0&&tv_aircondition_switch.isChecked){
start()
}
}
}
}
}
fun showAni(){
iv_loading.visibility = View.VISIBLE
loadingAni.target = iv_loading
loadingAni.start()
g_aircondition_setting.visibility = View.GONE
subscribeAnimator = Observable.timer(10000, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
loadingAni.cancel()
iv_loading.visibility = View.GONE
if(tv_setting_aircondition.isChecked){
g_aircondition_setting.visibility = View.VISIBLE
if(rb_pattern_heating.isChecked){
iv_temperature_select.visibility = View.GONE
}
}
}
}
private fun setAirconditionListener() {
// 开关空调或暖风机
tv_aircondition_switch.setOnCheckedChangeListener { buttonView, isChecked ->
if(!buttonView.isPressed){
return@setOnCheckedChangeListener
}
SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(context, R.raw.bus_di)
if(isChecked){//打开
tv_aircondition_switch.setText("关闭空调")
if (rg_setting_pattern.checkedRadioButtonId == R.id.rb_pattern_heating) {
openHeater()// 打开暖风机
} else {
openAircondition()// 打开空调
}
showAni()
}else{// 关闭
tv_aircondition_switch.setText("打开空调")
closeHeater()// 关闭暖风机
closeAircondition()//关闭空调
}
}
// 模式调节
rg_setting_pattern.setOnCheckedChangeListener { group, checkedId ->
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "调节模式")
when (checkedId) {
R.id.rb_pattern_heating -> {
if(!rb_pattern_heating.isPressed){
return@setOnCheckedChangeListener
}
SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(context, R.raw.bus_di)
openHeater()
}
R.id.rb_pattern_automatic->{
if(!rb_pattern_automatic.isPressed){
return@setOnCheckedChangeListener
}
SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(context, R.raw.bus_di)
openAircondition()
}
R.id.rb_pattern_refrigeration->{
if(!rb_pattern_refrigeration.isPressed){
return@setOnCheckedChangeListener
}
SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(context, R.raw.bus_di)
openAircondition()
}
R.id.rb_pattern_ventilate->{
if(!rb_pattern_ventilate.isPressed){
return@setOnCheckedChangeListener
}
SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(context, R.raw.bus_di)
openAircondition()
}
else -> {
openAircondition()
}
}
if(tv_aircondition_switch.isChecked) {
showAni()
}
}
// 风速调节
rg_setting_windspeed.setOnCheckedChangeListener { group, checkedId ->
when (checkedId) {
R.id.rb_wind_speed_low-> {
if(!rb_wind_speed_low.isPressed){
return@setOnCheckedChangeListener
}
}
R.id.rb_wind_speed_middle-> {
if(!rb_wind_speed_middle.isPressed){
return@setOnCheckedChangeListener
}
}
R.id.rb_wind_speed_high-> {
if(!rb_wind_speed_high.isPressed){
return@setOnCheckedChangeListener
}
}
else -> {}
}
SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(context, R.raw.bus_di)
if (rg_setting_pattern.checkedRadioButtonId == R.id.rb_pattern_heating) {//暖风机
openHeater()
} else {
openAircondition()
}
}
val pickerLayoutManager =
PickerLayoutManager(
requireContext(),
PickerLayoutManager.HORIZONTAL,
false
)
pickerLayoutManager.isChangeAlpha = true
pickerLayoutManager.scaleDownBy = 0.29f
pickerLayoutManager.scaleDownDistance = 0.8f
val data = getData()
val adapter = TemperatureAdapter(requireContext(), data, rv_aircondition_temperature)
val snapHelper = PagerCenterSnapHelper()
snapHelper.attachToRecyclerView(rv_aircondition_temperature)
rv_aircondition_temperature.layoutManager = pickerLayoutManager
rv_aircondition_temperature.adapter = adapter
HorizontalDecoration.distance = SharedPrefsMgr.getInstance(requireContext()).getInt(
HorizontalDecoration.distancekey,0)
val space = AutoSizeUtils.dp2px(context, 15f)
rv_aircondition_temperature.addItemDecoration(
HorizontalDecoration(
space,
data.size - 1
)
)
pickerLayoutManager.setOnScrollStopListener { view ->
if (view is TextView) {
// 未拖到中点、自动滚动到中点会短时间触发两次
val tag = view.tag
if (tag is Temperature) {
mPresenter?.disposeSubscribe(subscribeAir)
if(tag.index==0||tag.index==adapter.data.size-1){
subscribeAir = Observable.timer(200, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
setCheckAir(adapter,tag)
}
}else {
if (ClickUtils.isClickTooFrequent(rv_aircondition_temperature)) {
return@setOnScrollStopListener
}
setCheckAir(adapter,tag)
}
}
}
}
if(HorizontalDecoration.distance!=0){
rv_aircondition_temperature.scrollToPosition(data.size-1)
adapter.setCheckIndex(data.size-1)
}
}
private fun setCheckAir(adapter: TemperatureAdapter, tag:Temperature){
adapter.setCheckIndex(tag.index)
currentTemperature = tag
if (rv_aircondition_temperature.tag == touchTag) {
rv_aircondition_temperature.tag = null
return
} else {
SoundPoolHelper.getSoundPoolHelper()
.playSoundWithRedId(context, R.raw.bus_di)
}
openAircondition()
}
private fun getData(): MutableList<Temperature> {
val mutableListOf = mutableListOf<Temperature>()
mutableListOf.add(Temperature(0, 16, "16°"))
mutableListOf.add(Temperature(1, 17, "17°"))
mutableListOf.add(Temperature(2, 18, "18°"))
mutableListOf.add(Temperature(3, 19, "19°"))
mutableListOf.add(Temperature(4, 20, "20°"))
mutableListOf.add(Temperature(5, 21, "21°"))
mutableListOf.add(Temperature(6, 22, "22°"))
mutableListOf.add(Temperature(7, 23, "23°"))
mutableListOf.add(Temperature(8, 24, "24°"))
mutableListOf.add(Temperature(9, 25, "25°"))
mutableListOf.add(Temperature(10, 26, "26°"))
return mutableListOf
}
/**
* 关闭空调
*/
private fun closeAircondition() {
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "关闭空调")
var modeCmd = 0
var windSpeedCmd = 0
val temperatureCmd = currentTemperature?.value ?: 26
closeHeater()//关闭暖风
when (rg_setting_pattern.checkedRadioButtonId) {
R.id.rb_pattern_automatic -> modeCmd = 1 // 自动
R.id.rb_pattern_refrigeration -> modeCmd = 2 // 制冷
R.id.rb_pattern_ventilate -> modeCmd = 3 // 通风
else -> {}
}
when (rg_setting_windspeed.checkedRadioButtonId) {
R.id.rb_wind_speed_low -> windSpeedCmd = 1 // 1档
R.id.rb_wind_speed_middle -> windSpeedCmd = 2 // 2档
R.id.rb_wind_speed_high -> windSpeedCmd = 3 // 3档
else -> {}
}
mPresenter?.closeAircondition(modeCmd, windSpeedCmd, temperatureCmd)
}
/**
* 开启空调
*/
private fun openAircondition() {
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "打开空调")
var modeCmd = 0
var windSpeedCmd = 0
val temperatureCmd = currentTemperature?.value ?: 26
closeHeater()//关闭暖风
when (rg_setting_pattern.checkedRadioButtonId) {
R.id.rb_pattern_automatic -> modeCmd = 1 // 自动
R.id.rb_pattern_refrigeration -> modeCmd = 2 // 制冷
R.id.rb_pattern_ventilate -> modeCmd = 3 // 通风
else -> {}
}
when (rg_setting_windspeed.checkedRadioButtonId) {
R.id.rb_wind_speed_low -> windSpeedCmd = 1 // 1档
R.id.rb_wind_speed_middle -> windSpeedCmd = 2 // 2档
R.id.rb_wind_speed_high -> windSpeedCmd = 3 // 3档
else -> {}
}
if (!tv_aircondition_switch.isChecked) {
return
}
mPresenter?.openAndSetAircondition(modeCmd, windSpeedCmd, temperatureCmd)
}
/**
* 根据车的状态会写页面状态
*/
fun setAirconditionHeaterView(
airIsOpen: Boolean,
heaterIsOpen: Boolean,
temperatureCmd: Int,
pattern: Int,
windSpeed: Int
) {
tv_aircondition_switch?.let {
if (!airIsOpen && !heaterIsOpen) {
tv_aircondition_switch.text = "打开空调"
tv_aircondition_switch.isChecked = false
dbv_wind.visibility = View.GONE
} else {
tv_aircondition_switch.text = "关闭空调"
tv_aircondition_switch.isChecked = true
dbv_wind.visibility = View.VISIBLE
}
if (airIsOpen) {
val adapter = rv_aircondition_temperature.adapter
if (adapter is TemperatureAdapter) {
adapter.data.forEach {
if (it.value == temperatureCmd) {
rv_aircondition_temperature.tag = touchTag
UiThreadHandler.postDelayed({
rv_aircondition_temperature?.smoothScrollToPosition(it.index)
},500)
}
}
}
when (pattern) {//1: 自动模式, 2: 制冷模式, 3: 通风模式(仅送风,无温度)
1 -> {rb_pattern_automatic.isChecked = true}
2 -> {rb_pattern_refrigeration.isChecked = true}
3 -> {rb_pattern_ventilate.isChecked = true}
else -> {}
}
heaterAirEnable(true)
when (windSpeed) {//1: 1档2: 2档3:3档
1 -> {
setWind(rb_wind_speed_low,R.drawable.bus_pm1_aircondition_wind_low)
}
2 -> {
setWind(rb_wind_speed_middle,R.drawable.bus_pm1_aircondition_wind_middle)
}
3 -> {
setWind(rb_wind_speed_high,R.drawable.bus_pm1_aircondition_wind_high)
}
else -> {}
}
}
if (heaterIsOpen) {
rb_pattern_heating.isChecked = true
heaterAirEnable(false)
when (windSpeed) {//1: 1档2: 2档
1 -> {
setWind(rb_wind_speed_middle,R.drawable.bus_pm1_warm_wind_middle)
}
2 -> {
setWind(rb_wind_speed_high,R.drawable.bus_pm1_warm_wind_high)
}
else -> {}
}
}
}
}
fun setWind(check: RadioButton,resource:Int){
check.isChecked = true
dbv_wind.setDrawableImage(BitmapFactory.decodeResource(resources,resource))
}
/**
* 关闭暖风机
*/
private fun closeHeater() {
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "关闭暖风")
heaterAirEnable(true)
mPresenter?.closeHeader()
}
private fun heaterAirEnable(enable: Boolean) {
tv_temperature_title.isEnabled = enable
rv_aircondition_temperature.isEnabled = enable
val layoutManager = rv_aircondition_temperature.layoutManager
if (layoutManager is PickerLayoutManager) {
layoutManager.setHorizontallyScroll(enable)
}
val adapter = rv_aircondition_temperature.adapter as TemperatureAdapter
if(enable){
adapter.setEnable(true)
if(tv_setting_aircondition.isChecked) {
if(iv_loading.visibility==View.GONE){
iv_temperature_select.visibility = View.VISIBLE
}
}
rb_wind_speed_low.setTextColor(ContextCompat.getColorStateList(requireContext(),R.color.bus_p_function_airconditon_pattern_text_color_selector))
}else{
adapter.setEnable(false)
iv_temperature_select.visibility = View.GONE
rb_wind_speed_low.setTextColor(ContextCompat.getColor(requireContext(),R.color.bus_p_m1_6647576e))
}
}
/**
* 开启暖风机
*/
private fun openHeater() {
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "打开暖风")
heaterAirEnable(false)
closeAircondition()//关闭空调
val switch: Int
when (rg_setting_windspeed.checkedRadioButtonId) {
R.id.rb_wind_speed_low -> {
rb_wind_speed_middle.tag = touchTag
rb_wind_speed_middle.toggle()
switch = 1
}
R.id.rb_wind_speed_middle -> {
switch = 1
}
R.id.rb_wind_speed_high -> {
switch = 2
}
else -> {
rb_wind_speed_middle.tag = touchTag
rb_wind_speed_middle.toggle()
switch = 1
}
}
if (!tv_aircondition_switch.isChecked) {
return
}
mPresenter?.openAndSetHeader(switch)
}
// region 灯
private fun setLightListener() {
tv_light_top_01.setOnCheckedChangeListener { buttonView, isChecked ->
if(!buttonView.isPressed){
return@setOnCheckedChangeListener
}
tv_light_top_01.isEnabled = false
subscribeLightTop1 = Observable.timer(2000, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
tv_light_top_01.isEnabled = true
}
SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(context, R.raw.bus_di)
mPresenter?.setLightData1(isChecked)
setLightTop1View(isChecked,true)
setLightView(isChecked,tv_light_top_02.isChecked)
}
tv_light_top_02.setOnCheckedChangeListener { buttonView, isChecked ->
if(!buttonView.isPressed){
return@setOnCheckedChangeListener
}
tv_light_top_02.isEnabled = false
subscribeLightTop2 = Observable.timer(2000, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
tv_light_top_02.isEnabled = true
}
SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(context, R.raw.bus_di)
mPresenter?.setLightData2(isChecked)
setLightTop2View(isChecked,true)
setLightView(tv_light_top_01.isChecked,isChecked)
}
tv_light_atmosphere.setOnCheckedChangeListener { buttonView, isChecked ->
if(!buttonView.isPressed){
return@setOnCheckedChangeListener
}
tv_light_atmosphere.isEnabled = false
subscribeAtmosphere = Observable.timer(2000, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
tv_light_atmosphere.isEnabled = true
}
SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(context, R.raw.bus_di)
mPresenter?.setAtmosphereLightData2(isChecked)
setLightAtmosphereView(isChecked,true)
}
}
fun setLightTop1View(leftLight: Boolean, isFirst: Boolean){
tv_light_top_01?.let {
if (leftLight) {
tv_light_top_01.text = requireContext().getString(R.string.bus_p_m1_close_light1)
tv_light_top_01.isChecked = true
if(!isFirst) ToastCharterUtils.showShort("打开顶灯1")
} else {
tv_light_top_01.text = requireContext().getString(R.string.bus_p_m1_open_light1)
tv_light_top_01.isChecked = false
if(!isFirst) ToastCharterUtils.showShort("关闭顶灯1")
}
}
}
fun setLightTop2View(rightLight: Boolean, isFirst: Boolean){
tv_light_top_02?.let {
if (rightLight) {
tv_light_top_02.text = requireContext().getString(R.string.bus_p_m1_close_light2)
tv_light_top_02.isChecked = true
if(!isFirst) ToastCharterUtils.showShort("打开顶灯2")
} else {
tv_light_top_02.text = requireContext().getString(R.string.bus_p_m1_open_light2)
tv_light_top_02.isChecked = false
if(!isFirst) ToastCharterUtils.showShort("关闭顶灯2")
}
}
}
fun setLightAtmosphereView(atmosphereLight: Boolean, isFirst: Boolean){
tv_light_atmosphere?.let {
if (atmosphereLight) {
tv_light_atmosphere.text = requireContext().getString(R.string.bus_p_m1_close_atmosphere)
tv_light_atmosphere.isChecked = true
iv_bottom_light_setting.setImageResource(R.drawable.bus_p_function_atmosphere_select)
if(!isFirst) ToastCharterUtils.showShort("打开氛围灯")
} else {
tv_light_atmosphere.text = requireContext().getString(R.string.bus_p_m1_open_atmosphere)
tv_light_atmosphere.isChecked = false
iv_bottom_light_setting.setImageResource(R.drawable.bus_p_function_atmosphere_nor)
if(!isFirst) ToastCharterUtils.showShort("关闭氛围灯")
}
}
}
/**
* 灯的UI发生变化
*/
fun setLightView(leftLight: Boolean, rightLight: Boolean) {
iv_top_light_setting?.let {
if (leftLight && rightLight) {
iv_top_light_setting.setImageResource(R.drawable.bus_p_function_light_middle_selected)// 都打开
} else if (!leftLight && !rightLight) {
iv_top_light_setting.setImageResource(R.drawable.bus_p_function_light_nor)// 都关闭
} else {
if (leftLight) {
iv_top_light_setting.setImageResource(R.drawable.bus_p_function_light_select_left)// 左面开
}
if (rightLight) {
iv_top_light_setting.setImageResource(R.drawable.bus_p_function_light_select_right)// 左面开
}
}
}
}
// endregion
// region 声音
private var mAudioManager: AudioManager? = null
private var mMaxVolume: Int? = 100
@SuppressLint("NewApi")
private fun setVoiceInfo() {
val dp2px = AutoSizeUtils.dp2px(context, 26f)//进度条高度
val color2CBFFC = ContextCompat.getColor(requireContext(), R.color.bus_p_m1_2cbffc)
val color1060FF = ContextCompat.getColor(requireContext(), R.color.bus_p_m1_1060ff)
val color96A5C2 = ContextCompat.getColor(requireContext(), R.color.bus_p_m1_96a5c2)
val temp03 = MineGradientDrawable(color2CBFFC, color1060FF, dp2px)
val scaleDrawable3 = ClipDrawable(temp03, Gravity.START, ClipDrawable.HORIZONTAL)
val temp01 = MineGradientDrawable(color96A5C2, color96A5C2, dp2px)
val arr = arrayOf(temp01, scaleDrawable3)
val ld = LayerDrawable(arr)
ld.setDrawableByLayerId(android.R.id.background, temp01)
ld.setDrawableByLayerId(android.R.id.progress, scaleDrawable3)
sb_voice_bar.setProgressDrawableTiled(ld)
sb_voice_bar.max = 100
sb_voice_bar.min = 5
sb_voice_bar.setOnSeekBarChangeListener(object : OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
tv_current_voice_value.text = "$progress%"
if (fromUser) {
mMaxVolume?.let {
var currnetValue = ((progress.toFloat() / 100) * it).toInt()
if (currnetValue <= 0) {
currnetValue = 1
}
mAudioManager?.setStreamVolume(
AudioManager.STREAM_MUSIC,
currnetValue,
AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE
)
}
}
if (progress == 0) {
iv_voice.setImageResource(R.drawable.bus_p_function_voice_middle_select)
iv_end_voice.setImageResource(R.drawable.bus_p_function_voice_min)
} else {
iv_voice.setImageResource(R.drawable.bus_p_function_voice_middle_selected)
iv_end_voice.setImageResource(R.drawable.bus_p_function_voice_max)
}
}
override fun onStartTrackingTouch(seekBar: SeekBar?) {}
override fun onStopTrackingTouch(seekBar: SeekBar?) {}
})
context?.let {
mAudioManager = it.getSystemService(Context.AUDIO_SERVICE) as AudioManager
mMaxVolume = mAudioManager?.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
val mCurrentVolume = mAudioManager?.getStreamVolume(AudioManager.STREAM_MUSIC)
mMaxVolume?.let { max ->
mCurrentVolume?.let { current ->
if (current == 1) {
sb_voice_bar.progress = 5
tv_current_voice_value.text = "5%"
} else {
val fl = current.toFloat() / max * 100
sb_voice_bar.progress = fl.toInt()
tv_current_voice_value.text = "${fl.toInt()}%"
}
}
}
}
}
// endregion
override fun createPresenter(): BusPassengerFunctionSoftPresenter =
BusPassengerFunctionSoftPresenter(this)
override fun onDestroy() {
mPresenter?.disposeSubscribe(subscribeLightTop1)
mPresenter?.disposeSubscribe(subscribeLightTop2)
mPresenter?.disposeSubscribe(subscribeAtmosphere)
mPresenter?.disposeSubscribe(subscribeAnimator)
super.onDestroy()
}
override fun onResume() {
super.onResume()
if(rg_setting_windspeed.checkedRadioButtonId!=0&&tv_aircondition_switch.isChecked){
animator1?.start()
}
}
override fun onPause() {
super.onPause()
animator1?.let {
if(it.isRunning){
it.pause()
}
}
}
override fun onDetach() {
super.onDetach()
animator1?.let {
if(it.isRunning){
it.end()
}
}
}
companion object {
const val TAG = "M1SoftFragment"
const val touchTagKey = 2
const val touchTag = 2
@JvmStatic
fun newInstance(): M1SoftFragment {
val args = Bundle()
val fragment = M1SoftFragment()
fragment.arguments = args
return fragment
}
}
}

View File

@@ -76,6 +76,8 @@ class SoftControlView : ConstraintLayout, SoftControlViewModel.SoftControlCallba
private val TAG = "OrderInfoView"
private val touchTag = 2
private var viewModel: SoftControlViewModel? = null
constructor(context: Context) : super(context)
@@ -177,7 +179,7 @@ class SoftControlView : ConstraintLayout, SoftControlViewModel.SoftControlCallba
* 关闭暖风机
*/
private fun closeHeater() {
CallerLogger.d(SceneConstant.M_BUS_P + M1SoftFragment.TAG, "关闭暖风")
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "关闭暖风")
heaterAirEnable(true)
viewModel?.closeHeader()
}
@@ -219,13 +221,13 @@ class SoftControlView : ConstraintLayout, SoftControlViewModel.SoftControlCallba
* 开启暖风机
*/
private fun openHeater() {
CallerLogger.d(SceneConstant.M_BUS_P + M1SoftFragment.TAG, "打开暖风")
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "打开暖风")
heaterAirEnable(false)
closeAircondition()//关闭空调
val switch: Int
when (rg_setting_windspeed.checkedRadioButtonId) {
R.id.rb_wind_speed_low -> {
rb_wind_speed_middle.tag = M1SoftFragment.touchTag
rb_wind_speed_middle.tag = touchTag
rb_wind_speed_middle.toggle()
switch = 1
}
@@ -239,7 +241,7 @@ class SoftControlView : ConstraintLayout, SoftControlViewModel.SoftControlCallba
}
else -> {
rb_wind_speed_middle.tag = M1SoftFragment.touchTag
rb_wind_speed_middle.tag = touchTag
rb_wind_speed_middle.toggle()
switch = 1
}
@@ -254,7 +256,7 @@ class SoftControlView : ConstraintLayout, SoftControlViewModel.SoftControlCallba
* 关闭空调
*/
private fun closeAircondition() {
CallerLogger.d(SceneConstant.M_BUS_P + M1SoftFragment.TAG, "关闭空调")
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "关闭空调")
var modeCmd = 0
var windSpeedCmd = 0
val temperatureCmd = currentTemperature?.value ?: 26
@@ -297,7 +299,7 @@ class SoftControlView : ConstraintLayout, SoftControlViewModel.SoftControlCallba
* 开启空调
*/
private fun openAircondition() {
CallerLogger.d(SceneConstant.M_BUS_P + M1SoftFragment.TAG, "打开空调")
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "打开空调")
var modeCmd = 0
var windSpeedCmd = 0
val temperatureCmd = currentTemperature?.value ?: 26
@@ -323,7 +325,7 @@ class SoftControlView : ConstraintLayout, SoftControlViewModel.SoftControlCallba
private fun setCheckAir(adapter: TemperatureAdapter, tag: Temperature) {
adapter.setCheckIndex(tag.index)
currentTemperature = tag
if (rv_aircondition_temperature.tag == M1SoftFragment.touchTag) {
if (rv_aircondition_temperature.tag == touchTag) {
rv_aircondition_temperature.tag = null
return
} else {
@@ -554,7 +556,7 @@ class SoftControlView : ConstraintLayout, SoftControlViewModel.SoftControlCallba
}
// 模式调节
rg_setting_pattern.setOnCheckedChangeListener { group, checkedId ->
CallerLogger.d(SceneConstant.M_BUS_P + M1SoftFragment.TAG, "调节模式")
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "调节模式")
when (checkedId) {
R.id.rb_pattern_heating -> {
if (!rb_pattern_heating.isPressed) {
@@ -723,7 +725,7 @@ class SoftControlView : ConstraintLayout, SoftControlViewModel.SoftControlCallba
if (adapter is TemperatureAdapter) {
adapter.data.forEach {
if (it.value == temperatureCmd) {
rv_aircondition_temperature.tag = M1SoftFragment.touchTag
rv_aircondition_temperature.tag = touchTag
UiThreadHandler.postDelayed({
rv_aircondition_temperature?.smoothScrollToPosition(it.index)
}, 500)

View File

@@ -6,6 +6,7 @@ import android.os.SystemClock
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.annotation.ColorRes
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import chassis.ChassisStatesOuterClass
@@ -64,6 +65,10 @@ class StatusBarView @JvmOverloads constructor(
isFocusable = true
}
fun setBackgroudColor(@ColorRes color:Int){
setBackgroundColor(ContextCompat.getColor(context,color))
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
post {

View File

@@ -1,163 +0,0 @@
package com.mogo.och.bus.passenger.ui.video
import android.os.Bundle
import android.view.View
import androidx.recyclerview.widget.RecyclerView
import com.mogo.commons.mvp.MvpFragment
import com.mogo.och.bus.passenger.R
import com.mogo.och.bus.passenger.bean.TaxiPassengerVideoPlay
import com.mogo.och.bus.passenger.presenter.BusPassengerFunctionVideoPresenter
import com.mogo.och.bus.passenger.ui.video.adapter.RecyclerVideoAdapter
import com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage.CarouselLayoutManager
import com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage.CarouselZoomPostLayoutListener
import com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage.CenterScrollListener
import com.shuyu.gsyvideoplayer.video.base.GSYVideoView
import kotlinx.android.synthetic.main.m1_video_fragment.*
import kotlin.math.floor
/**
* @author: yangyakun
* @date: 2023/1/28
*/
class M1VideoFragment :
MvpFragment<M1VideoFragment?, BusPassengerFunctionVideoPresenter?>() {
private val arrayListOf = ArrayList<TaxiPassengerVideoPlay>()
override fun getLayoutId(): Int {
return R.layout.m1_video_fragment
}
override fun getTagName(): String {
return TAG
}
override fun initViews() {
initConsultData()
val carouselLayoutManager =
CarouselLayoutManager(
CarouselLayoutManager.HORIZONTAL,
true
)
carouselLayoutManager.setPostLayoutListener(CarouselZoomPostLayoutListener())
carouselLayoutManager.maxVisibleItems = 1
rvVideoPlaylist.addOnScrollListener(object : CenterScrollListener() {
var prePlayerPosition = 0
override fun pageSelect(recyclerView: RecyclerView?, newState: Int) {
//播放视频
val (centerItemPosition: kotlin.Int, player) = getPlayer(carouselLayoutManager)
if (player is ConsultVideoPlayer) {
if (prePlayerPosition != centerItemPosition) {
if (player.currentState == GSYVideoView.CURRENT_STATE_PAUSE) {
player.onVideoReset()
}
val playerHolder =
carouselLayoutManager.findViewByPosition(prePlayerPosition)
val prePlayer =
playerHolder?.findViewById<ConsultVideoPlayer>(R.id.video_item_player)
prePlayer?.onVideoReset()
val taxiPassengerVideoPlay = arrayListOf[centerItemPosition]
setBackageAndPlayNext(taxiPassengerVideoPlay)
} else {
player.onVideoResume(false)
}
}
prePlayerPosition = centerItemPosition
}
override fun pageStop() {
val (_, player) = getPlayer(carouselLayoutManager)
if (player is ConsultVideoPlayer) {
player.onVideoPause()
}
}
})
carouselLayoutManager.addOnDargAutoDiffListener { adapterPosition, currentPosition ->
val fl = adapterPosition - floor(adapterPosition)
var currentIndex = currentPosition
if (fl > 0.5) {
if (currentPosition == 0) {
currentIndex = rvVideoPlaylist?.adapter!!.itemCount - 1
} else {
currentIndex -= 1
}
}
}
val recyclerVideoAdapter =
RecyclerVideoAdapter(
requireContext(),
arrayListOf,
rvVideoPlaylist
)
recyclerVideoAdapter.setOnThumbImageClilckListener {
val (_, player) = getPlayer(carouselLayoutManager)
if (player is ConsultVideoPlayer) {
player.onVideoReset()
player.thumbImageViewLayout.visibility = View.VISIBLE
}
rvVideoPlaylist?.smoothScrollToPosition(it)
}
rvVideoPlaylist?.layoutManager = carouselLayoutManager
rvVideoPlaylist?.setHasFixedSize(true)
rvVideoPlaylist?.adapter = recyclerVideoAdapter
}
private fun getPlayer(carouselLayoutManager: CarouselLayoutManager): Pair<Int, ConsultVideoPlayer?> {
val centerItemPosition: Int = carouselLayoutManager.centerItemPosition
val playerHolder = carouselLayoutManager.findViewByPosition(centerItemPosition)
val player = playerHolder?.findViewById<ConsultVideoPlayer>(R.id.video_item_player)
return Pair(centerItemPosition, player)
}
private fun setBackageAndPlayNext(taxiPassengerVideoPlay: TaxiPassengerVideoPlay) {
// 设置背景图片
}
private fun initConsultData() {
arrayListOf.clear()
arrayListOf.add(
TaxiPassengerVideoPlay(
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v",
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969511280/车队.png",
"蘑菇车联覆盖生活的方方面面"
)
)
arrayListOf.add(
TaxiPassengerVideoPlay(
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v",
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png",
"蘑菇车联之红旗车队"
)
)
arrayListOf.add(
TaxiPassengerVideoPlay(
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v",
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969536177/大运会.png",
"蘑菇车联牵手成都大运会"
)
)
arrayListOf.add(
TaxiPassengerVideoPlay(
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v",
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969579713/三屏.png",
"多视角体验蘑菇车联自动驾驶"
)
)
}
override fun createPresenter(): BusPassengerFunctionVideoPresenter {
return BusPassengerFunctionVideoPresenter(this)
}
companion object {
const val TAG = "M1VideoFragment"
@JvmStatic
fun newInstance(): M1VideoFragment {
val args = Bundle()
val fragment = M1VideoFragment()
fragment.arguments = args
return fragment
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

View File

@@ -32,6 +32,7 @@
android:id="@+id/aciv_screen_unlock_ani"
android:layout_width="@dimen/dp_90"
android:layout_height="@dimen/dp_90"
android:src="@drawable/open_lock_000"
app:layout_constraintTop_toTopOf="@+id/aciv_screen_lock_bg"
app:layout_constraintBottom_toBottomOf="@+id/aciv_screen_lock_bg"
app:layout_constraintStart_toStartOf="@+id/aciv_screen_lock_bg"

View File

@@ -19,6 +19,7 @@
android:layout_height="match_parent"
app:bottomPadding="200"
app:carDrawable="@drawable/bug_p_overmap_car_model"
app:compassDrawable="@drawable/charter_p_car_light"
app:isClearArrived="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"

View File

@@ -50,6 +50,7 @@
<color name="bus_p_m1_91EFF6FF">#91EFF6FF</color>
<color name="bus_p_m1_CCFFFFFF">#CCFFFFFF</color>
<color name="bus_p_m1_80ffffff">#80FFFFFF</color>
<color name="bus_p_m1_40ffffff">#40FFFFFF</color>
<color name="bus_p_m1_f0e0efff">#F0E0EFFF </color>
<color name="bus_p_m1_66000000">#66000000</color>
</resources>

View File

@@ -151,16 +151,6 @@
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--隐藏态下的 美化模式按钮-->
<com.mogo.eagle.core.function.hmi.ui.switch.DemoModeHiddenSwitch
android:layout_width="120dp"
android:layout_height="100dp"
android:layout_marginStart="40dp"
android:layout_marginBottom="200dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="SpeakableTextPresentCheck" />
<RelativeLayout
android:id="@+id/module_mogo_och_autopilot_status"
android:layout_width="@dimen/module_mogo_och_autopilot_status_bg_width"

View File

@@ -1,4 +1,4 @@
package com.mogo.och.taxi.passenger.widget.animutils
package com.mogo.och.common.module.utils
import android.graphics.Bitmap
import android.graphics.BitmapFactory
@@ -9,7 +9,7 @@ import android.widget.ImageView
import com.mogo.commons.AbsMogoApplication
import java.lang.ref.SoftReference
class AnimationsContainer(resId: Int, fps: Int, imageView: ImageView) {
class FrameAnimatorContainer (resId: Int, fps: Int, imageView: ImageView,initFirstFrame:Boolean = true){
private lateinit var mFrames: IntArray // 帧数组
private var mIndex = 0 // 当前帧
private var mShouldRun = false // 开始/停止播放用
@@ -22,10 +22,10 @@ class AnimationsContainer(resId: Int, fps: Int, imageView: ImageView) {
private var mBitmapOptions: BitmapFactory.Options? = null //Bitmap管理类可有效减少Bitmap的OOM问题
init {
createAnimation(imageView, getData(resId), fps)
createAnimation(imageView, getData(resId), fps,initFirstFrame)
}
private fun createAnimation(imageView: ImageView, frames: IntArray, fps: Int) {
private fun createAnimation(imageView: ImageView, frames: IntArray, fps: Int, initFirstFrame:Boolean) {
mHandler = Handler(Looper.myLooper()!!)
mFrames = frames
mIndex = -1
@@ -33,7 +33,9 @@ class AnimationsContainer(resId: Int, fps: Int, imageView: ImageView) {
mShouldRun = false
mIsRunning = false
mDelayMillis = 1000 / fps //帧动画时间间隔,毫秒
imageView.setImageResource(mFrames[0])
if(initFirstFrame) {
imageView.setImageResource(mFrames[0])
}
// 当图片大小类型相同时进行复用避免频繁GC
val bmp = (imageView.drawable as BitmapDrawable).bitmap

View File

@@ -12,6 +12,7 @@ import android.view.animation.LinearInterpolator
import android.widget.RelativeLayout
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.common.module.R
import com.mogo.och.common.module.utils.SoundPoolHelper
import kotlinx.android.synthetic.main.start_autopilot_animation_view.view.startAutopilotTip
@@ -28,7 +29,7 @@ class StartAutopilotAnimationView @JvmOverloads constructor(
companion object {
private const val ALL_CLOSE_TIMER = 5000L
private const val TAG = "V2XWarningView"
private const val TAG = "StartAutopilotAnimationView"
}
private var startTimer: CountDownTimer? = null
@@ -77,7 +78,6 @@ class StartAutopilotAnimationView @JvmOverloads constructor(
* @see WarningDirectionEnum
*/
private fun showWarning(direction: DirectionEnum, time: Long = ALL_CLOSE_TIMER) {
//开始倒计时
countDownTimer()
@@ -146,18 +146,24 @@ class StartAutopilotAnimationView @JvmOverloads constructor(
private fun countDownTimer() {
startAutopilotTip.visibility = VISIBLE
startTimer = object : CountDownTimer(ALL_CLOSE_TIMER, 1000L) {// 5倒计时后开启自驾
@SuppressLint("SetTextI18n")
override fun onTick(millisUntilFinished: Long) {
// 倒计时
startAutopilotTip.text = "${(millisUntilFinished/1000).toInt()} 车辆即将自动开启自动驾驶"
UiThreadHandler.post {
startAutopilotTip.text = "${(millisUntilFinished/1000).toInt()} 车辆即将自动开启自动驾驶"
}
playDI()
}
override fun onFinish() {
//倒计时结束了...
startAutopilotTip.text = "车辆正在自动开启自动驾驶"
UiThreadHandler.post {
startAutopilotTip.text = "车辆正在自动开启自动驾驶"
}
}
}

View File

@@ -3,15 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--上方闪烁且有文字-->
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/startAutopilotTip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:visibility="gone"
android:textSize="@dimen/dp_34"
android:textColor="@android:color/white"/>
<ImageView
android:id="@+id/startAutopilotTipImg"
android:layout_width="match_parent"
@@ -19,4 +11,16 @@
android:background="@drawable/start_autopilot_animation_bkg_top"
android:visibility="gone"
tools:visibility="invisible" />
<!--上方闪烁且有文字-->
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/startAutopilotTip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:layout_gravity="center_horizontal"
android:visibility="gone"
android:textStyle="bold"
android:textSize="@dimen/dp_42"
android:textColor="@android:color/white"/>
</FrameLayout>

View File

@@ -131,16 +131,6 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<!--隐藏态下的 美化模式按钮-->
<com.mogo.eagle.core.function.hmi.ui.switch.DemoModeHiddenSwitch
android:id="@+id/viewDemoModeSwitch"
android:layout_width="120dp"
android:layout_height="100dp"
android:layout_marginStart="40dp"
android:layout_marginBottom="200dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<!--工具箱-->
<com.mogo.eagle.core.function.hmi.ui.tools.ToolsImageView
android:id="@+id/ivToolsView"

View File

@@ -151,16 +151,6 @@
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--隐藏态下的 美化模式按钮-->
<com.mogo.eagle.core.function.hmi.ui.switch.DemoModeHiddenSwitch
android:layout_width="120dp"
android:layout_height="100dp"
android:layout_marginStart="40dp"
android:layout_marginBottom="200dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="SpeakableTextPresentCheck" />
<RelativeLayout
android:id="@+id/module_mogo_och_autopilot_status"
android:layout_width="@dimen/module_mogo_och_autopilot_status_bg_width"

View File

@@ -1,4 +1,4 @@
package com.mogo.och.taxi.passenger.ui
package com.mogo.och.taxi.passenger.ui.systemsetting
import android.annotation.SuppressLint
import android.content.Context
@@ -10,14 +10,12 @@ import android.media.AudioManager
import android.provider.Settings
import android.text.TextUtils
import android.util.AttributeSet
import android.util.Log
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.widget.SeekBar
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import com.mogo.commons.module.intent.IMogoIntentListener
import com.mogo.commons.module.intent.IntentManager
import com.mogo.commons.module.receiver.MogoReceiver

View File

@@ -1,18 +0,0 @@
package com.mogo.och.taxi.base
import android.os.Bundle
import android.view.View
import androidx.fragment.app.Fragment
abstract class BaseUiFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
initView(view, savedInstanceState)
initData(savedInstanceState)
super.onViewCreated(view, savedInstanceState)
}
abstract fun initView(view: View, savedInstanceState: Bundle?)
abstract fun initData(savedInstanceState: Bundle?)
}

View File

@@ -44,7 +44,8 @@ data class OrderDetail(
}
}
data class Site(var siteId: Long, var siteName: String, var gcjLat: Double, var gcjLon: Double) {
data class Site(var siteId: Long, var siteName: String, var gcjLat: Double, var gcjLon: Double,
var wgs84Lon: Double, var wgs84Lat: Double) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
@@ -55,6 +56,8 @@ data class Site(var siteId: Long, var siteName: String, var gcjLat: Double, var
if (siteName != other.siteName) return false
if (gcjLat != other.gcjLat) return false
if (gcjLon != other.gcjLon) return false
if (wgs84Lon != other.wgs84Lon) return false
if (wgs84Lat != other.wgs84Lat) return false
return true
}
}
@@ -92,7 +95,7 @@ data class StartTaskReqBean(var sn: String, var lineId: Long)
data class ArriveSiteReqBean(var sn: String, var siteId: Long)
data class PrepareTaskReqBean(var sn: String, var siteId: Long)
data class PrepareTaskRespBean(var data: Result): BaseData(){ //taskType 1:虚拟任务 2:接驾任务3:送驾任务
data class PrepareTaskRespBean(var data: Result?): BaseData(){ //taskType 1:虚拟任务 2:接驾任务3:送驾任务
data class Result(
var lineId: Long, var cityCode: Int, var taskType: Int,
var startSite: Site, var endSite: Site
@@ -103,11 +106,13 @@ data class JumpPassengerCheckReqBean(var sn: String, var orderNo: String)
data class CancelOrderReqBean(var sn: String, var orderNo: String, var cancelType: Int)
data class OrderCompletedReqBean(var sn: String, var orderNo: String)
data class QueryCarOrderByNoReqBean(var sn: String, var orderNo: String)
data class QueryCarOrderByNoRespBean(
var sn: String, var orderNo: String, var orderStatus: Int,
var bookingUserPhone: String, var businessType: String,
var mileage: Float,var duration: Int
): BaseData()
data class QueryCarOrderByNoRespBean(var data: Result): BaseData(){
data class Result(
var sn: String, var orderNo: String, var orderStatus: Int,
var bookingUserPhone: String, var businessType: String,
var mileage: Float,var duration: Float,var passengerSize: Int
)
}
data class ContrailListRespBean(var data: MutableList<Result>?) //轨迹路线集合
: BaseData() {

View File

@@ -65,6 +65,7 @@ import com.mogo.och.common.module.voice.VoiceNotice
import com.mogo.och.taxi.bean.ContrailListRespBean
import com.mogo.och.taxi.bean.OrderDetail
import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean
import com.mogo.och.taxi.bean.Site
import com.mogo.och.taxi.bean.StartServiceRespBean
import com.mogo.och.taxi.callback.IOCHTaxiAutopilotPlanningCallback
import com.mogo.och.taxi.callback.ITaxiADASStatusCallback
@@ -271,6 +272,11 @@ object TaxiModel {
return valueOf(order.orderStatus)
}
fun getCurTaskStatus(): Int? {
if (mCurrentTaskAndOrder == null) TaskStatusEnum.None
return mCurrentTaskAndOrder?.currentStatus
}
fun getCurTaskAndOrder(): QueryCurrentTaskRespBean.Result? {
return mCurrentTaskAndOrder
}
@@ -371,7 +377,7 @@ object TaxiModel {
}
}
//检测当前订单
//检测当前任务
fun checkCurrentTask(): Boolean {
return mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.startSite != null
&& mCurrentTaskAndOrder!!.endSite != null
@@ -477,10 +483,10 @@ object TaxiModel {
val parameters = AutopilotControlParameters()
val startWgsLon = mCurrentTaskAndOrder!!.startSite!!.gcjLon
val startWgsLat = mCurrentTaskAndOrder!!.startSite!!.gcjLat
val endWgsLon = mCurrentTaskAndOrder!!.endSite!!.gcjLon
val endWgsLat = mCurrentTaskAndOrder!!.endSite!!.gcjLat
val startWgsLon = mCurrentTaskAndOrder!!.startSite!!.wgs84Lon
val startWgsLat = mCurrentTaskAndOrder!!.startSite!!.wgs84Lat
val endWgsLon = mCurrentTaskAndOrder!!.endSite!!.wgs84Lon
val endWgsLat = mCurrentTaskAndOrder!!.endSite!!.wgs84Lat
parameters.vehicleType = BUSINESSTYPE
parameters.startName = mCurrentTaskAndOrder!!.startSite!!.siteName // 8.10 拼音首字母大写 改为直接传中文
parameters.endName = mCurrentTaskAndOrder!!.endSite!!.siteName // 8.10 拼音首字母大写 改为直接传中文
@@ -679,10 +685,10 @@ object TaxiModel {
//3、刚过站且过站距离在15m内 提交到站
if (stationAngle > 90 && distance <= TaxiUnmannedConst.ARRIVE_AT_START_STATION_DISTANCE) {
if ((!checkCurrentOrder()
|| (getCurOrderStatus() === TaxiOrderStatusEnum.ArriveAtEnd))
if ((!checkCurrentTask()
|| (getCurTaskStatus() == TaskStatusEnum.StartTask.code))
) {
i(SceneConstant.M_TAXI + TAG, "order exception or order ArriveAtEnd")
i(SceneConstant.M_TAXI + TAG, "task null or TaskStatus = ${getCurTaskStatus()}")
return
}
i(SceneConstant.M_TAXI + TAG, "judgeEndStation() = 刚过站且在15m内")
@@ -720,16 +726,6 @@ object TaxiModel {
}
arriveSite(mUntruthTask!!.siteId, false)
}
/**
* 订单流转debug START
*/
fun setArriveAtStartStation() {
if (!checkCurrentTask()) {
ToastUtils.showShort("订单状态不匹配该操作!")
return
}
arriveSite(mCurrentTaskAndOrder?.startSite!!.siteId, false)
}
fun setArriveAtEndStation() {
if (!checkCurrentTask()) {
@@ -744,7 +740,14 @@ object TaxiModel {
ToastUtils.showShort("无任务!")
return
}
mCurrentTaskAndOrder?.lineId?.let { startTask(it) }
//当前订单状态若为20 , 则使用的lineId为订单信息的
mCurrentTaskAndOrder?.let { startTask(
if (it.order != null && it.order!!.orderStatus >= TaxiOrderStatusEnum.ArriveAtStart.code)
it.order!!.orderLine
else
it.lineId
) }
}
/**

View File

@@ -13,6 +13,7 @@ import com.mogo.eagle.core.utilcode.util.NetworkUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.common.module.biz.constant.LoginStatusManager
import com.mogo.och.common.module.biz.constant.LoginStatusManager.isLogin
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
import com.mogo.och.common.module.utils.ToastUtilsOch
import com.mogo.och.common.module.voice.VoiceNotice
@@ -29,6 +30,7 @@ import com.mogo.och.taxi.constant.TaskTypeEnum
import com.mogo.och.taxi.constant.TaxiOrderStatusEnum
import com.mogo.och.taxi.constant.TaxiUnmannedConst
import com.mogo.och.taxi.constant.TaxtServingStatusManager
import com.mogo.och.taxi.constant.TaxtServingStatusManager.isOpeningOrderStatus
import com.mogo.och.taxi.network.CarServiceManager
import com.mogo.och.taxi.network.CarServiceManager.cancelOrder
import com.mogo.och.taxi.network.CarServiceManager.contrailList
@@ -270,6 +272,7 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
}
private fun queryCurrentTaskOnce(){
if (!LoginStatusManager.isLogin()) return // 未登陆则不去查询
CarServiceManager.queryCurrentTask(AbsMogoApplication.getApp().applicationContext,
object : OchCommonServiceCallback<QueryCurrentTaskRespBean> {
override fun onSuccess(data: QueryCurrentTaskRespBean?) {
@@ -287,13 +290,14 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order!= null &&
result != null && result.order == null) {
//本地根据订单 orderNo 去查询下(乘客取消订单)
d(TAG, "queryCurrentTaskOnce1 = result order is empty, query order by orderNo!")
queryCurrentOrderStatusByNo(mCurrentTaskAndOrder!!.order!!.orderNo)
return
}
//订单或者伪任务更新, 都去刷新下界面
if (mCurrentTaskAndOrder == null || !mCurrentTaskAndOrder!!.equals(result)){
d(TAG, "queryCurrentTaskOnce1 = mCurrentTaskAndOrder update " )
if (result == null) return
if (result.endSite == null && result.order == null){
@@ -302,32 +306,45 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
TaxiModel.updateCurrentTaskAndOrder(null)
}
//当前任务完成且订单状态到达乘客上车点, 则立马去拉取任务 不再等30s,否则送驾任务要等30s后才能去执行
if (result.currentStatus == TaskStatusEnum.CompleteTask.code){
startPrepareTask(result.endSite!!.siteId)
if (result.order != null && result.order!!.orderStatus
== TaxiOrderStatusEnum.ArriveAtStart.code){
pullTask(result.endSite!!.siteId)
d(TAG, "queryCurrentTaskOnce1 = pullTask" )
}else{
startPrepareTask30S(result.endSite!!.siteId)
d(TAG, "queryCurrentTaskOnce1 = startPrepareTask30S" )
}
}
mCurrentTaskAndOrder = result
TaxiModel.updateCurrentTaskAndOrder(result)
TaxiModel.updateStation()
updateTaskAndOrderUi()
if (result.order != null && result.order!!.orderStatus == TaxiOrderStatusEnum.ArriveAtEnd.code){
queryCurrentOrderStatusByNo(mCurrentTaskAndOrder!!.order!!.orderNo) //查询全程里程和用时,更新
d(TAG, "queryCurrentTaskOnce1 = ArriveAtEnd query mileage and duration")
queryCurrentOrderStatusByNo(result.order!!.orderNo) //查询全程里程和用时,更新
}
//根据lineId集合去查轨迹集合, 返回的只是接驾任务的line集合,没有送驾任务
if (result.order != null && result.order!!.orderStatus <= TaxiOrderStatusEnum.OnTheWayToEnd.code){
var lines = result.order!!.planningLines
lines[lines.size] = result.order!!.orderLine
lines = lines.plus(result.order!!.orderLine)
d(TAG, "queryCurrentTaskOnce1 = by lineIds query Contrails" )
queryOrderPickUpContrails(lines)
}
if (result.currentStatus <= TaskStatusEnum.StartTask.code){//任务执行中, 去加载下轨迹
d(TAG, "queryCurrentTaskOnce1 = by lineId query Contrail" )
TaxiModel.queryTaskContrail(Array(1) {result.lineId})
}
if (result.taskType <= TaskTypeEnum.ToOrderStartTask.code
&& result.currentStatus == TaskStatusEnum.GetTask.code){//自动去启动自驾
d(TAG, "queryCurrentTaskOnce1 = autoStartDriving" )
TaxiModel.autoStartDriving()
}
}
@@ -367,21 +384,25 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
queryCarOrderByOrderNo(mContext,orderNo,
object : OchCommonServiceCallback<QueryCarOrderByNoRespBean>{
override fun onSuccess(data: QueryCarOrderByNoRespBean?) {
if (data != null && data.code != 0) return
if (data!!.orderStatus == TaxiOrderStatusEnum.Cancel.code){
d(SceneConstant.M_TAXI + TAG, "queryCurrentOrderStatusByNo data = " +
GsonUtil.jsonFromObject(data))
if (data == null || data.code != 0) return
if (data.data.orderStatus == TaxiOrderStatusEnum.Cancel.code){
VoiceNotice.showNotice("乘客已经取消")
mCurrentTaskAndOrder = null
updateTaskAndOrderUi()
updateNoTaskAndOrderUi()
TaxiModel.cancelAutopilot()
return
}
if (data.orderStatus == TaxiOrderStatusEnum.ArriveAtEnd.code){//到站
updateOrderMileAndDur(data.mileage,data.duration)
if (data.data.orderStatus == TaxiOrderStatusEnum.ArriveAtEnd.code){//到站
//结束导航
updateOrderMileAndDur(data.data.mileage,data.data.duration.toInt())
return
}
if (data.orderStatus == TaxiOrderStatusEnum.JourneyCompleted.code){//完成
if (data.data.orderStatus == TaxiOrderStatusEnum.JourneyCompleted.code){//完成
//获取新的任务
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.endSite != null){
startPrepareTask(mCurrentTaskAndOrder!!.endSite!!.siteId)
startPrepareTask30S(mCurrentTaskAndOrder!!.endSite!!.siteId)
}
mCurrentTaskAndOrder = null
updateNoTaskAndOrderUi()
@@ -407,28 +428,37 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
}
}
private fun startPrepareTask(siteId: Long) {
private fun startPrepareTask30S(siteId: Long) {
UiThreadHandler.postDelayed({
CarServiceManager.prepareTask(
mContext,
siteId,
object : OchCommonServiceCallback<PrepareTaskRespBean> {
override fun onSuccess(data: PrepareTaskRespBean?) {
d(SceneConstant.M_TAXI + TAG, "prepareTask = " + GsonUtil.jsonFromObject(data))
if (data == null || data.code != 0) return
//去下载轨迹, 下发给工控机下载
TaxiModel.queryTaskContrail(Array(1) {data.data.lineId})
}
override fun onFail(code: Int, msg: String?) {
d(SceneConstant.M_TAXI + TAG, "$code $msg")
startPrepareTask(siteId) //失败后30s再次调用获取下一任务
}
})
if (isLogin() && isOpeningOrderStatus()){
pullTask(siteId)
}
}, TaxiUnmannedConst.TIMER_PREPARE_TASK_INTERVAL)
}
private fun pullTask(siteId: Long) {
CarServiceManager.prepareTask(
mContext,
siteId,
object : OchCommonServiceCallback<PrepareTaskRespBean> {
override fun onSuccess(data: PrepareTaskRespBean?) {
d(SceneConstant.M_TAXI + TAG, "prepareTask = " + GsonUtil.jsonFromObject(data)
+ ", isOpeningOrderStatus = ${isOpeningOrderStatus()}")
if (data?.data == null || data.code != 0) return
//去下载轨迹, 下发给工控机下载
TaxiModel.queryTaskContrail(Array(1) {data.data!!.lineId})
}
override fun onFail(code: Int, msg: String?) {
d(SceneConstant.M_TAXI + TAG, "$code $msg")
if (isLogin() && isOpeningOrderStatus()){
startPrepareTask30S(siteId) //失败后30s再次调用获取下一任务
}
}
})
}
private fun startInAndWaitCurrentTaskLoop() {
if (mInAndWaitServiceDisposable != null && !mInAndWaitServiceDisposable!!.isDisposed) {

View File

@@ -128,7 +128,7 @@ object CarServiceManager {
mOCHTaxiServiceApi.queryCarOrderByOrderNo(
data = QueryCarOrderByNoReqBean(MoGoAiCloudClientConfig.getInstance().sn, orderNo)
).transformTry()
.subscribe(OchCommonSubscribeImpl(context, callback, "jumpPassengerCheck"))
.subscribe(OchCommonSubscribeImpl(context, callback, "queryCarOrderByOrderNo"))
}
/**

View File

@@ -9,7 +9,6 @@ import android.os.Bundle
import android.text.Html
import android.view.View
import androidx.annotation.RequiresApi
import androidx.core.text.HtmlCompat
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import com.amap.api.navi.model.NaviLatLng
@@ -19,8 +18,10 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager.getMapUIController
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager.getOverlayManager
import com.mogo.eagle.core.network.utils.GsonUtil
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_TAXI
import com.mogo.eagle.core.utilcode.util.DateTimeUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
@@ -35,7 +36,6 @@ import com.mogo.och.common.module.voice.VoiceNotice.showNotice
import com.mogo.och.common.module.wigets.OCHCommitDialog
import com.mogo.och.taxi.R
import com.mogo.och.taxi.bean.OrderDetail
import com.mogo.och.taxi.bean.OrderQueryRouteInfoRespBean
import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean
import com.mogo.och.taxi.bean.StartServiceRespBean
import com.mogo.och.taxi.constant.TaskStatusEnum
@@ -51,12 +51,14 @@ import com.mogo.och.taxi.ui.unmanned.TaskAndOrderUiState
import com.mogo.och.taxi.ui.unmanned.UnmannedIntent
import kotlinx.android.synthetic.main.taxi_no_data_common_view.noOrderDataTv
import kotlinx.android.synthetic.main.unmanned_being_order.cancelOrder
import kotlinx.android.synthetic.main.unmanned_being_order.endPoint
import kotlinx.android.synthetic.main.unmanned_being_order.endStationName
import kotlinx.android.synthetic.main.unmanned_being_order.mBeingOrderLayout
import kotlinx.android.synthetic.main.unmanned_being_order.naviToEnd
import kotlinx.android.synthetic.main.unmanned_being_order.naviToStart
import kotlinx.android.synthetic.main.unmanned_being_order.noTaskData
import kotlinx.android.synthetic.main.unmanned_being_order.orderPhoneAndNum
import kotlinx.android.synthetic.main.unmanned_being_order.startPoint
import kotlinx.android.synthetic.main.unmanned_being_order.startStationName
import kotlinx.android.synthetic.main.unmanned_being_order.taskClickBtn
import kotlinx.android.synthetic.main.unmanned_being_order.taskOtherInfo
@@ -135,7 +137,7 @@ class TaxiBeingTaskFragment : BaseFragment(),
updateUntruthTask(taskAndOrderUiState.untruthTask)
}else{
updateReserveOrderChanged(taskAndOrderUiState.taskAndOrder)
updateCurrentOrderStatusChanged(taskAndOrderUiState.taskAndOrder)
updateCurrentTaskAndOrderStatusChanged(taskAndOrderUiState.taskAndOrder)
}
}
@@ -150,7 +152,7 @@ class TaxiBeingTaskFragment : BaseFragment(),
@RequiresApi(Build.VERSION_CODES.N)
private fun updateOrderTotalMilAndDur(mileage: Float, duration: Int) {
val strHtml2 =
("<font color=\"#CAD6FF\">总里程 </font>" + "<font color=\"#FFFFFF\"> $mileage </font>" + "<font color=\"#CAD6FF\"> 公里 </font>"
("<font color=\"#CAD6FF\">程 </font>" + "<font color=\"#FFFFFF\"> $mileage </font>" + "<font color=\"#CAD6FF\"> 公里 </font>"
+ "<font color=\"#CAD6FF\">,总用时 </font>" + "<font color=\"#FFFFFF\"> $duration </font>" + "<font color=\"#CAD6FF\"> 分钟</font>")
taskOtherInfo.text = Html.fromHtml(strHtml2,Html.FROM_HTML_MODE_LEGACY)
}
@@ -185,6 +187,17 @@ class TaxiBeingTaskFragment : BaseFragment(),
taskStatus.text = resources.getString(R.string.task_start_to_virtual_site)
startStationName.text = resources.getString(R.string.task_current_loc)
endStationName.text = siteName
setPointBlueGreen()
}
private fun setPointBlueGreen(){
startPoint.setImageResource(R.drawable.taxi_driver_circle_blue_big)
endPoint.setImageResource(R.drawable.taxi_driver_circle_green_big)
}
private fun setPointGreenBlue(){
startPoint.setImageResource(R.drawable.taxi_driver_circle_green_big)
endPoint.setImageResource(R.drawable.taxi_driver_circle_blue_big)
}
private fun updateUntruthTaskView() {
@@ -236,7 +249,7 @@ class TaxiBeingTaskFragment : BaseFragment(),
*/
@RequiresApi(Build.VERSION_CODES.N)
@SuppressLint("SetTextI18n", "UseCompatLoadingForDrawables")
fun updateCurrentOrderStatusChanged(taskAndOrder: QueryCurrentTaskRespBean.Result?) {
fun updateCurrentTaskAndOrderStatusChanged(taskAndOrder: QueryCurrentTaskRespBean.Result?) {
if (taskAndOrder == null) return
if (taskAndOrder.endSite == null && taskAndOrder.order == null){
isHaveBeingOrder(false)
@@ -265,6 +278,7 @@ class TaxiBeingTaskFragment : BaseFragment(),
updateUIShowStatus(taskType,currentStatus,order)
when (taskType) {
TaskTypeEnum.VirtualTask.code -> {// 演练任务
if (order != null && currentStatus == TaskStatusEnum.CompleteTask.code){
updateOrderUI(order)
@@ -277,6 +291,7 @@ class TaxiBeingTaskFragment : BaseFragment(),
taskTypeTv.text = resources.getString(R.string.task_exercise)
startStationName.text = startSite.siteName
endStationName.text = endSite.siteName
setPointBlueGreen()
}
TaskTypeEnum.ToOrderEndTask.code,TaskTypeEnum.ToOrderStartTask.code -> {// 送驾/接驾任务任务
if (order == null) return
@@ -289,16 +304,81 @@ class TaxiBeingTaskFragment : BaseFragment(),
}
}
updateMapMarkers()
updateRemainDistanceAndTime(false)
}
private fun updateMapMarkers() {
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.startSite != null
&& mCurrentTaskAndOrder!!.endSite != null ) {
when(mCurrentTaskAndOrder!!.currentStatus){
TaskStatusEnum.GetTask.code -> {
setOrRemoveMapMaker(
true,
TAXI_START_MAP_MAKER,
mCurrentTaskAndOrder!!.startSite!!.wgs84Lat,
mCurrentTaskAndOrder!!.startSite!!.wgs84Lon,
R.raw.star_marker
)
setOrRemoveMapMaker(
true,
TAXI_END_MAP_MAKER,
mCurrentTaskAndOrder!!.endSite!!.wgs84Lat,
mCurrentTaskAndOrder!!.endSite!!.wgs84Lon,
R.raw.end_marker
)
}
TaskStatusEnum.StartTask.code -> {
setOrRemoveMapMaker(
false,
TAXI_START_MAP_MAKER,
mCurrentTaskAndOrder!!.startSite!!.wgs84Lat,
mCurrentTaskAndOrder!!.startSite!!.wgs84Lon,
R.raw.star_marker
)
setOrRemoveMapMaker(
true,
TAXI_END_MAP_MAKER,
mCurrentTaskAndOrder!!.endSite!!.wgs84Lat,
mCurrentTaskAndOrder!!.endSite!!.wgs84Lon,
R.raw.end_marker
)
}
TaskStatusEnum.CompleteTask.code -> {
setOrRemoveMapMaker(
false,
TAXI_START_MAP_MAKER,
mCurrentTaskAndOrder!!.startSite!!.wgs84Lat,
mCurrentTaskAndOrder!!.startSite!!.wgs84Lon,
R.raw.star_marker
)
setOrRemoveMapMaker(
false,
TAXI_END_MAP_MAKER,
mCurrentTaskAndOrder!!.endSite!!.wgs84Lat,
mCurrentTaskAndOrder!!.endSite!!.wgs84Lon,
R.raw.end_marker
)
}
}
}else{
d(M_TAXI + TAG,"CurrentTaskAndOrder == "+GsonUtil.jsonFromObject(mCurrentTaskAndOrder))
}
}
@RequiresApi(Build.VERSION_CODES.N)
private fun updateOrderUI(order: OrderDetail) {
taskTypeTv.text = resources.getString(R.string.task_order)
taskTypeTv.background = resources.getDrawable(R.drawable.task_order_type_btn_bg,null)
orderPhoneAndNum.text = Html.fromHtml("<font color=\"#FFFFFF\"> " + order.bookingUserPhone + "</font>" +
"<font color=\"#33FFFFFF\"> | </font>" +
"<font color=\"#6473B2\"> | </font>" +
"<font color=\"#FFFFFF\">" + order.passengerSize + "" + "</font>",Html.FROM_HTML_MODE_LEGACY)
startStationName.text = order.orderStartSite?.siteName
endStationName.text = order.orderEndSite?.siteName
@@ -309,81 +389,32 @@ class TaxiBeingTaskFragment : BaseFragment(),
isHaveBeingOrder(false)
}
TaxiOrderStatusEnum.Cancel.code -> { //取消
updateOrderBottomBtn(
taskClickBtn.text.toString(),
Color.parseColor("#4DFFFFFF"),
Color.parseColor("#4D1D5EF3"),
false
)
taskTypeTv.background = resources.getDrawable(R.drawable.task_cancel_type_btn_bg,null)
taskTypeTv.text = resources.getString(R.string.passenger_cancel_order)
onCurrentOrderCancelDone()
hideNavi()
}
TaxiOrderStatusEnum.ArriveAtEnd.code -> { //到达目的地
taskStatus.text = resources.getString(R.string.task_start_end_site)
setPointBlueGreen()
updateOrderBottomBtn(
getString(R.string.module_och_taxi_order_server_end),
Color.parseColor("#FFFFFF"),
Color.parseColor("#FF1D5EF3"),
true
)
order.orderStartSite?.let {
setOrRemoveMapMaker(
false,
TAXI_START_MAP_MAKER,
it.gcjLat,
it.gcjLon,
R.raw.star_marker
)
}
order.orderEndSite?.let {
setOrRemoveMapMaker(
false,
TAXI_END_MAP_MAKER,
it.gcjLat,
it.gcjLon,
R.raw.end_marker
)
}
hideNavi()
}
TaxiOrderStatusEnum.OnTheWayToEnd.code -> { //送驾中
taskStatus.text = resources.getString(R.string.task_start_end_site)
setPointBlueGreen()
updateOrderBottomBtn(
getString(R.string.module_och_taxi_order_close),
Color.parseColor("#FFFFFF"),
Color.parseColor("#FF1D5EF3"),
true
)
order.orderStartSite?.let {
setOrRemoveMapMaker(
false,
TAXI_START_MAP_MAKER,
it.gcjLat,
it.gcjLon,
R.raw.star_marker
)
}
order.orderEndSite?.let {
setOrRemoveMapMaker(
true,
TAXI_END_MAP_MAKER,
it.gcjLat,
it.gcjLon,
R.raw.end_marker
)
}
}
TaxiOrderStatusEnum.UserArriveAtStart.code,TaxiOrderStatusEnum.ArriveAtStart.code -> {
//乘客到达上车点,验证成功 ; 到达乘客上车点
setPointGreenBlue()
taskStatus.text = resources.getString(R.string.arrived_start_site)
updateOrderBottomBtn(
if (order.orderStatus == TaxiOrderStatusEnum.UserArriveAtStart.code)
@@ -395,54 +426,18 @@ class TaxiBeingTaskFragment : BaseFragment(),
)
updateOtherInfo()
order.orderStartSite?.let {
setOrRemoveMapMaker(
true,
TAXI_START_MAP_MAKER,
it.gcjLat,
it.gcjLon,
R.raw.star_marker
)
}
order.orderEndSite?.let {
setOrRemoveMapMaker(
true,
TAXI_END_MAP_MAKER,
it.gcjLat,
it.gcjLon,
R.raw.end_marker
)
}
hideNavi()
}
TaxiOrderStatusEnum.OnTheWayToStart.code -> { //前往上车地点
taskStatus.text = resources.getString(R.string.task_start_start_site)
setPointGreenBlue()
updateOrderBottomBtn(
getString(R.string.module_och_taxi_order_server_start),
Color.parseColor("#4DFFFFFF"),
Color.parseColor("#4D1D5EF3"),
false
)
order.orderStartSite?.let {
setOrRemoveMapMaker(
true,
TAXI_START_MAP_MAKER,
it.gcjLat,
it.gcjLon,
R.raw.star_marker
)
}
order.orderEndSite?.let {
setOrRemoveMapMaker(
true,
TAXI_END_MAP_MAKER,
it.gcjLat,
it.gcjLon,
R.raw.end_marker
)
}
}
}
@@ -540,21 +535,15 @@ class TaxiBeingTaskFragment : BaseFragment(),
AmapNaviToDestinationModel.getInstance(context).setOCHTaciNaviChangedCallback(this)
}
private fun showOrHideNavi() {
naviToStart.visibility = View.GONE
naviToEnd.visibility = View.GONE
AmapNaviToDestinationModel.getInstance(context).destroyAmaNavi()
mTaxiFragment?.showAmapNaviToStationFragment(false)
mTaxiFragment?.showRoutingToStationFragment(false)
}
/**
* 剩余里程和剩余时间
* @param meters m
* @param timeInSecond 秒
*/
@RequiresApi(Build.VERSION_CODES.N)
fun updateDistanceAndTime(meters: Long, timeInSecond: Long) {
// CallerLogger.INSTANCE.d(M_TAXI + TAG,"meters = "+meters+"timeInSecond ="+timeInSecond);
if (mCurrentTaskAndOrder == null) return
if (mCurrentTaskAndOrder!!.endSite == null && mCurrentUntruthTask == null) return
var dis = "0"
@@ -573,7 +562,7 @@ class TaxiBeingTaskFragment : BaseFragment(),
("<font color=\"#CAD6FF\">里程 </font>" + "<b><font color=\"#FFFFFF\">" + dis + "</font></b>" + "<font color=\"#CAD6FF\"> " + disUnit + "</font>"
+ "<font color=\"#CAD6FF\">,剩余 </font>" + "<b><font color=\"#FFFFFF\">" + min + "</font></b>" + "<font color=\"#CAD6FF\"> 分钟</font>")
taskOtherInfo.text = HtmlCompat.fromHtml(strHtml2, HtmlCompat.FROM_HTML_MODE_LEGACY)
taskOtherInfo.text = Html.fromHtml(strHtml2,Html.FROM_HTML_MODE_LEGACY)
}
private fun speekVoice200mTipsOnce() {
@@ -581,25 +570,6 @@ class TaxiBeingTaskFragment : BaseFragment(),
showNotice(resources.getString(R.string.module_och_taxi_order_arrive_end_200m_tip))
}
@RequiresApi(Build.VERSION_CODES.N)
fun onCurrentOrderRouteInfoGot(routeInfo: OrderQueryRouteInfoRespBean.Result?) { // 单位 米, 秒
if (routeInfo == null) return
d(SceneConstant.M_TAXI + TAG, "durationToEnd = " + routeInfo.durationToEnd)
var dis = "0"
val distance = routeInfo.distanceToEnd
val duration = routeInfo.durationToEnd
if (routeInfo.distanceToEnd > 0) {
dis = NumberFormatUtil.formatLong(distance.toDouble() / 1000)
}
val strHtml2 =
("<font color=\"#CAD6FF\">全程 </font>" + "<b><font color=\"#FFFFFF\">" + dis + "</font></b>" + "<font color=\"#CAD6FF\"> 公里</font>"
+ "<font color=\"#CAD6FF\">,总用时 </font>" + "<b><font color=\"#FFFFFF\">" + ceil(
duration.toDouble() / 60
).toInt() + "</font></b>" + "<font color=\"#CAD6FF\"> 分钟</font>")
taskOtherInfo.text = Html.fromHtml(strHtml2,Html.FROM_HTML_MODE_LEGACY)
}
override fun onDestroyView() {
super.onDestroyView()
AmapNaviToDestinationModel.getInstance(context).destroyAmaNavi()
@@ -646,10 +616,6 @@ class TaxiBeingTaskFragment : BaseFragment(),
closeOrderDialog.show()
}
private fun clearOrderTag() {
taskOtherInfo.text = "距离 - - 公里,用时 - - 分"
}
/**
* 是否有正在进行的订单进行UI显示
*
@@ -669,6 +635,7 @@ class TaxiBeingTaskFragment : BaseFragment(),
noOrderDataTv.text = "暂无进行中订单"
mBeingOrderLayout.visibility = View.GONE
}
} catch (e: NullPointerException) { //可能会出现订单信息已经轮询回来,但进行中页面控件还未初始化完成的情况
TaxiModel.clearCurrentOCHOrder()
}
@@ -700,33 +667,6 @@ class TaxiBeingTaskFragment : BaseFragment(),
mTaxiFragment?.startNaviToEndStation(isShow)
}
private fun onCurrentOrderCancelDone() {
//去除起终点
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.startSite != null
&& mCurrentTaskAndOrder!!.endSite != null) {
setOrRemoveMapMaker(
false,
TAXI_START_MAP_MAKER,
mCurrentTaskAndOrder!!.startSite!!.gcjLat,
mCurrentTaskAndOrder!!.startSite!!.gcjLon,
R.raw.star_marker
)
setOrRemoveMapMaker(
false,
TAXI_END_MAP_MAKER,
mCurrentTaskAndOrder!!.endSite!!.gcjLat,
mCurrentTaskAndOrder!!.endSite!!.gcjLon,
R.raw.end_marker
)
}
//提交取消订单后的回调
// ToastUtils.showShort("订单取消成功")
//更新界面
isHaveBeingOrder(false)
showOrHideNavi()
clearOrderTag()
}
/**
* 订单流转debug START
*/

View File

@@ -74,7 +74,7 @@ class TaxiReserveOrderFragment : BaseFragment() {
naviToEnd.visibility = View.GONE
orderPhoneAndNum.text = Html.fromHtml("<font color=\"#FFFFFF\"> " + order.bookingUserPhone + "</font>" +
"<font color=\"#33FFFFFF\"> | </font>" +
"<font color=\"#6473B2\"> | </font>" +
"<font color=\"#FFFFFF\">" + order.passengerSize + "" + "</font>",Html.FROM_HTML_MODE_LEGACY)

View File

@@ -205,8 +205,6 @@ abstract class BaseTaxiTabFragment<V : IView, P : Presenter<V>> : MvpFragment<V,
IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING
) {
return //远程代驾状态下不可开启自动驾驶,只能等远程代驾主动退出
} else if (!(module_mogo_och_autopilot_status.tag as Boolean)) {
ToastUtils.showShort(resources.getString(R.string.module_och_taxi_auto_disable_tip1))
} else {
startAutopilot()
}

View File

@@ -133,9 +133,6 @@ public class TaxiTrajectoryManager {
if (curTaskContrail == null) return;
long curLineId = taskAndOrder.getLineId();
final List<ContrailListRespBean.Result> orderContrails = TaxiModel.INSTANCE.getCurOrderContrails();
final OrderDetail orderDetail = taskAndOrder.getOrder();
ContrailListRespBean.Result preloadContrail = null; //预加载的轨迹
if (mAutoPilotLine == null) {
mAutoPilotLine = new AutopilotControlParameters.AutoPilotLine(curTaskContrail.getLineId(), curTaskContrail.getLineName(),
@@ -144,7 +141,7 @@ public class TaxiTrajectoryManager {
curTaskContrail.getCsvFileUrlDPQP(), curTaskContrail.getCsvFileMd5DPQP(), curTaskContrail.getTxtFileUrlDPQP(),
curTaskContrail.getTxtFileMd5DPQP(), curTaskContrail.getContrailSaveTimeDPQP());
} else {
mAutoPilotLine.setLineId(taskAndOrder.getLineId());
mAutoPilotLine.setLineId(curTaskContrail.getLineId());
mAutoPilotLine.setLineName(curTaskContrail.getLineName());
mAutoPilotLine.setTrajUrl(curTaskContrail.getCsvFileUrl());
mAutoPilotLine.setTrajMd5(curTaskContrail.getCsvFileMd5());
@@ -159,13 +156,21 @@ public class TaxiTrajectoryManager {
mAutoPilotLine.setTimestamp_dpqp(curTaskContrail.getContrailSaveTimeDPQP());
}
final OrderDetail orderDetail = taskAndOrder.getOrder();
ContrailListRespBean.Result preloadContrail = null; //预加载的轨迹
final List<ContrailListRespBean.Result> orderContrails = TaxiModel.INSTANCE.getCurOrderContrails();
if (orderDetail != null && orderContrails != null && orderContrails.size() != 0 ){
if (orderContrails.contains(curLineId)){ //预加载轨迹是curLineId索引的下一个
int index = orderContrails.indexOf(curLineId);
if (orderContrails.size()-1 >= index){
preloadContrail = orderContrails.get(index);
for (int i = 0; i< orderContrails.size() ; i++){
if (orderContrails.get(i).getLineId() == curLineId){ //预加载轨迹是curLineId索引的下一个
int index = i + 1;
if (orderContrails.size()-1 >= index){
preloadContrail = orderContrails.get(index);
}
}
}else {//预加载轨迹直接是集合第一个
}
if (preloadContrail == null){
//不包含预加载轨迹直接是集合第一个
preloadContrail = orderContrails.get(0);
}
}
@@ -179,7 +184,7 @@ public class TaxiTrajectoryManager {
preloadContrail.getCsvFileUrlDPQP(), preloadContrail.getCsvFileMd5DPQP(), preloadContrail.getTxtFileUrlDPQP(),
preloadContrail.getTxtFileMd5DPQP(), preloadContrail.getContrailSaveTimeDPQP());
} else {
mPreAutoPilotLine.setLineId(taskAndOrder.getLineId());
mPreAutoPilotLine.setLineId(preloadContrail.getLineId());
mPreAutoPilotLine.setLineName(preloadContrail.getLineName());
mPreAutoPilotLine.setTrajUrl(preloadContrail.getCsvFileUrl());
mPreAutoPilotLine.setTrajMd5(preloadContrail.getCsvFileMd5());
@@ -275,6 +280,6 @@ public class TaxiTrajectoryManager {
}
CallerLogger.INSTANCE.d(M_TAXI + TAG, "sendTrajectoryReq(): common_load = "
+ GsonUtils.toJson(mAutoPilotLine) + "pre_load" + GsonUtils.toJson(mPreAutoPilotLine));
+ GsonUtils.toJson(mAutoPilotLine) + ", pre_load" + GsonUtils.toJson(mPreAutoPilotLine));
}
}

View File

@@ -5,12 +5,21 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/dp_72">
<com.mogo.eagle.core.function.view.MapBizView
android:id="@+id/mapBizView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!--自动启动自驾闪烁上边框-->
<com.mogo.och.common.module.wigets.StartAutopilotAnimationView
android:id="@+id/startAutopilotAnimationView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.mogo.eagle.core.function.hmi.ui.setting.ToggleDebugViewTrigger
android:layout_width="@dimen/dp_400"
android:layout_height="@dimen/dp_100"
@@ -91,16 +100,6 @@
</RelativeLayout>
<!--自动启动自驾闪烁上边框-->
<com.mogo.och.common.module.wigets.StartAutopilotAnimationView
android:id="@+id/startAutopilotAnimationView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--Vip车辆标志-->
<com.mogo.eagle.core.function.hmi.ui.widget.VipIdentificationView
android:layout_width="@dimen/module_vip_width"
@@ -206,15 +205,6 @@
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--隐藏态下的 美化模式按钮-->
<com.mogo.eagle.core.function.hmi.ui.switch.DemoModeHiddenSwitch
android:layout_width="120dp"
android:layout_height="100dp"
android:layout_marginStart="40dp"
android:layout_marginBottom="200dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<FrameLayout
android:id="@+id/module_mogo_och_station_panel_container"
android:layout_width="wrap_content"

View File

@@ -66,7 +66,7 @@
android:layout_height="wrap_content"
android:text="上车:"
android:textSize="@dimen/dp_32"
app:layout_goneMarginTop="@dimen/dp_40"
app:layout_goneMarginTop="@dimen/dp_104"
android:layout_marginTop="@dimen/dp_52"
android:layout_marginStart="@dimen/dp_78"
android:textColor="@color/station_tag_color"
@@ -134,7 +134,7 @@
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/greenPoint"
android:id="@+id/startPoint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/taxi_driver_circle_green_big"
@@ -148,13 +148,13 @@
android:layout_height="0dp"
android:src="@drawable/taxi_grab_dot_line"
android:scaleType="fitXY"
app:layout_constraintTop_toBottomOf="@+id/greenPoint"
app:layout_constraintBottom_toTopOf="@+id/bluePoint"
app:layout_constraintLeft_toLeftOf="@+id/greenPoint"
app:layout_constraintRight_toRightOf="@+id/greenPoint"/>
app:layout_constraintTop_toBottomOf="@+id/startPoint"
app:layout_constraintBottom_toTopOf="@+id/endPoint"
app:layout_constraintLeft_toLeftOf="@+id/startPoint"
app:layout_constraintRight_toRightOf="@+id/startPoint"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/bluePoint"
android:id="@+id/endPoint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/taxi_driver_circle_blue_big"
@@ -162,20 +162,20 @@
app:layout_constraintBottom_toBottomOf="@+id/endStationName"
app:layout_constraintLeft_toLeftOf="@+id/taskStatus"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/taskOtherInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dp_40"
app:layout_goneMarginBottom="@dimen/dp_172"
android:textSize="@dimen/dp_30"
android:textColor="@color/station_tag_color"
android:text="距离 -- 公里, 用时 -- 分钟"
app:layout_constraintLeft_toLeftOf="@+id/taskStatus"
app:layout_constraintBottom_toTopOf="@+id/taskClickBtn" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/taskOtherInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="36dp"
android:text="距离 -- 公里, 用时 -- 分钟"
android:textColor="@color/station_tag_color"
android:textSize="@dimen/dp_30"
app:layout_constraintBottom_toTopOf="@+id/taskClickBtn"
app:layout_constraintLeft_toLeftOf="@+id/taskStatus"
app:layout_goneMarginBottom="@dimen/dp_172" />
<androidx.appcompat.widget.AppCompatTextView
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/taskClickBtn"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_132"

View File

@@ -30,7 +30,6 @@
<string name="module_och_taxi_auto_disable_tip">自动驾驶状态为0不可用</string>
<string name="module_och_taxi_auto_disable_tip1">司机端未确认可以开启自动驾驶</string>
<string name="network_error_tip">网络异常,请稍后重试</string>
<string name="request_error_tip">请求出现异常,请稍后重试</string>

View File

@@ -205,14 +205,6 @@
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--隐藏态下的 美化模式按钮-->
<com.mogo.eagle.core.function.hmi.ui.switch.DemoModeHiddenSwitch
android:layout_width="120dp"
android:layout_height="100dp"
android:layout_marginStart="40dp"
android:layout_marginBottom="200dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<FrameLayout
android:id="@+id/module_mogo_och_station_panel_container"

View File

@@ -42,6 +42,7 @@ android {
exclude 'META-INF/*'
exclude "/lib/armeabi-v7a/*.so"
pickFirst 'lib/arm64-v8a/libc++_shared.so'
pickFirst "META-INF/com.android.tools/proguard/coroutines.pro"
}
signingConfigs {

View File

@@ -23,7 +23,7 @@ public class MogoApplication extends MainMoGoApplication {
@Override
public void onCreate() {
TraceNodeCore.Companion.getTraceNodeCore().setDebugMode(true); //todo
// TraceNodeCore.Companion.getTraceNodeCore().setDebugMode(false); //todo
ARouterStartUp.init(this);
ConfigStartUp.init(this);
tryEnableStrictMode();

View File

@@ -48,7 +48,7 @@ public class V2XRoadEventScenario extends AbsV2XScenario<V2XRoadEventEntity> imp
@Override
public void init(V2XMessageEntity<V2XRoadEventEntity> v2XMessageEntity) {
try {
V2XBizTrace.Companion.onAck("v2XMessageEntity",GsonUtil.jsonFromObject(v2XMessageEntity));
V2XBizTrace.Companion.onAck("v2XMessageEntity",v2XMessageEntity);
V2XRoadEventEntity v2XRoadEventEntity = v2XMessageEntity.getContent();
if (v2XRoadEventEntity != null) {
if (!isSameScenario(v2XMessageEntity)) {

View File

@@ -28,7 +28,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
val record = Record(AppUtils.getAppVersionName(), sn, mac, type, isSupportPatch, time = System.currentTimeMillis())
UpgradeDbHelper.insertRecord(record)
try {
onUpgradeRecordLinkLog(mapOf("upgrade_start" to GsonUtils.toJson(record)))
onUpgradeRecordLinkLog(mapOf("upgrade_start" to record))
} catch (t: Throwable) {
t.printStackTrace()
}
@@ -38,7 +38,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
val record = CheckRecord(AppUtils.getAppVersionName(), START, time = System.currentTimeMillis())
UpgradeDbHelper.insertCheckRecord(record)
try {
onUpgradeRecordLinkLog(mapOf("upgrade_request_start" to GsonUtils.toJson(record)))
onUpgradeRecordLinkLog(mapOf("upgrade_request_start" to record))
} catch (t: Throwable) {
t.printStackTrace()
}
@@ -48,7 +48,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
val record = CheckRecord(AppUtils.getAppVersionName(), SUCCESS, response, time = System.currentTimeMillis())
UpgradeDbHelper.insertCheckRecord(record)
try {
onUpgradeRecordLinkLog(mapOf("upgrade_request_success" to GsonUtils.toJson(record)))
onUpgradeRecordLinkLog(mapOf("upgrade_request_success" to record))
} catch (t: Throwable) {
t.printStackTrace()
}
@@ -67,7 +67,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
val record = UpgradeRecord(fromVersionName = AppUtils.getAppVersionName(), toVersionName = newVersionName, fromMd5 = AppUtils.getAppApkMd5(), toMD5 = newMd5, type = getType(type), time = System.currentTimeMillis())
UpgradeDbHelper.insertUpgradeRecord(record)
try {
onUpgradeRecordLinkLog(mapOf("upgrade_record" to GsonUtils.toJson(record)))
onUpgradeRecordLinkLog(mapOf("upgrade_record" to record))
} catch (t: Throwable) {
t.printStackTrace()
}
@@ -77,7 +77,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
val record = DownloadRecord(versionName = AppUtils.getAppVersionName(), status = DownloadStart, downloadUrl = downloadUrl, time = System.currentTimeMillis())
UpgradeDbHelper.insertDownloadRecord(record)
try {
onUpgradeRecordLinkLog(mapOf("upgrade_download_start" to GsonUtils.toJson(record)))
onUpgradeRecordLinkLog(mapOf("upgrade_download_start" to record))
} catch (t: Throwable) {
t.printStackTrace()
}
@@ -87,7 +87,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
val record = DownloadRecord(versionName = AppUtils.getAppVersionName(), status = DownloadPause, downloadUrl = downloadUrl, time = System.currentTimeMillis())
UpgradeDbHelper.insertDownloadRecord(record)
try {
onUpgradeRecordLinkLog(mapOf("upgrade_download_pause" to GsonUtils.toJson(record)))
onUpgradeRecordLinkLog(mapOf("upgrade_download_pause" to record))
} catch (t: Throwable) {
t.printStackTrace()
}
@@ -97,7 +97,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
val record = DownloadRecord(versionName = AppUtils.getAppVersionName(), status = DownloadFailed, failReason = error, downloadUrl = downloadUrl, time = System.currentTimeMillis())
UpgradeDbHelper.insertDownloadRecord(record)
try {
onUpgradeRecordLinkLog(mapOf("upgrade_download_failed" to GsonUtils.toJson(record)))
onUpgradeRecordLinkLog(mapOf("upgrade_download_failed" to record))
} catch (t: Throwable) {
t.printStackTrace()
}
@@ -107,7 +107,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
val record = DownloadRecord(versionName = AppUtils.getAppVersionName(), status = DownloadComplete, downloadUrl = downloadUrl, time = System.currentTimeMillis())
UpgradeDbHelper.insertDownloadRecord(record)
try {
onUpgradeRecordLinkLog(mapOf("upgrade_download_success" to GsonUtils.toJson(record)))
onUpgradeRecordLinkLog(mapOf("upgrade_download_success" to record))
} catch (t: Throwable) {
t.printStackTrace()
}
@@ -117,7 +117,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
val record = InstallRecord(version = AppUtils.getAppVersionName(), status = InstallStart, time = System.currentTimeMillis())
UpgradeDbHelper.insertInstallRecord(record)
try {
onUpgradeRecordLinkLog(mapOf("upgrade_install_start" to GsonUtils.toJson(record)))
onUpgradeRecordLinkLog(mapOf("upgrade_install_start" to record))
} catch (t: Throwable) {
t.printStackTrace()
}
@@ -127,7 +127,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
val record = InstallRecord(version = AppUtils.getAppVersionName(), status = SourceMd5CheckStart, time = System.currentTimeMillis())
UpgradeDbHelper.insertInstallRecord(record)
try {
onUpgradeRecordLinkLog(mapOf("upgrade_check_source_md5_start" to GsonUtils.toJson(record)))
onUpgradeRecordLinkLog(mapOf("upgrade_check_source_md5_start" to record))
} catch (t: Throwable) {
t.printStackTrace()
}
@@ -137,7 +137,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
val record = InstallRecord(version = AppUtils.getAppVersionName(), status = SourceMd5CheckFailed, failReason = error, time = System.currentTimeMillis())
UpgradeDbHelper.insertInstallRecord(record)
try {
onUpgradeRecordLinkLog(mapOf("upgrade_check_source_md5_failed" to GsonUtils.toJson(record)))
onUpgradeRecordLinkLog(mapOf("upgrade_check_source_md5_failed" to record))
} catch (t: Throwable) {
t.printStackTrace()
}
@@ -147,7 +147,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
val record = InstallRecord(version = AppUtils.getAppVersionName(), status = SourceMd5CheckSuccess, time = System.currentTimeMillis())
UpgradeDbHelper.insertInstallRecord(record)
try {
onUpgradeRecordLinkLog(mapOf("upgrade_check_source_md5_success" to GsonUtils.toJson(record)))
onUpgradeRecordLinkLog(mapOf("upgrade_check_source_md5_success" to record))
} catch (t: Throwable) {
t.printStackTrace()
}
@@ -157,7 +157,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
val record = InstallRecord(version = AppUtils.getAppVersionName(), status = ApplyPatchStart, time = System.currentTimeMillis())
UpgradeDbHelper.insertInstallRecord(record)
try {
onUpgradeRecordLinkLog(mapOf("upgrade_apply_patch_start" to GsonUtils.toJson(record)))
onUpgradeRecordLinkLog(mapOf("upgrade_apply_patch_start" to record))
} catch (t: Throwable) {
t.printStackTrace()
}
@@ -167,7 +167,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
val record = InstallRecord(version = AppUtils.getAppVersionName(), status = ApplyPatchFailed, failReason = error, time = System.currentTimeMillis())
UpgradeDbHelper.insertInstallRecord(record)
try {
onUpgradeRecordLinkLog(mapOf("upgrade_apply_patch_failed" to GsonUtils.toJson(record)))
onUpgradeRecordLinkLog(mapOf("upgrade_apply_patch_failed" to record))
} catch (t: Throwable) {
t.printStackTrace()
}
@@ -177,7 +177,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
val record = InstallRecord(version = AppUtils.getAppVersionName(), status = ApplyPatchSuccess, time = System.currentTimeMillis())
UpgradeDbHelper.insertInstallRecord(record)
try {
onUpgradeRecordLinkLog(mapOf("upgrade_apply_patch_success" to GsonUtils.toJson(record)))
onUpgradeRecordLinkLog(mapOf("upgrade_apply_patch_success" to record))
} catch (t: Throwable) {
t.printStackTrace()
}
@@ -187,7 +187,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
val record = InstallRecord(version = AppUtils.getAppVersionName(), status = TargetMd5CheckStart, time = System.currentTimeMillis())
UpgradeDbHelper.insertInstallRecord(record)
try {
onUpgradeRecordLinkLog(mapOf("upgrade_check_target_md5_start" to GsonUtils.toJson(record)))
onUpgradeRecordLinkLog(mapOf("upgrade_check_target_md5_start" to record))
} catch (t: Throwable) {
t.printStackTrace()
}
@@ -197,7 +197,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
val record = InstallRecord(version = AppUtils.getAppVersionName(), status = TargetMd5CheckFailed, failReason = error, time = System.currentTimeMillis())
UpgradeDbHelper.insertInstallRecord(record)
try {
onUpgradeRecordLinkLog(mapOf("upgrade_check_target_md5_failed" to GsonUtils.toJson(record)))
onUpgradeRecordLinkLog(mapOf("upgrade_check_target_md5_failed" to record))
} catch (t: Throwable) {
t.printStackTrace()
}
@@ -207,7 +207,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
val record = InstallRecord(version = AppUtils.getAppVersionName(), status = TargetMd5CheckSuccess, time = System.currentTimeMillis())
UpgradeDbHelper.insertInstallRecord(record)
try {
onUpgradeRecordLinkLog(mapOf("upgrade_check_target_md5_success" to GsonUtils.toJson(record)))
onUpgradeRecordLinkLog(mapOf("upgrade_check_target_md5_success" to record))
} catch (t: Throwable) {
t.printStackTrace()
}
@@ -217,7 +217,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
val record = InstallRecord(version = AppUtils.getAppVersionName(), status = InstallFailed, code = code, failReason = error, time = System.currentTimeMillis())
UpgradeDbHelper.insertInstallRecord(record)
try {
onUpgradeRecordLinkLog(mapOf("upgrade_install_failed" to GsonUtils.toJson(record)))
onUpgradeRecordLinkLog(mapOf("upgrade_install_failed" to record))
} catch (t: Throwable) {
t.printStackTrace()
}
@@ -249,7 +249,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
itx["step_3"] = all.downloads?.sortedBy { it.status.ordinal }?.mapIndexed { index, r -> "$index" to GsonUtils.toJson(r) } ?: emptyList()
itx["step_4"] = all.installs?.let { ArrayList<InstallRecord>(it) + InstallRecord(success.versionName, InstallSuccess, 0) }?.sortedBy { it.status.ordinal }?.mapIndexed { index, r -> "$index" to GsonUtils.toJson(r) } ?: emptyList()
try {
onUpgradeRecordLinkLog(mapOf("upgrade_success" to GsonUtils.toJson(all)))
onUpgradeRecordLinkLog(mapOf("upgrade_success" to all))
} catch (t: Throwable) {
t.printStackTrace()
}
@@ -265,7 +265,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
itx["step_3"] = all.downloads?.sortedBy { it.status.ordinal }?.mapIndexed { index, r -> "$index" to GsonUtils.toJson(r) } ?: emptyList()
itx["step_4"] = all.installs?.sortedBy { it.status.ordinal }?.mapIndexed { index, r -> "$index" to GsonUtils.toJson(r) } ?: emptyList()
try {
onUpgradeRecordLinkLog(mapOf("upgrade_failed" to GsonUtils.toJson(all)))
onUpgradeRecordLinkLog(mapOf("upgrade_failed" to all))
} catch (t: Throwable) {
t.printStackTrace()
}
@@ -301,5 +301,5 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
nodeAliasCode = ChainConstant.CHAIN_CODE_UPGRADE_APP,
paramIndexes = [0]
)
private fun onUpgradeRecordLinkLog(extra: Map<String, String>) {}
private fun onUpgradeRecordLinkLog(extra: Map<String, Any>) {}
}

View File

@@ -89,6 +89,7 @@ import kotlin.collections.component3
import kotlin.collections.component4
import kotlin.collections.set
import kotlin.math.abs
import kotlin.system.exitProcess
/**
@@ -745,6 +746,9 @@ internal class DebugSettingView @JvmOverloads constructor(
CallerAutoPilotControlManager.sendIpcReboot()
ToastUtils.showLong("重启命令已发送")
}
btnAppReboot.onClick {
killApp()
}
//只在司机端设置工控机节点重启功能
if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
btnIpcReboot.visibility = View.GONE
@@ -2035,6 +2039,17 @@ internal class DebugSettingView @JvmOverloads constructor(
}
}
private fun killApp() {
Intent(Intent.ACTION_MAIN).apply {
addCategory(Intent.CATEGORY_HOME)
flags = Intent.FLAG_ACTIVITY_NEW_TASK
context.startActivity(this)
Process.killProcess(Process.myPid())
exitProcess(0)
}
}
/**
* 初始化上报
*/

View File

@@ -333,6 +333,16 @@
android:padding="@dimen/dp_20"
android:textSize="@dimen/dp_24" />
<Button
android:id="@+id/btnAppReboot"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/dp_10"
android:background="@drawable/radio_button_normal_background_right"
android:text="杀死APP"
android:padding="@dimen/dp_20"
android:textSize="@dimen/dp_24" />
<ToggleButton
android:id="@+id/tbDeviceBind"
android:layout_width="match_parent"

View File

@@ -34,7 +34,6 @@ import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager.updateLongSightLevel
import com.mogo.eagle.core.function.utils.MapBizTrace
import com.mogo.eagle.core.function.utils.MapBizTrace.Companion.getCurrentCNode
import com.mogo.eagle.core.utilcode.util.GsonUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.map.MogoMapUIController
import com.mogo.map.uicontroller.VisualAngleMode
@@ -73,30 +72,27 @@ class AiCloudIdentifyDataManager : IMoGoPlanningRottingListener,
if (it.what == H_ERROR_CLOUD) {
if (!aiCloudDataChange.get()) {
MapBizTrace.log(
CHAIN_CODE_ROMA_MAP_START, CHAIN_CODE_ROMA_CLOUD_ERROR, TAG, GsonUtils.toJson(
mutableMapOf(
"msg" to "云端 $H_DELAY_TIME 秒内无感知数据下发",
"socketStatus" to MogoStatusManager.getInstance().isSocketOnLine,
"cityCode" to CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().cityCode
)
CHAIN_CODE_ROMA_MAP_START, CHAIN_CODE_ROMA_CLOUD_ERROR, TAG,
mutableMapOf(
"msg" to "云端 $H_DELAY_TIME 秒内无感知数据下发",
"socketStatus" to MogoStatusManager.getInstance().isSocketOnLine,
"cityCode" to CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().cityCode
)
)
} else {
MapBizTrace.log(
CHAIN_CODE_ROMA_MAP_START, CHAIN_CODE_ROMA_CLOUD_PUSH, TAG, GsonUtils.toJson(
mutableMapOf(
"msg" to "延迟 $H_DELAY_TIME 秒内获取云端下发感知数据大小",
"cloudDataSize" to cloudDataSize
)
CHAIN_CODE_ROMA_MAP_START, CHAIN_CODE_ROMA_CLOUD_PUSH, TAG,
mutableMapOf(
"msg" to "延迟 $H_DELAY_TIME 秒内获取云端下发感知数据大小",
"cloudDataSize" to cloudDataSize
)
)
}
}
if (it.what == H_ERROR_MAP) {
MapBizTrace.log(
CHAIN_CODE_ROMA_MAP_START, CHAIN_CODE_ROMA_MAP_ERROR, TAG, GsonUtils.toJson(
mutableMapOf("msg" to "地图漫游模式启动失败,原因:${it.obj}")
)
CHAIN_CODE_ROMA_MAP_START, CHAIN_CODE_ROMA_MAP_ERROR, TAG,
mutableMapOf("msg" to "地图漫游模式启动失败,原因:${it.obj}")
)
if (DebugConfig.isDebug()) {
ToastUtils.showShort("进入漫游模式失败, code:${it.obj}")
@@ -153,7 +149,7 @@ class AiCloudIdentifyDataManager : IMoGoPlanningRottingListener,
"",
CHAIN_CODE_ROMA_CLICK,
TAG,
GsonUtils.toJson(mutableMapOf("trigger" to true))
mutableMapOf("trigger" to true)
)
openRoma()
} else {
@@ -186,15 +182,13 @@ class AiCloudIdentifyDataManager : IMoGoPlanningRottingListener,
// false改变父节点信息
MapBizTrace.log(
if (dataReceive) CHAIN_CODE_ROMA_CLICK else "", CHAIN_CODE_ROMA_REQUEST, TAG,
GsonUtils.toJson(
mutableMapOf(
"dataReceive" to dataReceive,
"lon" to gnss.longitude,
"lat" to gnss.latitude,
"heading" to gnss.heading,
"socketStatus" to MogoStatusManager.getInstance().isSocketOnLine,
"cityCode" to CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().cityCode
)
mutableMapOf(
"dataReceive" to dataReceive,
"lon" to gnss.longitude,
"lat" to gnss.latitude,
"heading" to gnss.heading,
"socketStatus" to MogoStatusManager.getInstance().isSocketOnLine,
"cityCode" to CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().cityCode
), !dataReceive
)
aiCloudIdentifyNetWorkModel.requestIdentifyRange(
@@ -207,12 +201,10 @@ class AiCloudIdentifyDataManager : IMoGoPlanningRottingListener,
if (dataReceive) CHAIN_CODE_ROMA_REQUEST else "",
CHAIN_CODE_ROMA_REQUEST_OK,
TAG,
GsonUtils.toJson(
mutableMapOf(
"dataResult" to dataReceive,
"startRange" to START_METRE,
"endRange" to END_METRE,
)
mutableMapOf(
"dataResult" to dataReceive,
"startRange" to START_METRE,
"endRange" to END_METRE,
), !dataReceive
)
if (dataReceive) {
@@ -226,13 +218,11 @@ class AiCloudIdentifyDataManager : IMoGoPlanningRottingListener,
if (dataReceive) CHAIN_CODE_ROMA_REQUEST else "",
CHAIN_CODE_ROMA_REQUEST_ERROR,
TAG,
GsonUtils.toJson(
mutableMapOf(
"errorMsg" to errorMsg,
"dataResult" to dataReceive,
"startRange" to START_METRE,
"endRange" to END_METRE
)
mutableMapOf(
"errorMsg" to errorMsg,
"dataResult" to dataReceive,
"startRange" to START_METRE,
"endRange" to END_METRE
), true
)
updateLongSightLevel(false)
@@ -252,7 +242,7 @@ class AiCloudIdentifyDataManager : IMoGoPlanningRottingListener,
CHAIN_CODE_ROMA_REQUEST_OK,
CHAIN_CODE_ROMA_MAP_START,
TAG,
GsonUtils.toJson(mutableMapOf("romaStart" to "地图开始漫游"))
mutableMapOf("romaStart" to "地图开始漫游")
)
showAiCloud.set(true)
FunctionBuildConfig.isDrawIdentifyData = false
@@ -270,9 +260,8 @@ class AiCloudIdentifyDataManager : IMoGoPlanningRottingListener,
}
2 -> { // 地图自动漫游结束重置状态调用close通知服务端
MapBizTrace.log(
CHAIN_CODE_ROMA_MAP_START, CHAIN_CODE_ROMA_MAP_END, TAG, GsonUtils.toJson(
mutableMapOf("romaEnd" to "地图结束回调,状态:$status")
), true
CHAIN_CODE_ROMA_MAP_START, CHAIN_CODE_ROMA_MAP_END, TAG,
mutableMapOf("romaEnd" to "地图结束回调,状态:$status"), true
)
reset()
}
@@ -280,11 +269,7 @@ class AiCloudIdentifyDataManager : IMoGoPlanningRottingListener,
MapBizTrace.log(
CHAIN_CODE_ROMA_CLOSE_CLICK,
CHAIN_CODE_ROMA_MAP_CHANGE_END,
TAG,
GsonUtils.toJson(
mutableMapOf("romaEnd" to "地图结束回调,状态:$status")
),
true
TAG, mutableMapOf("romaEnd" to "地图结束回调,状态:$status"), true
)
reset(false)
}

View File

@@ -119,7 +119,7 @@ class OverMapView @JvmOverloads constructor(
private val markerOptionsList by lazy {
ArrayList<MarkerOptions>()
}
private var isDebug = true
private var isDebug = false
// 绘制轨迹线的集合
private val textureList: MutableList<BitmapDescriptor?> = ArrayList()

View File

@@ -371,12 +371,12 @@ class HttpDnsStartUp : AndroidStartup<Boolean>() {
nodeAliasCode = CHAIN_CODE_HTTP_DNS_ERROR_REASON,
paramIndexes = [0]
)
private fun logError(pr: String) {
private fun logError(pr: Map<String,Any>) {
CallerLogger.e("$M_MAIN$TAG", "pr:$pr")
}
// 归一处理
private fun getPrReason(msg: String): String {
private fun getPrReason(msg: String): Map<String,Any> {
val map = hashMapOf<String, Any>()
map["lat"] =
if (CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().latitude != 0.0)
@@ -387,7 +387,7 @@ class HttpDnsStartUp : AndroidStartup<Boolean>() {
CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().longitude else
CallerMapUIServiceManager.getGDLocationServer(context!!)!!.lastLon
map["reason"] = msg
return GsonUtils.toJson(map)
return map
}
@ChainLog(

View File

@@ -56,14 +56,9 @@ bytex.forbidUseLenientMutationDuringGetArtifact=true
bytex.verifyProguardConfigurationChanged=false
bytex.ASM_API=ASM7
HOOK_LOG_VERSION=1.6.1
SERVICE_CHAIN_VERSION=1.1.0
BIZCONFIG_VERSION=1.3.2
SERVICE_BIZ_VERSION=1.2.4
################ 外部依赖引用 ################
# loglib
LOGLIB_VERSION=1.8.1
LOGLIB_VERSION=1.9.0
######## MogoAiCloudSDK Version ########
# 网络请求LOGLIB_VERSION
MOGO_NETWORK_VERSION=1.4.7.12
@@ -93,8 +88,8 @@ WEBSOCKET_VERSION=1.1.7
applicationId=com.mogo.launcer
applicationName=IntelligentPilot
# RoboBus司机端2.5.1RoboTaxi司机端2.5.1RoboTaxi乘客端1.0.0
versionCode=3030000
versionName=3.3.0
versionCode=6000000
versionName=6.0.0
################# 新架构模块Maven版本管理 #################
MOGO_CORE_FUNCTION_HMI_VERSION=0.0.58.10

View File

@@ -1,8 +1,7 @@
ext {
gradle_version = '4.0.0'
gradle_version = '3.5.3'
kotlin_version = '1.5.30'
plugin_version = '10.0.0_mogo'
hook_log_plugin_version = '1.7.2'
service_chain_version = '5.2.10'
service_chain_version = '5.3.5'
lancetx_plugin_version = '10.0.4_mogo'
}