[charter]

[3.2.0]
[选择线路右侧展示线路和站名]
This commit is contained in:
yangyakun
2023-05-08 17:33:35 +08:00
parent 3da68d4d46
commit a7f29daecf
18 changed files with 271 additions and 70 deletions

View File

@@ -3,4 +3,4 @@ package com.mogo.och.bus.passenger.bean.event
import com.mogo.och.bus.passenger.bean.response.LineInfoResponse
import com.mogo.och.bus.passenger.bean.response.SiteInfoResponse
data class EventLineSites(val lineInfo: LineInfoResponse.LineInfo, val sites: List<SiteInfoResponse.SiteInfo>)
data class EventLineSites(val lineInfo: LineInfoResponse.LineInfo?, val sites: List<SiteInfoResponse.SiteInfo>?, val clear:Boolean=false)

View File

@@ -102,7 +102,7 @@ class BusPassengerFunctionOrderPresenter(view: M1OrderLineFragment?) :
override fun onSuccess(data: SiteInfoResponse?) {
if (data?.data == null) return
val siteInfos = data.data
EventBus.getDefault().post(EventLineSites(checkLine,data.data))
EventBus.getDefault().post(EventLineSites(checkLine,siteInfos,false))
if (siteInfos.isNotEmpty()) {
// 计算当前站点是那个
val calculateCurrentSite =

View File

@@ -1,6 +1,9 @@
package com.mogo.och.bus.passenger.presenter
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Canvas
import android.view.View
import androidx.lifecycle.LifecycleOwner
import com.amap.api.maps.model.LatLng
import com.mogo.commons.voice.AIAssist
@@ -26,20 +29,25 @@ 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.ui.MainFragment
import com.mogo.och.bus.passenger.view.MakerWithSiteName
import com.mogo.och.bus.passenger.view.MakerWithSiteNamewithCheck
import com.mogo.och.common.module.bean.dpmsg.BaseDPMsg
import com.mogo.och.common.module.bean.dpmsg.DPCommonOperationMsg
import com.mogo.och.common.module.bean.dpmsg.DPMsgType
import com.mogo.och.common.module.biz.common.socketmessage.OCHSocketMessageManager
import com.mogo.och.common.module.biz.constant.OchCommonConst
import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorStatusManager
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
import com.mogo.och.common.module.manager.OCHPlanningStopSideStatusManager
import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorCallback
import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorManager
import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorStatusManager
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.utils.SoundPoolHelper
import com.mogo.och.common.module.voice.VoiceNotice
import com.mogo.och.common.module.bean.dpmsg.BaseDPMsg
import com.mogo.och.common.module.bean.dpmsg.DPCommonOperationMsg
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorCallback
import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorManager
import me.jessyan.autosize.utils.AutoSizeUtils
import java.util.concurrent.ConcurrentHashMap
import kotlin.math.ceil
class BusPassengerPresenter(view: MainFragment?) :
@@ -47,6 +55,8 @@ class BusPassengerPresenter(view: MainFragment?) :
IDistanceCallback, IOrderChangeCallback, IOrderStatusChangeListener,
OCHPlanningStopSideStatusManager.OCHPlanningActionsCallback, LightAirconditionDoorCallback {
private val lindIdAndView = ConcurrentHashMap<Long, MakerWithSiteNamewithCheck?>()
override fun onCreate(owner: LifecycleOwner) {
super.onCreate(owner)
CharterPassengerModel.init()
@@ -273,7 +283,7 @@ class BusPassengerPresenter(view: MainFragment?) :
it.forEach {latLngMain ->
trajectoryList.add(latLngMain.exchangeData())
}
drawStations(sites)
drawStationInfo(sites)
mView?.drawOverMapViewTrajectory(trajectoryList)
}
}
@@ -286,12 +296,67 @@ class BusPassengerPresenter(view: MainFragment?) :
}
fun drawStations(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)
sites.forEach {
stationsList.add(SiteMarkerBean(LatLng(it.GcjLat!!,it.GcjLon!!),stationIcon,0.5f,0.5f))
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)
mView?.drawOverMapViewStation(stationsList,stationsNameList)
}
private fun getBitmap(siteId:Long,siteName: String,isCheck:Boolean): Bitmap {
var siteView = lindIdAndView[siteId]
if(siteView==null){
val marker = MakerWithSiteName(context)
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)
)
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)
lindIdAndView[siteId] = siteView
}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.measure(
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)
marker.draw(Canvas(bitmap))
siteView.isCheck = isCheck
siteView.bitmapView = bitmap
}
}
return siteView.bitmapView
}
fun drawEndStation() {
val currentOrderInfo = CharterPassengerModel.getCurrentOrderInfo()
currentOrderInfo?.let {
if (it.wgs84Lon != null && it.wgs84Lat != null && it.siteId != null && it.siteName != null) {
val coordinateConverterWgsToGcj =
CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(
context,
it.wgs84Lon!!,
it.wgs84Lat!!
)
setEndStationCallBack(
it.siteId, it.siteName,
coordinateConverterWgsToGcj.longitude, coordinateConverterWgsToGcj.latitude
)
}
}
}
}

View File

@@ -48,8 +48,12 @@ class MainFragment :
private var bpFunctionGroupDialogFragment: WeakReference<M1ContainFragment>? = null
private var m1CarUserNoOrderFragment: WeakReference<M1CarUserNoOrderFragment>? = null
val endStation =
BitmapFactory.decodeResource(AbsMogoApplication.getApp().resources, R.drawable.m1_small_map_view_dir_end)
private val endStation =
BitmapFactory.decodeResource(AbsMogoApplication.getApp().resources,
R.drawable.m1_small_map_view_dir_end)
private val lineTrajectory =
BitmapFactory.decodeResource(AbsMogoApplication.getApp().resources,
com.mogo.eagle.core.function.map.R.drawable.taxi_map_arrow_arrived)
override fun getLayoutId(): Int {
return R.layout.m1_main_fragment
@@ -267,8 +271,25 @@ class MainFragment :
@Subscribe(threadMode = ThreadMode.MAIN)
fun changeOverview(eventLineSites: EventLineSites) {
CallerLogger.d(M_BUS_P + TAG, "eventLineSites:${eventLineSites.lineInfo.lineId}-----${eventLineSites.sites.size}")
mPresenter?.getLineTrajectory(eventLineSites.lineInfo,eventLineSites.sites)
CallerLogger.d(M_BUS_P + TAG, "eventLineSites:${eventLineSites.lineInfo?.lineId}")
if(eventLineSites.clear){
UiThreadHandler.post(
{
omvOverMap?.clearSitePolyline()
omvOverMap?.includeSitePointsAndUpdateCamera(mutableListOf())
omvOverMap?.clearSiteMarkers()
omvOverMap?.clearSiteNameViews()
mPresenter?.drawEndStation()
},
UiThreadHandler.MODE.QUEUE
)
} else {
if(eventLineSites.lineInfo==null){//更新站点
mPresenter?.drawStationInfo(eventLineSites.sites!!)
}else{// 更新轨迹和站点
mPresenter?.getLineTrajectory(eventLineSites.lineInfo,eventLineSites.sites!!)
}
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
@@ -289,13 +310,18 @@ class MainFragment :
}
fun drawOverMapViewStation(stationsList: MutableList<SiteMarkerBean>){
fun drawOverMapViewStation(stationsList: MutableList<SiteMarkerBean>,siteMarkers: List<SiteMarkerBean>?){
omvOverMap?.clearSiteMarkers()
omvOverMap?.clearSiteNameViews()
omvOverMap?.drawSiteMarkers(stationsList)
omvOverMap?.drawSiteNameViews(siteMarkers)
}
fun drawOverMapViewTrajectory(coordinates: List<LatLng>){
UiThreadHandler.post({
omvOverMap?.drawPolyline(coordinates, 0)
fun drawOverMapViewTrajectory(coordinates: List<LatLng>) {
UiThreadHandler.post(
{
omvOverMap?.drawSitePolyline(coordinates, lineTrajectory)
omvOverMap?.includeSitePointsAndUpdateCamera(coordinates)
},
UiThreadHandler.MODE.QUEUE
)

View File

@@ -10,8 +10,10 @@ import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.mogo.eagle.core.utilcode.util.ToastUtils
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
/**
* Created by adityagohad on 06/06/17.
@@ -90,6 +92,7 @@ class OrderSiteItemAdapter(
}
}
notifyDataSetChanged()
EventBus.getDefault().post(EventLineSites(null,dataList,false))
checkChangeListener?.onCheckListener(tempInfo)
} else {
if (siteInfo.isNear) {

View File

@@ -16,6 +16,7 @@ import com.mogo.eagle.core.utilcode.util.BarUtils
import com.mogo.eagle.core.utilcode.util.SharedPrefs
import com.mogo.eagle.core.utilcode.util.ToastUtils
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
@@ -24,6 +25,7 @@ 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 kotlinx.android.synthetic.main.m1_contain_fragment.*
import org.greenrobot.eventbus.EventBus
/**
* @author: yangyakun
@@ -160,7 +162,7 @@ class M1ContainFragment :
override fun onDismiss(dialog: DialogInterface) {
super.onDismiss(dialog)
ToastUtils.showShort("消失了")
EventBus.getDefault().post(EventLineSites(null,null,true))
}
override fun onSaveInstanceState(outState: Bundle) {

View File

@@ -76,7 +76,7 @@ class M1OrderLineFragment :
LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
rv_site_list.addItemDecoration(
BottomDecoration(
AutoSizeUtils.dp2px(context, 60f)
AutoSizeUtils.dp2px(context, 90f)
)
)
rv_site_list.adapter = siteAdapter

View File

@@ -0,0 +1,31 @@
package com.mogo.och.bus.passenger.view
import android.content.Context
import android.graphics.Bitmap
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.och.bus.passenger.R
import kotlinx.android.synthetic.main.view_maker_sitename.view.*
class MakerWithSiteName @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout (
context,
attrs,
defStyleAttr
) {
init {
LayoutInflater.from(context).inflate(R.layout.view_maker_sitename, this, true)
}
fun setTextAndCheck(siteName: String,isCheck:Boolean) {
tv_site_name.text = siteName
tv_site_name.isChecked = isCheck
}
}
data class MakerWithSiteNamewithCheck(var isCheck: Boolean,val makerWithSiteName:MakerWithSiteName,var bitmapView: Bitmap)

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/white" android:state_checked="true" />
<item android:color="@color/bus_p_m1_112b57" android:state_checked="false" />
<item android:color="@color/bus_p_m1_112b57"/>
</selector>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:bottomRightRadius="@dimen/dp_36" />
<gradient
android:angle="-90"
android:endColor="@color/bus_p_m1_d7e5f5"
android:startColor="@android:color/transparent" />
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="@dimen/dp_8"/>
<solid android:color="@android:color/white"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="@dimen/dp_8"/>
<gradient android:startColor="@color/bus_p_m1_1466FB" android:endColor="@color/bus_p_m1_43CEFE"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/charter_p_selct_site_name_shape_selected" android:state_checked="true"/>
<item android:drawable="@drawable/charter_p_selct_site_name_shape_normal" android:state_checked="false"/>
<item android:drawable="@drawable/charter_p_selct_site_name_shape_normal"/>
</selector>

View File

@@ -25,6 +25,8 @@
app:startPointDrawable="@null"
app:resetDrawableMarginRight="34dp"
app:resetDrawableMarginBottom="54dp"
app:bottomPadding="200"
app:topPadding="100"
app:isClearArrived="true"
android:layout_width="0dp"
android:layout_height="match_parent"/>

View File

@@ -57,58 +57,69 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="@dimen/dp_20" />
<TextView
android:id="@+id/tv_site_cancle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_30"
android:layout_marginBottom="@dimen/dp_22"
android:background="@drawable/charter_p_shape_cancle_line_site_change"
android:gravity="center"
android:paddingStart="@dimen/dp_56"
android:paddingTop="@dimen/dp_14"
android:paddingEnd="@dimen/dp_56"
android:paddingBottom="@dimen/dp_13"
android:text="取消"
android:textColor="@android:color/white"
android:textSize="@dimen/dp_20"
<View
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/gl_site_cancle_submit_guide" />
<TextView
android:id="@+id/tv_site_submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_30"
android:layout_marginBottom="@dimen/dp_22"
android:background="@drawable/charter_p_shape_submit_line_site_change"
android:gravity="center"
android:paddingStart="@dimen/dp_56"
android:paddingTop="@dimen/dp_14"
android:paddingEnd="@dimen/dp_56"
android:paddingBottom="@dimen/dp_13"
android:text="确认"
android:textColor="@android:color/white"
android:textSize="@dimen/dp_20"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/gl_site_cancle_submit_guide" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/gl_site_cancle_submit_guide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5" />
<androidx.constraintlayout.widget.Group
android:id="@+id/g_side_cancle_submit_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="tv_site_submit,tv_site_cancle" />
android:background="@drawable/charter_p_selct_site_bottom_corner"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_90"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/tv_site_cancle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_30"
android:layout_marginBottom="@dimen/dp_22"
android:background="@drawable/charter_p_shape_cancle_line_site_change"
android:gravity="center"
android:paddingStart="@dimen/dp_56"
android:paddingTop="@dimen/dp_14"
android:paddingEnd="@dimen/dp_56"
android:paddingBottom="@dimen/dp_13"
android:text="取消"
android:textColor="@android:color/white"
android:textSize="@dimen/dp_20"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/gl_site_cancle_submit_guide" />
<TextView
android:id="@+id/tv_site_submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_30"
android:layout_marginBottom="@dimen/dp_22"
android:background="@drawable/charter_p_shape_submit_line_site_change"
android:gravity="center"
android:paddingStart="@dimen/dp_56"
android:paddingTop="@dimen/dp_14"
android:paddingEnd="@dimen/dp_56"
android:paddingBottom="@dimen/dp_13"
android:text="确认"
android:textColor="@android:color/white"
android:textSize="@dimen/dp_20"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/gl_site_cancle_submit_guide" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/gl_site_cancle_submit_guide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5" />
<androidx.constraintlayout.widget.Group
android:id="@+id/g_side_cancle_submit_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="tv_site_submit,tv_site_cancle,tv_site_cancle,tv_site_submit" />
<androidx.constraintlayout.widget.Group
android:id="@+id/g_lines_sites_data"
android:layout_width="wrap_content"

View File

@@ -26,7 +26,7 @@
android:id="@+id/bizz_view"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="@dimen/dp_90"
android:layout_height="match_parent"/>
android:layout_height="@dimen/dp_47"/>
<!--Wifi状态-->
<com.mogo.eagle.core.function.hmi.ui.widget.WifiStateView
android:id="@+id/wifiStateView"

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatCheckBox
android:id="@+id/tv_site_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_15"
android:gravity="center"
android:button="@null"
android:background="@drawable/charter_p_selct_site_name_shape_selector"
android:textColor="@color/charter_p_select_city_name_textcolor"
android:textSize="22dp"
android:paddingStart="@dimen/dp_16"
android:paddingEnd="@dimen/dp_16"
android:paddingTop="@dimen/dp_2"
android:paddingBottom="@dimen/dp_2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:text="18" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -31,6 +31,7 @@
<color name="bus_p_m1_090f28">#090F28</color>
<color name="bus_p_m1_5F7096">#5F7096</color>
<color name="bus_p_m1_9aabd2">#9AABD2</color>
<color name="bus_p_m1_d7e5f5">#D7E5F5</color>
<color name="bus_p_m1_662C2D31">#662C2D31</color>
<color name="bus_p_m1_332C2D31">#332C2D31</color>