[Taxi无人化]refactor: next task 优化;

This commit is contained in:
aibingbing
2023-08-23 18:14:17 +08:00
committed by zhongchao
parent e3b6f0c915
commit aeaf6eb18d
5 changed files with 71 additions and 88 deletions

View File

@@ -1,7 +1,5 @@
package com.mogo.och.taxi.bean
import android.text.Spanned
import androidx.core.text.HtmlCompat
import com.mogo.eagle.core.data.BaseData
/**
@@ -73,16 +71,6 @@ data class QueryCurrentTaskRespBean(var data: Result?) : BaseData() {
var startSite: Site?, var endSite: Site?,
var order: OrderDetail?
) {
companion object {
@JvmStatic
fun getCurrentTaskTotalAndDurationHtml(mileage: Float, duration: Int): Spanned {
val strHtml =
("<font color=\"#CAD6FF\">全程 </font>" + "<font color=\"#FFFFFF\"> $mileage </font>" + "<font color=\"#CAD6FF\"> 公里 </font>"
+ "<font color=\"#CAD6FF\">,总用时 </font>" + "<font color=\"#FFFFFF\"> $duration </font>" + "<font color=\"#CAD6FF\"> 分钟</font>")
return HtmlCompat.fromHtml(strHtml, HtmlCompat.FROM_HTML_MODE_LEGACY)
}
}
// servingStatus = 0 //暂停接单 = 1 //开始接单
//taskType = 1 //虚拟任务 = 2 //接驾任务 = 3 //送驾任务
//currentStatus 0空闲 1:获取任务 2:开始任务 3:到达目的地

View File

@@ -187,7 +187,7 @@ class TaxiCurrentTaskFragment : BaseFragment(),
is TaskAndOrderUiState.UPDATEORDERMILEANDDUR -> {
taskOtherInfo.text =
QueryCurrentTaskRespBean.Result.getCurrentTaskTotalAndDurationHtml(
TaskUtils.getCurrentTaskTotalAndDurationHtml(
taskAndOrderUiState.mileage,
taskAndOrderUiState.duration
)

View File

@@ -1,7 +1,6 @@
package com.mogo.och.taxi.ui
import android.annotation.SuppressLint
import android.app.Activity
import android.graphics.Color
import android.graphics.drawable.GradientDrawable
import android.os.Bundle
@@ -12,7 +11,6 @@ import com.mogo.och.taxi.R
import com.mogo.och.taxi.bean.OrderDetail
import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean
import com.mogo.och.taxi.constant.TaskTypeEnum
import com.mogo.och.taxi.ui.base.TaxiFragment
import kotlinx.android.synthetic.main.task_fragment_current.endStationName
import kotlinx.android.synthetic.main.task_fragment_current.mCurrentTaskLayout
import kotlinx.android.synthetic.main.task_fragment_current.naviToEnd
@@ -29,10 +27,15 @@ import kotlinx.android.synthetic.main.task_fragment_current.taskTypeTv
* @date: 2023/7/24
*/
class TaxiNextTaskFragment : BaseFragment() {
private val mData: MutableList<QueryCurrentTaskRespBean.Result> = ArrayList()
companion object {
const val TAG = "TaxiNextTaskFragment"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
fun newInstance(): TaxiNextTaskFragment {
val args = Bundle()
val fragment = TaxiNextTaskFragment()
fragment.arguments = args
return fragment
}
}
override fun getLayoutId(): Int {
@@ -40,32 +43,30 @@ class TaxiNextTaskFragment : BaseFragment() {
}
override fun getTagName(): String {
return "TaxiNextTaskFragment"
return javaClass.simpleName
}
override fun initViews() {
showNoOrderView()
showNoTaskView()
}
fun updateOrderChanged(model: QueryCurrentTaskRespBean.Result?) {
fun onTaskDataChanged(model: QueryCurrentTaskRespBean.Result?) {
if (model?.order == null) {
showNoOrderView()
showNoTaskView()
return
}
if (model.taskType == TaskTypeEnum.VirtualTask.code) {
val order = model.order
updateOrderUI(order!!)
updateTaskUI(order!!)
} else {
showNoOrderView()
showNoTaskView()
}
}
@SuppressLint("SetTextI18n")
private fun updateOrderUI(order: OrderDetail) {
showOrderView()
private fun updateTaskUI(order: OrderDetail) {
showTaskView()
taskOtherInfo.visibility = View.GONE
naviToStart.visibility = View.GONE
naviToEnd.visibility = View.GONE
@@ -77,7 +78,6 @@ class TaxiNextTaskFragment : BaseFragment() {
HtmlCompat.FROM_HTML_MODE_LEGACY
)
order.orderStartSite?.let {
startStationName.text = it.siteName
}
@@ -88,7 +88,7 @@ class TaxiNextTaskFragment : BaseFragment() {
taskTypeTv.text = resources.getString(R.string.task_order)
taskTypeTv.background = resources.getDrawable(R.drawable.task_order_type_btn_bg, null)
updateOrderBottomBtn(
updateTaskContainerBottomBtn(
getString(R.string.waiting_server),
Color.parseColor("#4DFFFFFF"),
Color.parseColor("#4D1D5EF3"),
@@ -96,7 +96,7 @@ class TaxiNextTaskFragment : BaseFragment() {
)
}
private fun updateOrderBottomBtn(
private fun updateTaskContainerBottomBtn(
txt: String?,
txtColorId: Int,
bgColorId: Int,
@@ -110,33 +110,13 @@ class TaxiNextTaskFragment : BaseFragment() {
taskClickBtn.isClickable = isClickable
}
private fun showNoOrderView() {
private fun showNoTaskView() {
noTaskData.visibility = View.VISIBLE
mCurrentTaskLayout.visibility = View.GONE
}
private fun showOrderView() {
private fun showTaskView() {
noTaskData.visibility = View.GONE
mCurrentTaskLayout.visibility = View.VISIBLE
}
companion object {
const val TAG = "TaxiNextTaskFragment"
@SuppressLint("StaticFieldLeak")
private var mTaxiFragment: TaxiFragment? = null
@SuppressLint("StaticFieldLeak")
private var mActivity: Activity? = null
fun newInstance(
activity: Activity?,
): TaxiNextTaskFragment {
mActivity = activity
val args = Bundle()
val fragment = TaxiNextTaskFragment()
fragment.arguments = args
return fragment
}
}
}

View File

@@ -1,12 +1,12 @@
package com.mogo.och.taxi.ui
import android.annotation.SuppressLint
import android.graphics.Color
import android.graphics.Typeface
import android.os.Bundle
import android.util.TypedValue
import android.view.View
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
@@ -32,6 +32,8 @@ import me.jessyan.autosize.utils.AutoSizeUtils
* @desc: 司机端任务fragment 容器,展示了“进行中”和“待服务”的任务信息
* 任务:可以理解为对应的是一个自动驾驶任务
* 任务类型:演练任务 / 接驾任务 / 送驾任务
* DriveToNearestStationTask: 一种特殊任务,人工驾驶去最近的站点任务。每次 开启接单 后后端都会返回离当前最近的站点,车辆需要
* 开到此站点后才能进入无人化接单的整体流程
* 订单是面向C端小程序的一个概念用户下单后产生的是一个订单后端会将一个订单分解成 接驾任务和送驾任务 并派发到
* 车端来执行
* 任务和订单的对应1.如果是一个演练任务是后端自动生成的没有和C端订单挂钩
@@ -41,6 +43,10 @@ class TaxiTaskTabFragment : BaseFragment() {
companion object {
const val TAG = "TaxiTaskTabFragment"
const val TAB_POSITION_CURRENT = 0
const val TAB_POSITION_NEXT = 1
val mTabTitles = arrayOf("进行中", "待服务")
fun newInstance(): TaxiTaskTabFragment {
val args = Bundle()
val fragment = TaxiTaskTabFragment()
@@ -49,45 +55,43 @@ class TaxiTaskTabFragment : BaseFragment() {
}
}
private val mTabTitles = arrayOf("进行中", "待服务")
private val mFragments: MutableList<Fragment> = ArrayList()
private var currentTaskFragment: TaxiCurrentTaskFragment? = null
private var nextTaskFragment: TaxiNextTaskFragment? = null
override fun getLayoutId(): Int {
return R.layout.taxi_server_orders_panel
}
override fun getTagName(): String {
return "TaxiTaskTabFragment"
return this.javaClass.simpleName
}
override fun initViews() {
initOrderTab()
initTaskTab()
}
private fun initOrderTab() {
for (i in mTabTitles.indices) {
private fun initTaskTab() {
for (position in mTabTitles.indices) {
val tab = module_och_taxi_tab.newTab()
tab.view.setBackgroundColor(Color.parseColor("#00000000"))
val tabView =
View.inflate(activity, R.layout.taxi_tab_item_custom, null) as TextView
tabView.text = mTabTitles[i]
tabView.text = mTabTitles[position]
tabView.height = AutoSizeUtils.dp2px(context, 120f)
tab.customView = tabView
if (0 == i) {
if (TAB_POSITION_CURRENT == position) {
module_och_taxi_tab.addTab(tab, true)
changeTabLayoutTabUI(tab, true)
changeTabLayoutUI(tab, true)
currentTaskFragment = TaxiCurrentTaskFragment.newInstance(
parentFragment as TaxiFragment?
)
mFragments.add(currentTaskFragment!!)
} else if (1 == i) {
} else if (TAB_POSITION_NEXT == position) {
module_och_taxi_tab.addTab(tab)
changeTabLayoutTabUI(tab, false)
nextTaskFragment = TaxiNextTaskFragment.newInstance(
activity
)
changeTabLayoutUI(tab, false)
nextTaskFragment = TaxiNextTaskFragment.newInstance()
mFragments.add(nextTaskFragment!!)
}
}
@@ -96,15 +100,16 @@ class TaxiTaskTabFragment : BaseFragment() {
module_och_taxi_tab.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
module_och_taxi_view_pager.currentItem = tab.position
changeTabLayoutTabUI(tab, true)
changeTabLayoutUI(tab, true)
}
override fun onTabUnselected(tab: TabLayout.Tab) {
changeTabLayoutTabUI(tab, false)
changeTabLayoutUI(tab, false)
}
override fun onTabReselected(tab: TabLayout.Tab) {}
})
module_och_taxi_view_pager.addOnPageChangeListener(object : OnPageChangeListener {
override fun onPageScrolled(
position: Int,
@@ -119,37 +124,40 @@ class TaxiTaskTabFragment : BaseFragment() {
override fun onPageScrollStateChanged(state: Int) {}
})
module_och_taxi_view_pager.adapter = OrdersFragmentAdapter(
module_och_taxi_view_pager.adapter = TaskTabFragmentAdapter(
childFragmentManager,
FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
)
}
@SuppressLint("UseCompatLoadingForDrawables")
private fun changeTabLayoutTabUI(tab: TabLayout.Tab, isSelected: Boolean) {
private fun changeTabLayoutUI(tab: TabLayout.Tab, isSelected: Boolean) {
val textView = tab.customView!!.findViewById<View>(R.id.tab_title) as TextView
if (isSelected) {
textView.background = activity?.getDrawable(R.drawable.taxi_driver_tab_item_bg)
textView.background =
ContextCompat.getDrawable(requireContext(), R.drawable.taxi_driver_tab_item_bg)
textView.setTextSize(
TypedValue.COMPLEX_UNIT_PX,
AutoSizeUtils.dp2px(context, 40f).toFloat()
)
d(SceneConstant.M_TAXI + TAG, "SelectTv = " + textView.text)
textView.typeface = Typeface.defaultFromStyle(Typeface.BOLD)
textView.setTextColor(Color.parseColor("#FFFFFF"))
d(SceneConstant.M_TAXI + TAG, "SelectTv = " + textView.text)
} else {
textView.background = null
textView.setTextSize(
TypedValue.COMPLEX_UNIT_PX,
AutoSizeUtils.dp2px(getContext(), 36f).toFloat()
AutoSizeUtils.dp2px(context, 36f).toFloat()
)
d(SceneConstant.M_TAXI + TAG, "unSelectTv = " + textView.text)
textView.typeface = Typeface.defaultFromStyle(Typeface.NORMAL)
textView.setTextColor(Color.parseColor("#CCD4F5"))
d(SceneConstant.M_TAXI + TAG, "unSelectTv = " + textView.text)
}
}
internal inner class OrdersFragmentAdapter(
internal inner class TaskTabFragmentAdapter(
fragmentManager: FragmentManager,
behavior: Int
) :
@@ -175,31 +183,31 @@ class TaxiTaskTabFragment : BaseFragment() {
}
}
fun onNaviToEndAMap(isShow: Boolean) {
fun onNaviToEndStationByAMap(isShow: Boolean) {
if (null == currentTaskFragment) return
currentTaskFragment!!.onNaviToEndAmap(isShow)
currentTaskFragment!!.onNaviToEndStationByAmap(isShow)
}
fun onCurrentOrderDistToEndChanged(meters: Long, timeInSecond: Long) {
fun onCurrentTaskTripInfoChanged(meters: Long, timeInSecond: Long) {
if (null == currentTaskFragment) return
currentTaskFragment!!.updateDistanceAndTime(meters, timeInSecond)
currentTaskFragment!!.updateCurrentTaskTripInfo(meters, timeInSecond)
}
fun onOperationStatusChanged() {
fun onCarTakeOrderStatusChanged() {
if (null == currentTaskFragment) return
currentTaskFragment!!.onOperationStatusChanged()
currentTaskFragment!!.onCarTakeOrderStatusChanged()
}
fun updateOrderChanged(model: QueryCurrentTaskRespBean.Result?) {
fun onTaskDataChanged(result: QueryCurrentTaskRespBean.Result?) {
if (null == nextTaskFragment) return
if (model != null && model.taskType == TaskTypeEnum.VirtualTask.code
&& model.order != null) {
if (result != null && result.taskType == TaskTypeEnum.VirtualTask.code
&& result.order != null
) {
VoiceNotice.showNotice("已为您提前接到下一订单,待完成当前任务后服务")
wait_order_num.visibility = View.VISIBLE
} else {
wait_order_num.visibility = View.GONE
}
nextTaskFragment!!.updateOrderChanged(model)
nextTaskFragment!!.onTaskDataChanged(result)
}
}

View File

@@ -64,4 +64,11 @@ object TaskUtils {
}
return HtmlCompat.fromHtml(strHtml13, HtmlCompat.FROM_HTML_MODE_LEGACY)
}
fun getCurrentTaskTotalAndDurationHtml(mileage: Float, duration: Int): Spanned {
val strHtml =
("<font color=\"#CAD6FF\">全程 </font>" + "<font color=\"#FFFFFF\"> $mileage </font>" + "<font color=\"#CAD6FF\"> 公里 </font>"
+ "<font color=\"#CAD6FF\">,总用时 </font>" + "<font color=\"#FFFFFF\"> $duration </font>" + "<font color=\"#CAD6FF\"> 分钟</font>")
return HtmlCompat.fromHtml(strHtml, HtmlCompat.FROM_HTML_MODE_LEGACY)
}
}