Merge branch 'dev_robotaxi-d_230809_6.0.0' of gitlab.zhidaoauto.com:SCA/L4HA/AndroidApp/MoGoEagleEye into dev_robotaxi-d_230809_6.0.0
This commit is contained in:
@@ -1,22 +0,0 @@
|
||||
package com.mogo.och.bus.passenger;
|
||||
|
||||
import androidx.annotation.IdRes;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
|
||||
import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider;
|
||||
|
||||
/**
|
||||
* 网约车抽象接口
|
||||
*
|
||||
* Created on 2022/3/29
|
||||
*/
|
||||
interface IMogoOCH extends IMoGoFunctionProvider {
|
||||
|
||||
/**
|
||||
* 初始化网约车容器
|
||||
*
|
||||
* @param activity
|
||||
* @param containerId 容器ID
|
||||
*/
|
||||
void createCoverage(FragmentActivity activity, @IdRes int containerId);
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import com.alibaba.android.arouter.facade.annotation.Route
|
||||
import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager.getMapUIController
|
||||
import com.mogo.eagle.core.function.call.setting.CallerMoGoUiSettingManager.stepInDayMode
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
|
||||
@@ -18,11 +19,10 @@ import com.mogo.och.bus.passenger.ui.MainFragment
|
||||
* Created on 2022/3/29
|
||||
*/
|
||||
@Route(path = CharterPassengerConst.PATH)
|
||||
class MogoOCHBusPassenger : IMogoOCH {
|
||||
class MogoOCHBusPassenger : IMoGoFunctionProvider {
|
||||
private var mActivity: FragmentActivity? = null
|
||||
private var mContainerId = 0
|
||||
private var mPassengerFragment: MainFragment? = null
|
||||
override fun createCoverage(activity: FragmentActivity, containerId: Int) {}
|
||||
override fun createCoverage(activity: FragmentActivity?, containerId: Int?): Fragment? {
|
||||
mActivity = activity
|
||||
mContainerId = containerId!!
|
||||
@@ -42,15 +42,6 @@ class MogoOCHBusPassenger : IMogoOCH {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 进入鹰眼模式,设置手势缩放地图失效
|
||||
*/
|
||||
private fun stepIntoVrMode() {
|
||||
d(SceneConstant.M_TAXI_P + TAG, "进入vr模式")
|
||||
getMapUIController()?.stepInVrMode(true) // 白天模式
|
||||
stepInDayMode() //白天模式 状态栏字体颜色变黑
|
||||
}
|
||||
|
||||
private fun showFragment() {
|
||||
val supportFragmentManager: FragmentManager? = mActivity?.supportFragmentManager
|
||||
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
package com.mogo.och.bus.passenger.bean.event
|
||||
|
||||
data class DebugView(val type: String)
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.mogo.och.bus.passenger.callback
|
||||
|
||||
interface IClearViewCallback {
|
||||
fun goneAllView()
|
||||
}
|
||||
@@ -19,7 +19,6 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.updateAutopilotControlParameters
|
||||
import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager
|
||||
import com.mogo.eagle.core.network.utils.GsonUtil
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
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
|
||||
@@ -187,7 +186,7 @@ object CharterPassengerModel {
|
||||
// 3、车控页面、
|
||||
// 4、打开选择线路页面
|
||||
BizLoopManager.removeLoopFunction(TAGLOGIN)
|
||||
CallerLogger.d(M_BUS_P + TAG, "结束登录状态轮询")
|
||||
d(M_BUS_P + TAG, "结束登录状态轮询")
|
||||
// 启动订单轮
|
||||
startOrderLoop()
|
||||
} else {
|
||||
@@ -195,7 +194,7 @@ object CharterPassengerModel {
|
||||
TAGLOGIN,
|
||||
LoopInfo(3, ::queryLoginStatus)
|
||||
)
|
||||
CallerLogger.d(M_BUS_P + TAG, "启动登录状态轮询")
|
||||
d(M_BUS_P + TAG, "启动登录状态轮询")
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -225,7 +224,7 @@ object CharterPassengerModel {
|
||||
}
|
||||
|
||||
override fun onAutopilotArriveAtStation(arrivalNotification: MessagePad.ArrivalNotification?) {
|
||||
CallerLogger.d(M_BUS_P + TAG, "底盘给到站信息")
|
||||
d(M_BUS_P + TAG, "底盘给到站信息")
|
||||
arriveDest()
|
||||
}
|
||||
}
|
||||
@@ -323,7 +322,7 @@ object CharterPassengerModel {
|
||||
|
||||
//监听网络变化,避免启动机器时无网导致无法更新订单信息
|
||||
private val mNetWorkIntentListener = IMogoIntentListener { intentStr, intent ->
|
||||
CallerLogger.d(M_BUS_P + TAG, "onIntentReceived = %s", intentStr)
|
||||
d(M_BUS_P + TAG, "onIntentReceived = %s", intentStr)
|
||||
if (ConnectivityManager.CONNECTIVITY_ACTION == intentStr) {
|
||||
if (NetworkUtils.isConnected(mContext)) {
|
||||
queryLoginStatus()
|
||||
@@ -341,7 +340,7 @@ object CharterPassengerModel {
|
||||
TAGORDER,
|
||||
LoopInfo(3, ::queryOrder)
|
||||
)
|
||||
CallerLogger.d(M_BUS_P + TAG, "启动订单轮询")
|
||||
d(M_BUS_P + TAG, "启动订单轮询")
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -349,7 +348,7 @@ object CharterPassengerModel {
|
||||
*/
|
||||
private fun endOrderLoop() {
|
||||
BizLoopManager.removeLoopFunction(TAGORDER)
|
||||
CallerLogger.d(M_BUS_P + TAG, "结束订单轮询")
|
||||
d(M_BUS_P + TAG, "结束订单轮询")
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -359,7 +358,7 @@ object CharterPassengerModel {
|
||||
BusPassengerServiceManager.queryOrderInfo(
|
||||
mContext, object : OchCommonServiceCallback<OrderInfoResponse> {
|
||||
override fun onSuccess(data: OrderInfoResponse?) {
|
||||
CallerLogger.d(M_BUS_P + TAG, "订单信息:$data")
|
||||
d(M_BUS_P + TAG, "订单信息:$data")
|
||||
if (data?.data == null) {
|
||||
if (orderInfo != null) {
|
||||
// 启动车辆服务状态
|
||||
@@ -386,7 +385,7 @@ object CharterPassengerModel {
|
||||
//设置车模
|
||||
if (this.orderInfo?.productType != orderData.productType) {
|
||||
this.carTypeChageListener?.setCarChangeListener(orderData.productType)
|
||||
CallerLogger.d(M_BUS_P + TAG, "设置车模")
|
||||
d(M_BUS_P + TAG, "设置车模")
|
||||
}
|
||||
if (this.orderInfo?.siteId != orderData.siteId) {
|
||||
val coordinateConverterWgsToGcj =
|
||||
@@ -440,11 +439,11 @@ object CharterPassengerModel {
|
||||
)
|
||||
// 小于15m到站
|
||||
if (calculateLineDistance < CharterPassengerConst.ARRIVE_AT_START_STATION_DISTANCE && calculateLineDistance > 0) {
|
||||
CallerLogger.d(M_BUS_P + TAG, "小于15米到站1")
|
||||
d(M_BUS_P + TAG, "小于15米到站1")
|
||||
arriveDest()
|
||||
}
|
||||
if (calculateLineDistance < CharterPassengerConst.ARRIVE_SOON_AT_START_STATION_DISTANCE && calculateLineDistance > 0) {
|
||||
CallerLogger.d(M_BUS_P + TAG, "小于100米到站")
|
||||
d(M_BUS_P + TAG, "小于100米到站")
|
||||
arriveDestSoon()
|
||||
}
|
||||
}
|
||||
@@ -490,7 +489,7 @@ object CharterPassengerModel {
|
||||
*/
|
||||
private fun startCarStatusLoop() {
|
||||
BizLoopManager.setLoopFunction(TAGCARSTATUS, LoopInfo(3, ::queryCarStatus))
|
||||
CallerLogger.d(M_BUS_P + TAG, "启动车态轮询")
|
||||
d(M_BUS_P + TAG, "启动车态轮询")
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -498,7 +497,7 @@ object CharterPassengerModel {
|
||||
*/
|
||||
private fun endCarStatusLoop() {
|
||||
BizLoopManager.removeLoopFunction(TAGCARSTATUS)
|
||||
CallerLogger.d(M_BUS_P + TAG, "结束车态轮询")
|
||||
d(M_BUS_P + TAG, "结束车态轮询")
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -552,7 +551,7 @@ object CharterPassengerModel {
|
||||
TAGCALIBRATION,
|
||||
LoopInfo(120, ::queryBusinessTime, immediately = true)
|
||||
)
|
||||
CallerLogger.d(M_BUS_P + TAG, "启动时间校准轮询")
|
||||
d(M_BUS_P + TAG, "启动时间校准轮询")
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -560,7 +559,7 @@ object CharterPassengerModel {
|
||||
*/
|
||||
private fun endCalibrationLoop() {
|
||||
BizLoopManager.removeLoopFunction(TAGCALIBRATION)
|
||||
CallerLogger.d(M_BUS_P + TAG, "结束时间校准轮询")
|
||||
d(M_BUS_P + TAG, "结束时间校准轮询")
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -597,7 +596,7 @@ object CharterPassengerModel {
|
||||
.getString(R.string.m1_end_order_5min), 2
|
||||
)
|
||||
VoiceManager.surplus5min(VoiceFocusManager.getVoiceCmdCallBack())
|
||||
CallerLogger.d(M_BUS_P + TAG, "倒计时5分钟${it.orderNo}")
|
||||
d(M_BUS_P + TAG, "倒计时5分钟${it.orderNo}")
|
||||
SharedPrefs.getInstance(mContext)
|
||||
.putBoolean("${it.orderNo}$min5Speak", true)
|
||||
}
|
||||
@@ -615,7 +614,7 @@ object CharterPassengerModel {
|
||||
} else {
|
||||
invokeOrderLeftTimeListeners(millisUntilFinished)
|
||||
}
|
||||
CallerLogger.d(M_BUS_P + TAG, "订单倒计时${millisUntilFinished}")
|
||||
d(M_BUS_P + TAG, "订单倒计时${millisUntilFinished}")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -636,8 +635,8 @@ object CharterPassengerModel {
|
||||
//设置全局轨迹信息
|
||||
locusInfo = data.data
|
||||
|
||||
CallerLogger.d(M_BUS_P + TAG, "查询自动驾驶轨迹信息")
|
||||
CallerLogger.d(
|
||||
d(M_BUS_P + TAG, "查询自动驾驶轨迹信息")
|
||||
d(
|
||||
M_BUS_P + TAG, GsonUtil.jsonFromObject(
|
||||
locusInfo
|
||||
)
|
||||
@@ -657,7 +656,7 @@ object CharterPassengerModel {
|
||||
*/
|
||||
private fun startCalculateDistanceLoop() {
|
||||
BizLoopManager.setLoopFunction(TAGDISTANCE, LoopInfo(1, ::calculateDistance))
|
||||
CallerLogger.d(M_BUS_P + TAG, "开始路距计算")
|
||||
d(M_BUS_P + TAG, "开始路距计算")
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -668,7 +667,7 @@ object CharterPassengerModel {
|
||||
*/
|
||||
private fun endCalculateDistanceLoop() {
|
||||
BizLoopManager.removeLoopFunction(TAGDISTANCE)
|
||||
CallerLogger.d(M_BUS_P + TAG, "结束路距计算")
|
||||
d(M_BUS_P + TAG, "结束路距计算")
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -678,17 +677,17 @@ object CharterPassengerModel {
|
||||
//mLocation gcj坐标
|
||||
mLocationGCJ02?.let {
|
||||
orderInfo?.let { order ->
|
||||
CallerLogger.d(M_BUS_P + "calculateDistance", "订单信息:$order")
|
||||
d(M_BUS_P + "calculateDistance", "订单信息:$order")
|
||||
if (order.siteId == null || order.siteId == 0L ||
|
||||
order.wgs84Lat == null || order.wgs84Lat == 0.0 ||
|
||||
order.wgs84Lon == null || order.wgs84Lon == 0.0
|
||||
) {
|
||||
CallerLogger.d(M_BUS_P + "calculateDistance", "站点信息未获得")
|
||||
d(M_BUS_P + "calculateDistance", "站点信息未获得")
|
||||
return
|
||||
}
|
||||
newCheckedSite?.let {
|
||||
if (it.siteId != order.siteId) {
|
||||
CallerLogger.d(M_BUS_P + "calculateDistance", "站点和已选不吻合")
|
||||
d(M_BUS_P + "calculateDistance", "站点和已选不吻合")
|
||||
return
|
||||
}
|
||||
}
|
||||
@@ -710,11 +709,11 @@ object CharterPassengerModel {
|
||||
mogoLocation.longitude,
|
||||
mogoLocation.latitude
|
||||
)
|
||||
CallerLogger.d(M_BUS_P + "calculateDistance", "两点距离和站点的直线距离:${lastSumLength}")
|
||||
d(M_BUS_P + "calculateDistance", "两点距离和站点的直线距离:${lastSumLength}")
|
||||
if (lastSumLength > 100) {
|
||||
if (mRoutePoints == null || mRoutePoints?.size == 0) {
|
||||
//ToastCharterUtils.showLong("缺少轨迹数据暂停计算")
|
||||
CallerLogger.d(
|
||||
d(
|
||||
M_BUS_P + "calculateDistance两点距离",
|
||||
"缺少轨迹数据"
|
||||
)
|
||||
@@ -727,11 +726,11 @@ object CharterPassengerModel {
|
||||
it,
|
||||
mogoLocation
|
||||
)
|
||||
CallerLogger.d(
|
||||
d(
|
||||
M_BUS_P + TAG,
|
||||
"使用轨迹轨迹:${mRoutePoints?.size}--第一个点${mRoutePoints!![0]}--最后一个点:${mRoutePoints!!.last()}"
|
||||
)
|
||||
CallerLogger.d(M_BUS_P + "calculateDistance", "轨迹计算的距离$templastSumLength")
|
||||
d(M_BUS_P + "calculateDistance", "轨迹计算的距离$templastSumLength")
|
||||
if (templastSumLength > 100) {
|
||||
lastSumLength = templastSumLength
|
||||
}
|
||||
@@ -740,16 +739,16 @@ object CharterPassengerModel {
|
||||
val lastTime: Double =
|
||||
lastSumLength / CharterPassengerConst.Charter_AVERAGE_SPEED * 3.6 //秒
|
||||
|
||||
CallerLogger.d(
|
||||
d(
|
||||
M_BUS_P + "calculateDistance",
|
||||
"最终信息:lastSumLength: ${lastSumLength}lastTime : $lastTime thread = ${Thread.currentThread().name}"
|
||||
)
|
||||
if (lastSumLength < CharterPassengerConst.ARRIVE_SOON_AT_START_STATION_DISTANCE && lastSumLength > 0) {
|
||||
CallerLogger.d(M_BUS_P + TAG, "小于100米到站2")
|
||||
d(M_BUS_P + TAG, "小于100米到站2")
|
||||
arriveDestSoon()
|
||||
}
|
||||
if (lastSumLength < CharterPassengerConst.ARRIVE_AT_START_STATION_DISTANCE && lastSumLength > 0) {
|
||||
CallerLogger.d(M_BUS_P + TAG, "小于15米到站2")
|
||||
d(M_BUS_P + TAG, "小于15米到站2")
|
||||
arriveDest()
|
||||
return
|
||||
}
|
||||
@@ -766,7 +765,7 @@ object CharterPassengerModel {
|
||||
|
||||
private fun setOrderStatus(orderStatus: OrderStatusEnum) {
|
||||
if (this.orderStatus != orderStatus) {
|
||||
CallerLogger.d(M_BUS_P + TAG, "${this.orderInfo?.orderNo}新的状态:$orderStatus")
|
||||
d(M_BUS_P + TAG, "${this.orderInfo?.orderNo}新的状态:$orderStatus")
|
||||
this.orderStatus = orderStatus
|
||||
for (callback in orderStatusChangeListeners.values) {
|
||||
callback.onStatusChange(this.orderStatus)
|
||||
@@ -825,7 +824,7 @@ object CharterPassengerModel {
|
||||
}
|
||||
}
|
||||
for (mutableEntry in distanceMap) {
|
||||
CallerLogger.d(M_BUS_P + TAG, "距离:${mutableEntry.key}-----第几个站点${mutableEntry.value}")
|
||||
d(M_BUS_P + TAG, "距离:${mutableEntry.key}-----第几个站点${mutableEntry.value}")
|
||||
}
|
||||
var middle = -1
|
||||
if (distanceMap.size >= 2) {
|
||||
@@ -905,7 +904,7 @@ object CharterPassengerModel {
|
||||
if (order != null && lineId != null && siteId != null) {
|
||||
val requestSuccessSign = "${siteId}$endKey"
|
||||
val requestIngSign = "${siteId}$endKeyRequestIng"//正在请求中
|
||||
CallerLogger.d(
|
||||
d(
|
||||
M_BUS_P + BaseDPMsg.TAG,
|
||||
"requestSuccessSign${isSuccess(requestSuccessSign)}---requestIngSign${
|
||||
isSuccess(
|
||||
@@ -983,7 +982,7 @@ object CharterPassengerModel {
|
||||
OchCommonConst.BUSINESS_STRING,
|
||||
GsonUtils.toJson(msg).toByteArray()
|
||||
)
|
||||
CallerLogger.d(M_BUS_P + BaseDPMsg.TAG, "到站发送数据${msg}")
|
||||
d(M_BUS_P + BaseDPMsg.TAG, "到站发送数据${msg}")
|
||||
}
|
||||
|
||||
RxUtils.disposeSubscribe(switchLine5minWait)
|
||||
@@ -1031,7 +1030,7 @@ object CharterPassengerModel {
|
||||
fun cleanbroadcastListInfo(checkSite: SiteInfoResponse.SiteInfo?) {
|
||||
RxUtils.disposeSubscribe(switchLine5minWait)
|
||||
switchLine5minWait = RxUtils.createSubscribe(5 * 60 * 1000) {
|
||||
CallerLogger.d(M_BUS_P + BaseDPMsg.TAG, "5分钟倒计时可以选择线路了")
|
||||
d(M_BUS_P + BaseDPMsg.TAG, "5分钟倒计时可以选择线路了")
|
||||
}
|
||||
newCheckedSite = checkSite
|
||||
cleanRoutePoints()
|
||||
@@ -1088,7 +1087,7 @@ object CharterPassengerModel {
|
||||
val parameters = initAutopilotControlParameters()
|
||||
if (null == parameters) {
|
||||
ToastCharterUtils.showShort("请选择站点")
|
||||
CallerLogger.e(
|
||||
e(
|
||||
SceneConstant.M_BUS + TAG,
|
||||
"行程日志-AutopilotControlParameters is empty."
|
||||
)
|
||||
@@ -1097,7 +1096,7 @@ object CharterPassengerModel {
|
||||
ToastCharterUtils.showShort("启动自动驾驶中")
|
||||
cleanRoutePoints()
|
||||
startAutoPilot(parameters)
|
||||
CallerLogger.d(
|
||||
d(
|
||||
SceneConstant.M_BUS + TAG,
|
||||
"行程日志-开启自动驾驶====" + GsonUtil.jsonFromObject(parameters)
|
||||
+ " startLatLon=" + parameters.startName + ",endLatLon=" + parameters.endName +
|
||||
@@ -1110,7 +1109,7 @@ object CharterPassengerModel {
|
||||
|
||||
private fun initAutopilotControlParameters(): AutopilotControlParameters? {
|
||||
if (!checkCurrentOCHOrder()) {
|
||||
CallerLogger.e(M_BUS_P + TAG, "no order or order is empty.")
|
||||
e(M_BUS_P + TAG, "no order or order is empty.")
|
||||
return null
|
||||
}
|
||||
mLocationGCJ02?.let {
|
||||
|
||||
@@ -22,7 +22,7 @@ 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.dialogfragment.fragment.M1OrderLineFragment
|
||||
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
|
||||
|
||||
@@ -5,7 +5,7 @@ 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.dialogfragment.fragment.M1SoftFragment
|
||||
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
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.mogo.och.bus.passenger.presenter
|
||||
|
||||
import com.mogo.och.bus.passenger.ui.dialogfragment.fragment.M1VideoFragment
|
||||
import com.mogo.och.bus.passenger.ui.video.M1VideoFragment
|
||||
|
||||
class BusPassengerFunctionVideoPresenter(view: M1VideoFragment?) :
|
||||
BusBasePassengerFunctionDevicePresenter<M1VideoFragment?>(view)
|
||||
@@ -7,7 +7,6 @@ import android.view.View
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
import com.amap.api.maps.model.LatLng
|
||||
import com.mogo.commons.voice.AIAssist
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
|
||||
@@ -23,8 +22,6 @@ import com.mogo.och.bus.passenger.bean.response.LineInfoResponse
|
||||
import com.mogo.och.bus.passenger.bean.response.OrderInfoResponse
|
||||
import com.mogo.och.bus.passenger.bean.response.SiteInfoResponse
|
||||
import com.mogo.och.bus.passenger.bean.response.TrajectoriesResponse
|
||||
import com.mogo.och.bus.passenger.callback.IBusPassengerControllerStatusCallback
|
||||
import com.mogo.och.bus.passenger.callback.IDistanceCallback
|
||||
import com.mogo.och.bus.passenger.callback.IOrderChangeCallback
|
||||
import com.mogo.och.bus.passenger.model.CharterPassengerModel
|
||||
import com.mogo.och.bus.passenger.model.IOrderStatusChangeListener
|
||||
@@ -32,23 +29,20 @@ import com.mogo.och.bus.passenger.model.OrderStatusEnum
|
||||
import com.mogo.och.bus.passenger.receive.DriverMessage
|
||||
import com.mogo.och.bus.passenger.ui.MainFragment
|
||||
import com.mogo.och.bus.passenger.utils.ToastCharterUtils
|
||||
import com.mogo.och.bus.passenger.view.MakerWithSiteName
|
||||
import com.mogo.och.bus.passenger.view.MakerWithSiteNamewithCheck
|
||||
import com.mogo.och.bus.passenger.ui.overmapview.MakerWithSiteName
|
||||
import com.mogo.och.bus.passenger.ui.overmapview.MakerWithSiteNamewithCheck
|
||||
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
|
||||
import com.mogo.och.common.module.manager.StopSideStatusManager
|
||||
import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorCallback
|
||||
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil
|
||||
import com.mogo.och.common.module.utils.DateTimeUtil
|
||||
import com.mogo.och.common.module.utils.NumberFormatUtil
|
||||
import com.mogo.och.common.module.voice.VoiceNotice
|
||||
import me.jessyan.autosize.utils.AutoSizeUtils
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
import kotlin.math.ceil
|
||||
|
||||
class BusPassengerPresenter(view: MainFragment?) :
|
||||
BusBasePassengerFunctionDevicePresenter<MainFragment?>(view),
|
||||
IDistanceCallback, IOrderChangeCallback, IOrderStatusChangeListener,
|
||||
StopSideStatusManager.OCHPlanningActionsCallback, LightAirconditionDoorCallback, IBusPassengerControllerStatusCallback {
|
||||
IOrderChangeCallback, IOrderStatusChangeListener,
|
||||
StopSideStatusManager.OCHPlanningActionsCallback, LightAirconditionDoorCallback {
|
||||
|
||||
private val lindIdAndView = ConcurrentHashMap<Long, MakerWithSiteNamewithCheck?>()
|
||||
|
||||
@@ -57,12 +51,11 @@ class BusPassengerPresenter(view: MainFragment?) :
|
||||
const val KEY4SHOWNOVICEGUIDANCE = "showNoviceGuidanceOrderNor"
|
||||
|
||||
}
|
||||
|
||||
override fun onCreate(owner: LifecycleOwner) {
|
||||
super.onCreate(owner)
|
||||
CharterPassengerModel.init()
|
||||
// 定位监听
|
||||
CharterPassengerModel.setStationDistanceListener(TAG, this)
|
||||
CharterPassengerModel.setControllerStatusCallback(TAG,this)
|
||||
CharterPassengerModel.setCarTypeChangeListener(this)
|
||||
CharterPassengerModel.setStatusChangeListener(TAG, this)
|
||||
CallerTelematicListenerManager.addListener(TAG, DriverMessage)
|
||||
@@ -73,71 +66,25 @@ class BusPassengerPresenter(view: MainFragment?) :
|
||||
|
||||
override fun onDestroy(owner: LifecycleOwner) {
|
||||
super.onDestroy(owner)
|
||||
CharterPassengerModel.setStationDistanceListener(TAG, null)
|
||||
CharterPassengerModel.setCarTypeChangeListener(null)
|
||||
CallerTelematicListenerManager.removeListener(TAG)
|
||||
StopSideStatusManager.removeListener(TAG)
|
||||
}
|
||||
|
||||
override fun onCarLocationChanged(location: MogoLocation?) {
|
||||
location?.let {
|
||||
setSpeed(it.gnssSpeed)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setSpeed(speed: Float) {
|
||||
UiThreadHandler.post {
|
||||
val speedKM = (Math.abs(speed) * 3.6f).toInt()
|
||||
mView?.setSpeed(speedKM.toString())
|
||||
}
|
||||
}
|
||||
|
||||
private fun setDistanceAndTime(
|
||||
distance: String,
|
||||
distanceUnit: String,
|
||||
leftTime: String,
|
||||
arriveTime: String
|
||||
) {
|
||||
UiThreadHandler.post {
|
||||
mView?.setDistanceAndTime(distance, distanceUnit, leftTime, arriveTime)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算剩余距离和剩余时间
|
||||
*/
|
||||
override fun setDistancecAndTime(meters: Long, timeInSecond: Long) {
|
||||
if (meters < 0 && timeInSecond < 0) {
|
||||
setDistanceAndTime("--", context.getString(R.string.m1_distance_unit_km), "--", "--")
|
||||
return
|
||||
}
|
||||
var dis: String? = "0"
|
||||
var disUnit = "KM"
|
||||
if (meters > 0) {
|
||||
if (meters / 1000 < 1) {
|
||||
disUnit = context.getString(R.string.m1_distance_unit_m)
|
||||
dis = Math.round(meters.toFloat()).toString()
|
||||
} else {
|
||||
disUnit = context.getString(R.string.m1_distance_unit_km)
|
||||
dis = NumberFormatUtil.formatLong(meters.toDouble() / 1000)
|
||||
}
|
||||
}
|
||||
val time = ceil(timeInSecond / 60f).toInt()
|
||||
val arriveTime = DateTimeUtil.getAfterSecondTime(timeInSecond.toInt())
|
||||
setDistanceAndTime(dis.toString(), disUnit, time.toString(), arriveTime)
|
||||
}
|
||||
|
||||
override fun setCarChangeListener(productType: Int?) {
|
||||
when (productType) {
|
||||
OrderInfoResponse.M1_LOVE -> {
|
||||
mView?.setCarModle(R.raw.aiqinghao)
|
||||
}
|
||||
|
||||
OrderInfoResponse.M1_FAMILY -> {
|
||||
mView?.setCarModle(R.raw.jiatinghao)
|
||||
}
|
||||
|
||||
OrderInfoResponse.M1_FRIENDLY -> {
|
||||
mView?.setCarModle(R.raw.pengyouhao)
|
||||
}
|
||||
|
||||
else -> {
|
||||
mView?.setCarModle(R.raw.m1)
|
||||
}
|
||||
@@ -157,33 +104,36 @@ class BusPassengerPresenter(view: MainFragment?) :
|
||||
clearShowNoviceGuidanceSharedPrefs()
|
||||
}
|
||||
}
|
||||
|
||||
OrderStatusEnum.OrderNoLine -> {
|
||||
CallerOrderListenerManager.invokeOrderRemoval();
|
||||
showNoviceGuidance()
|
||||
}
|
||||
|
||||
OrderStatusEnum.OrdersWithLine -> {}
|
||||
OrderStatusEnum.NoOrderUse -> {
|
||||
when (CallerAutoPilotStatusListenerManager.getState()) {
|
||||
IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE -> {// 不可自动驾驶
|
||||
ToastCharterUtils.showShort("设备未就绪请稍等,请安全员主动停止车辆")
|
||||
}
|
||||
|
||||
IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE -> {//
|
||||
ToastCharterUtils.showShort("因车辆正在人工驾驶中无法靠边停车,请安全员主动停止车辆")
|
||||
}
|
||||
|
||||
IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING -> {
|
||||
// 靠边停车 订单结束 靠边停车
|
||||
CallerAutoPilotControlManager.sendPlanningCmd(1)
|
||||
}
|
||||
|
||||
IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING -> {
|
||||
ToastCharterUtils.showShort("因车辆正在平行驾驶中无法靠边停车,请安全员主动停止车辆")
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
UiThreadHandler.post {
|
||||
UiThreadHandler.post {
|
||||
mView?.showOpenAndCloseDoor()
|
||||
setDistancecAndTime(-1, -1)
|
||||
}
|
||||
mView?.showOpenAndCloseDoor()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -196,21 +146,21 @@ class BusPassengerPresenter(view: MainFragment?) :
|
||||
private fun showNoviceGuidance() {
|
||||
CallerLogger.d(M_BUS_P + TAG, "showNoviceGuidance")
|
||||
val currentOrderInfo = CharterPassengerModel.getCurrentOrderInfo()
|
||||
currentOrderInfo?.orderNo?.let {order->
|
||||
currentOrderInfo?.orderNo?.let { order ->
|
||||
val stringSet = SharedPrefs.getInstance(context).getStringSet(KEY4SHOWNOVICEGUIDANCE)
|
||||
|
||||
if(stringSet==null){
|
||||
if (stringSet == null) {
|
||||
|
||||
}else{
|
||||
} else {
|
||||
if (stringSet.contains(order)) {
|
||||
return
|
||||
}else{
|
||||
} else {
|
||||
|
||||
}
|
||||
}
|
||||
UiThreadHandler.post({
|
||||
mView?.showNoviceGuidanceFragment()
|
||||
},UiThreadHandler.MODE.QUEUE)
|
||||
}, UiThreadHandler.MODE.QUEUE)
|
||||
|
||||
}
|
||||
}
|
||||
@@ -236,15 +186,18 @@ class BusPassengerPresenter(view: MainFragment?) :
|
||||
StopSideStatusManager.Status.NOSTART -> {
|
||||
ToastCharterUtils.showShort(errorInfo)
|
||||
}
|
||||
|
||||
StopSideStatusManager.Status.START -> {
|
||||
VoiceNotice.showNotice(
|
||||
context.getString(R.string.m1_stop_site_zh),
|
||||
AIAssist.LEVEL0
|
||||
)
|
||||
}
|
||||
|
||||
StopSideStatusManager.Status.DOING -> {
|
||||
// 正在靠边停车
|
||||
}
|
||||
|
||||
StopSideStatusManager.Status.EndingSuccess -> {
|
||||
ToastCharterUtils.showShort("靠边停车成功")
|
||||
VoiceNotice.showNotice(
|
||||
@@ -252,6 +205,7 @@ class BusPassengerPresenter(view: MainFragment?) :
|
||||
AIAssist.LEVEL0
|
||||
)
|
||||
}
|
||||
|
||||
StopSideStatusManager.Status.EndingFaile -> {
|
||||
ToastCharterUtils.showShort("车辆系统繁忙,请稍后再试")
|
||||
}
|
||||
@@ -273,65 +227,90 @@ class BusPassengerPresenter(view: MainFragment?) :
|
||||
lineInfo: LineInfoResponse.LineInfo,
|
||||
sites: List<SiteInfoResponse.SiteInfo>
|
||||
) {
|
||||
CharterPassengerModel.getLineTrajectory(lineInfo.lineId!!,object : OchCommonServiceCallback<TrajectoriesResponse> {
|
||||
override fun onSuccess(data: TrajectoriesResponse?) {
|
||||
if (null != data && 0 == data.code) {
|
||||
data.data?.let {
|
||||
CallerLogger.d(M_BUS_P + TAG, "getLineTrajectory轨迹点:${data.data.size}")
|
||||
val trajectoryList = mutableListOf<LatLng>()
|
||||
it.forEach {latLngMain ->
|
||||
trajectoryList.add(latLngMain.exchangeData())
|
||||
CharterPassengerModel.getLineTrajectory(lineInfo.lineId!!,
|
||||
object : OchCommonServiceCallback<TrajectoriesResponse> {
|
||||
override fun onSuccess(data: TrajectoriesResponse?) {
|
||||
if (null != data && 0 == data.code) {
|
||||
data.data?.let {
|
||||
CallerLogger.d(
|
||||
M_BUS_P + TAG,
|
||||
"getLineTrajectory轨迹点:${data.data.size}"
|
||||
)
|
||||
val trajectoryList = mutableListOf<LatLng>()
|
||||
it.forEach { latLngMain ->
|
||||
trajectoryList.add(latLngMain.exchangeData())
|
||||
}
|
||||
drawStationInfo(sites)
|
||||
mView?.drawOverMapViewTrajectory(trajectoryList)
|
||||
}
|
||||
drawStationInfo(sites)
|
||||
mView?.drawOverMapViewTrajectory(trajectoryList)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String) {
|
||||
ToastCharterUtils.showShort("$code:$msg")
|
||||
}
|
||||
})
|
||||
override fun onFail(code: Int, msg: String) {
|
||||
ToastCharterUtils.showShort("$code:$msg")
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
fun drawStationInfo(sites: List<SiteInfoResponse.SiteInfo>){
|
||||
fun drawStationInfo(sites: List<SiteInfoResponse.SiteInfo>) {
|
||||
val stationsList: MutableList<SiteMarkerBean> = mutableListOf()
|
||||
val stationsNameList: MutableList<SiteMarkerBean> = mutableListOf()
|
||||
val stationIcon = BitmapFactory.decodeResource(context.resources, R.drawable.map_staton_icon)
|
||||
val stationIcon =
|
||||
BitmapFactory.decodeResource(context.resources, R.drawable.map_staton_icon)
|
||||
sites.forEach {
|
||||
stationsList.add(SiteMarkerBean(LatLng(it.GcjLat!!,it.GcjLon!!),stationIcon,0.5f,1f))
|
||||
val bitmap = getBitmap(it.siteId!!,it.siteName ?: "", it.isCheck)
|
||||
stationsNameList.add(SiteMarkerBean(LatLng(it.GcjLat,it.GcjLon),bitmap,0.0f,0.2f))
|
||||
stationsList.add(
|
||||
SiteMarkerBean(
|
||||
LatLng(it.GcjLat!!, it.GcjLon!!),
|
||||
stationIcon,
|
||||
0.5f,
|
||||
1f
|
||||
)
|
||||
)
|
||||
val bitmap = getBitmap(it.siteId!!, it.siteName ?: "", it.isCheck)
|
||||
stationsNameList.add(SiteMarkerBean(LatLng(it.GcjLat, it.GcjLon), bitmap, 0.0f, 0.2f))
|
||||
}
|
||||
mView?.drawOverMapViewStation(stationsList,stationsNameList)
|
||||
mView?.drawOverMapViewStation(stationsList, stationsNameList)
|
||||
}
|
||||
|
||||
private fun getBitmap(siteId:Long,siteName: String,isCheck:Boolean): Bitmap {
|
||||
private fun getBitmap(siteId: Long, siteName: String, isCheck: Boolean): Bitmap {
|
||||
var siteView = lindIdAndView[siteId]
|
||||
if(siteView==null){
|
||||
if (siteView == null) {
|
||||
val marker = MakerWithSiteName(context)
|
||||
marker.setTextAndCheck(siteName,isCheck)
|
||||
marker.setTextAndCheck(siteName, isCheck)
|
||||
marker.measure(
|
||||
View.MeasureSpec.makeMeasureSpec(AutoSizeUtils.dp2px(context, 145f), View.MeasureSpec.UNSPECIFIED),
|
||||
View.MeasureSpec.makeMeasureSpec(AutoSizeUtils.dp2px(context, 34f), View.MeasureSpec.EXACTLY)
|
||||
View.MeasureSpec.makeMeasureSpec(
|
||||
AutoSizeUtils.dp2px(context, 145f),
|
||||
View.MeasureSpec.UNSPECIFIED
|
||||
),
|
||||
View.MeasureSpec.makeMeasureSpec(
|
||||
AutoSizeUtils.dp2px(context, 34f),
|
||||
View.MeasureSpec.EXACTLY
|
||||
)
|
||||
)
|
||||
marker.layout(0, 0, marker.measuredWidth, marker.measuredHeight)
|
||||
val bitmap = Bitmap.createBitmap(marker.width, marker.height, Bitmap.Config.ARGB_8888)
|
||||
marker.draw(Canvas(bitmap))
|
||||
siteView = MakerWithSiteNamewithCheck(isCheck,marker,bitmap)
|
||||
siteView = MakerWithSiteNamewithCheck(isCheck, marker, bitmap)
|
||||
lindIdAndView[siteId] = siteView
|
||||
}else{
|
||||
} else {
|
||||
CallerLogger.d(M_BUS_P + TAG, "缓存View:$siteName---${siteView.isCheck}-----$isCheck")
|
||||
if (siteView.isCheck != isCheck) {
|
||||
val marker = siteView.makerWithSiteName
|
||||
marker.setTextAndCheck(siteName,isCheck)
|
||||
marker.setTextAndCheck(siteName, isCheck)
|
||||
marker.measure(
|
||||
View.MeasureSpec.makeMeasureSpec(AutoSizeUtils.dp2px(context, 145f), View.MeasureSpec.UNSPECIFIED),
|
||||
View.MeasureSpec.makeMeasureSpec(AutoSizeUtils.dp2px(context, 34f), View.MeasureSpec.UNSPECIFIED)
|
||||
View.MeasureSpec.makeMeasureSpec(
|
||||
AutoSizeUtils.dp2px(context, 145f),
|
||||
View.MeasureSpec.UNSPECIFIED
|
||||
),
|
||||
View.MeasureSpec.makeMeasureSpec(
|
||||
AutoSizeUtils.dp2px(context, 34f),
|
||||
View.MeasureSpec.UNSPECIFIED
|
||||
)
|
||||
)
|
||||
marker.layout(0, 0, marker.measuredWidth, marker.measuredHeight)
|
||||
val bitmap = Bitmap.createBitmap(marker.width, marker.height, Bitmap.Config.ARGB_8888)
|
||||
val bitmap =
|
||||
Bitmap.createBitmap(marker.width, marker.height, Bitmap.Config.ARGB_8888)
|
||||
marker.draw(Canvas(bitmap))
|
||||
siteView.isCheck = isCheck
|
||||
siteView.bitmapView = bitmap
|
||||
@@ -351,7 +330,10 @@ class BusPassengerPresenter(view: MainFragment?) :
|
||||
it.wgs84Lat!!
|
||||
)
|
||||
|
||||
val latLng = LatLng(coordinateConverterWgsToGcj.latitude, coordinateConverterWgsToGcj.longitude)
|
||||
val latLng = LatLng(
|
||||
coordinateConverterWgsToGcj.latitude,
|
||||
coordinateConverterWgsToGcj.longitude
|
||||
)
|
||||
mView?.drawEndStation(latLng)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ 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.dialogfragment.fragment.OrderInfoFragment
|
||||
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
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.mogo.och.bus.passenger.provider;
|
||||
import android.content.Context;
|
||||
import android.view.View;
|
||||
|
||||
import com.mogo.och.bus.passenger.view.statusbar.StatusBarView;
|
||||
import com.mogo.och.bus.passenger.ui.statusbar.StatusBarView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
|
||||
@@ -11,25 +11,21 @@ import com.mogo.commons.mvp.MvpFragment
|
||||
import com.mogo.eagle.core.data.config.HdMapBuildConfig
|
||||
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.hmi.ui.setting.ToggleDebugView
|
||||
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.och.bus.passenger.utils.ToastCharterUtils
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
|
||||
import com.mogo.map.uicontroller.VisualAngleMode
|
||||
import com.mogo.och.bus.passenger.R
|
||||
import com.mogo.och.bus.passenger.bean.event.DebugView
|
||||
import com.mogo.och.bus.passenger.bean.event.EventLineSites
|
||||
import com.mogo.och.bus.passenger.bean.response.OrderInfoResponse
|
||||
import com.mogo.och.bus.passenger.model.CharterPassengerModel
|
||||
import com.mogo.och.bus.passenger.callback.IClearViewCallback
|
||||
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.common.module.manager.debug.DebugViewWatchDogFragment
|
||||
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.view.statusbar.StatusBarView
|
||||
import com.mogo.och.common.module.biz.constant.LoginStatusManager
|
||||
import kotlinx.android.synthetic.main.m1_main_fragment.*
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
@@ -44,7 +40,6 @@ class MainFragment :
|
||||
MvpFragment<MainFragment?, BusPassengerPresenter?>() {
|
||||
|
||||
private var bpFunctionGroupDialogFragment: WeakReference<M1ContainFragment>? = null
|
||||
private var debugViewWatchDogFragment: WeakReference<DebugViewWatchDogFragment>? = null
|
||||
private var m1CarUserNoOrderFragment: WeakReference<M1CarUserNoOrderFragment>? = null
|
||||
private var noviceGuidanceFragment: WeakReference<NoviceGuidanceFragment>? = null
|
||||
|
||||
@@ -55,6 +50,12 @@ class MainFragment :
|
||||
BitmapFactory.decodeResource(AbsMogoApplication.getApp().resources,
|
||||
R.drawable.charter_p_trajectory_line)
|
||||
|
||||
private val goneView = object : IClearViewCallback{
|
||||
override fun goneAllView() {
|
||||
bb_boorombar.setCheckIndex(BottomBar.SelectView.NONE)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getLayoutId(): Int {
|
||||
return R.layout.m1_main_fragment
|
||||
}
|
||||
@@ -89,23 +90,28 @@ class MainFragment :
|
||||
|
||||
})
|
||||
|
||||
bb_boorombar.setSettingClickListener{
|
||||
openSettingPage(M1ContainFragment.SETTINGSOFTTAB)
|
||||
}
|
||||
bb_boorombar.setOrderInfoClickListener{
|
||||
if (LoginStatusManager.isLogin()) {
|
||||
if(mPresenter?.haveOrder()==true){
|
||||
openSettingPage(M1ContainFragment.ORDERINFO)
|
||||
}else{
|
||||
ToastCharterUtils.showShort("请确认订单")
|
||||
bb_boorombar.setCheckChangeListener(object :BottomBar.ApplyClickLintener{
|
||||
override fun onApplyClick(selectItem: BottomBar.SelectView) {
|
||||
when (selectItem) {
|
||||
BottomBar.SelectView.ORDERINFO -> showBizView(orderinfo = true)
|
||||
BottomBar.SelectView.SETTING -> showBizView(softControl = true)
|
||||
BottomBar.SelectView.LINE -> showBizView(selectLine = true)
|
||||
//BottomBar.SelectView.VIDEO -> TODO()
|
||||
else ->{
|
||||
showBizView()
|
||||
}
|
||||
}
|
||||
}else{
|
||||
ToastCharterUtils.showShort(AbsMogoApplication.getApp().getString(R.string.m1_please_login_driver))
|
||||
}
|
||||
}
|
||||
bb_boorombar.setLineClickListener{
|
||||
openSettingPage(M1ContainFragment.SELECTLINE)
|
||||
}
|
||||
})
|
||||
bb_boorombar.setApplyClickListener(object : BottomClickView.ApplyClickLintener{
|
||||
override fun onApplyClick() {
|
||||
bb_boorombar.setCheckIndex(BottomBar.SelectView.NONE)
|
||||
}
|
||||
})
|
||||
biz_orderinfo.goneViewListener = goneView
|
||||
biz_softcontrol.goneViewListener = goneView
|
||||
biz_selectline.goneViewListener = goneView
|
||||
|
||||
aciv_enter_video.setOnClickListener{
|
||||
openSettingPage(M1ContainFragment.VIDEOTAB)
|
||||
}
|
||||
@@ -119,34 +125,27 @@ class MainFragment :
|
||||
controller.changeZoom2(0.8f)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
debug_arrive_dest.setOnClickListener {
|
||||
CharterPassengerModel.arriveDest()
|
||||
}
|
||||
debug_show_noviceGuidance.setOnClickListener {
|
||||
showNoviceGuidanceFragment()
|
||||
}
|
||||
debug_change_modle.setOnClickListener {
|
||||
ToastCharterUtils.showShort("因车辆正在人工驾驶中无法靠边停车,请安全员主动停止车辆")
|
||||
when (HdMapBuildConfig.currentCarVrIconRes) {
|
||||
R.raw.aiqinghao -> {
|
||||
mPresenter?.setCarChangeListener(OrderInfoResponse.M1_FAMILY)
|
||||
}
|
||||
R.raw.jiatinghao -> {
|
||||
mPresenter?.setCarChangeListener(OrderInfoResponse.M1_FRIENDLY)
|
||||
}
|
||||
R.raw.pengyouhao -> {
|
||||
mPresenter?.setCarChangeListener(0)
|
||||
}
|
||||
else -> {
|
||||
mPresenter?.setCarChangeListener(OrderInfoResponse.M1_LOVE)
|
||||
}
|
||||
}
|
||||
fun setCarMode(type: Int){
|
||||
mPresenter?.setCarChangeListener(type)
|
||||
}
|
||||
|
||||
private fun showBizView(orderinfo:Boolean=false,softControl:Boolean=false,selectLine:Boolean=false){
|
||||
if(orderinfo){
|
||||
biz_orderinfo.visibility = View.VISIBLE
|
||||
}else{
|
||||
biz_orderinfo.visibility = View.GONE
|
||||
}
|
||||
|
||||
debug_show_endview.setOnClickListener {
|
||||
showOpenAndCloseDoor()
|
||||
if(softControl){
|
||||
biz_softcontrol.visibility = View.VISIBLE
|
||||
}else{
|
||||
biz_softcontrol.visibility = View.GONE
|
||||
}
|
||||
if(selectLine){
|
||||
biz_selectline.visibility = View.VISIBLE
|
||||
}else{
|
||||
biz_selectline.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
@@ -158,31 +157,6 @@ class MainFragment :
|
||||
M1ContainFragment.openSettingPage(childFragmentManager,parentFragmentManager,bpFunctionGroup,tab)
|
||||
}
|
||||
|
||||
private fun showDebugView() {
|
||||
if (debugViewWatchDogFragment?.get() == null) {
|
||||
debugViewWatchDogFragment = WeakReference(DebugViewWatchDogFragment.newInstance())
|
||||
}
|
||||
val debugViewFragment = debugViewWatchDogFragment?.get()
|
||||
DebugViewWatchDogFragment.showDebugView(childFragmentManager,parentFragmentManager,debugViewFragment)
|
||||
}
|
||||
|
||||
|
||||
fun setSpeed(speed: String) {
|
||||
tv_speed.text = speed
|
||||
}
|
||||
|
||||
fun setDistanceAndTime(
|
||||
distance: String,
|
||||
distanceUnit: String,
|
||||
leftTime:String,
|
||||
arriveTime:String
|
||||
) {
|
||||
tv_distance.text = distance
|
||||
tv_distance_unit.text = distanceUnit
|
||||
tv_distance_surplus_time.text = leftTime
|
||||
tv_distance_arrive_time.text = arriveTime
|
||||
}
|
||||
|
||||
fun setCarModle(rawInfo: Int){
|
||||
getMapUIController()?.changeCurrentIcon(rawInfo)
|
||||
HdMapBuildConfig.currentCarVrIconRes = rawInfo
|
||||
@@ -283,28 +257,6 @@ class MainFragment :
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
fun changeDebugView(debugView: DebugView) {
|
||||
when (debugView.type) {
|
||||
StatusBarView.bizz -> {
|
||||
if(group_debug.visibility==View.GONE||
|
||||
group_debug.visibility==View.INVISIBLE){
|
||||
group_debug.visibility = View.VISIBLE
|
||||
}else{
|
||||
group_debug.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
if (ToggleDebugView.toggleDebugView.isShowIng()) {
|
||||
ToggleDebugView.toggleDebugView.dismiss()
|
||||
}else {
|
||||
showDebugView()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fun drawOverMapViewStation(stationsList: MutableList<SiteMarkerBean>,siteMarkers: List<SiteMarkerBean>?){
|
||||
omvOverMap?.clearSiteMarkers()
|
||||
omvOverMap?.clearSiteNameViews()
|
||||
@@ -318,6 +270,7 @@ class MainFragment :
|
||||
}
|
||||
|
||||
companion object {
|
||||
public const val TAG = "BusPassengerRouteFragment"
|
||||
const val TAG = "BusPassengerRouteFragment"
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,9 +1,10 @@
|
||||
package com.mogo.och.bus.passenger.ui.view.bottom
|
||||
package com.mogo.och.bus.passenger.ui.bottom
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import com.mogo.eagle.core.utilcode.kotlin.onClick
|
||||
import com.mogo.och.bus.passenger.R
|
||||
import kotlinx.android.synthetic.main.m1_bottom_bar.view.*
|
||||
|
||||
@@ -18,33 +19,40 @@ class BottomBar @JvmOverloads constructor(
|
||||
setBackgroundResource(R.drawable.charter_p_bottom_bar_bg)
|
||||
}
|
||||
|
||||
private var checkIndex = SelectView.VIDEO
|
||||
private var checkIndex = SelectView.NONE
|
||||
|
||||
private var overMapViewApply:ApplyClickLintener?=null
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
cl_order_time.onClick {
|
||||
setCheckIndex(SelectView.ORDERINFO)
|
||||
}
|
||||
actv_setting.onClick {
|
||||
setCheckIndex(SelectView.SETTING)
|
||||
}
|
||||
actv_line.onClick {
|
||||
setCheckIndex(SelectView.LINE)
|
||||
}
|
||||
}
|
||||
fun setOrderInfoClickListener(click:OnClickListener){
|
||||
cl_order_time.setOnClickListener(click)
|
||||
}
|
||||
fun setSettingClickListener(click:OnClickListener){
|
||||
actv_setting.setOnClickListener(click)
|
||||
}
|
||||
fun setLineClickListener(click:OnClickListener){
|
||||
actv_line.setOnClickListener(click)
|
||||
fun setCheckChangeListener(overMapViewApply:ApplyClickLintener){
|
||||
this.overMapViewApply = overMapViewApply
|
||||
}
|
||||
|
||||
fun setApplyClickListener(click:BottomClickView.ApplyClickLintener){
|
||||
fun setApplyClickListener(click: BottomClickView.ApplyClickLintener){
|
||||
aciv_center_image.applyClickListener=click
|
||||
actv_stop_site.applyClickListener=click
|
||||
actv_close_door.applyClickListener=click
|
||||
actv_open_door.applyClickListener=click
|
||||
}
|
||||
|
||||
fun setCheckIndex(index:SelectView){
|
||||
fun setCheckIndex(index: SelectView){
|
||||
if(checkIndex==index){
|
||||
return
|
||||
checkIndex = SelectView.NONE
|
||||
}else{
|
||||
checkIndex = index
|
||||
}
|
||||
checkIndex = index
|
||||
overMapViewApply?.onApplyClick(checkIndex)
|
||||
if(checkIndex == SelectView.ORDERINFO){
|
||||
cl_order_time_press.visibility = VISIBLE
|
||||
cl_order_time.setCheck(true)
|
||||
@@ -66,7 +74,11 @@ class BottomBar @JvmOverloads constructor(
|
||||
}
|
||||
|
||||
enum class SelectView{
|
||||
ORDERINFO,SETTING,LINE,VIDEO
|
||||
NONE,ORDERINFO,SETTING,LINE,VIDEO
|
||||
}
|
||||
|
||||
interface ApplyClickLintener{
|
||||
fun onApplyClick(selectItem:SelectView)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.ui.view.bottom
|
||||
package com.mogo.och.bus.passenger.ui.bottom
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.ui.view.bottom
|
||||
package com.mogo.och.bus.passenger.ui.bottom
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
@@ -28,7 +28,7 @@ open class BottomClickView @JvmOverloads constructor(
|
||||
private var normalDrawable: Int = -1
|
||||
private var backageView: View? = null
|
||||
|
||||
var applyClickListener:ApplyClickLintener?=null
|
||||
var applyClickListener: ApplyClickLintener?=null
|
||||
|
||||
init {
|
||||
LayoutInflater.from(context).inflate(R.layout.m1_bottom_stop_site, this, true)
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.ui.view.bottom
|
||||
package com.mogo.och.bus.passenger.ui.bottom
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
@@ -16,7 +16,6 @@ import com.mogo.och.bus.passenger.model.OrderStatusEnum
|
||||
import com.mogo.och.common.module.utils.DateTimeUtil
|
||||
import kotlinx.android.synthetic.main.m1_bottom_orderinfo.view.*
|
||||
import java.util.UUID
|
||||
import kotlin.random.Random
|
||||
|
||||
open class BottomOrderInfoView @JvmOverloads constructor(
|
||||
context: Context,
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.mogo.och.bus.passenger.ui.view.bottom.impl
|
||||
package com.mogo.och.bus.passenger.ui.bottom.impl
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import com.mogo.eagle.core.utilcode.util.ActivityUtils
|
||||
import com.mogo.och.bus.passenger.R
|
||||
import com.mogo.och.bus.passenger.ui.view.bottom.BottomClickView
|
||||
import com.mogo.och.bus.passenger.ui.bottom.BottomClickView
|
||||
import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorManager
|
||||
import com.mogo.och.common.module.utils.SoundPoolHelper
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.ui.view.bottom.impl
|
||||
package com.mogo.och.bus.passenger.ui.bottom.impl
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
@@ -6,7 +6,6 @@ import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import androidx.appcompat.widget.AppCompatTextView
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import com.mogo.commons.AbsMogoApplication
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
|
||||
@@ -20,7 +19,7 @@ import com.mogo.och.bus.passenger.utils.ToastCharterUtils
|
||||
import com.mogo.och.bus.passenger.R
|
||||
import com.mogo.och.bus.passenger.callback.ICharterPassengerAutoStatusChangeCallback
|
||||
import com.mogo.och.bus.passenger.model.CharterPassengerModel
|
||||
import com.mogo.och.bus.passenger.ui.view.bottom.BottomClickView
|
||||
import com.mogo.och.bus.passenger.ui.bottom.BottomClickView
|
||||
import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorStatusManager
|
||||
import com.mogo.och.common.module.utils.RxUtils
|
||||
import com.mogo.och.common.module.utils.SoundPoolHelper
|
||||
@@ -1,11 +1,10 @@
|
||||
package com.mogo.och.bus.passenger.ui.view.bottom.impl
|
||||
package com.mogo.och.bus.passenger.ui.bottom.impl
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import androidx.appcompat.widget.AppCompatTextView
|
||||
import com.mogo.eagle.core.utilcode.util.ActivityUtils
|
||||
import com.mogo.och.bus.passenger.R
|
||||
import com.mogo.och.bus.passenger.ui.view.bottom.BottomClickView
|
||||
import com.mogo.och.bus.passenger.ui.bottom.BottomClickView
|
||||
import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorManager
|
||||
import com.mogo.och.common.module.utils.SoundPoolHelper
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.ui.view.bottom.impl
|
||||
package com.mogo.och.bus.passenger.ui.bottom.impl
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
@@ -8,7 +8,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener
|
||||
import com.mogo.eagle.core.utilcode.util.ActivityUtils
|
||||
import com.mogo.och.bus.passenger.utils.ToastCharterUtils
|
||||
import com.mogo.och.bus.passenger.R
|
||||
import com.mogo.och.bus.passenger.ui.view.bottom.BottomClickView
|
||||
import com.mogo.och.bus.passenger.ui.bottom.BottomClickView
|
||||
import com.mogo.och.common.module.utils.SoundPoolHelper
|
||||
|
||||
class StopSiteView @JvmOverloads constructor(
|
||||
@@ -0,0 +1,3 @@
|
||||
package com.mogo.och.bus.passenger.ui.debugview
|
||||
|
||||
data class DebugEvent(val type: String)
|
||||
@@ -0,0 +1,131 @@
|
||||
package com.mogo.och.bus.passenger.ui.debugview
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import com.mogo.eagle.core.data.config.HdMapBuildConfig
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
|
||||
import com.mogo.eagle.core.function.hmi.ui.setting.ToggleDebugView
|
||||
import com.mogo.eagle.core.utilcode.util.ActivityUtils
|
||||
import com.mogo.och.bus.passenger.R
|
||||
import com.mogo.och.bus.passenger.ui.debugview.DebugView
|
||||
import com.mogo.och.bus.passenger.bean.response.OrderInfoResponse
|
||||
import com.mogo.och.bus.passenger.model.CharterPassengerModel
|
||||
import com.mogo.och.bus.passenger.ui.MainFragment
|
||||
import com.mogo.och.bus.passenger.ui.statusbar.StatusBarView
|
||||
import com.mogo.och.bus.passenger.utils.ToastCharterUtils
|
||||
import com.mogo.och.common.module.manager.debug.DebugViewWatchDogFragment
|
||||
import kotlinx.android.synthetic.main.m1_p_debug.view.debug_arrive_dest
|
||||
import kotlinx.android.synthetic.main.m1_p_debug.view.debug_change_modle
|
||||
import kotlinx.android.synthetic.main.m1_p_debug.view.debug_show_endview
|
||||
import kotlinx.android.synthetic.main.m1_p_debug.view.debug_show_noviceGuidance
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
class DebugView @JvmOverloads constructor(
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = 0
|
||||
) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoAutopilotStatusListener {
|
||||
|
||||
companion object {
|
||||
const val TAG = "DebugView"
|
||||
}
|
||||
|
||||
init {
|
||||
LayoutInflater.from(context).inflate(R.layout.m1_p_debug, this, true)
|
||||
visibility = GONE
|
||||
}
|
||||
|
||||
private var fragment: MainFragment?=null
|
||||
|
||||
private var debugViewWatchDogFragment: WeakReference<DebugViewWatchDogFragment>? = null
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
|
||||
EventBus.getDefault().register(this)
|
||||
|
||||
val activityByContext = ActivityUtils.getActivityByContext(context)
|
||||
if(activityByContext is FragmentActivity){
|
||||
val fragment = activityByContext.supportFragmentManager.findFragmentByTag(MainFragment.TAG)
|
||||
if(fragment is MainFragment){
|
||||
this.fragment = fragment
|
||||
}
|
||||
}
|
||||
|
||||
debug_arrive_dest.setOnClickListener {
|
||||
CharterPassengerModel.arriveDest()
|
||||
}
|
||||
debug_show_noviceGuidance.setOnClickListener {
|
||||
fragment?.showNoviceGuidanceFragment()
|
||||
}
|
||||
debug_change_modle.setOnClickListener {
|
||||
ToastCharterUtils.showShort("因车辆正在人工驾驶中无法靠边停车,请安全员主动停止车辆")
|
||||
when (HdMapBuildConfig.currentCarVrIconRes) {
|
||||
R.raw.aiqinghao -> {
|
||||
fragment?.setCarMode(OrderInfoResponse.M1_FAMILY)
|
||||
}
|
||||
R.raw.jiatinghao -> {
|
||||
fragment?.setCarMode(OrderInfoResponse.M1_FRIENDLY)
|
||||
}
|
||||
R.raw.pengyouhao -> {
|
||||
fragment?.setCarMode(0)
|
||||
}
|
||||
else -> {
|
||||
fragment?.setCarMode(OrderInfoResponse.M1_LOVE)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
debug_show_endview.setOnClickListener {
|
||||
fragment?.showOpenAndCloseDoor()
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
fun changeOverview(debugEvent: DebugEvent) {
|
||||
when (debugEvent.type) {
|
||||
StatusBarView.bizz -> {
|
||||
if(visibility== View.GONE||
|
||||
visibility== View.INVISIBLE){
|
||||
visibility = View.VISIBLE
|
||||
}else{
|
||||
visibility = View.GONE
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
if (ToggleDebugView.toggleDebugView.isShowIng()) {
|
||||
ToggleDebugView.toggleDebugView.dismiss()
|
||||
}else {
|
||||
showDebugView()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun showDebugView() {
|
||||
if (debugViewWatchDogFragment?.get() == null) {
|
||||
debugViewWatchDogFragment = WeakReference(DebugViewWatchDogFragment.newInstance())
|
||||
}
|
||||
val debugViewFragment = debugViewWatchDogFragment?.get()
|
||||
fragment?.let {
|
||||
DebugViewWatchDogFragment.showDebugView(it.childFragmentManager,it.parentFragmentManager,debugViewFragment)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
override fun onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow()
|
||||
EventBus.getDefault().unregister(this)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -17,12 +17,12 @@ 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.dialogfragment.fragment.M1OrderLineFragment
|
||||
import com.mogo.och.bus.passenger.ui.dialogfragment.fragment.M1SoftFragment
|
||||
import com.mogo.och.bus.passenger.ui.dialogfragment.fragment.M1VideoFragment
|
||||
import com.mogo.och.bus.passenger.ui.dialogfragment.fragment.OrderInfoFragment
|
||||
import com.mogo.och.bus.passenger.ui.view.bottom.BottomBar
|
||||
import com.mogo.och.bus.passenger.ui.view.bottom.BottomClickView
|
||||
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
|
||||
@@ -114,45 +114,45 @@ class M1ContainFragment :
|
||||
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.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()
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
package com.mogo.och.bus.passenger.ui.itinerary
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.findViewTreeViewModelStoreOwner
|
||||
import com.mogo.och.bus.passenger.R
|
||||
import kotlinx.android.synthetic.main.m1_itinerary_info.view.tv_distance
|
||||
import kotlinx.android.synthetic.main.m1_itinerary_info.view.tv_distance_arrive_time
|
||||
import kotlinx.android.synthetic.main.m1_itinerary_info.view.tv_distance_surplus_time
|
||||
import kotlinx.android.synthetic.main.m1_itinerary_info.view.tv_distance_unit
|
||||
import kotlinx.android.synthetic.main.m1_itinerary_info.view.tv_speed
|
||||
|
||||
class ItineraryView : ConstraintLayout, ItineraryViewModel.ItineraryViewCallback {
|
||||
|
||||
private val TAG = "ItineraryView"
|
||||
|
||||
constructor(context: Context) : super(context)
|
||||
|
||||
constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet)
|
||||
|
||||
constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr)
|
||||
|
||||
constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes)
|
||||
|
||||
private fun initView() {
|
||||
LayoutInflater.from(context).inflate(R.layout.m1_itinerary_info, this, true)
|
||||
}
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
|
||||
val viewModel = findViewTreeViewModelStoreOwner()?.let {
|
||||
ViewModelProvider(it).get(ItineraryViewModel::class.java)
|
||||
}
|
||||
|
||||
viewModel?.setDistanceCallback(this)
|
||||
}
|
||||
|
||||
override fun setSpeed(speed: String) {
|
||||
tv_speed.text = speed
|
||||
}
|
||||
|
||||
override fun setDistanceAndTime(
|
||||
distance: String,
|
||||
distanceUnit: String,
|
||||
leftTime:String,
|
||||
arriveTime:String
|
||||
) {
|
||||
tv_distance.text = distance
|
||||
tv_distance_unit.text = distanceUnit
|
||||
tv_distance_surplus_time.text = leftTime
|
||||
tv_distance_arrive_time.text = arriveTime
|
||||
}
|
||||
|
||||
|
||||
|
||||
init {
|
||||
try {
|
||||
initView()
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
package com.mogo.och.bus.passenger.ui.itinerary
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import com.mogo.commons.AbsMogoApplication
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
|
||||
import com.mogo.och.bus.passenger.R
|
||||
import com.mogo.och.bus.passenger.callback.IDistanceCallback
|
||||
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.utils.DateTimeUtil
|
||||
import com.mogo.och.common.module.utils.NumberFormatUtil
|
||||
import kotlin.math.abs
|
||||
import kotlin.math.ceil
|
||||
|
||||
class ItineraryViewModel : ViewModel(), IMoGoChassisLocationGCJ02Listener, IDistanceCallback,
|
||||
IOrderStatusChangeListener {
|
||||
|
||||
private val TAG = ItineraryViewModel::class.java.simpleName
|
||||
|
||||
private var viewCallback: ItineraryViewCallback? = null
|
||||
|
||||
init {
|
||||
CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 4, this)
|
||||
CharterPassengerModel.setStationDistanceListener(TAG, this)
|
||||
CharterPassengerModel.setStatusChangeListener(TAG, this)
|
||||
}
|
||||
|
||||
override fun onCleared() {
|
||||
super.onCleared()
|
||||
this.viewCallback = null
|
||||
CallerChassisLocationGCJ02ListenerManager.removeListener(TAG)
|
||||
CharterPassengerModel.setStationDistanceListener(TAG, null)
|
||||
CharterPassengerModel.setStatusChangeListener(TAG, null)
|
||||
}
|
||||
|
||||
|
||||
fun setDistanceCallback(viewCallback: ItineraryViewCallback) {
|
||||
this.viewCallback = viewCallback
|
||||
}
|
||||
|
||||
override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) {
|
||||
mogoLocation?.let {
|
||||
UiThreadHandler.post {
|
||||
val speedKM = (abs(it.gnssSpeed) * 3.6f).toInt()
|
||||
viewCallback?.setSpeed(speedKM.toString())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun setDistancecAndTime(meters: Long, timeInSecond: Long) {
|
||||
val unitKm = AbsMogoApplication.getApp().getString(R.string.m1_distance_unit_km)
|
||||
if (meters < 0 && timeInSecond < 0) {
|
||||
setDistanceAndTime("--", unitKm, "--", "--")
|
||||
return
|
||||
}
|
||||
var dis: String? = "0"
|
||||
var disUnit = "KM"
|
||||
if (meters > 0) {
|
||||
if (meters / 1000 < 1) {
|
||||
disUnit = AbsMogoApplication.getApp().getString(R.string.m1_distance_unit_m)
|
||||
dis = Math.round(meters.toFloat()).toString()
|
||||
} else {
|
||||
disUnit = unitKm
|
||||
dis = NumberFormatUtil.formatLong(meters.toDouble() / 1000)
|
||||
}
|
||||
}
|
||||
val time = ceil(timeInSecond / 60f).toInt()
|
||||
val arriveTime = DateTimeUtil.getAfterSecondTime(timeInSecond.toInt())
|
||||
setDistanceAndTime(dis.toString(), disUnit, time.toString(), arriveTime)
|
||||
}
|
||||
|
||||
private fun setDistanceAndTime(
|
||||
distance: String,
|
||||
distanceUnit: String,
|
||||
leftTime: String,
|
||||
arriveTime: String
|
||||
) {
|
||||
UiThreadHandler.post {
|
||||
viewCallback?.setDistanceAndTime(distance, distanceUnit, leftTime, arriveTime)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStatusChange(currentStatus: OrderStatusEnum) {
|
||||
when (currentStatus) {
|
||||
OrderStatusEnum.NoOrderUse -> {
|
||||
UiThreadHandler.post {
|
||||
setDistancecAndTime(-1, -1)
|
||||
}
|
||||
}
|
||||
else ->{}
|
||||
}
|
||||
}
|
||||
|
||||
interface ItineraryViewCallback {
|
||||
fun setSpeed(speed: String)
|
||||
fun setDistanceAndTime(
|
||||
distance: String,
|
||||
distanceUnit: String,
|
||||
leftTime: String,
|
||||
arriveTime: String
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.ui.dialogfragment.fragment
|
||||
package com.mogo.och.bus.passenger.ui.orderinfo
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
@@ -0,0 +1,111 @@
|
||||
package com.mogo.och.bus.passenger.ui.orderinfo
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.findViewTreeViewModelStoreOwner
|
||||
import com.mogo.eagle.core.utilcode.kotlin.onClick
|
||||
import com.mogo.och.bus.passenger.R
|
||||
import com.mogo.och.bus.passenger.callback.IClearViewCallback
|
||||
import kotlinx.android.synthetic.main.m1_devices_fragment.view.actv_contain_order
|
||||
import kotlinx.android.synthetic.main.m1_devices_fragment.view.actv_end_order
|
||||
import kotlinx.android.synthetic.main.m1_devices_fragment.view.actv_end_order_submit
|
||||
import kotlinx.android.synthetic.main.m1_devices_fragment.view.actv_left_time
|
||||
import kotlinx.android.synthetic.main.m1_devices_fragment.view.actv_order_phone
|
||||
import kotlinx.android.synthetic.main.m1_devices_fragment.view.actv_order_times
|
||||
import kotlinx.android.synthetic.main.m1_devices_fragment.view.cl_order_info
|
||||
import kotlinx.android.synthetic.main.m1_devices_fragment.view.cl_order_info_endorder_comfit
|
||||
|
||||
class OrderInfoView : ConstraintLayout, OrderInfoViewModel.ItineraryViewCallback {
|
||||
|
||||
private val TAG = "OrderInfoView"
|
||||
|
||||
constructor(context: Context) : super(context)
|
||||
|
||||
constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet)
|
||||
|
||||
constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(
|
||||
context,
|
||||
attributeSet,
|
||||
defStyleAttr
|
||||
)
|
||||
|
||||
constructor(
|
||||
context: Context,
|
||||
attributeSet: AttributeSet,
|
||||
defStyleAttr: Int,
|
||||
defStyleRes: Int
|
||||
) : super(context, attributeSet, defStyleAttr, defStyleRes){
|
||||
initView()
|
||||
}
|
||||
|
||||
var goneViewListener: IClearViewCallback?=null
|
||||
|
||||
private fun initView() {
|
||||
LayoutInflater.from(context).inflate(R.layout.m1_devices_fragment, this, true)
|
||||
onClick {
|
||||
setViewGone()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
|
||||
val viewModel = findViewTreeViewModelStoreOwner()?.let {
|
||||
ViewModelProvider(it).get(OrderInfoViewModel::class.java)
|
||||
}
|
||||
|
||||
viewModel?.setDistanceCallback(this)
|
||||
|
||||
actv_end_order_submit.setOnClickListener {
|
||||
viewModel?.endOrder()
|
||||
}
|
||||
|
||||
actv_contain_order.setOnClickListener {
|
||||
setViewGone()
|
||||
}
|
||||
|
||||
actv_end_order.setOnClickListener {
|
||||
cl_order_info.visibility = View.GONE
|
||||
cl_order_info_endorder_comfit.visibility = View.VISIBLE
|
||||
}
|
||||
}
|
||||
|
||||
override fun setViewGone(){
|
||||
goneViewListener?.goneAllView()
|
||||
}
|
||||
|
||||
override fun setLeftTime(leftTime:String){
|
||||
actv_left_time.text = "剩余时间 $leftTime"
|
||||
}
|
||||
|
||||
override fun setStartTimeAndEndTime(startTime:String,endTime:String){
|
||||
actv_order_times.text = "$startTime-$endTime"
|
||||
}
|
||||
|
||||
override 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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
init {
|
||||
try {
|
||||
initView()
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
package com.mogo.och.bus.passenger.ui.orderinfo
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
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
|
||||
import com.mogo.eagle.core.utilcode.util.GsonUtils
|
||||
import com.mogo.och.bus.passenger.callback.ITimeCallback
|
||||
import com.mogo.och.bus.passenger.model.CharterPassengerModel
|
||||
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.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 OrderInfoViewModel: ViewModel(), ITimeCallback {
|
||||
|
||||
private val TAG = OrderInfoViewModel::class.java.simpleName
|
||||
|
||||
private var viewCallback:ItineraryViewCallback?=null
|
||||
|
||||
|
||||
init {
|
||||
CharterPassengerModel.setOrderLeftTimeListeners(TAG,this)
|
||||
}
|
||||
|
||||
override fun onCleared() {
|
||||
super.onCleared()
|
||||
this.viewCallback = null
|
||||
CharterPassengerModel.setOrderLeftTimeListeners(TAG,null)
|
||||
}
|
||||
|
||||
fun setDistanceCallback(viewCallback:ItineraryViewCallback){
|
||||
this.viewCallback = viewCallback
|
||||
getDataInfo()
|
||||
}
|
||||
|
||||
private fun getDataInfo() {
|
||||
val currentOrderInfo = CharterPassengerModel.getCurrentOrderInfo()
|
||||
currentOrderInfo?.let {
|
||||
viewCallback?.setPhone(it.passengerPhone?:"")
|
||||
try {
|
||||
viewCallback?.setStartTimeAndEndTime(
|
||||
DateTimeUtil.formatLongToString(it.startTime!!, DateTimeUtil.HH_mm),
|
||||
DateTimeUtil.formatLongToString(it.endTime!!, DateTimeUtil.HH_mm))
|
||||
}catch (e:Exception){
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun setOrderTimeCallBack(timeInSecond: Long) {
|
||||
val leftTime = DateTimeUtil.second2Time(timeInSecond)
|
||||
viewCallback?.setLeftTime(leftTime)
|
||||
}
|
||||
|
||||
|
||||
fun endOrder() {
|
||||
CharterPassengerModel.endOrder(object : OchCommonServiceCallback<BaseData> {
|
||||
override fun onSuccess(data: BaseData?) {
|
||||
if (null != data && 0 == data.code) {
|
||||
ToastCharterUtils.showShort("结束成功")
|
||||
CharterPassengerModel.setEndOrderStatus()
|
||||
viewCallback?.setViewGone()
|
||||
val msg = EndOrderMsg(
|
||||
CharterPassengerModel.getCurrentOrderInfo()?.orderNo?:"",
|
||||
)
|
||||
CallerTelematicManager.sendMsgToServer(
|
||||
OchCommonConst.BUSINESS_STRING,
|
||||
GsonUtils.toJson(msg).toByteArray()
|
||||
)
|
||||
CallerLogger.d(SceneConstant.M_BUS_P + BaseDPMsg.TAG, "发送数据:结束订单${msg}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String) {
|
||||
ToastCharterUtils.showShort("$code:$msg")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
interface ItineraryViewCallback{
|
||||
fun setPhone(phone:String)
|
||||
fun setViewGone()
|
||||
fun setLeftTime(leftTime:String)
|
||||
fun setStartTimeAndEndTime(startTime:String,endTime:String)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.view
|
||||
package com.mogo.och.bus.passenger.ui.overmapview
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Bitmap
|
||||
@@ -8,6 +8,9 @@ import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import com.mogo.och.bus.passenger.R
|
||||
import kotlinx.android.synthetic.main.view_maker_sitename.view.*
|
||||
|
||||
/**
|
||||
* 全览地图中使用的view
|
||||
*/
|
||||
class MakerWithSiteName @JvmOverloads constructor(
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
@@ -28,4 +31,4 @@ class MakerWithSiteName @JvmOverloads constructor(
|
||||
}
|
||||
}
|
||||
|
||||
data class MakerWithSiteNamewithCheck(var isCheck: Boolean,val makerWithSiteName:MakerWithSiteName,var bitmapView: Bitmap)
|
||||
data class MakerWithSiteNamewithCheck(var isCheck: Boolean, val makerWithSiteName: MakerWithSiteName, var bitmapView: Bitmap)
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.ui.dialogfragment.fragment
|
||||
package com.mogo.och.bus.passenger.ui.selectline
|
||||
|
||||
import android.animation.ObjectAnimator
|
||||
import android.graphics.drawable.AnimationDrawable
|
||||
@@ -16,12 +16,11 @@ 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.model.OrderStatusEnum
|
||||
import com.mogo.och.bus.passenger.presenter.BusPassengerFunctionOrderPresenter
|
||||
import com.mogo.och.bus.passenger.ui.adapter.OrderLineItemAdapter
|
||||
import com.mogo.och.bus.passenger.ui.adapter.OrderSiteItemAdapter
|
||||
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.view.BottomDecoration
|
||||
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.*
|
||||
@@ -0,0 +1,278 @@
|
||||
package com.mogo.och.bus.passenger.ui.selectline
|
||||
|
||||
import android.animation.ObjectAnimator
|
||||
import android.content.Context
|
||||
import android.graphics.drawable.AnimationDrawable
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.animation.LinearInterpolator
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.findViewTreeViewModelStoreOwner
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.elegant.utils.UiThreadHandler
|
||||
import com.mogo.eagle.core.utilcode.kotlin.onClick
|
||||
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.callback.IClearViewCallback
|
||||
import com.mogo.och.bus.passenger.model.CharterPassengerModel
|
||||
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.selectline.layoutmanage.BottomDecoration
|
||||
import com.mogo.och.bus.passenger.utils.ToastCharterUtils
|
||||
import com.mogo.och.common.module.utils.RxUtils
|
||||
import io.reactivex.disposables.Disposable
|
||||
import kotlinx.android.synthetic.main.m1_order_fragment.view.aciv_driver_refuse_group
|
||||
import kotlinx.android.synthetic.main.m1_order_fragment.view.g_lines_sites_data
|
||||
import kotlinx.android.synthetic.main.m1_order_fragment.view.g_loading_group
|
||||
import kotlinx.android.synthetic.main.m1_order_fragment.view.g_side_cancle_submit_group
|
||||
import kotlinx.android.synthetic.main.m1_order_fragment.view.group_driver_agrenn_line
|
||||
import kotlinx.android.synthetic.main.m1_order_fragment.view.iv_loading_wait_driver
|
||||
import kotlinx.android.synthetic.main.m1_order_fragment.view.lsv_line_site
|
||||
import kotlinx.android.synthetic.main.m1_order_fragment.view.m1_order_loading
|
||||
import kotlinx.android.synthetic.main.m1_order_fragment.view.m1_order_neterror
|
||||
import kotlinx.android.synthetic.main.m1_order_fragment.view.m1_order_noorder
|
||||
import kotlinx.android.synthetic.main.m1_order_fragment.view.rlv_line_list
|
||||
import kotlinx.android.synthetic.main.m1_order_fragment.view.rv_site_list
|
||||
import kotlinx.android.synthetic.main.m1_order_fragment.view.tv_site_cancle
|
||||
import kotlinx.android.synthetic.main.m1_order_fragment.view.tv_site_submit
|
||||
import kotlinx.android.synthetic.main.m1_order_loading.view.iv_loading_wait_ent
|
||||
import me.jessyan.autosize.utils.AutoSizeUtils
|
||||
|
||||
class SelectLineView : ConstraintLayout, SelectLineViewModel.SelectLineViewCallback {
|
||||
|
||||
private val TAG = "OrderInfoView"
|
||||
|
||||
constructor(context: Context) : super(context)
|
||||
|
||||
constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet)
|
||||
|
||||
constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(
|
||||
context,
|
||||
attributeSet,
|
||||
defStyleAttr
|
||||
)
|
||||
|
||||
constructor(
|
||||
context: Context,
|
||||
attributeSet: AttributeSet,
|
||||
defStyleAttr: Int,
|
||||
defStyleRes: Int
|
||||
) : super(context, attributeSet, defStyleAttr, defStyleRes)
|
||||
|
||||
|
||||
var goneViewListener: IClearViewCallback?=null
|
||||
|
||||
private lateinit var lineAdapter: OrderLineItemAdapter
|
||||
private lateinit var siteAdapter: OrderSiteItemAdapter
|
||||
|
||||
private val lineList = mutableListOf<LineInfoResponse.LineInfo>()
|
||||
private 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
|
||||
}
|
||||
|
||||
|
||||
private fun initView() {
|
||||
LayoutInflater.from(context).inflate(R.layout.m1_order_fragment, this, true)
|
||||
|
||||
onClick {
|
||||
setViewGone()
|
||||
}
|
||||
|
||||
lineAdapter = OrderLineItemAdapter(context, lineList)
|
||||
siteAdapter = OrderSiteItemAdapter(context, 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
|
||||
}
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
val viewModel = findViewTreeViewModelStoreOwner()?.let {
|
||||
ViewModelProvider(it).get(SelectLineViewModel::class.java)
|
||||
}
|
||||
|
||||
viewModel?.setVIewCallback(this)
|
||||
|
||||
lineAdapter.checkChangeListener = object : OrderLineItemAdapter.CheckListener {
|
||||
override fun canSwitchLine(): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onCheckListener(lineInfo: LineInfoResponse.LineInfo) {
|
||||
viewModel?.checkLineClick(lineInfo)
|
||||
siteAdapter.clearCheck()
|
||||
}
|
||||
}
|
||||
siteAdapter.checkChangeListener = object : OrderSiteItemAdapter.CheckListener {
|
||||
override fun canSwitchLine(): Boolean {
|
||||
return viewModel?.canSwitchLine()?:true
|
||||
}
|
||||
|
||||
override fun onCheckListener(siteInfo: SiteInfoResponse.SiteInfo?) {
|
||||
// 设置临时选中的
|
||||
viewModel?.checkSiteClick(siteInfo)
|
||||
}
|
||||
|
||||
}
|
||||
tv_site_cancle.onClick {
|
||||
viewModel?.resetData()
|
||||
}
|
||||
tv_site_submit.onClick {
|
||||
CharterPassengerModel.switchLine5minWait?.let {
|
||||
if (!it.isDisposed) {
|
||||
ToastCharterUtils.showShort("选择线路后5分钟内不可用选")
|
||||
return@onClick
|
||||
}
|
||||
}
|
||||
viewModel?.changeSites(siteList)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private 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
|
||||
}
|
||||
}
|
||||
|
||||
override 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()
|
||||
}
|
||||
}
|
||||
|
||||
override fun setVisableByTrun(
|
||||
showBiz: Boolean,
|
||||
showNetError: Boolean,
|
||||
showNorOrder: Boolean,
|
||||
showLoading: Boolean
|
||||
) {
|
||||
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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override 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) {
|
||||
setViewGone()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun setEnableSiteStatus(cancleAndSubmit: Boolean) {
|
||||
if (cancleAndSubmit) {
|
||||
g_side_cancle_submit_group?.visibility = View.VISIBLE
|
||||
} else {
|
||||
g_side_cancle_submit_group?.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
override fun lineAdapterSubmit(lineInfo: LineInfoResponse.LineInfo) {
|
||||
lineAdapter.submitLine(lineInfo)
|
||||
}
|
||||
|
||||
override 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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun lineAdapterSetData(
|
||||
lineInfo: List<LineInfoResponse.LineInfo>,
|
||||
checkLine: LineInfoResponse.LineInfo?
|
||||
) {
|
||||
lineAdapter.setDataList(lineInfo,checkLine)
|
||||
}
|
||||
|
||||
override fun siteAdapterEnableIndex(index: Int) {
|
||||
siteAdapter.setEnableIndex(index)
|
||||
}
|
||||
|
||||
override fun siteAdapterSetData(siteInfo: List<SiteInfoResponse.SiteInfo>) {
|
||||
siteAdapter.setDataList(siteInfo)
|
||||
}
|
||||
|
||||
private fun setViewGone(){
|
||||
goneViewListener?.goneAllView()
|
||||
}
|
||||
|
||||
init {
|
||||
try {
|
||||
initView()
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,419 @@
|
||||
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
|
||||
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
|
||||
import com.mogo.eagle.core.utilcode.util.GsonUtils
|
||||
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
|
||||
|
||||
class SelectLineViewModel : ViewModel(), IOrderStatusChangeListener {
|
||||
|
||||
private val TAG = SelectLineViewModel::class.java.simpleName
|
||||
|
||||
private val TAGLINELOOP = "LineSiteViewLineLoop"
|
||||
|
||||
private var viewCallback: SelectLineViewCallback? = null
|
||||
|
||||
|
||||
// 成功提交给后台得线路
|
||||
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 subscribeSelectLine: Disposable? = null
|
||||
private var subscribeSelectSite: Disposable? = null
|
||||
|
||||
/**
|
||||
* 接收司机屏反馈信息
|
||||
*/
|
||||
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(
|
||||
SceneConstant.M_BUS_P + BaseDPMsg.TAG,
|
||||
"接受数据:切换站点${msg}"
|
||||
)
|
||||
if (msg.isConfirmed) {
|
||||
if (msg.arriveStatus == 2) {
|
||||
return@post
|
||||
}
|
||||
ToastCharterUtils.showShort("站点确定")
|
||||
viewCallback?.setEnableSiteStatus(true)
|
||||
checkLine = tempCheckLine
|
||||
checkSite = tempCheckSite
|
||||
tempCheckLine = null
|
||||
tempCheckSite = null
|
||||
checkLine?.let {
|
||||
viewCallback?.lineAdapterSubmit(it)
|
||||
}
|
||||
viewCallback?.hideDataDriverAgree()
|
||||
CharterPassengerModel.cleanbroadcastListInfo(checkSite)
|
||||
CharterPassengerModel.queryOrder()
|
||||
} else {
|
||||
ToastCharterUtils.showShort("司机端拒绝请重新选择")
|
||||
viewCallback?.hideDataDriverRefuse()
|
||||
}
|
||||
RxUtils.disposeSubscribe(subscribeSelectSite)
|
||||
BizLoopManager.removeLoopFunction(BusPassengerFunctionOrderPresenter.TAGLINELOOP)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
CharterPassengerModel.setStatusChangeListener(TAG, this)
|
||||
CallerTelematicListenerManager.addListener(TAG, msgReceived)
|
||||
}
|
||||
|
||||
override fun onCleared() {
|
||||
super.onCleared()
|
||||
this.viewCallback = null
|
||||
RxUtils.disposeSubscribe(subscribeSelectLine)
|
||||
RxUtils.disposeSubscribe(subscribeSelectSite)
|
||||
BizLoopManager.removeLoopFunction(TAGLINELOOP)
|
||||
CharterPassengerModel.setStatusChangeListener(TAG, null)
|
||||
CallerTelematicListenerManager.removeListener(TAG)
|
||||
}
|
||||
|
||||
override fun onStatusChange(currentStatus: OrderStatusEnum) {
|
||||
UiThreadHandler.post {
|
||||
needRunUI(currentStatus)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun setVIewCallback(viewCallback: SelectLineViewCallback) {
|
||||
this.viewCallback = viewCallback
|
||||
val currentOrderStatus = CharterPassengerModel.getCurrentOrderStatus()
|
||||
needRunUI(currentOrderStatus)
|
||||
extracted()
|
||||
}
|
||||
|
||||
fun checkLineClick(lineInfo: LineInfoResponse.LineInfo) {
|
||||
checkLine4View()
|
||||
tempCheckLine = lineInfo
|
||||
querySitesByLineId(lineInfo)
|
||||
}
|
||||
|
||||
private fun checkLine4View() {
|
||||
tempCheckSite = null
|
||||
viewCallback?.setEnableSiteStatus(false)
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
viewCallback?.setEnableSiteStatus(false)
|
||||
queryLineList()
|
||||
}
|
||||
}
|
||||
|
||||
private fun needRunUI(currentStatus: OrderStatusEnum) {
|
||||
when (currentStatus) {
|
||||
OrderStatusEnum.OrderNoLine -> {
|
||||
viewCallback?.setVisableByTrun(showBiz = true)
|
||||
extracted()
|
||||
}
|
||||
|
||||
OrderStatusEnum.OrdersWithLine -> {
|
||||
viewCallback?.setVisableByTrun(showBiz = true)
|
||||
}
|
||||
|
||||
else -> {
|
||||
viewCallback?.setVisableByTrun(showNorOrder = true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun queryLineList() {
|
||||
viewCallback?.setVisableByTrun(showLoading = true)
|
||||
BusPassengerServiceManager.queryLineList(AbsMogoApplication.getApp(), object :
|
||||
OchCommonServiceCallback<LineInfoListResponse> {
|
||||
override fun onSuccess(data: LineInfoListResponse?) {
|
||||
if (data?.data == null) return
|
||||
viewCallback?.setVisableByTrun(showBiz = true)
|
||||
viewCallback?.lineAdapterSetData(data.data, checkLine)
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String) {
|
||||
ToastCharterUtils.showShort("查询线路失败")
|
||||
viewCallback?.setVisableByTrun(showNetError = true)
|
||||
}
|
||||
|
||||
override fun onError() {
|
||||
super.onError()
|
||||
viewCallback?.setVisableByTrun(showNetError = true)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
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(SceneConstant.M_BUS_P + BaseDPMsg.TAG, "发送数据:切换站点${msg}")
|
||||
}
|
||||
viewCallback?.hideDataWaitDriverMsg()
|
||||
// 启动查看和司机端链接
|
||||
BizLoopManager.setLoopFunction(
|
||||
BusPassengerFunctionOrderPresenter.TAGLINELOOP,
|
||||
LoopInfo(3, ::checkServerStatus)
|
||||
)
|
||||
|
||||
RxUtils.disposeSubscribe(subscribeSelectSite)
|
||||
subscribeSelectSite = RxUtils.createSubscribe(120_000) {
|
||||
ToastCharterUtils.showShort("请联系安全员确认")
|
||||
viewCallback?.hideDataDriverRefuse()
|
||||
}
|
||||
}
|
||||
|
||||
private fun querySitesByLineId(checkLine: LineInfoResponse.LineInfo) {
|
||||
BusPassengerServiceManager.queryLineSiteList(
|
||||
AbsMogoApplication.getApp(),
|
||||
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
|
||||
viewCallback?.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
|
||||
viewCallback?.siteAdapterEnableIndex(index)
|
||||
}
|
||||
siteInfos.forEach {
|
||||
if (it.siteId == checkSite?.siteId) {
|
||||
it.isCheck = true
|
||||
return@forEach
|
||||
}
|
||||
}
|
||||
}
|
||||
viewCallback?.siteAdapterSetData(siteInfos)
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String?) {
|
||||
ToastCharterUtils.showShort("查询站点失败")
|
||||
viewCallback?.setVisableByTrun(showNetError = true)
|
||||
}
|
||||
|
||||
override fun onError() {
|
||||
super.onError()
|
||||
ToastCharterUtils.showShort("查询站点失败")
|
||||
viewCallback?.setVisableByTrun(showNetError = true)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private fun checkServerStatus() {
|
||||
if (!CallerTelematicManager.getClientConnStatus()) {
|
||||
ToastCharterUtils.showShort("断开和司机端连接、请联系安全员")
|
||||
BizLoopManager.removeLoopFunction(BusPassengerFunctionOrderPresenter.TAGLINELOOP)
|
||||
viewCallback?.hideDataDriverRefuse()
|
||||
CallerLogger.d(
|
||||
SceneConstant.M_BUS_P + BusPassengerFunctionOrderPresenter.TAG,
|
||||
"endAni666"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置数据
|
||||
*/
|
||||
fun resetData() {
|
||||
tempCheckLine = null
|
||||
tempCheckSite = null
|
||||
if(checkLine==null){// 没有提交线路
|
||||
queryLineList()
|
||||
viewCallback?.setEnableSiteStatus(true)
|
||||
}else{
|
||||
checkLine?.let {
|
||||
viewCallback?.setEnableSiteStatus(false)
|
||||
viewCallback?.lineAdapterSubmit(it)
|
||||
querySitesByLineId(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun checkSiteClick(siteInfo: SiteInfoResponse.SiteInfo?) {
|
||||
tempCheckSite = siteInfo
|
||||
if(checkSite!=null){
|
||||
checkSite?.let {
|
||||
if (it.siteId == siteInfo?.siteId) {// 站点相同 隐藏所有提交按钮
|
||||
viewCallback?.setEnableSiteStatus(false)
|
||||
} else {
|
||||
if(it.lineId == siteInfo?.lineId){// 线路相同显示单独提交
|
||||
viewCallback?.setEnableSiteStatus(true)
|
||||
}else{
|
||||
if(siteInfo==null){//没有选站点隐藏所有提交
|
||||
viewCallback?.setEnableSiteStatus(false)
|
||||
}else {
|
||||
viewCallback?.setEnableSiteStatus(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{
|
||||
viewCallback?.setEnableSiteStatus(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
|
||||
}
|
||||
|
||||
interface SelectLineViewCallback {
|
||||
fun hideDataWaitDriverMsg()
|
||||
fun setVisableByTrun(
|
||||
showBiz: Boolean = false,
|
||||
showNetError: Boolean = false,
|
||||
showNorOrder: Boolean = false,
|
||||
showLoading: Boolean = false
|
||||
)
|
||||
|
||||
fun hideDataDriverAgree()
|
||||
fun setEnableSiteStatus(cancleAndSubmit: Boolean)
|
||||
fun lineAdapterSubmit(lineInfo: LineInfoResponse.LineInfo)
|
||||
fun hideDataDriverRefuse()
|
||||
fun lineAdapterSetData(
|
||||
lineInfo: List<LineInfoResponse.LineInfo>,
|
||||
checkLine: LineInfoResponse.LineInfo?
|
||||
)
|
||||
fun siteAdapterEnableIndex(index: Int)
|
||||
fun siteAdapterSetData(siteInfo: List<SiteInfoResponse.SiteInfo>)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.ui.adapter
|
||||
package com.mogo.och.bus.passenger.ui.selectline.adapter
|
||||
|
||||
import android.content.Context
|
||||
import android.view.LayoutInflater
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.ui.adapter
|
||||
package com.mogo.och.bus.passenger.ui.selectline.adapter
|
||||
|
||||
import android.content.Context
|
||||
import android.view.LayoutInflater
|
||||
@@ -11,7 +11,6 @@ import androidx.recyclerview.widget.RecyclerView
|
||||
import com.mogo.och.bus.passenger.utils.ToastCharterUtils
|
||||
import com.mogo.och.bus.passenger.R
|
||||
import com.mogo.och.bus.passenger.bean.event.EventLineSites
|
||||
import com.mogo.och.bus.passenger.bean.response.LineInfoResponse
|
||||
import com.mogo.och.bus.passenger.bean.response.SiteInfoResponse
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.view;
|
||||
package com.mogo.och.bus.passenger.ui.selectline.layoutmanage;
|
||||
|
||||
import android.graphics.Rect;
|
||||
import android.view.View;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.view;
|
||||
package com.mogo.och.bus.passenger.ui.selectline.layoutmanage;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.DisplayMetrics;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.ui.dialogfragment.fragment
|
||||
package com.mogo.och.bus.passenger.ui.softcontrol
|
||||
|
||||
import android.animation.ObjectAnimator
|
||||
import android.animation.ValueAnimator
|
||||
@@ -27,10 +27,10 @@ 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.adapter.TemperatureAdapter
|
||||
import com.mogo.och.bus.passenger.ui.layoutmanage.PagerCenterSnapHelper
|
||||
import com.mogo.och.bus.passenger.view.HorizontalDecoration
|
||||
import com.mogo.och.bus.passenger.view.PickerLayoutManager
|
||||
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
|
||||
@@ -239,11 +239,7 @@ class M1SoftFragment :
|
||||
pickerLayoutManager.scaleDownDistance = 0.8f
|
||||
|
||||
val data = getData()
|
||||
val adapter = TemperatureAdapter(
|
||||
requireContext(),
|
||||
data,
|
||||
rv_aircondition_temperature
|
||||
)
|
||||
val adapter = TemperatureAdapter(requireContext(), data, rv_aircondition_temperature)
|
||||
val snapHelper = PagerCenterSnapHelper()
|
||||
snapHelper.attachToRecyclerView(rv_aircondition_temperature)
|
||||
rv_aircondition_temperature.layoutManager = pickerLayoutManager
|
||||
@@ -0,0 +1,762 @@
|
||||
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.util.AttributeSet
|
||||
import android.view.Gravity
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.animation.LinearInterpolator
|
||||
import android.widget.RadioButton
|
||||
import android.widget.SeekBar
|
||||
import android.widget.TextView
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.findViewTreeViewModelStoreOwner
|
||||
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.eagle.core.utilcode.mogo.storage.SharedPrefsMgr
|
||||
import com.mogo.eagle.core.utilcode.util.ClickUtils
|
||||
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.callback.IClearViewCallback
|
||||
import com.mogo.och.bus.passenger.ui.selectline.layoutmanage.PickerLayoutManager
|
||||
import com.mogo.och.bus.passenger.ui.softcontrol.adapter.TemperatureAdapter
|
||||
import com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage.HorizontalDecoration
|
||||
import com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage.PagerCenterSnapHelper
|
||||
import com.mogo.och.bus.passenger.utils.ToastCharterUtils
|
||||
import com.mogo.och.common.module.utils.RxUtils
|
||||
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.view.dbv_wind
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.g_aircondition_setting
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.g_light_setting
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.g_voice_setting
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.iv_bottom_light_setting
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.iv_end_voice
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.iv_loading
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.iv_temperature_select
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.iv_top_light_setting
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.iv_voice
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.rb_pattern_automatic
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.rb_pattern_heating
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.rb_pattern_refrigeration
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.rb_pattern_ventilate
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.rb_wind_speed_high
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.rb_wind_speed_low
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.rb_wind_speed_middle
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.rg_select_function
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.rg_setting_pattern
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.rg_setting_windspeed
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.rv_aircondition_temperature
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.sb_voice_bar
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.tv_aircondition_switch
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.tv_current_voice_value
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.tv_light_atmosphere
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.tv_light_top_01
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.tv_light_top_02
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.tv_setting_aircondition
|
||||
import kotlinx.android.synthetic.main.m1_soft_fragment.view.tv_temperature_title
|
||||
import me.jessyan.autosize.utils.AutoSizeUtils
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class SoftControlView : ConstraintLayout, SoftControlViewModel.SoftControlCallback {
|
||||
|
||||
private val TAG = "OrderInfoView"
|
||||
|
||||
private var viewModel:SoftControlViewModel?=null
|
||||
|
||||
constructor(context: Context) : super(context)
|
||||
|
||||
constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet)
|
||||
|
||||
constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(
|
||||
context,
|
||||
attributeSet,
|
||||
defStyleAttr
|
||||
)
|
||||
|
||||
constructor(
|
||||
context: Context,
|
||||
attributeSet: AttributeSet,
|
||||
defStyleAttr: Int,
|
||||
defStyleRes: Int
|
||||
) : super(context, attributeSet, defStyleAttr, defStyleRes)
|
||||
|
||||
var goneViewListener: IClearViewCallback?=null
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
private fun initView() {
|
||||
LayoutInflater.from(context).inflate(R.layout.m1_soft_fragment, this, true)
|
||||
onClick {
|
||||
setViewGone()
|
||||
}
|
||||
}
|
||||
|
||||
private fun setViewGone(){
|
||||
goneViewListener?.goneAllView()
|
||||
}
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
viewModel = findViewTreeViewModelStoreOwner()?.let {
|
||||
ViewModelProvider(it).get(SoftControlViewModel::class.java)
|
||||
}
|
||||
|
||||
rg_select_function.setOnCheckedChangeListener { _, 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(viewModel)
|
||||
setAirConditionAni()
|
||||
setLightListener(viewModel)
|
||||
setVoiceInfo()
|
||||
}
|
||||
|
||||
|
||||
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 + M1SoftFragment.TAG, "关闭暖风")
|
||||
heaterAirEnable(true)
|
||||
viewModel?.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(context,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(context,R.color.bus_p_m1_6647576e))
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启暖风机
|
||||
*/
|
||||
private fun openHeater() {
|
||||
CallerLogger.d(SceneConstant.M_BUS_P + M1SoftFragment.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.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 = M1SoftFragment.touchTag
|
||||
rb_wind_speed_middle.toggle()
|
||||
switch = 1
|
||||
}
|
||||
}
|
||||
if (!tv_aircondition_switch.isChecked) {
|
||||
return
|
||||
}
|
||||
viewModel?.openAndSetHeader(switch)
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭空调
|
||||
*/
|
||||
private fun closeAircondition() {
|
||||
CallerLogger.d(SceneConstant.M_BUS_P + M1SoftFragment.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 -> {}
|
||||
}
|
||||
viewModel?.closeAircondition(modeCmd, windSpeedCmd, temperatureCmd)
|
||||
}
|
||||
|
||||
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 openAircondition() {
|
||||
CallerLogger.d(SceneConstant.M_BUS_P + M1SoftFragment.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
|
||||
}
|
||||
viewModel?.openAndSetAircondition(modeCmd, windSpeedCmd, temperatureCmd)
|
||||
}
|
||||
|
||||
private fun setCheckAir(adapter: TemperatureAdapter, tag:Temperature){
|
||||
adapter.setCheckIndex(tag.index)
|
||||
currentTemperature = tag
|
||||
if (rv_aircondition_temperature.tag == M1SoftFragment.touchTag) {
|
||||
rv_aircondition_temperature.tag = null
|
||||
return
|
||||
} else {
|
||||
SoundPoolHelper.getSoundPoolHelper()
|
||||
.playSoundWithRedId(context, R.raw.bus_di)
|
||||
}
|
||||
openAircondition()
|
||||
}
|
||||
|
||||
|
||||
// region 灯
|
||||
private fun setLightListener(viewModel: SoftControlViewModel?) {
|
||||
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)
|
||||
viewModel?.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)
|
||||
viewModel?.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)
|
||||
viewModel?.setAtmosphereLightData2(isChecked)
|
||||
setLightAtmosphereView(isChecked,true)
|
||||
}
|
||||
}
|
||||
|
||||
override fun setLightTop1View(leftLight: Boolean, isFirst: Boolean){
|
||||
tv_light_top_01?.let {
|
||||
if (leftLight) {
|
||||
tv_light_top_01.text = context.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 = context.getString(R.string.bus_p_m1_open_light1)
|
||||
tv_light_top_01.isChecked = false
|
||||
if(!isFirst) ToastCharterUtils.showShort("关闭顶灯1")
|
||||
}
|
||||
}
|
||||
}
|
||||
override fun setLightTop2View(rightLight: Boolean, isFirst: Boolean){
|
||||
tv_light_top_02?.let {
|
||||
if (rightLight) {
|
||||
tv_light_top_02.text = context.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 = context.getString(R.string.bus_p_m1_open_light2)
|
||||
tv_light_top_02.isChecked = false
|
||||
if(!isFirst) ToastCharterUtils.showShort("关闭顶灯2")
|
||||
}
|
||||
}
|
||||
}
|
||||
override fun setLightAtmosphereView(atmosphereLight: Boolean, isFirst: Boolean){
|
||||
tv_light_atmosphere?.let {
|
||||
if (atmosphereLight) {
|
||||
tv_light_atmosphere.text = context.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 = context.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发生变化
|
||||
*/
|
||||
override 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(context, R.color.bus_p_m1_2cbffc)
|
||||
val color1060FF = ContextCompat.getColor(context, R.color.bus_p_m1_1060ff)
|
||||
val color96A5C2 = ContextCompat.getColor(context, 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 : SeekBar.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
|
||||
|
||||
|
||||
|
||||
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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun setAirconditionListener(viewModel: SoftControlViewModel?) {
|
||||
// 开关空调或暖风机
|
||||
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 + M1SoftFragment.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(
|
||||
context,
|
||||
PickerLayoutManager.HORIZONTAL,
|
||||
false
|
||||
)
|
||||
pickerLayoutManager.isChangeAlpha = true
|
||||
pickerLayoutManager.scaleDownBy = 0.29f
|
||||
pickerLayoutManager.scaleDownDistance = 0.8f
|
||||
|
||||
val data = getData()
|
||||
val adapter = TemperatureAdapter(context, 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(context).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) {
|
||||
RxUtils.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)
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
init {
|
||||
try {
|
||||
initView()
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据车的状态会写页面状态
|
||||
*/
|
||||
override 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 = M1SoftFragment.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 -> {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,270 @@
|
||||
package com.mogo.och.bus.passenger.ui.softcontrol
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
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.Companion.M_BUS_P
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
|
||||
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 com.mogo.och.common.module.utils.RxUtils
|
||||
import io.reactivex.disposables.Disposable
|
||||
|
||||
class SoftControlViewModel: ViewModel(), LightAirconditionDoorCallback {
|
||||
|
||||
private val TAG = SoftControlViewModel::class.java.simpleName
|
||||
|
||||
private var viewCallback:SoftControlCallback?=null
|
||||
|
||||
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
|
||||
|
||||
|
||||
init {
|
||||
|
||||
}
|
||||
|
||||
override fun onCleared() {
|
||||
super.onCleared()
|
||||
this.viewCallback = null
|
||||
LightAirconditionDoorStatusManager.removeListener(TAG)
|
||||
}
|
||||
|
||||
fun setViewCallback(viewCallback:SoftControlCallback){
|
||||
this.viewCallback = viewCallback
|
||||
LightAirconditionDoorStatusManager.addListener(TAG, this)
|
||||
}
|
||||
|
||||
/**
|
||||
* 空调状态变化
|
||||
*/
|
||||
override fun onAirconditionStatusCallback(heaterIsOpen: Boolean, airconditionStatus: AirconditionStatus, isFirst: Boolean) {
|
||||
CallerLogger.d(M_BUS_P + TAG,
|
||||
"回写--空调开关:${LightAirconditionDoorStatusManager.airconditionStatus.isOpen}、" +
|
||||
"空调温度:${LightAirconditionDoorStatusManager.airconditionStatus.temperature}" +
|
||||
"空调模式:${LightAirconditionDoorStatusManager.airconditionStatus.pattert}" +
|
||||
"空调风速:${LightAirconditionDoorStatusManager.airconditionStatus.windSpeed}")
|
||||
UiThreadHandler.post {
|
||||
if(airconditionStatus.isOpen){
|
||||
viewCallback?.setAirconditionHeaterView(
|
||||
airconditionStatus.isOpen,
|
||||
heaterIsOpen,
|
||||
airconditionStatus.temperature,
|
||||
airconditionStatus.pattert,
|
||||
airconditionStatus.windSpeed
|
||||
)
|
||||
}else{
|
||||
viewCallback?.setAirconditionHeaterView(
|
||||
airconditionStatus.isOpen,
|
||||
heaterIsOpen,
|
||||
airconditionStatus.temperature,
|
||||
0,
|
||||
0
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 暖风机状态变化
|
||||
*/
|
||||
override fun onHeaterStatusCallback(airconditionIsOpen:Boolean, heaterStatue: HeaterStatue, isFirst: Boolean) {
|
||||
CallerLogger.d(M_BUS_P + TAG,
|
||||
"回写--暖风机开关:${heaterStatue.isOpen}、" +
|
||||
"风速:${heaterStatue.windSpeed}")
|
||||
UiThreadHandler.post {
|
||||
if(heaterStatue.isOpen) {
|
||||
viewCallback?.setAirconditionHeaterView(
|
||||
airconditionIsOpen,
|
||||
heaterStatue.isOpen,
|
||||
0,
|
||||
0,
|
||||
heaterStatue.windSpeed
|
||||
)
|
||||
}else{
|
||||
viewCallback?.setAirconditionHeaterView(
|
||||
airconditionIsOpen,
|
||||
heaterStatue.isOpen,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 灯状态变化
|
||||
*/
|
||||
override fun onLightTop1Callback(lightStatus: LightStatus, isFirst: Boolean) {
|
||||
CallerLogger.d(M_BUS_P + TAG,
|
||||
"回写--顶灯1开关:${lightStatus.isOpenLight1}、" +
|
||||
"顶灯2开关:${lightStatus.isOpenLight2}、" +
|
||||
"氛围灯开关:${lightStatus.isOpenatmosphere}、")
|
||||
UiThreadHandler.post {
|
||||
viewCallback?.setLightTop1View(lightStatus.isOpenLight1,isFirst)
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 灯状态变化
|
||||
*/
|
||||
override fun onLightTop2Callback(lightStatus: LightStatus, isFirst: Boolean) {
|
||||
CallerLogger.d(M_BUS_P + TAG,
|
||||
"回写--顶灯1开关:${lightStatus.isOpenLight1}、" +
|
||||
"顶灯2开关:${lightStatus.isOpenLight2}、" +
|
||||
"氛围灯开关:${lightStatus.isOpenatmosphere}、")
|
||||
UiThreadHandler.post {
|
||||
viewCallback?.setLightTop2View(lightStatus.isOpenLight2,isFirst)
|
||||
viewCallback?.setLightView(lightStatus.isOpenLight1,lightStatus.isOpenLight2)
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 灯状态变化
|
||||
*/
|
||||
override fun onLightAtmosphereCallback(lightStatus: LightStatus, isFirst: Boolean) {
|
||||
CallerLogger.d(M_BUS_P + TAG,
|
||||
"回写--顶灯1开关:${lightStatus.isOpenLight1}、" +
|
||||
"顶灯2开关:${lightStatus.isOpenLight2}、" +
|
||||
"氛围灯开关:${lightStatus.isOpenatmosphere}、")
|
||||
UiThreadHandler.post {
|
||||
viewCallback?.setLightAtmosphereView(lightStatus.isOpenatmosphere,isFirst)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置空调
|
||||
*/
|
||||
fun openAndSetAircondition(modeCmd: Int, windSpeedCmd: Int, temperatureCmd: Int) {
|
||||
CallerLogger.d(M_BUS_P + TAG, "" +
|
||||
"打开空调,模式$modeCmd--档位${windSpeedCmd}--温度:$temperatureCmd")
|
||||
CallerAutoPilotControlManager.sendRoboBusJinlvM1AirConditionerCmd(1,modeCmd,windSpeedCmd,temperatureCmd)
|
||||
RxUtils.disposeSubscribe(airconditionDisposable)
|
||||
airconditionDisposable = RxUtils.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(M_BUS_P + TAG, "关闭空调")
|
||||
CallerAutoPilotControlManager.sendRoboBusJinlvM1AirConditionerCmd(2,modeCmd,windSpeedCmd,temperatureCmd)
|
||||
RxUtils.disposeSubscribe(airconditionDisposable)
|
||||
airconditionDisposable = RxUtils.createSubscribe(10000){
|
||||
if (LightAirconditionDoorStatusManager.airconditionStatus.isOpen) {
|
||||
ToastCharterUtils.showShort("控制系统繁忙,请稍后再试")
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 设置暖风
|
||||
*/
|
||||
fun openAndSetHeader(windSpeedCmd: Int) {
|
||||
CallerLogger.d(M_BUS_P + TAG, "打开暖风机、档位${windSpeedCmd}")
|
||||
CallerAutoPilotControlManager.sendRoboBusJinlvM1HeaderCmd(1,windSpeedCmd)
|
||||
RxUtils.disposeSubscribe(heaterDisposable)
|
||||
heaterDisposable = RxUtils.createSubscribe(10000){
|
||||
if (!LightAirconditionDoorStatusManager.heaterStatue.isOpen&&
|
||||
LightAirconditionDoorStatusManager.heaterStatue.windSpeed!=windSpeedCmd) {
|
||||
ToastCharterUtils.showShort("暖风机操作未生效,请稍后重试吧~")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun closeHeader(){
|
||||
CallerLogger.d(M_BUS_P + TAG, "关闭暖风机")
|
||||
CallerAutoPilotControlManager.sendRoboBusJinlvM1HeaderCmd(2,0)
|
||||
RxUtils.disposeSubscribe(heaterDisposable)
|
||||
heaterDisposable = RxUtils.createSubscribe(10000){
|
||||
if (LightAirconditionDoorStatusManager.heaterStatue.isOpen) {
|
||||
ToastCharterUtils.showShort("暖风机操作未生效,请稍后重试吧~")//还是开着的
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun setLightData1(leftLight: Boolean){
|
||||
CallerLogger.d(M_BUS_P + TAG, "顶灯2:$leftLight")
|
||||
RxUtils.disposeSubscribe(subscribeLightTop1)
|
||||
subscribeLightTop1 = if(leftLight){
|
||||
CallerAutoPilotControlManager.sendRoboBusJinlvM1MainLamp1Cmd(1)
|
||||
RxUtils.createSubscribe{
|
||||
if (!LightAirconditionDoorStatusManager.lightStatus.isOpenLight1) {
|
||||
ToastCharterUtils.showShort("控制系统繁忙,请稍后再试")
|
||||
}
|
||||
}
|
||||
}else{
|
||||
CallerAutoPilotControlManager.sendRoboBusJinlvM1MainLamp1Cmd(2)
|
||||
RxUtils.createSubscribe{
|
||||
if (LightAirconditionDoorStatusManager.lightStatus.isOpenLight1) {
|
||||
ToastCharterUtils.showShort("控制系统繁忙,请稍后再试")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
fun setLightData2(rightLight: Boolean){
|
||||
CallerLogger.d(M_BUS_P + TAG, "顶灯1:$rightLight")
|
||||
RxUtils.disposeSubscribe(subscribeLightTop2)
|
||||
subscribeLightTop2 = if(rightLight){
|
||||
CallerAutoPilotControlManager.sendRoboBusJinlvM1MainLamp2Cmd(1)
|
||||
RxUtils.createSubscribe{
|
||||
if (!LightAirconditionDoorStatusManager.lightStatus.isOpenLight2) {
|
||||
ToastCharterUtils.showShort("控制系统繁忙,请稍后再试")
|
||||
}
|
||||
}
|
||||
}else{
|
||||
CallerAutoPilotControlManager.sendRoboBusJinlvM1MainLamp2Cmd(2)
|
||||
RxUtils.createSubscribe{
|
||||
if (LightAirconditionDoorStatusManager.lightStatus.isOpenLight2) {
|
||||
ToastCharterUtils.showShort("控制系统繁忙,请稍后再试")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
fun setAtmosphereLightData2(atmosphereLight: Boolean){
|
||||
CallerLogger.d(M_BUS_P + TAG, "氛围灯:$atmosphereLight")
|
||||
RxUtils.disposeSubscribe(subscribeLightAtmosphere)
|
||||
subscribeLightAtmosphere = if (atmosphereLight) {
|
||||
CallerAutoPilotControlManager.sendRoboBusJinlvM1SmallLampCmd(1)
|
||||
RxUtils.createSubscribe{
|
||||
if (!LightAirconditionDoorStatusManager.lightStatus.isOpenatmosphere) {
|
||||
ToastCharterUtils.showShort("控制系统繁忙,请稍后再试")
|
||||
}
|
||||
}
|
||||
} else {
|
||||
CallerAutoPilotControlManager.sendRoboBusJinlvM1SmallLampCmd(2)
|
||||
RxUtils.createSubscribe{
|
||||
if (LightAirconditionDoorStatusManager.lightStatus.isOpenatmosphere) {
|
||||
ToastCharterUtils.showShort("控制系统繁忙,请稍后再试")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
interface SoftControlCallback{
|
||||
/**
|
||||
* 根据车的状态会写页面状态
|
||||
*/
|
||||
fun setAirconditionHeaterView(
|
||||
airIsOpen: Boolean,
|
||||
heaterIsOpen: Boolean,
|
||||
temperatureCmd: Int,
|
||||
pattern: Int,
|
||||
windSpeed: Int
|
||||
)
|
||||
fun setLightTop1View(leftLight: Boolean, isFirst: Boolean)
|
||||
fun setLightTop2View(rightLight: Boolean, isFirst: Boolean)
|
||||
fun setLightView(leftLight: Boolean, rightLight: Boolean)
|
||||
fun setLightAtmosphereView(atmosphereLight: Boolean, isFirst: Boolean)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.ui.adapter;
|
||||
package com.mogo.och.bus.passenger.ui.softcontrol.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.ui.layoutmanage;
|
||||
package com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage;
|
||||
|
||||
import android.graphics.PointF;
|
||||
import android.os.Build;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.ui.layoutmanage;
|
||||
package com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.ui.layoutmanage;
|
||||
package com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.view;
|
||||
package com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage;
|
||||
|
||||
import android.graphics.Rect;
|
||||
import android.view.View;
|
||||
@@ -8,7 +8,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.mogo.commons.AbsMogoApplication;
|
||||
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr;
|
||||
import com.mogo.och.bus.passenger.ui.adapter.TemperatureAdapter;
|
||||
import com.mogo.och.bus.passenger.ui.softcontrol.adapter.TemperatureAdapter;
|
||||
|
||||
public class HorizontalDecoration extends RecyclerView.ItemDecoration {
|
||||
private int space = 0;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.ui.layoutmanage;
|
||||
package com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage;
|
||||
|
||||
public class ItemTransformation {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.ui.layoutmanage
|
||||
package com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage
|
||||
|
||||
import android.view.View
|
||||
import androidx.recyclerview.widget.OrientationHelper
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.view
|
||||
package com.mogo.och.bus.passenger.ui.softcontrol.view
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Bitmap
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.view;
|
||||
package com.mogo.och.bus.passenger.ui.softcontrol.view;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
@@ -18,27 +18,15 @@ import java.lang.ref.WeakReference;
|
||||
public class DrawableCheckBox extends androidx.appcompat.widget.AppCompatCheckBox {
|
||||
|
||||
public DrawableCheckBox(Context context, AttributeSet attrs, int defStyle) {
|
||||
|
||||
super(context, attrs, defStyle);
|
||||
|
||||
// TODO Auto-generated constructor stub
|
||||
|
||||
}
|
||||
|
||||
public DrawableCheckBox(Context context, AttributeSet attrs) {
|
||||
|
||||
super(context, attrs);
|
||||
|
||||
// TODO Auto-generated constructor stub
|
||||
|
||||
}
|
||||
|
||||
public DrawableCheckBox(Context context) {
|
||||
|
||||
super(context);
|
||||
|
||||
// TODO Auto-generated constructor stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -59,11 +47,8 @@ public class DrawableCheckBox extends androidx.appcompat.widget.AppCompatCheckBo
|
||||
int y = getWidth();
|
||||
canvas.translate((getWidth() - bodyWidth) / 2, 0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
super.onDraw(canvas);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.view.statusbar
|
||||
package com.mogo.och.bus.passenger.ui.statusbar
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.view.statusbar
|
||||
package com.mogo.och.bus.passenger.ui.statusbar
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
@@ -23,7 +23,8 @@ import com.mogo.eagle.core.function.hmi.ui.widget.DemoModeView
|
||||
import com.mogo.eagle.core.utilcode.util.ClickUtils
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
|
||||
import com.mogo.och.bus.passenger.R
|
||||
import com.mogo.och.bus.passenger.bean.event.DebugView
|
||||
import com.mogo.och.bus.passenger.ui.debugview.DebugEvent
|
||||
import com.mogo.och.bus.passenger.ui.debugview.DebugView
|
||||
import kotlinx.android.synthetic.main.m1_statusview_datetime.view.*
|
||||
import me.jessyan.autosize.utils.AutoSizeUtils
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
@@ -52,7 +53,7 @@ class StatusBarView @JvmOverloads constructor(
|
||||
mHits[mHits.size - 1] = SystemClock.uptimeMillis()
|
||||
if (mHits[0] >= (SystemClock.uptimeMillis() - DURATION)) {
|
||||
mHits = LongArray(COUNTS) //重新初始化数组
|
||||
EventBus.getDefault().post(DebugView(type))
|
||||
EventBus.getDefault().post(DebugEvent(type))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.view
|
||||
package com.mogo.och.bus.passenger.ui.toast
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.view
|
||||
package com.mogo.och.bus.passenger.ui.video
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
@@ -47,8 +47,8 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer {
|
||||
private lateinit var layoutBottom: ConstraintLayout
|
||||
private lateinit var vPpenLeft: View
|
||||
|
||||
private var fullVideoPlayer:ConsultVideoPlayer?=null
|
||||
var smalllPlayer:ConsultVideoPlayer?=null
|
||||
private var fullVideoPlayer: ConsultVideoPlayer?=null
|
||||
var smalllPlayer: ConsultVideoPlayer?=null
|
||||
|
||||
private var currentTime = 0
|
||||
|
||||
@@ -457,7 +457,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer {
|
||||
return Math.ceil((25 * context.resources.displayMetrics.density).toDouble()).toInt()
|
||||
}
|
||||
|
||||
fun clearFullscreenLayout(gsyVideoPlayer:ConsultVideoPlayer) {
|
||||
fun clearFullscreenLayout(gsyVideoPlayer: ConsultVideoPlayer) {
|
||||
mIfCurrentIsFullscreen = false
|
||||
val delay = 100
|
||||
gsyVideoPlayer.smalllPlayer = null
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.ui.dialogfragment.fragment
|
||||
package com.mogo.och.bus.passenger.ui.video
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
@@ -7,11 +7,10 @@ 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.adapter.RecyclerVideoAdapter
|
||||
import com.mogo.och.bus.passenger.ui.layoutmanage.CarouselLayoutManager
|
||||
import com.mogo.och.bus.passenger.ui.layoutmanage.CarouselZoomPostLayoutListener
|
||||
import com.mogo.och.bus.passenger.ui.layoutmanage.CenterScrollListener
|
||||
import com.mogo.och.bus.passenger.view.ConsultVideoPlayer
|
||||
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
|
||||
@@ -67,7 +66,7 @@ class M1VideoFragment :
|
||||
}
|
||||
|
||||
override fun pageStop() {
|
||||
val (_: kotlin.Int, player) = getPlayer(carouselLayoutManager)
|
||||
val (_, player) = getPlayer(carouselLayoutManager)
|
||||
if (player is ConsultVideoPlayer) {
|
||||
player.onVideoPause()
|
||||
}
|
||||
@@ -92,7 +91,7 @@ class M1VideoFragment :
|
||||
rvVideoPlaylist
|
||||
)
|
||||
recyclerVideoAdapter.setOnThumbImageClilckListener {
|
||||
val (_: kotlin.Int, player) = getPlayer(carouselLayoutManager)
|
||||
val (_, player) = getPlayer(carouselLayoutManager)
|
||||
if (player is ConsultVideoPlayer) {
|
||||
player.onVideoReset()
|
||||
player.thumbImageViewLayout.visibility = View.VISIBLE
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.ui.adapter;
|
||||
package com.mogo.och.bus.passenger.ui.video.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.View;
|
||||
@@ -6,7 +6,7 @@ import android.view.View;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.mogo.och.bus.passenger.R;
|
||||
import com.mogo.och.bus.passenger.view.ConsultVideoPlayer;
|
||||
import com.mogo.och.bus.passenger.ui.video.ConsultVideoPlayer;
|
||||
import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder;
|
||||
|
||||
public class RecyclerItemVideoHolder extends RecyclerView.ViewHolder {
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mogo.och.bus.passenger.ui.adapter;
|
||||
package com.mogo.och.bus.passenger.ui.video.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -1,18 +0,0 @@
|
||||
package com.mogo.och.bus.passenger.ui.view
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import com.mogo.eagle.core.function.hmi.ui.widget.BlueToothView
|
||||
import com.mogo.och.bus.passenger.R
|
||||
|
||||
class EndOrderView @JvmOverloads constructor(
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = 0
|
||||
) : ConstraintLayout(context, attrs, defStyleAttr) {
|
||||
init {
|
||||
LayoutInflater.from(context).inflate(R.layout.m1_order_end, this, true)
|
||||
}
|
||||
}
|
||||
@@ -2,10 +2,9 @@ package com.mogo.och.bus.passenger.utils
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import com.mogo.och.bus.passenger.view.ConsultVideoPlayer
|
||||
import com.mogo.och.bus.passenger.ui.video.ConsultVideoPlayer
|
||||
import com.shuyu.gsyvideoplayer.GSYVideoManager
|
||||
import java.lang.Exception
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.mogo.och.bus.passenger.utils
|
||||
import android.view.View
|
||||
import com.mogo.eagle.core.utilcode.util.ActivityUtils
|
||||
import com.mogo.eagle.core.utilcode.util.ToastUtils
|
||||
import com.mogo.och.bus.passenger.view.ToastCharterView
|
||||
import com.mogo.och.bus.passenger.ui.toast.ToastCharterView
|
||||
import me.jessyan.autosize.utils.AutoSizeUtils
|
||||
|
||||
object ToastCharterUtils {
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
package com.mogo.och.bus.passenger.view;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Path;
|
||||
import android.graphics.RectF;
|
||||
import android.graphics.Region;
|
||||
import android.os.Build;
|
||||
import android.view.ViewTreeObserver;
|
||||
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
/**
|
||||
* 为RecyclerView设置圆角
|
||||
*/
|
||||
public class RecyclerViewCornerRadius extends RecyclerView.ItemDecoration {
|
||||
public static final String TAG = "RecyclerViewCornerRadius";
|
||||
|
||||
private RectF rectF;
|
||||
private Path path;
|
||||
|
||||
private int topLeftRadius = 0;
|
||||
private int topRightRadius = 0;
|
||||
private int bottomLeftRadius = 0;
|
||||
private int bottomRightRadius = 0;
|
||||
|
||||
public RecyclerViewCornerRadius(final RecyclerView recyclerView) {
|
||||
recyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
||||
@Override
|
||||
public void onGlobalLayout() {
|
||||
rectF = new RectF(0, 0, recyclerView.getMeasuredWidth(), recyclerView.getMeasuredHeight());
|
||||
|
||||
path = new Path();
|
||||
path.reset();
|
||||
path.addRoundRect(rectF, new float[]{
|
||||
topLeftRadius, topLeftRadius,
|
||||
topRightRadius, topRightRadius,
|
||||
bottomLeftRadius, bottomLeftRadius,
|
||||
bottomRightRadius, bottomRightRadius
|
||||
}, Path.Direction.CCW);
|
||||
|
||||
recyclerView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setCornerRadius(int radius) {
|
||||
this.topLeftRadius = radius;
|
||||
this.topRightRadius = radius;
|
||||
this.bottomLeftRadius = radius;
|
||||
this.bottomRightRadius = radius;
|
||||
}
|
||||
|
||||
public void setCornerRadius(int topLeftRadius, int topRightRadius, int bottomLeftRadius, int bottomRightRadius) {
|
||||
this.topLeftRadius = topLeftRadius;
|
||||
this.topRightRadius = topRightRadius;
|
||||
this.bottomLeftRadius = bottomLeftRadius;
|
||||
this.bottomRightRadius = bottomRightRadius;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
|
||||
c.clipRect(rectF);
|
||||
|
||||
|
||||
if (Build.VERSION.SDK_INT >= 28) {
|
||||
c.clipPath(path);
|
||||
} else {
|
||||
c.clipPath(path, Region.Op.REPLACE);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@
|
||||
tools:ignore="MissingDefaultResource">
|
||||
|
||||
|
||||
<com.mogo.och.bus.passenger.ui.view.bottom.impl.GoViewWithArrive
|
||||
<com.mogo.och.bus.passenger.ui.bottom.impl.GoViewWithArrive
|
||||
android:id="@+id/aciv_center_image"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
@@ -26,7 +26,7 @@
|
||||
android:layout_height="@dimen/dp_107"/>
|
||||
|
||||
|
||||
<com.mogo.och.bus.passenger.ui.view.bottom.impl.StopSiteView
|
||||
<com.mogo.och.bus.passenger.ui.bottom.impl.StopSiteView
|
||||
android:id="@+id/actv_stop_site"
|
||||
app:backageViewId="@+id/actv_stop_site_press"
|
||||
app:selectedDrawable="@drawable/charter_p_bottom_stopsite_press"
|
||||
@@ -48,7 +48,7 @@
|
||||
android:layout_width="@dimen/dp_359"
|
||||
android:layout_height="@dimen/dp_107"/>
|
||||
|
||||
<com.mogo.och.bus.passenger.ui.view.bottom.impl.CloseDoorView
|
||||
<com.mogo.och.bus.passenger.ui.bottom.impl.CloseDoorView
|
||||
android:id="@+id/actv_close_door"
|
||||
app:backageViewId="@+id/actv_close_door_press"
|
||||
app:selectedDrawable="@drawable/charter_p_bottom_closedoor_press"
|
||||
@@ -70,7 +70,7 @@
|
||||
android:layout_width="@dimen/dp_359"
|
||||
android:layout_height="@dimen/dp_107"/>
|
||||
|
||||
<com.mogo.och.bus.passenger.ui.view.bottom.impl.OpenDoorView
|
||||
<com.mogo.och.bus.passenger.ui.bottom.impl.OpenDoorView
|
||||
android:id="@+id/actv_open_door"
|
||||
android:gravity="center"
|
||||
app:backageViewId="@+id/actv_open_door_press"
|
||||
@@ -93,7 +93,7 @@
|
||||
android:layout_width="@dimen/dp_359"
|
||||
android:layout_height="@dimen/dp_107"/>
|
||||
|
||||
<com.mogo.och.bus.passenger.ui.view.bottom.BottomOrderInfoView
|
||||
<com.mogo.och.bus.passenger.ui.bottom.BottomOrderInfoView
|
||||
android:id="@+id/cl_order_time"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/actv_setting"
|
||||
@@ -112,7 +112,7 @@
|
||||
android:layout_width="@dimen/dp_359"
|
||||
android:layout_height="@dimen/dp_107"/>
|
||||
|
||||
<com.mogo.och.bus.passenger.ui.view.bottom.BottomCheckView
|
||||
<com.mogo.och.bus.passenger.ui.bottom.BottomCheckView
|
||||
android:id="@+id/actv_setting"
|
||||
app:backageViewId="@+id/actv_setting_press"
|
||||
app:selectedDrawable="@drawable/charter_p_bottom_softsettiing_press"
|
||||
@@ -135,7 +135,7 @@
|
||||
android:layout_width="@dimen/dp_359"
|
||||
android:layout_height="@dimen/dp_107"/>
|
||||
|
||||
<com.mogo.och.bus.passenger.ui.view.bottom.BottomCheckView
|
||||
<com.mogo.och.bus.passenger.ui.bottom.BottomCheckView
|
||||
android:id="@+id/actv_line"
|
||||
app:backageViewId="@+id/actv_line_press"
|
||||
app:selectedDrawable="@drawable/charter_p_bottom_line_press"
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<com.mogo.och.bus.passenger.ui.view.bottom.BottomBar
|
||||
<com.mogo.och.bus.passenger.ui.bottom.BottomBar
|
||||
android:id="@+id/bb_bottom_bar"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
|
||||
146
OCH/charter/passenger/src/main/res/layout/m1_itinerary_info.xml
Normal file
146
OCH/charter/passenger/src/main/res/layout/m1_itinerary_info.xml
Normal file
@@ -0,0 +1,146 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<!-- 速度 -->
|
||||
<LinearLayout
|
||||
android:id="@+id/ll_car_speed"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:layout_marginTop="@dimen/dp_74"
|
||||
android:layout_marginStart="@dimen/dp_29"
|
||||
android:layout_width="@dimen/dp_152"
|
||||
android:background="@drawable/bus_p_car_speed"
|
||||
android:orientation="vertical"
|
||||
android:layout_height="@dimen/dp_152">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_speed"
|
||||
android:text="0"
|
||||
android:textSize="@dimen/dp_60"
|
||||
android:gravity="center"
|
||||
android:layout_marginTop="@dimen/dp_12"
|
||||
android:textColor="@color/bus_p_m1_f5fbff"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
<TextView
|
||||
android:textSize="@dimen/dp_19"
|
||||
android:text="@string/bus_p_m1_speed_unit"
|
||||
android:layout_marginTop="-10dp"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:textColor="@android:color/white"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
</LinearLayout>
|
||||
<!-- 距离、剩余时间、到达时间 -->
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
app:layout_constraintTop_toBottomOf="@+id/ll_car_speed"
|
||||
app:layout_constraintStart_toStartOf="@+id/ll_car_speed"
|
||||
app:layout_constraintEnd_toEndOf="@+id/ll_car_speed"
|
||||
android:background="@drawable/bus_p_distance_info_bg"
|
||||
android:layout_width="@dimen/dp_115"
|
||||
android:layout_height="@dimen/dp_346">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_distance"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@+id/tv_distance_unit"
|
||||
app:layout_constraintVertical_chainStyle="packed"
|
||||
android:fontFamily="@font/din"
|
||||
android:text="--"
|
||||
android:textSize="@dimen/dp_37"
|
||||
android:textColor="@color/bus_p_m1_203555"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_distance_unit"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tv_distance"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@+id/v_line_01"
|
||||
android:text="@string/m1_distance_unit_km"
|
||||
android:textSize="@dimen/dp_17"
|
||||
android:textColor="@color/bus_p_m1_112b57"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<View
|
||||
android:id="@+id/v_line_01"
|
||||
android:background="@android:color/transparent"
|
||||
app:layout_constraintVertical_bias="0.33"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/dp_1"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_distance_surplus_time"
|
||||
app:layout_constraintTop_toBottomOf="@+id/v_line_01"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintVertical_chainStyle="packed"
|
||||
app:layout_constraintBottom_toTopOf="@+id/tv_distance_surplus_time_unit"
|
||||
app:layout_constraintHorizontal_chainStyle="packed"
|
||||
android:text="--"
|
||||
android:fontFamily="@font/din"
|
||||
android:textSize="@dimen/dp_37"
|
||||
android:textColor="@color/bus_p_m1_203555"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_distance_surplus_time_unit"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tv_distance_surplus_time"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@+id/v_line_02"
|
||||
android:text="@string/m1_arrive_left_time"
|
||||
android:textSize="@dimen/dp_17"
|
||||
android:textColor="@color/bus_p_m1_112b57"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<View
|
||||
android:id="@+id/v_line_02"
|
||||
android:background="@android:color/transparent"
|
||||
app:layout_constraintVertical_bias="0.66"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/dp_1"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_distance_arrive_time"
|
||||
app:layout_constraintTop_toTopOf="@+id/v_line_02"
|
||||
app:layout_constraintBottom_toTopOf="@+id/tv_distance_arrive_time_unit"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintVertical_chainStyle="packed"
|
||||
android:text="--"
|
||||
android:fontFamily="@font/din"
|
||||
android:textSize="@dimen/dp_37"
|
||||
android:textColor="@color/bus_p_m1_203555"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_distance_arrive_time_unit"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tv_distance_arrive_time"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:text="@string/m1_reach_time"
|
||||
android:textSize="@dimen/dp_17"
|
||||
android:textColor="@color/bus_p_m1_112b57"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -57,146 +57,43 @@
|
||||
app:layout_constraintEnd_toEndOf="@+id/mapBizView"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<!-- 速度 -->
|
||||
<LinearLayout
|
||||
android:id="@+id/ll_car_speed"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
<com.mogo.och.bus.passenger.ui.itinerary.ItineraryView
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:layout_marginTop="@dimen/dp_74"
|
||||
android:layout_marginStart="@dimen/dp_29"
|
||||
android:layout_width="@dimen/dp_152"
|
||||
android:background="@drawable/bus_p_car_speed"
|
||||
android:orientation="vertical"
|
||||
android:layout_height="@dimen/dp_152">
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_speed"
|
||||
android:text="0"
|
||||
android:textSize="@dimen/dp_60"
|
||||
android:gravity="center"
|
||||
android:layout_marginTop="@dimen/dp_12"
|
||||
android:textColor="@color/bus_p_m1_f5fbff"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
<TextView
|
||||
android:textSize="@dimen/dp_19"
|
||||
android:text="@string/bus_p_m1_speed_unit"
|
||||
android:layout_marginTop="-10dp"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:textColor="@android:color/white"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
</LinearLayout>
|
||||
<!-- 距离、剩余时间、到达时间 -->
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
app:layout_constraintTop_toBottomOf="@+id/ll_car_speed"
|
||||
app:layout_constraintStart_toStartOf="@+id/ll_car_speed"
|
||||
app:layout_constraintEnd_toEndOf="@+id/ll_car_speed"
|
||||
android:background="@drawable/bus_p_distance_info_bg"
|
||||
android:layout_width="@dimen/dp_115"
|
||||
android:layout_height="@dimen/dp_346">
|
||||
<com.mogo.och.bus.passenger.ui.orderinfo.OrderInfoView
|
||||
android:id="@+id/biz_orderinfo"
|
||||
android:layout_width="match_parent"
|
||||
android:visibility="gone"
|
||||
android:layout_height="0dp"
|
||||
android:paddingBottom="@dimen/dp_34_5"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@+id/bb_boorombar" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_distance"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@+id/tv_distance_unit"
|
||||
app:layout_constraintVertical_chainStyle="packed"
|
||||
android:fontFamily="@font/din"
|
||||
android:text="--"
|
||||
android:textSize="@dimen/dp_37"
|
||||
android:textColor="@color/bus_p_m1_203555"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
<com.mogo.och.bus.passenger.ui.softcontrol.SoftControlView
|
||||
android:id="@+id/biz_softcontrol"
|
||||
android:layout_width="match_parent"
|
||||
android:visibility="gone"
|
||||
android:paddingBottom="@dimen/dp_34_5"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@+id/bb_boorombar"
|
||||
android:layout_height="0dp"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_distance_unit"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tv_distance"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@+id/v_line_01"
|
||||
android:text="@string/m1_distance_unit_km"
|
||||
android:textSize="@dimen/dp_17"
|
||||
android:textColor="@color/bus_p_m1_112b57"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<View
|
||||
android:id="@+id/v_line_01"
|
||||
android:background="@android:color/transparent"
|
||||
app:layout_constraintVertical_bias="0.33"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/dp_1"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_distance_surplus_time"
|
||||
app:layout_constraintTop_toBottomOf="@+id/v_line_01"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintVertical_chainStyle="packed"
|
||||
app:layout_constraintBottom_toTopOf="@+id/tv_distance_surplus_time_unit"
|
||||
app:layout_constraintHorizontal_chainStyle="packed"
|
||||
android:text="--"
|
||||
android:fontFamily="@font/din"
|
||||
android:textSize="@dimen/dp_37"
|
||||
android:textColor="@color/bus_p_m1_203555"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_distance_surplus_time_unit"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tv_distance_surplus_time"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@+id/v_line_02"
|
||||
android:text="@string/m1_arrive_left_time"
|
||||
android:textSize="@dimen/dp_17"
|
||||
android:textColor="@color/bus_p_m1_112b57"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<View
|
||||
android:id="@+id/v_line_02"
|
||||
android:background="@android:color/transparent"
|
||||
app:layout_constraintVertical_bias="0.66"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/dp_1"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_distance_arrive_time"
|
||||
app:layout_constraintTop_toTopOf="@+id/v_line_02"
|
||||
app:layout_constraintBottom_toTopOf="@+id/tv_distance_arrive_time_unit"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintVertical_chainStyle="packed"
|
||||
android:text="--"
|
||||
android:fontFamily="@font/din"
|
||||
android:textSize="@dimen/dp_37"
|
||||
android:textColor="@color/bus_p_m1_203555"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_distance_arrive_time_unit"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tv_distance_arrive_time"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:text="@string/m1_reach_time"
|
||||
android:textSize="@dimen/dp_17"
|
||||
android:textColor="@color/bus_p_m1_112b57"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
<com.mogo.och.bus.passenger.ui.selectline.SelectLineView
|
||||
android:id="@+id/biz_selectline"
|
||||
android:layout_width="0dp"
|
||||
android:visibility="gone"
|
||||
android:paddingBottom="@dimen/dp_34_5"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="@+id/mapBizView"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@+id/bb_boorombar"
|
||||
android:layout_height="0dp"/>
|
||||
|
||||
|
||||
<com.mogo.och.bus.passenger.ui.view.bottom.BottomBar
|
||||
<com.mogo.och.bus.passenger.ui.bottom.BottomBar
|
||||
android:id="@+id/bb_boorombar"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
@@ -245,50 +142,12 @@
|
||||
app:layout_constraintEnd_toEndOf="@+id/viewBusPM1MsgBoxButton"
|
||||
app:layout_constraintTop_toBottomOf="@+id/viewBusPM1MsgBoxButton"/>
|
||||
|
||||
<TextView
|
||||
android:text="到站"
|
||||
android:id="@+id/debug_arrive_dest"
|
||||
<com.mogo.och.bus.passenger.ui.debugview.DebugView
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:layout_marginTop="@dimen/dp_47"
|
||||
app:layout_constraintEnd_toEndOf="@+id/mapBizView"
|
||||
android:visibility="gone"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
<TextView
|
||||
android:text="展示引导页面"
|
||||
android:id="@+id/debug_show_noviceGuidance"
|
||||
app:layout_constraintTop_toBottomOf="@+id/debug_arrive_dest"
|
||||
android:layout_marginTop="@dimen/dp_17"
|
||||
app:layout_constraintEnd_toEndOf="@+id/mapBizView"
|
||||
android:visibility="gone"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
<TextView
|
||||
android:text="切换模型"
|
||||
android:id="@+id/debug_change_modle"
|
||||
app:layout_constraintTop_toBottomOf="@+id/debug_show_noviceGuidance"
|
||||
android:layout_marginTop="@dimen/dp_17"
|
||||
app:layout_constraintEnd_toEndOf="@+id/mapBizView"
|
||||
android:visibility="gone"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<TextView
|
||||
android:text="显示结束页面"
|
||||
android:id="@+id/debug_show_endview"
|
||||
app:layout_constraintTop_toBottomOf="@+id/debug_change_modle"
|
||||
android:layout_marginTop="@dimen/dp_17"
|
||||
app:layout_constraintEnd_toEndOf="@+id/mapBizView"
|
||||
android:visibility="gone"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<androidx.constraintlayout.widget.Group
|
||||
android:id="@+id/group_debug"
|
||||
app:constraint_referenced_ids="debug_arrive_dest,debug_show_noviceGuidance,debug_change_modle,debug_show_endview"
|
||||
android:visibility="gone"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -8,14 +8,12 @@
|
||||
<!-- 订单主页面 -->
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_width="@dimen/dp_936"
|
||||
android:layout_height="@dimen/dp_500"
|
||||
android:layout_marginStart="@dimen/dp_286"
|
||||
android:background="@drawable/charter_p_select_line_bg"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintDimensionRatio="936:500"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintWidth_percent="0.4875">
|
||||
app:layout_constraintStart_toStartOf="parent">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/lsv_line_site"
|
||||
|
||||
34
OCH/charter/passenger/src/main/res/layout/m1_p_debug.xml
Normal file
34
OCH/charter/passenger/src/main/res/layout/m1_p_debug.xml
Normal file
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
|
||||
tools:ignore="MissingDefaultResource">
|
||||
|
||||
<TextView
|
||||
android:text="到站"
|
||||
android:id="@+id/debug_arrive_dest"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
<TextView
|
||||
android:text="展示引导页面"
|
||||
android:id="@+id/debug_show_noviceGuidance"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
<TextView
|
||||
android:text="切换模型"
|
||||
android:id="@+id/debug_change_modle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<TextView
|
||||
android:text="显示结束页面"
|
||||
android:id="@+id/debug_show_endview"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
|
||||
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||
@@ -82,7 +82,7 @@
|
||||
app:layout_constraintStart_toStartOf="@+id/gl_left"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<com.mogo.och.bus.passenger.view.DrawBitmapView
|
||||
<com.mogo.och.bus.passenger.ui.softcontrol.view.DrawBitmapView
|
||||
android:id="@+id/dbv_wind"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
@@ -91,7 +91,7 @@
|
||||
app:layout_constraintHeight_percent="0.5"
|
||||
app:layout_constraintStart_toStartOf="@+id/iv_aircondition" />
|
||||
|
||||
<com.mogo.och.bus.passenger.view.DrawableCheckBox
|
||||
<com.mogo.och.bus.passenger.ui.softcontrol.view.DrawableCheckBox
|
||||
android:id="@+id/tv_aircondition_switch"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="@dimen/dp_76"
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
android:layout_marginStart="@dimen/dp_80" />
|
||||
|
||||
<!--魔方连接状态-->
|
||||
<com.mogo.och.bus.passenger.view.statusbar.M1BlueToothView
|
||||
<com.mogo.och.bus.passenger.ui.statusbar.M1BlueToothView
|
||||
android:id="@+id/blueToothView"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
android:layout_width="@dimen/dp_1300"
|
||||
android:layout_height="@dimen/dp_731">
|
||||
|
||||
<com.mogo.och.bus.passenger.view.ConsultVideoPlayer
|
||||
<com.mogo.och.bus.passenger.ui.video.ConsultVideoPlayer
|
||||
android:id="@+id/video_item_player"
|
||||
android:layout_gravity="center"
|
||||
android:layout_width="@dimen/dp_1300"
|
||||
|
||||
@@ -144,7 +144,7 @@
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
|
||||
<com.mogo.och.bus.passenger.ui.view.bottom.BottomBar
|
||||
<com.mogo.och.bus.passenger.ui.bottom.BottomBar
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.mogo.och.taxi.constant/**
|
||||
* Created on 2023/8/7
|
||||
* taskType = 1 虚拟任务(演练), = 2 接驾任务(运营), = 3 //送驾任务(运营)
|
||||
* taskType = 1 虚拟任务(演练任务), = 2 接驾任务(运营), = 3 //送驾任务(运营)
|
||||
*/
|
||||
enum class TaskTypeEnum(val code: Int) {
|
||||
None(0),
|
||||
|
||||
@@ -59,6 +59,8 @@ import com.mogo.och.common.module.manager.distancemamager.ITrajectoryListener
|
||||
import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager.addDistanceListener
|
||||
import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager.addTrajectoryListener
|
||||
import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager.setStationPoint
|
||||
import com.mogo.och.common.module.map.AmapNaviToDestinationModel
|
||||
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil.coordinateConverterWgsToGcjLocations
|
||||
import com.mogo.och.taxi.bean.ContrailListRespBean
|
||||
import com.mogo.och.taxi.bean.OrderDetail
|
||||
import com.mogo.och.taxi.bean.PrepareTaskRespBean
|
||||
@@ -103,13 +105,14 @@ object TaxiModel {
|
||||
|
||||
private var mContext: Context? = null
|
||||
|
||||
private var mCurrentTaskAndOrder : QueryCurrentTaskRespBean.Result? = null //当前任务和订单
|
||||
private var mCurrentTaskAndOrder: QueryCurrentTaskRespBean.Result? = null //当前任务和订单
|
||||
|
||||
private var mUntruthTask : StartServiceRespBean.Result? = null // 前往出车点的伪任务, 后台并不算做真正的任务
|
||||
private var mUntruthTask: StartServiceRespBean.Result? = null // 前往出车点的伪任务, 后台并不算做真正的任务
|
||||
|
||||
private var mOrderContrails : MutableList<ContrailListRespBean.Result>? = null // 运营单(接驾任务和送驾任务的轨迹集合)
|
||||
private var mOrderContrails: MutableList<ContrailListRespBean.Result>? =
|
||||
null // 运营单(接驾任务和送驾任务的轨迹集合)
|
||||
|
||||
private var mCurTaskContrail : ContrailListRespBean.Result? = null //当前在跑的任务的轨迹信息
|
||||
private var mCurTaskContrail: ContrailListRespBean.Result? = null //当前在跑的任务的轨迹信息
|
||||
|
||||
private var mADASStatusCallback //Model->Presenter:自动驾驶状态相关
|
||||
: ITaxiADASStatusCallback? = null
|
||||
@@ -196,8 +199,6 @@ object TaxiModel {
|
||||
}
|
||||
|
||||
fun release() {
|
||||
// startOrStopOrderLoop(false)
|
||||
startOrStopCalculateRouteInfo(false)
|
||||
releaseListeners()
|
||||
loginService = null
|
||||
}
|
||||
@@ -272,15 +273,19 @@ object TaxiModel {
|
||||
return valueOf(order.orderStatus)
|
||||
}
|
||||
|
||||
fun getCurTaskAndOrder(): QueryCurrentTaskRespBean.Result?{
|
||||
return mCurrentTaskAndOrder
|
||||
fun getCurTaskAndOrder(): QueryCurrentTaskRespBean.Result? {
|
||||
return mCurrentTaskAndOrder
|
||||
}
|
||||
|
||||
fun getCurOrderContrails(): MutableList<ContrailListRespBean.Result>?{
|
||||
fun getCurUntruthTask(): StartServiceRespBean.Result? {
|
||||
return mUntruthTask
|
||||
}
|
||||
|
||||
fun getCurOrderContrails(): MutableList<ContrailListRespBean.Result>? {
|
||||
return mOrderContrails
|
||||
}
|
||||
|
||||
fun getCurTaskContrail(): ContrailListRespBean.Result?{
|
||||
fun getCurTaskContrail(): ContrailListRespBean.Result? {
|
||||
return mCurTaskContrail
|
||||
}
|
||||
|
||||
@@ -298,7 +303,7 @@ object TaxiModel {
|
||||
|
||||
val currentOrder = mCurrentTaskAndOrder!!.order
|
||||
|
||||
if (currentOrder != null){
|
||||
if (currentOrder != null) {
|
||||
if (currentOrder!!.orderStatus == TaxiOrderStatusEnum.OnTheWayToEnd.code) {
|
||||
if (FunctionBuildConfig.isDemoMode) {
|
||||
// 当美化模式(演示模式)开启时: 订单对应自动驾驶开启后,置true
|
||||
@@ -316,7 +321,7 @@ object TaxiModel {
|
||||
}
|
||||
clearAutopilotControlParameters()
|
||||
}
|
||||
}else{
|
||||
} else {
|
||||
if (FunctionBuildConfig.isDemoMode) {
|
||||
d(SceneConstant.M_TAXI + TAG, "setIPCDemoMode:false")
|
||||
setIPCDemoMode(false)
|
||||
@@ -343,18 +348,17 @@ object TaxiModel {
|
||||
updateAutopilotControlParameters(null)
|
||||
}
|
||||
|
||||
fun updateCurrentTaskAndOrder(result: QueryCurrentTaskRespBean.Result?){
|
||||
fun updateCurrentTaskAndOrder(result: QueryCurrentTaskRespBean.Result?) {
|
||||
mCurrentTaskAndOrder = result
|
||||
updateNativeCurrentOrder(result)
|
||||
}
|
||||
|
||||
fun updateUntruthTask(untruthTask : StartServiceRespBean.Result?) {
|
||||
fun updateUntruthTask(untruthTask: StartServiceRespBean.Result?) {
|
||||
mUntruthTask = untruthTask
|
||||
}
|
||||
|
||||
//清除任务订单信息
|
||||
fun clearCurrentOCHOrder() {
|
||||
startOrStopCalculateRouteInfo(false)
|
||||
mCurrentTaskAndOrder = null
|
||||
clearAutopilotControlParameters()
|
||||
TaxiTrajectoryManager.getInstance().syncTrajectoryInfo()
|
||||
@@ -395,7 +399,7 @@ object TaxiModel {
|
||||
return
|
||||
}
|
||||
|
||||
if (mCurTaskContrail == null){
|
||||
if (mCurTaskContrail == null) {
|
||||
e(SceneConstant.M_TAXI + TAG, "no order or order is empty.")
|
||||
ToastUtils.showShort("轨迹信息不存在!")
|
||||
}
|
||||
@@ -468,7 +472,7 @@ object TaxiModel {
|
||||
return null
|
||||
}
|
||||
|
||||
if (mCurTaskContrail == null){
|
||||
if (mCurTaskContrail == null) {
|
||||
e(SceneConstant.M_TAXI + TAG, "curTaskContrail is empty.")
|
||||
return null
|
||||
}
|
||||
@@ -488,11 +492,16 @@ object TaxiModel {
|
||||
if (parameters.autoPilotLine == null) {
|
||||
parameters.autoPilotLine = AutopilotControlParameters.AutoPilotLine(
|
||||
mCurrentTaskAndOrder!!.lineId,
|
||||
mCurTaskContrail!!.csvFileUrl, mCurTaskContrail!!.csvFileMd5,
|
||||
mCurTaskContrail!!.txtFileUrl, mCurTaskContrail!!.txtFileMd5,
|
||||
mCurTaskContrail!!.contrailSaveTime, "", // todo 这里原来传的是carModel, 现在没有这个信息, 是否传businessType
|
||||
mCurTaskContrail!!.csvFileUrlDPQP, mCurTaskContrail!!.csvFileMd5DPQP,
|
||||
mCurTaskContrail!!.txtFileUrlDPQP, mCurTaskContrail!!.txtFileMd5DPQP,
|
||||
mCurTaskContrail!!.csvFileUrl,
|
||||
mCurTaskContrail!!.csvFileMd5,
|
||||
mCurTaskContrail!!.txtFileUrl,
|
||||
mCurTaskContrail!!.txtFileMd5,
|
||||
mCurTaskContrail!!.contrailSaveTime,
|
||||
"", // todo 这里原来传的是carModel, 现在没有这个信息, 是否传businessType
|
||||
mCurTaskContrail!!.csvFileUrlDPQP,
|
||||
mCurTaskContrail!!.csvFileMd5DPQP,
|
||||
mCurTaskContrail!!.txtFileUrlDPQP,
|
||||
mCurTaskContrail!!.txtFileMd5DPQP,
|
||||
mCurTaskContrail!!.contrailSaveTimeDPQP
|
||||
)
|
||||
}
|
||||
@@ -521,7 +530,7 @@ object TaxiModel {
|
||||
).toDouble()
|
||||
i(SceneConstant.M_TAXI + TAG, "judgeTaskStartStation() distance = $distance")
|
||||
if (distance <= TaxiUnmannedConst.ARRIVE_AT_START_STATION_DISTANCE) {
|
||||
arriveSite(startSite.siteId,false)
|
||||
arriveSite(startSite.siteId, false)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -574,11 +583,11 @@ object TaxiModel {
|
||||
//位置变化时,通过围栏判断是否到达x点
|
||||
if (null == mogoLocation) return
|
||||
|
||||
if (mUntruthTask != null){
|
||||
judgeUntruthStation(mUntruthTask,mogoLocation)
|
||||
if (mUntruthTask != null) {
|
||||
judgeUntruthStation(mUntruthTask, mogoLocation)
|
||||
}
|
||||
|
||||
if (checkCurrentTask()){
|
||||
if (checkCurrentTask()) {
|
||||
judgeTaskStartStation(mogoLocation)
|
||||
judgeTaskEndSiteStation(mogoLocation)
|
||||
}
|
||||
@@ -589,45 +598,56 @@ object TaxiModel {
|
||||
}
|
||||
}
|
||||
|
||||
private fun judgeUntruthStation(virtualTask: StartServiceRespBean.Result?, currentLocation: MogoLocation) {
|
||||
private fun judgeUntruthStation(
|
||||
virtualTask: StartServiceRespBean.Result?,
|
||||
currentLocation: MogoLocation
|
||||
) {
|
||||
if (mUntruthTask == null || virtualTask == null) return
|
||||
val distance = CoordinateUtils.calculateLineDistance(
|
||||
virtualTask.gcjLon, virtualTask.gcjLat,
|
||||
currentLocation.longitude, currentLocation.latitude
|
||||
).toDouble()
|
||||
i(SceneConstant.M_TAXI + TAG, "judgeEndStation() ${virtualTask.siteName} distance = $distance")
|
||||
i(
|
||||
SceneConstant.M_TAXI + TAG,
|
||||
"judgeEndStation() ${virtualTask.siteName} distance = $distance"
|
||||
)
|
||||
if (distance <= TaxiUnmannedConst.ARRIVE_AT_START_STATION_DISTANCE) { // 15米内到站
|
||||
arriveSite(virtualTask.siteId, true)
|
||||
}
|
||||
}
|
||||
|
||||
private fun arriveSite(siteId: Long, isArriveEndSite: Boolean) {
|
||||
arriveSite(mContext!!,siteId,object : OchCommonServiceCallback<BaseData>{
|
||||
/**
|
||||
* 到站(起点、终点)
|
||||
* isArriveEndSite true 终点, false 起点
|
||||
*/
|
||||
fun arriveSite(siteId: Long, isArriveEndSite: Boolean) {
|
||||
arriveSite(mContext!!, siteId, object : OchCommonServiceCallback<BaseData> {
|
||||
override fun onSuccess(data: BaseData?) {
|
||||
if (data == null || data.code != 0) return
|
||||
d(SceneConstant.M_TAXI + TAG,GsonUtil.jsonFromObject(data))
|
||||
d(SceneConstant.M_TAXI + TAG, GsonUtil.jsonFromObject(data))
|
||||
mUntruthTask = null
|
||||
if (isArriveEndSite){
|
||||
if (isArriveEndSite) {
|
||||
//到目的站后去查询下一个任务
|
||||
startPrepareTask(siteId)
|
||||
cleanStation()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String?) {
|
||||
d(SceneConstant.M_TAXI + TAG,"$code $msg")
|
||||
d(SceneConstant.M_TAXI + TAG, "$code $msg")
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
private fun startTask(lineId: Long) {
|
||||
startTask(mContext!!, lineId,object : OchCommonServiceCallback<BaseData>{
|
||||
startTask(mContext!!, lineId, object : OchCommonServiceCallback<BaseData> {
|
||||
override fun onSuccess(data: BaseData?) {
|
||||
d(SceneConstant.M_TAXI + TAG,GsonUtil.jsonFromObject(data))
|
||||
d(SceneConstant.M_TAXI + TAG, GsonUtil.jsonFromObject(data))
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String?) {
|
||||
d(SceneConstant.M_TAXI + TAG,"$code $msg")
|
||||
d(SceneConstant.M_TAXI + TAG, "$code $msg")
|
||||
}
|
||||
|
||||
})
|
||||
@@ -635,20 +655,20 @@ object TaxiModel {
|
||||
|
||||
private fun startPrepareTask(siteId: Long) {
|
||||
UiThreadHandler.postDelayed({
|
||||
prepareTask(mContext!!,siteId,object : OchCommonServiceCallback<PrepareTaskRespBean>{
|
||||
prepareTask(mContext!!, siteId, object : OchCommonServiceCallback<PrepareTaskRespBean> {
|
||||
override fun onSuccess(data: PrepareTaskRespBean?) {
|
||||
d(SceneConstant.M_TAXI + TAG,GsonUtil.jsonFromObject(data))
|
||||
d(SceneConstant.M_TAXI + TAG, GsonUtil.jsonFromObject(data))
|
||||
if (data == null || data.code != 0) return
|
||||
//去下载轨迹, 下发给工控机下载
|
||||
queryTaskContrail(Array(1) { data.lineId })
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String?) {
|
||||
d(SceneConstant.M_TAXI + TAG,"$code $msg")
|
||||
d(SceneConstant.M_TAXI + TAG, "$code $msg")
|
||||
}
|
||||
|
||||
})
|
||||
},TIMER_PREPARE_TASK_INTERVAL)
|
||||
}, TIMER_PREPARE_TASK_INTERVAL)
|
||||
}
|
||||
|
||||
private fun judgeTaskEndSiteStation(currentLocation: MogoLocation) {
|
||||
@@ -687,7 +707,7 @@ object TaxiModel {
|
||||
return
|
||||
}
|
||||
i(SceneConstant.M_TAXI + TAG, "judgeEndStation() = 刚过站且在15m内")
|
||||
arriveSite(endSite.siteId,true)
|
||||
arriveSite(endSite.siteId, true)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -720,7 +740,7 @@ object TaxiModel {
|
||||
ToastUtils.showShort("订单状态不匹配该操作!")
|
||||
return
|
||||
}
|
||||
arriveSite(mCurrentTaskAndOrder?.startSite!!.siteId,false)
|
||||
arriveSite(mCurrentTaskAndOrder?.startSite!!.siteId, false)
|
||||
}
|
||||
|
||||
fun setArriveAtEndStation() {
|
||||
@@ -728,11 +748,11 @@ object TaxiModel {
|
||||
ToastUtils.showShort("无任务!")
|
||||
return
|
||||
}
|
||||
arriveSite(mCurrentTaskAndOrder?.endSite!!.siteId,true)
|
||||
arriveSite(mCurrentTaskAndOrder?.endSite!!.siteId, true)
|
||||
}
|
||||
|
||||
fun toStartTask() {
|
||||
if (!checkCurrentTask()){
|
||||
if (!checkCurrentTask()) {
|
||||
ToastUtils.showShort("无任务!")
|
||||
return
|
||||
}
|
||||
@@ -832,7 +852,10 @@ object TaxiModel {
|
||||
|
||||
override fun onAutopilotSNRequest() {}
|
||||
override fun onAutopilotArriveAtStation(arrivalNotification: ArrivalNotification?) {
|
||||
i(SceneConstant.M_TAXI + TAG, "onAutopilotArriveAtStation = " + arrivalNotification.toString())
|
||||
i(
|
||||
SceneConstant.M_TAXI + TAG,
|
||||
"onAutopilotArriveAtStation = " + arrivalNotification.toString()
|
||||
)
|
||||
if (((arrivalNotification == null) || !checkCurrentTask()
|
||||
|| (getCurOrderStatus() === TaxiOrderStatusEnum.ArriveAtEnd))
|
||||
) {
|
||||
@@ -855,8 +878,8 @@ object TaxiModel {
|
||||
private fun arriveTerminal() {
|
||||
if (!checkCurrentOrder()) return
|
||||
val endSite = mCurrentTaskAndOrder!!.order!!.orderEndSite
|
||||
if (endSite != null){
|
||||
arriveSite(endSite.siteId,true)
|
||||
if (endSite != null) {
|
||||
arriveSite(endSite.siteId, true)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -880,29 +903,27 @@ object TaxiModel {
|
||||
*
|
||||
*/
|
||||
fun setRouteLineMarker() {
|
||||
// TODO: 设置地图上的marker 只设置有明确站点marker ,当前执行的任务或者订单的,但是不设置虚拟任务的
|
||||
// val currentOCHOrder = getCurrentOrder()
|
||||
// if (currentOCHOrder != null) {
|
||||
// if ((currentOCHOrder.startSiteGcjPoint == null) || currentOCHOrder.startSiteGcjPoint.isEmpty() || (currentOCHOrder.startSiteGcjPoint.size < 2) || (
|
||||
// currentOCHOrder.endSiteGcjPoint == null) || currentOCHOrder.endSiteGcjPoint.isEmpty() || (currentOCHOrder.endSiteGcjPoint.size < 2)
|
||||
// ) {
|
||||
// cleanLineMarker()
|
||||
// return
|
||||
// }
|
||||
// val startStation = LatLng(
|
||||
// currentOCHOrder.startSiteGcjPoint[1],
|
||||
// currentOCHOrder.startSiteGcjPoint[0]
|
||||
// )
|
||||
// val endStation = LatLng(
|
||||
// currentOCHOrder.endSiteGcjPoint[1],
|
||||
// currentOCHOrder.endSiteGcjPoint[0]
|
||||
// )
|
||||
// if (mAutopilotPlanningCallback != null) {
|
||||
// mAutopilotPlanningCallback!!.setLineMarker(startStation, endStation)
|
||||
// }
|
||||
val curTaskAndOrder = getCurTaskAndOrder()
|
||||
if (curTaskAndOrder != null) {
|
||||
if (curTaskAndOrder.startSite == null || curTaskAndOrder.endSite == null) {
|
||||
cleanLineMarker()
|
||||
return
|
||||
}
|
||||
val startStation = LatLng(
|
||||
curTaskAndOrder.startSite!!.gcjLat,
|
||||
curTaskAndOrder.startSite!!.gcjLon
|
||||
)
|
||||
val endStation = LatLng(
|
||||
curTaskAndOrder.endSite!!.gcjLat,
|
||||
curTaskAndOrder.endSite!!.gcjLon
|
||||
)
|
||||
if (mAutopilotPlanningCallback != null) {
|
||||
mAutopilotPlanningCallback!!.setLineMarker(startStation, endStation)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun cleanLineMarker() {
|
||||
private fun cleanLineMarker() {
|
||||
if (mAutopilotPlanningCallback != null) {
|
||||
mAutopilotPlanningCallback!!.setLineMarker(null, null)
|
||||
}
|
||||
@@ -914,30 +935,29 @@ object TaxiModel {
|
||||
* @param models
|
||||
*/
|
||||
fun updateOrderRouteInfo(models: List<MessagePad.Location>) {
|
||||
// if (models.isEmpty()) return
|
||||
// if (mCurrentOrder == null) return
|
||||
// d(SceneConstant.M_TAXI + TAG, "--------计算出sumLength开始---------- ")
|
||||
//
|
||||
// //转换成高德坐标系
|
||||
// if (mRoutePoints!!.size > 0) {
|
||||
// mRoutePoints.clear()
|
||||
// }
|
||||
// mRoutePoints.addAll(coordinateConverterWgsToGcjLocations(mContext, models))
|
||||
// startDynamicCalculateRouteInfo()
|
||||
if (models.isEmpty()) return
|
||||
if (mCurrentTaskAndOrder == null || mCurrentTaskAndOrder!!.startSite == null
|
||||
|| mCurrentTaskAndOrder!!.endSite == null) return
|
||||
d(SceneConstant.M_TAXI + TAG, "--------计算出sumLength开始---------- ")
|
||||
|
||||
//转换成高德坐标系
|
||||
if (mRoutePoints!!.size > 0) {
|
||||
mRoutePoints.clear()
|
||||
}
|
||||
mRoutePoints.addAll(coordinateConverterWgsToGcjLocations(mContext, models))
|
||||
startDynamicCalculateRouteInfo()
|
||||
}
|
||||
|
||||
private fun startDynamicCalculateRouteInfo() {
|
||||
// d(
|
||||
// SceneConstant.M_TAXI + TAG,
|
||||
// "--------mCurrentOCHOrder---------- $mCurrentOrder"
|
||||
// )
|
||||
// d(SceneConstant.M_TAXI + TAG, "--------mRoutePoints.size---------- " + mRoutePoints!!.size)
|
||||
// //开启实时计算剩余距离,剩余时间,预计时间
|
||||
// startOrStopCalculateRouteInfo(true)
|
||||
// AmapNaviToDestinationModel.getInstance(mContext).destroyAmaNavi()
|
||||
// if (mOrderStatusCallback != null) {
|
||||
// mOrderStatusCallback!!.onNaviToEnd(false, false)
|
||||
// }
|
||||
d(
|
||||
SceneConstant.M_TAXI + TAG,
|
||||
"--------mCurrentTaskAndOrder---------- $mCurrentTaskAndOrder"
|
||||
)
|
||||
d(SceneConstant.M_TAXI + TAG, "--------mRoutePoints.size---------- " + mRoutePoints!!.size)
|
||||
AmapNaviToDestinationModel.getInstance(mContext).destroyAmaNavi()
|
||||
if (mOrderStatusCallback != null) {
|
||||
mOrderStatusCallback!!.onNaviToEnd(false, false)
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateDistance(lastSumLength: Float) {
|
||||
@@ -947,15 +967,12 @@ object TaxiModel {
|
||||
("---lastSumLength: " + lastSumLength + "----lastTime : " + lastTime
|
||||
+ " thread = " + Thread.currentThread().name)
|
||||
)
|
||||
// if (mCurrentOrder != null) {
|
||||
// mCurrentOrder!!.decreaseTravelDistance(lastSumLength.toDouble())
|
||||
// }
|
||||
// if (mOrderStatusCallback != null) {
|
||||
// mOrderStatusCallback!!.onCurrentOrderDistToEndChanged(
|
||||
// lastSumLength.toLong(),
|
||||
// lastTime.toLong()
|
||||
// )
|
||||
// }
|
||||
if (mOrderStatusCallback != null) {
|
||||
mOrderStatusCallback!!.onCurrentOrderDistToEndChanged(
|
||||
lastSumLength.toLong(),
|
||||
lastTime.toLong()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private val distanceListener: IDistanceListener = object : IDistanceListener {
|
||||
@@ -981,15 +998,15 @@ object TaxiModel {
|
||||
var temp: LatLng?
|
||||
for (mogoLocation: MogoLocation in routeArrivied) {
|
||||
temp = LatLng(
|
||||
mogoLocation.getLatitude(),
|
||||
mogoLocation.getLongitude()
|
||||
mogoLocation.latitude,
|
||||
mogoLocation.longitude
|
||||
)
|
||||
routeArriviedTemp.add(temp)
|
||||
}
|
||||
for (mogoLocation: MogoLocation in routeArriving) {
|
||||
temp = LatLng(
|
||||
mogoLocation.getLatitude(),
|
||||
mogoLocation.getLongitude()
|
||||
mogoLocation.latitude,
|
||||
mogoLocation.longitude
|
||||
)
|
||||
routeArrivingTemp.add(temp)
|
||||
}
|
||||
@@ -1003,21 +1020,6 @@ object TaxiModel {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 开始轮询计算剩余里程和时间
|
||||
*
|
||||
* @param isStart
|
||||
*/
|
||||
private fun startOrStopCalculateRouteInfo(isStart: Boolean) {
|
||||
d(SceneConstant.M_TAXI + TAG, "startOrStopOrderLoop() $isStart")
|
||||
if (isStart) {
|
||||
TaxiModelLoopManager.getInstance().startCalculateRouteInfoLoop()
|
||||
} else {
|
||||
mRoutePoints!!.clear()
|
||||
TaxiModelLoopManager.getInstance().stopCalculateRouteInfoLoop()
|
||||
}
|
||||
}
|
||||
|
||||
// 登出
|
||||
fun logout() {
|
||||
loginService!!.loginOut(getChassisLocationGCJ02().latitude, getChassisLocationGCJ02().longitude)
|
||||
@@ -1025,12 +1027,13 @@ object TaxiModel {
|
||||
|
||||
//导航去订单终点目的地
|
||||
fun startNaviToEndStation(isShow: Boolean) {
|
||||
if (mRoutePoints!!.size > 0) { //使用自驾轨迹
|
||||
if (mRoutePoints == null) return
|
||||
if (mRoutePoints.size > 0) { //使用自驾轨迹
|
||||
if (mOrderStatusCallback != null) {
|
||||
mOrderStatusCallback!!.onNaviToEnd(false, isShow)
|
||||
}
|
||||
} else { //若直接要显示导航地图则直接导航, 若不是则2s后若无轨迹数据使用高德导航
|
||||
if (isShow && mRoutePoints.size == 0 && mOrderStatusCallback != null) {
|
||||
if (isShow && mOrderStatusCallback != null) {
|
||||
mOrderStatusCallback!!.onNaviToEnd(true, true)
|
||||
} else {
|
||||
UiThreadHandler.postDelayed({
|
||||
@@ -1041,21 +1044,30 @@ object TaxiModel {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun setStation() {
|
||||
// val currentOCHOrder = getCurrentOrder()
|
||||
// if (currentOCHOrder != null) {
|
||||
// val startStation = MogoLocation()
|
||||
// startStation.longitude = currentOCHOrder.startSiteGcjPoint[0]
|
||||
// startStation.latitude = currentOCHOrder.startSiteGcjPoint[1]
|
||||
// val endStation = MogoLocation()
|
||||
// endStation.longitude = currentOCHOrder.endSiteGcjPoint[0]
|
||||
// endStation.latitude = currentOCHOrder.endSiteGcjPoint[1]
|
||||
// setStationPoint(startStation, endStation, currentOCHOrder.lineId)
|
||||
// }
|
||||
fun updateStation() {
|
||||
if (mCurrentTaskAndOrder == null) return
|
||||
if (mCurrentTaskAndOrder!!.startSite != null && mCurrentTaskAndOrder!!.endSite != null
|
||||
&& mCurrentTaskAndOrder!!.currentStatus <= TaskStatusEnum.StartTask.code){
|
||||
setStation()
|
||||
}else{
|
||||
cleanStation()
|
||||
}
|
||||
}
|
||||
|
||||
fun cleanStation() {
|
||||
private fun setStation() {
|
||||
val curTaskAndOrder = getCurTaskAndOrder() ?: return
|
||||
if (curTaskAndOrder.startSite != null && curTaskAndOrder.endSite != null) {
|
||||
val startStation = MogoLocation()
|
||||
startStation.longitude = curTaskAndOrder.startSite!!.gcjLon
|
||||
startStation.latitude = curTaskAndOrder.startSite!!.gcjLat
|
||||
val endStation = MogoLocation()
|
||||
endStation.longitude = curTaskAndOrder.endSite!!.gcjLon
|
||||
endStation.latitude = curTaskAndOrder.endSite!!.gcjLat
|
||||
setStationPoint(startStation, endStation, curTaskAndOrder.lineId)
|
||||
}
|
||||
}
|
||||
|
||||
private fun cleanStation() {
|
||||
setStationPoint(null, null, -1L)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
package com.mogo.och.taxi.model;
|
||||
|
||||
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI;
|
||||
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
|
||||
import com.mogo.och.taxi.constant.TaxiUnmannedConst;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.ObservableEmitter;
|
||||
import io.reactivex.ObservableOnSubscribe;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.CompositeDisposable;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
import io.reactivex.functions.Consumer;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
|
||||
/**
|
||||
* Created on 2021/9/10
|
||||
*
|
||||
* 管理轮询逻辑(订单轮询、新单轮询、新单抢单结果轮询等等)
|
||||
*/
|
||||
public class TaxiModelLoopManager {
|
||||
|
||||
private static final String TAG = TaxiModelLoopManager.class.getSimpleName();
|
||||
|
||||
private static final class SingletonHolder {
|
||||
private static final TaxiModelLoopManager INSTANCE = new TaxiModelLoopManager();
|
||||
}
|
||||
|
||||
public static TaxiModelLoopManager getInstance() {
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private CompositeDisposable mCalculateRouteDisposable; //每隔2s计算一次剩余里程和时间
|
||||
|
||||
public void startCalculateRouteInfoLoop() {
|
||||
|
||||
CallerLogger.INSTANCE.i(M_TAXI + TAG, "startCalculateRouteInfoLoop()");
|
||||
if (mCalculateRouteDisposable != null) return;
|
||||
|
||||
mCalculateRouteDisposable = new CompositeDisposable();
|
||||
|
||||
Disposable disposable = loopDynamicCalculateRouteInfo()
|
||||
.doOnSubscribe(new Consumer<Disposable>() {
|
||||
@Override
|
||||
public void accept(Disposable disposable) throws Exception {
|
||||
|
||||
}
|
||||
}).doOnError(new Consumer<Throwable>() {
|
||||
@Override
|
||||
public void accept(Throwable throwable) throws Exception {
|
||||
}
|
||||
})
|
||||
.delay(TaxiUnmannedConst.LOOP_CALCULATEROUTE_2S, TimeUnit.MILLISECONDS, true) // 设置delayError为true,表示出现错误的时候也需要延迟5s进行通知,达到无论是请求正常还是请求失败,都是5s后重新订阅,即重新请求。
|
||||
.subscribeOn(Schedulers.io())
|
||||
.repeat() // repeat保证请求成功后能够重新订阅。
|
||||
.retry() // retry保证请求失败后能重新订阅
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Consumer<Integer>() {
|
||||
@Override
|
||||
public void accept(Integer integer) throws Exception {
|
||||
}
|
||||
});
|
||||
mCalculateRouteDisposable.add(disposable);
|
||||
}
|
||||
|
||||
private Observable<Integer> loopDynamicCalculateRouteInfo(){
|
||||
return Observable.create(new ObservableOnSubscribe<Integer>() {
|
||||
@Override
|
||||
public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
|
||||
if (emitter.isDisposed()) return;
|
||||
// TaxiModel.INSTANCE.dynamicCalculateRouteInfo();
|
||||
emitter.onComplete();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void stopCalculateRouteInfoLoop() {
|
||||
if (mCalculateRouteDisposable != null) {
|
||||
CallerLogger.INSTANCE.i(M_TAXI + TAG, "stopCalculateRouteInfoLoop()");
|
||||
mCalculateRouteDisposable.dispose();
|
||||
mCalculateRouteDisposable = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -25,6 +25,7 @@ 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.network.CarServiceManager
|
||||
import com.mogo.och.taxi.network.CarServiceManager.cancelOrder
|
||||
import com.mogo.och.taxi.network.CarServiceManager.contrailList
|
||||
import com.mogo.och.taxi.network.CarServiceManager.queryCarOrderByOrderNo
|
||||
import com.mogo.och.taxi.ui.unmanned.TaskAndOrderUiState
|
||||
@@ -72,8 +73,31 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
|
||||
}
|
||||
|
||||
is UnmannedIntent.CloseOrderByDriver -> {
|
||||
|
||||
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order != null){
|
||||
val site = mCurrentTaskAndOrder!!.order!!.orderEndSite;
|
||||
TaxiModel.arriveSite(site!!.siteId,true)
|
||||
}
|
||||
}
|
||||
|
||||
is UnmannedIntent.CancelOrder -> {// 取消订单, 暂未加取消类型和原因
|
||||
handleCancelOrder()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleCancelOrder() {
|
||||
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order != null){
|
||||
cancelOrder(mContext, mCurrentTaskAndOrder!!.order!!.orderNo,
|
||||
object : OchCommonServiceCallback<BaseData>{
|
||||
override fun onSuccess(data: BaseData?) {
|
||||
d(SceneConstant.M_TAXI + TAG, "handleCancelOrder() = onSuccess")
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String?) {
|
||||
d(SceneConstant.M_TAXI + TAG, "handleCancelOrder() $code $msg")
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,7 +117,7 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
|
||||
//需要将虚拟任务停掉, 虚拟任务会再开始接单后获取新的
|
||||
updateUntruthTask(null)
|
||||
|
||||
if (mCurrentTaskAndOrder != null){
|
||||
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.endSite != null){
|
||||
VoiceNotice.showNotice("暂停接单啦!要完成当前订单哦")
|
||||
}else{
|
||||
VoiceNotice.showNotice("暂停接单啦")
|
||||
@@ -129,7 +153,9 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String?) {
|
||||
ToastUtilsOch.showWithCodeMessage(code, msg)
|
||||
ToastUtilsOch.showWithCodeMessage(code,
|
||||
"$msg curLatitude = ${CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().latitude}" +
|
||||
" curLongitude = ${CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().longitude}")
|
||||
}
|
||||
|
||||
override fun onError() {
|
||||
@@ -175,20 +201,14 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
|
||||
}
|
||||
|
||||
private fun updateUntruthTask(result: StartServiceRespBean.Result?) {
|
||||
|
||||
TaxiModel.updateUntruthTask(result)
|
||||
|
||||
sendUiState {
|
||||
copy(
|
||||
taskAndOrderUiState = TaskAndOrderUiState.UNTRUTHTASK(result)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateTaskAndOrderUi() {
|
||||
sendUiState {
|
||||
copy(
|
||||
taskAndOrderUiState = TaskAndOrderUiState.TASKANDORDER(mCurrentTaskAndOrder)
|
||||
taskAndOrderUiState = TaskAndOrderUiState.TASKANDORDER(mCurrentTaskAndOrder,
|
||||
TaxiModel.getCurUntruthTask())
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -197,7 +217,8 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
|
||||
|
||||
sendUiState {
|
||||
copy(
|
||||
taskAndOrderUiState = TaskAndOrderUiState.TASKANDORDER(null)
|
||||
taskAndOrderUiState = TaskAndOrderUiState.TASKANDORDER(null,
|
||||
TaxiModel.getCurUntruthTask())
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -253,6 +274,8 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
|
||||
|
||||
TaxiModel.updateCurrentTaskAndOrder(result)
|
||||
|
||||
TaxiModel.updateStation()
|
||||
|
||||
updateTaskAndOrderUi()
|
||||
}
|
||||
|
||||
@@ -265,7 +288,7 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
|
||||
|
||||
/**
|
||||
* 查询接驾/送驾任务轨迹集合
|
||||
* 注: 运营单刚来的时候, 有可能还在运行一个演练单, 要先跑完演练单才跑运营单
|
||||
* 注: 运营单刚来的时候, 有可能还在运行一个演练任务, 要先跑完演练任务才跑运营单
|
||||
*/
|
||||
private fun queryOrderContrails(planningLines: Array<Long>?) {
|
||||
if (planningLines == null) return
|
||||
|
||||
@@ -161,7 +161,7 @@ public class TaxiPresenter extends Presenter<TaxiFragment> implements ITaxiADASS
|
||||
|
||||
@Override
|
||||
public void onCurrentOrderDistToEndChanged(long meters, long timeInSecond) {
|
||||
|
||||
runOnUIThread(() -> mView.onCurrentOrderDistToEndChanged(meters,timeInSecond));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -22,6 +22,7 @@ import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager.getOverla
|
||||
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.util.ToastUtils
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
|
||||
import com.mogo.map.overlay.core.Level
|
||||
import com.mogo.map.overlay.point.Point
|
||||
import com.mogo.och.common.module.map.AmapNaviToDestinationModel
|
||||
@@ -36,6 +37,7 @@ 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
|
||||
import com.mogo.och.taxi.constant.TaskTypeEnum
|
||||
import com.mogo.och.taxi.constant.TaxiOrderStatusEnum
|
||||
import com.mogo.och.taxi.constant.TaxiUnmannedConst.Companion.TAXI_END_MAP_MAKER
|
||||
@@ -87,8 +89,8 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
d("viewmodel ==", "TaxiBeingTaskFragment onCreate")
|
||||
mViewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory()).get(TaxiUnmannedViewModel::class.java)
|
||||
d("viewModel ==", "TaxiBeingTaskFragment onCreate")
|
||||
mViewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory())[TaxiUnmannedViewModel::class.java]
|
||||
}
|
||||
|
||||
override fun initViews() {
|
||||
@@ -105,34 +107,35 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
|
||||
//监听返回的数据状态
|
||||
lifecycleScope.launchWhenStarted {
|
||||
mViewModel.uiStateFlow.map {it.taskAndOrderUiState}.collect {state ->
|
||||
d(TAG,"uiStateFlow: $state")
|
||||
when(state){
|
||||
mViewModel.uiStateFlow.map {it.taskAndOrderUiState}.collect {taskAndOrderUiState ->
|
||||
d(TAG,"uiStateFlow-taskAndOrderUiState: $taskAndOrderUiState")
|
||||
when(taskAndOrderUiState){
|
||||
is TaskAndOrderUiState.INIT -> {
|
||||
|
||||
}
|
||||
|
||||
is TaskAndOrderUiState.TASKANDORDER -> {
|
||||
mCurrentTaskAndOrder = state.model
|
||||
if (state.model == null && mCurrentUntruthTask == null){
|
||||
isHaveBeingOrder(false)
|
||||
return@collect
|
||||
}
|
||||
updateCurrentOrderStatusChanged(state.model)
|
||||
}
|
||||
|
||||
is TaskAndOrderUiState.UNTRUTHTASK -> {
|
||||
mCurrentUntruthTask = state.untruthTask
|
||||
if (state.untruthTask == null && mCurrentTaskAndOrder == null){
|
||||
mCurrentUntruthTask = taskAndOrderUiState.untruthTask
|
||||
mCurrentTaskAndOrder = taskAndOrderUiState.taskAndOrder
|
||||
|
||||
if ((taskAndOrderUiState.untruthTask == null && mCurrentTaskAndOrder != null
|
||||
&& mCurrentTaskAndOrder!!.endSite == null) || mCurrentTaskAndOrder == null){
|
||||
isHaveBeingOrder(false)
|
||||
return@collect
|
||||
}
|
||||
|
||||
isHaveBeingOrder(true)
|
||||
updateUntruthTask(state.untruthTask)
|
||||
if (taskAndOrderUiState.untruthTask != null){
|
||||
updateUntruthTask(taskAndOrderUiState.untruthTask)
|
||||
}else{
|
||||
updateCurrentOrderStatusChanged(taskAndOrderUiState.taskAndOrder)
|
||||
}
|
||||
}
|
||||
|
||||
is TaskAndOrderUiState.ORDERCANCEL -> {
|
||||
updateOrderCancelUi(state.isCancel)
|
||||
updateOrderCancelUi(taskAndOrderUiState.isCancel)
|
||||
onCurrentOrderCancelDone()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -148,13 +151,20 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
if (untruthTask == null) return
|
||||
updateUntruthTaskView()
|
||||
updateUntruthTaskUIData(untruthTask.siteName)
|
||||
updateUntruthTaskOtherInfo()
|
||||
}
|
||||
|
||||
private fun updateUntruthTaskOtherInfo() {
|
||||
if (mCurrentUntruthTask != null){
|
||||
startNaviToStation(false, mCurrentUntruthTask!!.gcjLat,
|
||||
mCurrentUntruthTask!!.gcjLon)
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateUntruthTaskUIData(siteName: String) {
|
||||
taskStatus.text = resources.getString(R.string.task_start_to_virtual_site)
|
||||
startStationName.text = resources.getString(R.string.task_current_loc)
|
||||
endStationName.text = siteName
|
||||
// TODO("剩余历程和时间导航去更新taskOtherInfo")
|
||||
}
|
||||
|
||||
private fun updateUntruthTaskView() {
|
||||
@@ -179,6 +189,26 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
naviToEnd.setOnClickListener(this)
|
||||
}
|
||||
|
||||
private fun updateRemainDistanceAndTime(isVoicePlay: Boolean){
|
||||
//根据任务状态计算剩余历程和时间
|
||||
if (mCurrentTaskAndOrder == null) return
|
||||
|
||||
if (mCurrentTaskAndOrder!!.endSite != null
|
||||
&& mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.StartTask.code){
|
||||
|
||||
startNaviToStation(isVoicePlay,mCurrentTaskAndOrder!!.endSite!!.gcjLat,
|
||||
mCurrentTaskAndOrder!!.endSite!!.gcjLat)
|
||||
return
|
||||
}
|
||||
|
||||
if (mCurrentTaskAndOrder!!.startSite != null
|
||||
&& mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.GetTask.code){ //演练任务和送驾任务
|
||||
|
||||
startNaviToStation(isVoicePlay,mCurrentTaskAndOrder!!.startSite!!.gcjLat,
|
||||
mCurrentTaskAndOrder!!.startSite!!.gcjLat)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 任务和订单信息
|
||||
*/
|
||||
@@ -193,7 +223,7 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
/**
|
||||
* 根据任务类型判断任务显示,
|
||||
* 虚拟单, 显示在进行中 前往上车点
|
||||
* 演练单,显示演练单, 同时有订单显示在待服务中
|
||||
* 演练任务,显示演练任务, 同时有订单显示在待服务中
|
||||
* 当前任务是接驾任务,显示订单状态+运营单 订单显示在进行中, 任务不再显示
|
||||
*/
|
||||
val taskType = taskAndOrder.taskType // 任务类型
|
||||
@@ -212,7 +242,6 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
taskTypeTv.text = resources.getString(R.string.task_exercise)
|
||||
startStationName.text = startSite.siteName
|
||||
endStationName.text = endSite.siteName
|
||||
// TODO("剩余历程和时间导航去更新taskOtherInfo")
|
||||
}
|
||||
TaskTypeEnum.ToOrderEndTask.code,TaskTypeEnum.ToOrderStartTask.code -> {// 送驾/接驾任务任务
|
||||
if (order == null) return
|
||||
@@ -222,9 +251,10 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
startStationName.text = order.orderStartSite?.siteName
|
||||
endStationName.text = order.orderEndSite?.siteName
|
||||
updateOrderUI(order)
|
||||
// TODO("剩余历程和时间导航去更新taskOtherInfo")
|
||||
}
|
||||
}
|
||||
|
||||
updateRemainDistanceAndTime(false)
|
||||
}
|
||||
|
||||
private fun updateOrderUI(order: OrderDetail) {
|
||||
@@ -232,7 +262,7 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
when(order.orderStatus){
|
||||
|
||||
TaxiOrderStatusEnum.None.code -> { //无
|
||||
// TODO("显示无订单页面")
|
||||
isHaveBeingOrder(false)
|
||||
}
|
||||
|
||||
TaxiOrderStatusEnum.Cancel.code -> { //取消
|
||||
@@ -263,8 +293,6 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
R.raw.end_marker
|
||||
)
|
||||
}
|
||||
|
||||
clearSmallMapRouteLine()
|
||||
}
|
||||
TaxiOrderStatusEnum.JourneyCompleted.code -> { //服务完成
|
||||
taskStatus.text = resources.getString(R.string.task_start_end_site)
|
||||
@@ -302,7 +330,6 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
R.raw.end_marker
|
||||
)
|
||||
}
|
||||
clearSmallMapRouteLine()
|
||||
}
|
||||
TaxiOrderStatusEnum.OnTheWayToEnd.code -> { //送驾中
|
||||
taskStatus.text = resources.getString(R.string.task_start_end_site)
|
||||
@@ -427,25 +454,19 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
|
||||
private fun updateUIShowStatus(taskType: Int, currentStatus: Int, order: OrderDetail?) {
|
||||
when (taskType) {
|
||||
TaskTypeEnum.VirtualTask.code -> { //演练单
|
||||
taskStatus.visibility = View.VISIBLE
|
||||
taskTypeTv.visibility = View.VISIBLE
|
||||
TaskTypeEnum.VirtualTask.code -> { //演练任务
|
||||
cancelOrder.visibility = View.GONE
|
||||
orderPhoneAndNum.visibility = View.GONE
|
||||
startStationName.visibility = View.VISIBLE
|
||||
endStationName.visibility = View.VISIBLE
|
||||
taskClickBtn.visibility = View.GONE
|
||||
// currentStatus 0:空闲 1:获取任务 2:开始任务 3:到达目的地
|
||||
naviToStart.visibility = View.GONE
|
||||
naviToEnd.visibility = if (currentStatus == 2) View.VISIBLE else View.GONE
|
||||
taskOtherInfo.visibility = if (currentStatus == 0) View.GONE else View.VISIBLE
|
||||
naviToEnd.visibility = if (currentStatus >= TaskStatusEnum.StartTask.code) View.VISIBLE else View.GONE
|
||||
taskOtherInfo.visibility = if (currentStatus == TaskStatusEnum.GetTask.code) View.GONE else View.VISIBLE
|
||||
}
|
||||
TaskTypeEnum.ToOrderEndTask.code,TaskTypeEnum.ToOrderStartTask.code -> {// 运营单(接驾任务、送驾任务)
|
||||
if (order == null) return
|
||||
taskStatus.visibility = View.VISIBLE
|
||||
taskTypeTv.visibility = View.VISIBLE
|
||||
cancelOrder.visibility = View.VISIBLE
|
||||
orderPhoneAndNum.visibility = View.VISIBLE
|
||||
startStationName.visibility = View.VISIBLE
|
||||
endStationName.visibility = View.VISIBLE
|
||||
taskClickBtn.visibility = View.VISIBLE
|
||||
// orderStatus: 0 订单创建(为派单), 10 已派上司机(司机去往上车点), 20 司机到达上车点,
|
||||
// 30 乘客到达上车点, 40 服务中(去往目的地), 50 到达目的地, 60 已完成, 70 已取消
|
||||
@@ -577,11 +598,6 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
closeOrderDialog.show()
|
||||
}
|
||||
|
||||
// showNotice(
|
||||
// mActivity!!.getString(
|
||||
// R.string.module_och_taxi_new_order
|
||||
// )
|
||||
|
||||
private fun clearOrderTag() {
|
||||
taskOtherInfo.text = "距离 - - 公里,用时 - - 分"
|
||||
}
|
||||
@@ -600,13 +616,10 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
if (being) {
|
||||
noTaskData.visibility = View.GONE
|
||||
mBeingOrderLayout.visibility = View.VISIBLE
|
||||
// mTaxiFragment!!.changeOperationViewVisible(View.GONE)
|
||||
clearSmallMapRouteLine()
|
||||
} else {
|
||||
noTaskData.visibility = View.VISIBLE
|
||||
noOrderDataTv.text = "暂无进行中订单"
|
||||
mBeingOrderLayout.visibility = View.GONE
|
||||
// mTaxiFragment!!.changeOperationViewVisible(View.VISIBLE)
|
||||
}
|
||||
} catch (e: NullPointerException) { //可能会出现订单信息已经轮询回来,但进行中页面控件还未初始化完成的情况
|
||||
TaxiModel.clearCurrentOCHOrder()
|
||||
@@ -618,37 +631,20 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
d(SceneConstant.M_TAXI + TAG, taskStatus.text.toString())
|
||||
startOrEndService()
|
||||
} else if (v.id == cancelOrder.id) {
|
||||
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order != null){
|
||||
TaxiOrderCancelDialog(mActivity,
|
||||
mCurrentTaskAndOrder!!.order!!.orderNo,mCurrentTaskAndOrder!!.order!!.orderStatus).show()
|
||||
}
|
||||
} else if (v.id == naviToStart.id) {
|
||||
if (mTaxiFragment != null) {
|
||||
showNaviToStartStationFragment()
|
||||
}
|
||||
} else if (v.id == naviToEnd.id) {
|
||||
if (mTaxiFragment != null) {
|
||||
showNaviToEndStationFragment(true)
|
||||
if (mCurrentTaskAndOrder!!.order != null){
|
||||
TaxiOrderCancelDialog(mActivity,mCurrentTaskAndOrder!!.order!!.orderStatus
|
||||
) { type, reason ->
|
||||
mViewModel.sendUiIntent(UnmannedIntent.CancelOrder(type,reason))
|
||||
}
|
||||
.show()
|
||||
}
|
||||
} else if (v.id == naviToStart.id || v.id == naviToEnd.id) {
|
||||
showNaviToEndStationFragment(true)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示/隐藏 前往乘客上车点的导航
|
||||
**/
|
||||
private fun showNaviToStartStationFragment() {
|
||||
// if (mCurrentTaskAndOrder != null &&
|
||||
// mCurrentTaskAndOrder!!.order.orderStatus == TaxiOrderStatusEnum.OnTheWayToStart.code
|
||||
// ) {
|
||||
// val orderStartStationLat = mCurrentOrder!!.startSiteGcjPoint[1]
|
||||
// val orderStartStationLng = mCurrentOrder!!.startSiteGcjPoint[0]
|
||||
// mTaxiFragment!!.showAmapNaviToStationFragment(true)
|
||||
// startNaviToStation(true, orderStartStationLat, orderStartStationLng)
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示/隐藏 前往乘客目的地的导航
|
||||
* 显示/隐藏 前往任务目的地的导航
|
||||
*
|
||||
* @param isShow
|
||||
*/
|
||||
@@ -656,23 +652,25 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
mTaxiFragment!!.startNaviToEndStation(isShow)
|
||||
}
|
||||
|
||||
fun onCurrentOrderCancelDone() {
|
||||
private fun onCurrentOrderCancelDone() {
|
||||
//去除起终点
|
||||
if (mCurrentTaskAndOrder != null) {
|
||||
// setOrRemoveMapMaker(
|
||||
// false,
|
||||
// TaxiUnmannedConst.TAXI_START_MAP_MAKER,
|
||||
// mCurrentOrder!!.startSitePoint,
|
||||
// R.raw.star_marker
|
||||
// )
|
||||
// setOrRemoveMapMaker(
|
||||
// false,
|
||||
// TaxiUnmannedConst.TAXI_END_MAP_MAKER,
|
||||
// mCurrentOrder!!.endSitePoint,
|
||||
// R.raw.end_marker
|
||||
// )
|
||||
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
|
||||
)
|
||||
}
|
||||
clearSmallMapRouteLine()
|
||||
//提交取消订单后的回调
|
||||
ToastUtils.showShort("订单取消成功")
|
||||
//更新界面
|
||||
@@ -681,10 +679,6 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
clearOrderTag()
|
||||
}
|
||||
|
||||
private fun clearSmallMapRouteLine() {
|
||||
// CallerSmpManager.clearPolyline();
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单流转debug START
|
||||
*/
|
||||
@@ -698,11 +692,6 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
@RequiresApi(Build.VERSION_CODES.N)
|
||||
override fun onCurrentNaviDistAndTimeChanged(meters: Int, timeInSecond: Long) {
|
||||
updateDistanceAndTime(meters.toLong(), timeInSecond)
|
||||
// if (mCurrentTaskAndOrder != null
|
||||
// && mCurrentTaskAndOrder!!.order.orderStatus == TaxiOrderStatusEnum.OnTheWayToEnd.code
|
||||
// ) {
|
||||
// mTaxiFragment!!.reportToEndDisAndTime(meters, timeInSecond)
|
||||
// }
|
||||
}
|
||||
|
||||
override fun reInitNaviAmap(isPlay: Boolean, isRestart: Boolean) {
|
||||
@@ -714,42 +703,39 @@ class TaxiBeingTaskFragment : BaseFragment(),
|
||||
mTaxiFragment!!.showAmapNaviToStationFragment(false)
|
||||
return
|
||||
}
|
||||
// UiThreadHandler.postDelayed({
|
||||
// if (mCurrentTaskAndOrder != null &&
|
||||
// mCurrentTaskAndOrder!!.order.orderStatus == TaxiOrderStatusEnum.OnTheWayToStart.code
|
||||
// ) {
|
||||
// val orderStartStationLat = mCurrentOrder!!.startSiteGcjPoint[1]
|
||||
// val orderStartStationLng = mCurrentOrder!!.startSiteGcjPoint[0]
|
||||
// startNaviToStation(false, orderStartStationLat, orderStartStationLng)
|
||||
// }
|
||||
// }, 2000)
|
||||
// UiThreadHandler.postDelayed({
|
||||
// if (mCurrentTaskAndOrder != null &&
|
||||
// mCurrentTaskAndOrder!!.order.orderStatus == TaxiOrderStatusEnum.OnTheWayToStart.code
|
||||
// ) {
|
||||
// if (naviToStart.visibility == View.GONE) {
|
||||
// naviToStart.visibility = View.VISIBLE
|
||||
// }
|
||||
// }
|
||||
// if (mCurrentTaskAndOrder != null &&
|
||||
// mCurrentTaskAndOrder!!.order.orderStatus == TaxiOrderStatusEnum.OnTheWayToEnd.code
|
||||
// ) {
|
||||
// if (naviToEnd.visibility == View.GONE) {
|
||||
// naviToEnd.visibility = View.VISIBLE
|
||||
// }
|
||||
// }
|
||||
// }, 3000)
|
||||
UiThreadHandler.postDelayed({
|
||||
updateRemainDistanceAndTime(false)
|
||||
}, 2000)
|
||||
UiThreadHandler.postDelayed({
|
||||
if (mCurrentTaskAndOrder != null &&
|
||||
mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.GetTask.code
|
||||
) {
|
||||
if (naviToStart.visibility == View.GONE) {
|
||||
naviToStart.visibility = View.VISIBLE
|
||||
}
|
||||
}
|
||||
if (mCurrentTaskAndOrder != null &&
|
||||
mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.StartTask.code
|
||||
) {
|
||||
if (naviToEnd.visibility == View.GONE) {
|
||||
naviToEnd.visibility = View.VISIBLE
|
||||
}
|
||||
}
|
||||
}, 3000)
|
||||
}
|
||||
|
||||
fun onNaviToEndAmap(isShow: Boolean) {
|
||||
// if (mCurrentOrder != null &&
|
||||
// mCurrentOrder!!.orderStatus == TaxiOrderStatusEnum.OnTheWayToEnd.code
|
||||
// ) {
|
||||
// val orderEndStationLat = mCurrentOrder!!.endSiteGcjPoint[1]
|
||||
// val orderEndStationLng = mCurrentOrder!!.endSiteGcjPoint[0]
|
||||
// mTaxiFragment!!.showAmapNaviToStationFragment(isShow)
|
||||
// startNaviToStation(isShow, orderEndStationLat, orderEndStationLng)
|
||||
// }
|
||||
if (mCurrentTaskAndOrder == null) return
|
||||
|
||||
mTaxiFragment!!.showAmapNaviToStationFragment(
|
||||
if (mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.StartTask.code)
|
||||
isShow else true
|
||||
)
|
||||
|
||||
updateRemainDistanceAndTime(
|
||||
if (mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.StartTask.code)
|
||||
isShow else true
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
package com.mogo.och.taxi.ui
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.text.TextUtils
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.TextView
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.fragment.app.FragmentTransaction
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import com.alibaba.android.arouter.launcher.ARouter
|
||||
@@ -19,7 +21,6 @@ import com.mogo.och.common.module.biz.constant.OchCommonConst
|
||||
import com.mogo.och.common.module.biz.provider.LoginService
|
||||
import com.mogo.och.taxi.R
|
||||
import com.mogo.och.taxi.base.BaseTaxiTabFragment
|
||||
import com.mogo.och.taxi.constant.TaxiOrderStatusEnum
|
||||
import com.mogo.och.taxi.model.TaxiModel
|
||||
import com.mogo.och.taxi.model.TaxiUnmannedViewModel
|
||||
import com.mogo.och.taxi.network.LoginBusImpl
|
||||
@@ -28,7 +29,6 @@ import com.mogo.och.taxi.ui.unmanned.UnmannedIntent
|
||||
import com.mogo.och.taxi.utils.TPRouteDataTestUtils
|
||||
import kotlinx.android.synthetic.main.taxi_base_fragment.module_mogo_och_operation_status
|
||||
import kotlinx.android.synthetic.main.taxi_base_fragment.taxi_driver_role_tv
|
||||
import kotlinx.coroutines.flow.map
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
@@ -241,6 +241,12 @@ class TaxiFragment : BaseTaxiTabFragment<TaxiFragment, TaxiPresenter>(),
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.N)
|
||||
fun onCurrentOrderDistToEndChanged(meters: Long, timeInSecond: Long) {
|
||||
if (null == serverOrdersFragmentWR || serverOrdersFragmentWR!!.get() == null) return
|
||||
serverOrdersFragmentWR!!.get()!!.onCurrentOrderDistToEndChanged(meters, timeInSecond)
|
||||
}
|
||||
|
||||
private fun testRouteInfoUpload() {
|
||||
TPRouteDataTestUtils.converToRouteData()
|
||||
}
|
||||
|
||||
@@ -38,20 +38,18 @@ public class TaxiOrderCancelDialog extends AlertDialog implements View.OnClickLi
|
||||
|
||||
private static final String TAG = "OCHTaxiOrderCancelDial";
|
||||
protected WeakReference<Context> contextWeakReference;
|
||||
private GridView mContentView;
|
||||
private TextView mCancelCommitTv;
|
||||
private TextView mDialogCancelTv;
|
||||
private String mCurrentReason = "";
|
||||
private ContentAdapter mContentAdapter;
|
||||
private int mOrderStatus;//1:预约单,其他为即时单的状态, 主要是控制乘客上车 乘客下车这几个选项的显示
|
||||
private String[] mContentArrays;
|
||||
private String mOrderNo;
|
||||
|
||||
protected TaxiOrderCancelDialog(Context context, String orderNo, int orderStatus) {
|
||||
private CommitReasonListener mCommitListener = null;
|
||||
|
||||
protected TaxiOrderCancelDialog(Context context, int orderStatus,CommitReasonListener commitListener) {
|
||||
super(context,R.style.OrderCancelDialog);
|
||||
mOrderNo = orderNo;
|
||||
this.mOrderStatus = orderStatus;
|
||||
contextWeakReference = new WeakReference<>(context);
|
||||
this.mCommitListener = commitListener;
|
||||
initReasonArray();
|
||||
}
|
||||
|
||||
@@ -86,15 +84,6 @@ public class TaxiOrderCancelDialog extends AlertDialog implements View.OnClickLi
|
||||
}
|
||||
}
|
||||
|
||||
protected TaxiOrderCancelDialog(Context context, boolean cancelable, OnCancelListener cancelListener) {
|
||||
super(context, cancelable, cancelListener);
|
||||
}
|
||||
|
||||
protected TaxiOrderCancelDialog(Context context, int themeResId) {
|
||||
super(context, themeResId);
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.M)
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@@ -122,11 +111,10 @@ public class TaxiOrderCancelDialog extends AlertDialog implements View.OnClickLi
|
||||
window.setAttributes(params);
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.M)
|
||||
private void initView() {
|
||||
mContentView = findViewById(R.id.module_och_taxi_order_cancel_content_gv);
|
||||
mCancelCommitTv = findViewById(R.id.order_cancel_commit_tv);
|
||||
mDialogCancelTv = findViewById(R.id.order_dialog_cancel_tv);
|
||||
GridView mContentView = findViewById(R.id.module_och_taxi_order_cancel_content_gv);
|
||||
TextView mCancelCommitTv = findViewById(R.id.order_cancel_commit_tv);
|
||||
TextView mDialogCancelTv = findViewById(R.id.order_dialog_cancel_tv);
|
||||
mContentAdapter = new ContentAdapter(contextWeakReference.get(), mContentArrays);
|
||||
mContentView.setAdapter(mContentAdapter);
|
||||
mContentView.setSelector(new ColorDrawable(Color.TRANSPARENT));
|
||||
@@ -140,12 +128,9 @@ public class TaxiOrderCancelDialog extends AlertDialog implements View.OnClickLi
|
||||
public void onClick(View v) {
|
||||
if (v.getId() == R.id.order_cancel_commit_tv) {//bt commit
|
||||
if (!TextUtils.isEmpty(mCurrentReason) && TaxiOrderCancelReasons.getType(mCurrentReason) != 0) {
|
||||
if (1 == mOrderStatus){//订单
|
||||
// mOchTaxiFragmentWeak.get().cancelOrderById(mOrderNo, TaxiOrderCancelReasons.getType(mCurrentReason),mCurrentReason);
|
||||
//todo 取消还未执行的订单
|
||||
}else {//任务
|
||||
//todo 取消正在执行的任务
|
||||
// mOchTaxiFragmentWeak.get().cancelCurOrder(TaxiOrderCancelReasons.getType(mCurrentReason),mCurrentReason);
|
||||
//todo 取消正在执行的任务
|
||||
if (mCommitListener != null){
|
||||
mCommitListener.cancelCurOrder(TaxiOrderCancelReasons.getType(mCurrentReason),mCurrentReason);
|
||||
}
|
||||
dismiss();
|
||||
}else {
|
||||
@@ -161,13 +146,13 @@ public class TaxiOrderCancelDialog extends AlertDialog implements View.OnClickLi
|
||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||
CallerLogger.INSTANCE.d(M_TAXI + TAG,"mCurrentReason ="+ mContentArrays[position]);
|
||||
mCurrentReason = mContentArrays[position];
|
||||
// GradientDrawable background = (GradientDrawable) mCancelBt.getBackground();//GradientDrawable是Drawable的子类
|
||||
// background.setColor(Color.parseColor("#2B6EFF"));
|
||||
// mCancelBt.setTextColor(Color.parseColor("#FFFFFF"));
|
||||
// mCancelBt.setClickable(true);
|
||||
mContentAdapter.notifyCurrentReasons(mCurrentReason);
|
||||
}
|
||||
|
||||
interface CommitReasonListener{
|
||||
void cancelCurOrder(int type, String reason);
|
||||
}
|
||||
|
||||
class ContentAdapter extends BaseAdapter{
|
||||
|
||||
private Context context;
|
||||
|
||||
@@ -70,7 +70,7 @@ class TaxiReserveOrderFragment : BaseFragment() {
|
||||
}
|
||||
|
||||
is TaskAndOrderUiState.TASKANDORDER -> {
|
||||
updateOrderChanged(state.model)
|
||||
updateOrderChanged(state.taskAndOrder)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,10 +3,12 @@ package com.mogo.och.taxi.ui
|
||||
import android.annotation.SuppressLint
|
||||
import android.graphics.Color
|
||||
import android.graphics.Typeface
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.util.TypedValue
|
||||
import android.view.View
|
||||
import android.widget.TextView
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import androidx.fragment.app.FragmentPagerAdapter
|
||||
@@ -155,6 +157,12 @@ class TaxiServerOrdersFragment : BaseFragment(){
|
||||
beingTaskFragment!!.onNaviToEndAmap(isShow)
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.N)
|
||||
fun onCurrentOrderDistToEndChanged(meters: Long, timeInSecond: Long) {
|
||||
if (null == beingTaskFragment) return
|
||||
beingTaskFragment!!.updateDistanceAndTime(meters, timeInSecond)
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val TAG = "TaxiServerOrdersFragment"
|
||||
fun newInstance(): TaxiServerOrdersFragment {
|
||||
|
||||
@@ -8,29 +8,11 @@ import com.mogo.och.taxi.base.IUiIntent
|
||||
*/
|
||||
sealed class UnmannedIntent: IUiIntent{
|
||||
|
||||
//获取接单/暂停接单状态
|
||||
object GetReceivingOrderState : UnmannedIntent()
|
||||
|
||||
//开始接单 、 暂停接单
|
||||
object StartOrPauseReceivingOrder : UnmannedIntent()
|
||||
|
||||
//获取当前任务信息
|
||||
object GetCurrentTask : UnmannedIntent()
|
||||
|
||||
//到站获取下一个执行的任务信息
|
||||
object GetNextTask: UnmannedIntent()
|
||||
|
||||
//开始接单后获取要前往的虚拟站点
|
||||
object GetVirtualStation: UnmannedIntent()
|
||||
|
||||
//开始执行任务
|
||||
object StartTask: UnmannedIntent()
|
||||
|
||||
//到达乘客上车点
|
||||
object ArrivedOrderStartStation: UnmannedIntent()
|
||||
|
||||
//到达乘客下车点
|
||||
object ArrivedOrderEndStation: UnmannedIntent()
|
||||
//取消订单
|
||||
class CancelOrder(type: Int, reason: String) : UnmannedIntent()
|
||||
|
||||
//订单服务完成
|
||||
object JourneyCompleted: UnmannedIntent()
|
||||
|
||||
@@ -1,27 +1,15 @@
|
||||
package com.mogo.och.taxi.ui.unmanned
|
||||
|
||||
import com.mogo.och.taxi.base.IUiState
|
||||
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
|
||||
|
||||
sealed class TaskUiState {
|
||||
object INIT : TaskUiState()
|
||||
data class SUCCESS(val models: List<Site>) : TaskUiState()
|
||||
}
|
||||
|
||||
sealed class OrderUiState {
|
||||
object INIT : OrderUiState()
|
||||
data class SUCCESS(val models: List<OrderDetail>) : OrderUiState()
|
||||
}
|
||||
data class UnmannedState(val taskAndOrderUiState: TaskAndOrderUiState) : IUiState
|
||||
|
||||
sealed class TaskAndOrderUiState {
|
||||
object INIT : TaskAndOrderUiState()
|
||||
data class TASKANDORDER(val model: QueryCurrentTaskRespBean.Result?) : TaskAndOrderUiState()//演练、接驾、送驾任务
|
||||
data class TASKANDORDER(val taskAndOrder: QueryCurrentTaskRespBean.Result?, val untruthTask: StartServiceRespBean.Result?) : TaskAndOrderUiState()//演练任务、接驾、送驾任务
|
||||
|
||||
data class UNTRUTHTASK(val untruthTask: StartServiceRespBean.Result?) : TaskAndOrderUiState()//伪任务
|
||||
data class ORDERCANCEL(var isCancel: Boolean) : TaskAndOrderUiState()//伪任务
|
||||
data class ORDERCANCEL(var isCancel: Boolean) : TaskAndOrderUiState()//取消订单
|
||||
}
|
||||
|
||||
data class UnmannedState(val taskAndOrderUiState: TaskAndOrderUiState) : IUiState
|
||||
|
||||
@@ -94,6 +94,7 @@
|
||||
android:layout_width="@dimen/dp_48"
|
||||
android:layout_height="@dimen/dp_48"
|
||||
android:src="@drawable/taxi_navi_icon"
|
||||
app:layout_goneMarginEnd="@dimen/dp_40"
|
||||
app:layout_constraintRight_toRightOf="@+id/cancelOrder"
|
||||
app:layout_constraintTop_toTopOf="@+id/startStationName"
|
||||
app:layout_constraintBottom_toBottomOf="@id/startStationName"/>
|
||||
@@ -103,6 +104,7 @@
|
||||
android:layout_width="@dimen/dp_48"
|
||||
android:layout_height="@dimen/dp_48"
|
||||
android:src="@drawable/taxi_navi_icon"
|
||||
app:layout_goneMarginEnd="@dimen/dp_40"
|
||||
app:layout_constraintRight_toRightOf="@+id/cancelOrder"
|
||||
app:layout_constraintTop_toTopOf="@+id/endStationName"
|
||||
app:layout_constraintBottom_toBottomOf="@id/endStationName"/>
|
||||
|
||||
Reference in New Issue
Block a user