[5.0.0]
[速度里程抽取view]
This commit is contained in:
@@ -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
|
||||
@@ -38,17 +35,14 @@ 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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,8 +32,6 @@ import com.mogo.och.bus.passenger.ui.dialogfragment.M1CarUserNoOrderFragment
|
||||
import com.mogo.och.bus.passenger.ui.dialogfragment.M1ContainFragment
|
||||
import com.mogo.och.bus.passenger.ui.dialogfragment.NoviceGuidanceFragment
|
||||
import com.mogo.och.bus.passenger.ui.statusbar.StatusBarView
|
||||
import com.mogo.och.common.module.biz.constant.LoginStatusManager
|
||||
import kotlinx.android.synthetic.main.m1_contain_fragment.bb_bottom_bar
|
||||
import kotlinx.android.synthetic.main.m1_main_fragment.*
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
@@ -199,23 +197,6 @@ class MainFragment :
|
||||
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
|
||||
|
||||
@@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
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,145 +57,11 @@
|
||||
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">
|
||||
|
||||
<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>
|
||||
|
||||
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<com.mogo.och.bus.passenger.ui.orderinfo.OrderInfoView
|
||||
android:id="@+id/biz_orderinfo"
|
||||
|
||||
Reference in New Issue
Block a user