[fea]
[m2]
[线路展示]
This commit is contained in:
yangyakun
2025-06-05 18:52:41 +08:00
parent 73d115fcac
commit 3fee256ef2
66 changed files with 1689 additions and 349 deletions

View File

@@ -8,6 +8,7 @@
<color name="taxi_111533">#111533</color>
<color name="taxi_878890">#878890</color>
<color name="taxi_EF262C">#EF262C</color>
<color name="common_color_00000000">#00000000</color>
<color name="common_color_4D000000">#4D000000</color>
<color name="common_color_99000000">#99000000</color>

View File

@@ -10,7 +10,7 @@ import com.mogo.och.shuttle.weaknet.passenger.callback.ICommonCallback
import com.mogo.och.shuttle.weaknet.passenger.constant.M2Const.Companion.M2_MAP_STATION_MAKER
import com.mogo.och.shuttle.weaknet.passenger.model.CommonModel
import com.mogo.och.shuttle.weaknet.passenger.model.PM2ADASModel
import com.mogo.och.shuttle.weaknet.passenger.ui.PM2HPMapFragment
import com.mogo.och.shuttle.weaknet.passenger.ui.map.PM2HPMapFragment
class PM2ADASPresenter(view: PM2HPMapFragment?) :
Presenter<PM2HPMapFragment?>(view), ADASCallback, ICommonCallback {
@@ -52,7 +52,6 @@ class PM2ADASPresenter(view: PM2HPMapFragment?) :
}
override fun showNoTaskView(isTrue: Boolean) {
super.showNoTaskView(isTrue)
ThreadUtils.runOnUiThread {
mView?.showNoTaskView(!isTrue)
}

View File

@@ -1,12 +1,11 @@
package com.mogo.och.shuttle.weaknet.passenger.presenter
import androidx.lifecycle.LifecycleOwner
import com.amap.api.maps.model.LatLng
import com.mogo.commons.mvp.Presenter
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.och.common.module.manager.loop.BizLoopManager
import com.mogo.och.shuttle.weaknet.passenger.model.PM2ADASModel
import com.mogo.och.shuttle.weaknet.passenger.ui.PM2DrivingInfoFragment
import com.mogo.och.shuttle.weaknet.passenger.ui.line.PM2DrivingInfoFragment
import com.mogo.och.data.bean.BusStationBean
import com.mogo.och.shuttle.weaknet.passenger.callback.ICommonCallback
import com.mogo.och.shuttle.weaknet.passenger.model.CommonModel
@@ -38,18 +37,7 @@ class PM2DrivingPresenter(view: PM2DrivingInfoFragment?) :
}
override fun updateSpeed(speed: Int) {
// CallerLogger.d(
// SceneConstant.M_BUS_P + "speed = ",speed.toString()
// )
ThreadUtils.runOnUiThread {
mView?.updateSpeed(speed)
}
}
override fun updateLineInfo(lineName: String) {
ThreadUtils.runOnUiThread {
mView?.updateTaskName(lineName)
}
}
override fun updateRemainMT(meters: Long, timeInSecond: Long) {
@@ -58,11 +46,11 @@ class PM2DrivingPresenter(view: PM2DrivingInfoFragment?) :
}
}
override fun showNoTaskView(isTrue: Boolean) {
override fun showNoTaskView(empty: Boolean) {
ThreadUtils.runOnUiThread {
mView?.showNoTaskView(!isTrue)
mView?.showNoTaskView(empty)
}
if (isTrue){
if (empty){
PM2ADASModel.INSTANCE.removeHDMapStations()
}
}
@@ -75,11 +63,5 @@ class PM2DrivingPresenter(view: PM2DrivingInfoFragment?) :
}
}
override fun updateAutoStatus(isOpen: Boolean) {
BizLoopManager.runInMainThread {
mView?.updateAutoStatus(isOpen)
}
}
}

View File

@@ -12,6 +12,8 @@ import com.mogo.och.common.module.manager.transform.OchTransformDispatch
import com.mogo.och.shuttle.weaknet.passenger.R
import com.mogo.och.shuttle.weaknet.passenger.presenter.PM2Presenter
import com.mogo.och.common.module.wigets.media.MediaPlayerFragment
import com.mogo.och.shuttle.weaknet.passenger.ui.line.PM2DrivingInfoFragment
import com.mogo.och.shuttle.weaknet.passenger.ui.map.PM2HPMapFragment
import kotlinx.android.synthetic.main.shuttle_p_m2_fragment.tv_shuttle_b2_p_version
import kotlinx.android.synthetic.main.shuttle_p_m2_fragment.video_fragment
@@ -23,22 +25,28 @@ import kotlinx.android.synthetic.main.shuttle_p_m2_fragment.video_fragment
class PM2BaseFragment :
MvpFragment<PM2BaseFragment?, PM2Presenter?>() {
private var drivingFragment : PM2DrivingInfoFragment? = null
private var hdMapFragment : PM2HPMapFragment? = null
private var mediaFragment : MediaPlayerFragment? = null
val TAG = PM2BaseFragment::class.java.simpleName
private val ochTransform = object : OchTransformDispatch{
private var drivingFragment: PM2DrivingInfoFragment? = null
private var hdMapFragment: PM2HPMapFragment? = null
private var mediaFragment: MediaPlayerFragment? = null
// 视频直播流
private val ochTransform = object : OchTransformDispatch {
override fun setVideoView(target: View?) {
super.setVideoView(target)
if(target!=null){
BizLoopManager.runInMainThread{
if (target != null) {
BizLoopManager.runInMainThread {
target.id = R.id.video_show
val params = FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT)
video_fragment.addView(target,params)
val params = FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
video_fragment.addView(target, params)
MediaManager.setMediaPause()
}
}else{
BizLoopManager.runInMainThread{
} else {
BizLoopManager.runInMainThread {
findViewById<View>(R.id.video_show)?.let {
video_fragment.removeView(it)
MediaManager.setMediaResume()
@@ -58,9 +66,8 @@ class PM2BaseFragment :
override fun initViews() {
tv_shuttle_b2_p_version.text = "版本:${AppUtils.getAppVersionName()}"
//隐藏小地图
initFragment()
OchTransform.addListener(TAG,ochTransform)
OchTransform.addListener(TAG, ochTransform)
}
override fun onDestroy() {
@@ -90,7 +97,4 @@ class PM2BaseFragment :
return PM2Presenter(this)
}
companion object {
public val TAG = PM2BaseFragment::class.java.simpleName
}
}

View File

@@ -1,185 +0,0 @@
package com.mogo.och.shuttle.weaknet.passenger.ui
import android.os.Bundle
import androidx.core.content.ContextCompat
import com.mogo.commons.mvp.MvpFragment
import com.mogo.eagle.core.function.hmi.ui.setting.ToggleDebugView
import com.mogo.och.shuttle.weaknet.passenger.R
import com.mogo.och.shuttle.weaknet.passenger.presenter.PM2DrivingPresenter
import com.mogo.och.common.module.utils.NumberFormatUtil
import com.mogo.och.data.bean.BusStationBean
import kotlinx.android.synthetic.main.shuttle_p_m2_driving_info_fragment.auto_tv
import kotlinx.android.synthetic.main.shuttle_p_m2_driving_info_fragment.speed_tv
import kotlin.math.ceil
import kotlin.math.roundToInt
/**
* @author: wangmingjun
* @date: 2022/4/12
*/
class PM2DrivingInfoFragment :
MvpFragment<PM2DrivingInfoFragment?, PM2DrivingPresenter?>() {
override fun getLayoutId(): Int {
return R.layout.shuttle_p_m2_driving_info_fragment
}
override fun getTagName(): String {
return TAG
}
override fun initViews() {
speed_tv.setOnLongClickListener {
context?.let { ToggleDebugView.toggleDebugView.toggle(it) }
true
}
//
// line_name_tv.setTextColor(ResourcesUtils.getColor(R.color.shuttle_p_m2_line_name_tv_color))
// station_name_tv.setTextColor(ResourcesUtils.getColor(R.color.shuttle_p_m2_line_name_tv_color))
}
override fun initViews(savedInstanceState: Bundle?) {
super.initViews(savedInstanceState)
}
override fun onResume() {
super.onResume()
}
override fun onPause() {
super.onPause()
}
override fun onDestroyView() {
mPresenter?.onDestroy(this)
super.onDestroyView()
}
fun updateSpeed(speed: Int) {
speed_tv.text = speed.toString()
}
fun updateTaskName(name: String) {
//line_name_tv.text = name
}
fun showNoTaskView(haveTask: Boolean) {
if (!haveTask) {
updateNoOrderUI()
}
}
private fun updateNoOrderUI() {
//line_name_tv.text = resources.getString(R.string.shuttle_p_m2_not_select_line_content)
updateNoStationView()
}
private fun updateNoStationView() {
// station_name_tv.setTextColor(ResourcesUtils.getColor(R.color.shuttle_p_m2_next_tv_color))
// station_name_tv.text = resources.getString(R.string.shuttle_p_m2_empty_tv)
// tv_distance.text = resources.getString(R.string.shuttle_p_m2_empty_remain_km)
// tv_left_time.text = resources.getString(R.string.shuttle_p_m2_empty_remain_minute)
noLineShow()
}
override fun createPresenter(): PM2DrivingPresenter {
return PM2DrivingPresenter(this)
}
fun updateAutoStatus(isAutoPilot: Boolean) {
context?.let {
if (isAutoPilot) {
auto_tv.setTextColor(ContextCompat.getColor(it, R.color.common_FFFFFF))
auto_tv.background = ContextCompat.getDrawable(it, R.drawable.m2_autopilot_status_in)
} else {
auto_tv.setTextColor(ContextCompat.getColor(it, R.color.common_284F7E))
auto_tv.background = ContextCompat.getDrawable(it, R.drawable.m2_autopilot_status_out)
}
}
}
fun updateStationsInfo(stations: MutableList<BusStationBean>, i: Int, isArrived: Boolean) {
if (stations.size == 0) return
// if (0 <= i && i < stations.size) {
// station_name_tv.setTextColor(ResourcesUtils.getColor(R.color.shuttle_p_m2_next_tv_color))
// station_name_tv.text = stations[i].name
// }
// if (isArrived) {//到站
// tv_distance.text = resources.getString(R.string.shuttle_p_m2_empty_remain_km)
// tv_left_time.text = resources.getString(R.string.shuttle_p_m2_empty_remain_minute)
// tv_next_station_title.text =
// resources.getString(R.string.shuttle_p_m2_station_title_arrived_tv)
// haveLineAndArrivedStation()
// } else { //前往目的地中
// tv_next_station_title.text =
// resources.getString(R.string.shuttle_p_m2_next_station_title)
// haveLineAndArriveingStation()
// }
}
/**
* 剩余里程和时间
*/
fun updateRemainMT(meters: Long, timeInSecond: Long) { //米。秒
var disUnit = "公里"
var remainDis: String? = "0"
if (meters > 0) {
if (meters / 1000 < 1) {
disUnit = ""
remainDis = meters.toFloat().roundToInt().toString()
} else {
disUnit = "公里"
remainDis = NumberFormatUtil.formatLong(meters.toDouble() / 1000)
}
}
val time = ceil(timeInSecond / 60f).toInt()
// "$remainDis$disUnit".also { tv_distance.text = it }
// "${time}分钟".also { tv_left_time.text = it }
}
fun noLineShow() {
// 没有线路展示
// group_not_select_line.visibility = View.VISIBLE
// // 下一个站点
// group_stationinfo.visibility = View.GONE
// // 距离和剩余大概时间
// clg_distance_left_time.visibility = View.GONE
// // 到达站点
// tv_arrived_notice.visibility = View.GONE
//
// iv_animal_list.visibility = View.GONE
}
// 有线路正在到站点
fun haveLineAndArriveingStation() {
// group_not_select_line.visibility = View.GONE
// group_stationinfo.visibility = View.VISIBLE
// clg_distance_left_time.visibility = View.VISIBLE
// tv_arrived_notice.visibility = View.GONE
// iv_animal_list.visibility = View.GONE
}
// 有线路到达站点
private fun haveLineAndArrivedStation() {
// group_not_select_line.visibility = View.GONE
// group_stationinfo.visibility = View.VISIBLE
// clg_distance_left_time.visibility = View.GONE
// tv_arrived_notice.visibility = View.VISIBLE
// iv_animal_list.visibility = View.VISIBLE
// val animationDrawable = iv_animal_list.drawable as AnimationDrawable
// animationDrawable.start()
}
companion object {
private val TAG = PM2DrivingInfoFragment::class.java.simpleName
}
}

View File

@@ -0,0 +1,119 @@
package com.mogo.och.shuttle.weaknet.passenger.ui.line
import android.os.Bundle
import android.view.View
import com.mogo.commons.mvp.MvpFragment
import com.mogo.och.shuttle.weaknet.passenger.R
import com.mogo.och.shuttle.weaknet.passenger.presenter.PM2DrivingPresenter
import com.mogo.och.common.module.utils.NumberFormatUtil
import com.mogo.och.data.bean.BusStationBean
import kotlinx.android.synthetic.main.shuttle_p_m2_driving_info_fragment.arriveView
import kotlinx.android.synthetic.main.shuttle_p_m2_driving_info_fragment.emptyView
import kotlinx.android.synthetic.main.shuttle_p_m2_driving_info_fragment.lineView
import kotlin.math.ceil
import kotlin.math.roundToInt
/**
* @author: wangmingjun
* @date: 2022/4/12
*/
class PM2DrivingInfoFragment :
MvpFragment<PM2DrivingInfoFragment?, PM2DrivingPresenter?>() {
override fun getLayoutId(): Int {
return R.layout.shuttle_p_m2_driving_info_fragment
}
override fun getTagName(): String {
return TAG
}
override fun initViews() {
}
override fun initViews(savedInstanceState: Bundle?) {
super.initViews(savedInstanceState)
}
override fun onResume() {
super.onResume()
}
override fun onPause() {
super.onPause()
}
override fun onDestroyView() {
mPresenter?.onDestroy(this)
super.onDestroyView()
}
fun showNoTaskView(haveTask: Boolean) {
if(haveTask){
emptyView.visibility = View.VISIBLE
arriveView.visibility = View.GONE
lineView.visibility = View.GONE
}else{
emptyView.visibility = View.GONE
arriveView.visibility = View.GONE
lineView.visibility = View.VISIBLE
}
}
override fun createPresenter(): PM2DrivingPresenter {
return PM2DrivingPresenter(this)
}
fun updateStationsInfo(stations: MutableList<BusStationBean>, i: Int, isArrived: Boolean) {
if(stations.isEmpty()){
emptyView.visibility = View.VISIBLE
arriveView.visibility = View.GONE
lineView.visibility = View.GONE
}else{
if(isArrived&&i!=0){
emptyView.visibility = View.GONE
arriveView.visibility = View.VISIBLE
lineView.visibility = View.GONE
arriveView.setArrivedStation(stations.get(i))
}else{
emptyView.visibility = View.GONE
arriveView.visibility = View.GONE
lineView.visibility = View.VISIBLE
}
}
}
/**
* 剩余里程和时间
*/
fun updateRemainMT(meters: Long, timeInSecond: Long) { //米。秒
var disUnit = "公里"
var remainDis: String? = "0"
if (meters > 0) {
if (meters / 1000 < 1) {
disUnit = ""
remainDis = meters.toFloat().roundToInt().toString()
} else {
disUnit = "公里"
remainDis = NumberFormatUtil.formatLong(meters.toDouble() / 1000)
}
}
val time = ceil(timeInSecond / 60f).toInt()
// "$remainDis$disUnit".also { tv_distance.text = it }
// "${time}分钟".also { tv_left_time.text = it }
}
companion object {
private val TAG = PM2DrivingInfoFragment::class.java.simpleName
}
}

View File

@@ -0,0 +1,56 @@
package com.mogo.och.shuttle.weaknet.passenger.ui.line.arrive
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.och.common.module.manager.loop.BizLoopManager
import com.mogo.och.common.module.utils.ResourcesUtils
import com.mogo.och.data.bean.BusStationBean
import com.mogo.och.shuttle.weaknet.passenger.R
import kotlinx.android.synthetic.main.m2_arrive_view.view.ochtv_arrive_station_value
class ArrivedView : ConstraintLayout {
private val TAG = "EmptyView"
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.m2_arrive_view, this, true)
ochtv_arrive_station_value.setVertrial(true)
val intArrayOf = intArrayOf(
ResourcesUtils.getColor(R.color.shuttle_p_m2_color_43cefe),
ResourcesUtils.getColor(R.color.shuttle_p_m2_color_1466fb),
)
ochtv_arrive_station_value.setmColorList(intArrayOf)
}
override fun onVisibilityAggregated(isVisible: Boolean) {
super.onVisibilityAggregated(isVisible)
}
fun setArrivedStation(busStationBean: BusStationBean) {
BizLoopManager.runInMainThread{
ochtv_arrive_station_value.text = busStationBean.name
}
}
init {
try {
initView()
} catch (e: Exception) {
e.printStackTrace()
}
}
}

View File

@@ -0,0 +1,45 @@
package com.mogo.och.shuttle.weaknet.passenger.ui.line.autopilot
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener
import com.mogo.eagle.core.function.hmi.ui.setting.ToggleDebugView
import com.mogo.och.bridge.autopilot.location.OchLocationManager
import com.mogo.och.common.module.manager.loop.BizLoopManager
import com.mogo.och.shuttle.weaknet.passenger.R
import kotlinx.android.synthetic.main.m2_speed.view.tv_speed
import kotlin.math.abs
class AutopilotView : ConstraintLayout {
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.m2_autopilot, this, true)
}
override fun onVisibilityAggregated(isVisible: Boolean) {
super.onVisibilityAggregated(isVisible)
}
init {
try {
initView()
} catch (e: Exception) {
e.printStackTrace()
}
}
}

View File

@@ -1,4 +1,4 @@
package com.mogo.och.shuttle.weaknet.passenger.ui.widget
package com.mogo.och.shuttle.weaknet.passenger.ui.line.autopilot.light
import android.animation.AnimatorSet
import android.animation.ObjectAnimator
@@ -16,11 +16,9 @@ import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.och.shuttle.weaknet.passenger.R
import com.mogo.och.common.module.manager.light.TurnLightManager
import kotlinx.android.synthetic.main.shuttle_p_m2_turn_light_status.view.left_nor_image
import kotlinx.android.synthetic.main.shuttle_p_m2_turn_light_status.view.left_select_image
import kotlinx.android.synthetic.main.shuttle_p_m2_turn_light_status.view.right_nor_image
import kotlinx.android.synthetic.main.shuttle_p_m2_turn_light_status.view.right_select_image
import kotlinx.android.synthetic.main.shuttle_p_m2_turn_light_status.view.turn_light_layout
/**
* @author: wangmingjun

View File

@@ -0,0 +1,64 @@
package com.mogo.och.shuttle.weaknet.passenger.ui.line.autopilot.speed
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener
import com.mogo.eagle.core.function.hmi.ui.setting.ToggleDebugView
import com.mogo.och.bridge.autopilot.location.OchLocationManager
import com.mogo.och.common.module.manager.loop.BizLoopManager
import com.mogo.och.shuttle.weaknet.passenger.R
import kotlinx.android.synthetic.main.m2_speed.view.tv_speed
import kotlin.math.abs
class SpeedView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener {
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.m2_speed, this, true)
tv_speed.setOnLongClickListener {
context?.let { ToggleDebugView.toggleDebugView.toggle(it) }
true
}
}
override fun onVisibilityAggregated(isVisible: Boolean) {
super.onVisibilityAggregated(isVisible)
if(isVisible){
OchLocationManager.addGCJ02Listener(TAG, 3, this)
}else{
OchLocationManager.removeGCJ02Listener(TAG)
}
}
init {
try {
initView()
} catch (e: Exception) {
e.printStackTrace()
}
}
override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) {
mogoLocation?.let {
BizLoopManager.runInMainThread {
val speedKM = (abs(it.gnssSpeed) * 3.6f).toInt()
tv_speed.text = speedKM.toString()
}
}
}
}

View File

@@ -0,0 +1,58 @@
package com.mogo.och.shuttle.weaknet.passenger.ui.line.autopilot.status
import android.content.Context
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatTextView
import androidx.core.content.ContextCompat
import com.mogo.och.common.module.manager.loop.BizLoopManager
import com.mogo.och.shuttle.weaknet.passenger.R
import com.mogo.och.shuttle.weaknet.passenger.callback.ICommonCallback
import com.mogo.och.shuttle.weaknet.passenger.model.CommonModel
class StatusView : AppCompatTextView, ICommonCallback {
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)
private fun initView() {
}
override fun onVisibilityAggregated(isVisible: Boolean) {
super.onVisibilityAggregated(isVisible)
if(isVisible){
CommonModel.setRouteLineInfoCallback(TAG,this)
}else{
CommonModel.setRouteLineInfoCallback(TAG,null)
}
}
override fun updateAutoStatus(isAutoPilot: Boolean) {
BizLoopManager.runInMainThread {
context?.let {
if (isAutoPilot) {
setTextColor(ContextCompat.getColor(it, R.color.common_FFFFFF))
background = ContextCompat.getDrawable(it, R.drawable.m2_autopilot_status_in)
} else {
setTextColor(ContextCompat.getColor(it, R.color.common_284F7E))
background = ContextCompat.getDrawable(it, R.drawable.m2_autopilot_status_out)
}
}
}
}
init {
try {
initView()
} catch (e: Exception) {
e.printStackTrace()
}
}
}

View File

@@ -0,0 +1,47 @@
package com.mogo.och.shuttle.weaknet.passenger.ui.line.empty
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.och.common.module.utils.ResourcesUtils
import com.mogo.och.shuttle.weaknet.passenger.R
import kotlinx.android.synthetic.main.m2_empty_view.view.tv_title
class EmptyView : ConstraintLayout {
private val TAG = "EmptyView"
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.m2_empty_view, this, true)
tv_title.setVertrial(true)
val intArrayOf = intArrayOf(
ResourcesUtils.getColor(R.color.shuttle_p_m2_color_43cefe),
ResourcesUtils.getColor(R.color.shuttle_p_m2_color_1466fb),
)
tv_title.setmColorList(intArrayOf)
}
override fun onVisibilityAggregated(isVisible: Boolean) {
super.onVisibilityAggregated(isVisible)
}
init {
try {
initView()
} catch (e: Exception) {
e.printStackTrace()
}
}
}

View File

@@ -0,0 +1,78 @@
package com.mogo.och.shuttle.weaknet.passenger.ui.line.lineinfo
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 androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.och.common.module.wigets.WrapContentLinearLayoutManager
import com.mogo.och.data.bean.BusStationBean
import com.mogo.och.shuttle.weaknet.passenger.R
import com.mogo.och.shuttle.weaknet.passenger.ui.line.lineinfo.item.StationAdapter
import kotlinx.android.synthetic.main.m2_line_view.view.ll_station_container
class LineView : ConstraintLayout, LineViewModel.LineViewCallback {
private val TAG = "EmptyView"
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 lateinit var mAdapter: StationAdapter
private lateinit var linearLayoutManager: LinearLayoutManager
private var viewModel:LineViewModel?=null
private fun initView() {
LayoutInflater.from(context).inflate(R.layout.m2_line_view, this, true)
linearLayoutManager = LinearLayoutManager(context)
ll_station_container.setLayoutManager(linearLayoutManager)
mAdapter = StationAdapter()
// ll_station_container.addItemDecoration(
// SpacesItemDecoration(
// AutoSizeUtils.dp2px(context,20f)
// )
// )
ll_station_container.setAdapter(mAdapter)
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
viewModel = findViewTreeViewModelStoreOwner()?.let {
ViewModelProvider(it).get(LineViewModel::class.java)
}
viewModel?.setLineCallback(this)
}
override fun onVisibilityAggregated(isVisible: Boolean) {
super.onVisibilityAggregated(isVisible)
}
init {
try {
initView()
} catch (e: Exception) {
e.printStackTrace()
}
}
override fun updateLineStations(stations: MutableList<BusStationBean>?) {
CallerLogger.d(TAG,"展示站点:${stations}")
mAdapter.submitList(stations)
}
}

View File

@@ -0,0 +1,47 @@
package com.mogo.och.shuttle.weaknet.passenger.ui.line.lineinfo
import androidx.lifecycle.ViewModel
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS
import com.mogo.och.common.module.manager.loop.BizLoopManager
import com.mogo.och.data.bean.BusStationBean
import com.mogo.och.shuttle.weaknet.passenger.callback.ICommonCallback
import com.mogo.och.shuttle.weaknet.passenger.model.CommonModel
import io.reactivex.disposables.Disposable
/**
* @author XuXinChao
* @description BadCase录包管理页面
* @since: 2022/12/15
*/
class LineViewModel : ViewModel(), ICommonCallback {
private val TAG = M_BUS+LineViewModel::class.java.simpleName
private var viewCallback:LineViewCallback?=null
private var endTaskDisposable:Disposable?=null
override fun onCleared() {
d(TAG,"onCleared")
CommonModel.setRouteLineInfoCallback(TAG,null)
}
fun setLineCallback(viewCallback:LineViewCallback){
this.viewCallback = viewCallback
CommonModel.setRouteLineInfoCallback(TAG,this)
}
override fun updateLineStations(stations: MutableList<BusStationBean>?) {
BizLoopManager.runInMainThread{
this.viewCallback?.updateLineStations(stations)
}
}
interface LineViewCallback{
fun updateLineStations(stations: MutableList<BusStationBean>?)
}
}

View File

@@ -0,0 +1,171 @@
package com.mogo.och.shuttle.weaknet.passenger.ui.line.lineinfo.item
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.ListAdapter
import com.mogo.och.data.bean.BusStationBean
import com.mogo.och.shuttle.weaknet.passenger.R
class StationAdapter : ListAdapter<BusStationBean, StationViewHolder>(MessageDiffCallback()) {
var currentIndex = 0
var isLeaving = false
var showPassOmit = false
var showFuluterOmit = false
override fun submitList(list: MutableList<BusStationBean>?) {
val newDataList = mutableListOf<BusStationBean>()
list?.let {
it.forEachIndexed { index, busStationBean ->
if (busStationBean.drivingStatus == 2) {
currentIndex = index
isLeaving = busStationBean.isLeaving
return@forEachIndexed
}
}
if (isLeaving) {
currentIndex += 1
}
if ((it.size) <= 7) {
showPassOmit = false
showFuluterOmit = false
newDataList.addAll(it.toList())
} else {
if(currentIndex-1<3){
showPassOmit = false // 全展示
}else{
showPassOmit = true // 展示省略
}
if(it.size-(currentIndex+1)-1<3) {// 全展示
showFuluterOmit = false
}else{// 展示省略
showFuluterOmit = true
}
if(showPassOmit&&showFuluterOmit){// 都有
newDataList.add(it.first())
newDataList.add(StationBeanOmit(currentIndex-1-1))
newDataList.addAll(list.slice(currentIndex-1 .. currentIndex+1))
newDataList.add(StationBeanOmit(list.size-currentIndex-1))
newDataList.add(list.last())
}else{
if(showFuluterOmit||showPassOmit){
if(showFuluterOmit){// 只展示下面的省略号
newDataList.addAll(list.subList(0,5))
newDataList.add(StationBeanOmit(list.size-5-1))
newDataList.add(list.last())
}
if(showPassOmit){// 只展示上面的手机号
newDataList.add(list.first())
newDataList.add(StationBeanOmit(list.size-5-1))
newDataList.addAll(list.slice(list.size-5 until list.size))
} else {
}
}else{
newDataList.addAll(it.toList())
}
}
}
}
newDataList.forEachIndexed { index, busStationBean ->
if (busStationBean.drivingStatus == 2) {
currentIndex = index
isLeaving = busStationBean.isLeaving
if(isLeaving){
currentIndex+=1
}
}
}
super.submitList(newDataList)
}
override fun onBindViewHolder(holder: StationViewHolder, position: Int) {
getItem(position)?.let {
holder.bind(it)
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): StationViewHolder {
val inflater = LayoutInflater.from(parent.context)
return when (viewType) {
StationViewHolder.NormalStationStart -> NormalStationStartViewHolder(
inflater.inflate(R.layout.m2_station_normal_start_view, parent, false)
)
StationViewHolder.NormalStationEnd -> NormalStationEndViewHolder(
inflater.inflate(R.layout.m2_station_normal_end_view, parent, false)
)
StationViewHolder.NormalStationFuture -> NormalStationFutureViewHolder(
inflater.inflate(R.layout.m2_station_normal_future_view, parent, false)
)
StationViewHolder.NormalStationPass -> NormalStationPassViewHolder(
inflater.inflate(R.layout.m2_station_normal_pass_view, parent, false)
)
StationViewHolder.CurrentStationStart -> CurrentStationStartViewHolder(
inflater.inflate(R.layout.m2_station_current_start_view, parent, false)
)
StationViewHolder.CurrentStationEnd -> CurrentStationEndViewHolder(
inflater.inflate(R.layout.m2_station_current_end_view, parent, false)
)
StationViewHolder.CurrentStation -> CurrentStationViewHolder(
inflater.inflate(R.layout.m2_station_current_view, parent, false)
)
StationViewHolder.OmitStationPass -> OmitPassViewHolder(
inflater.inflate(R.layout.m2_station_omit_view_pass, parent,false)
)
StationViewHolder.OmitStationFuture -> OmitFutureViewHolder(
inflater.inflate(R.layout.m2_station_omit_view_future, parent,false)
)
else -> throw IllegalArgumentException("Invalid view type")
}
}
override fun getItemViewType(position: Int): Int {
if (getItem(position) is StationBeanOmit) {
return if (position < currentIndex) {
StationViewHolder.OmitStationPass
} else {
StationViewHolder.OmitStationFuture
}
}
when (position) {
0 -> {
return if (currentIndex == position) {
StationViewHolder.CurrentStationStart
} else {
StationViewHolder.NormalStationStart
}
}
itemCount - 1 -> {
return if (currentIndex == position) {
StationViewHolder.CurrentStationEnd
} else {
StationViewHolder.NormalStationEnd
}
}
else -> {
return if (currentIndex == position) {
StationViewHolder.CurrentStation
} else if (currentIndex < position) {
StationViewHolder.NormalStationFuture
} else {
StationViewHolder.NormalStationPass
}
}
}
}
override fun onViewRecycled(holder: StationViewHolder) {
super.onViewRecycled(holder)
holder.viewRecycled(holder)
}
}

View File

@@ -0,0 +1,17 @@
package com.mogo.och.shuttle.weaknet.passenger.ui.line.lineinfo.item
import androidx.recyclerview.widget.DiffUtil
import com.mogo.och.data.bean.BusStationBean
class MessageDiffCallback: DiffUtil.ItemCallback<BusStationBean>() {
override fun areContentsTheSame(oldItem: BusStationBean, newItem: BusStationBean): Boolean {
return oldItem == newItem
}
override fun areItemsTheSame(oldItem: BusStationBean, newItem: BusStationBean): Boolean {
return oldItem.siteId == newItem.siteId
}
}
data class StationBeanOmit(var coutOmit:Int):BusStationBean()

View File

@@ -0,0 +1,111 @@
package com.mogo.och.shuttle.weaknet.passenger.ui.line.lineinfo.item
import android.view.View
import androidx.appcompat.widget.AppCompatTextView
import androidx.recyclerview.widget.RecyclerView
import com.mogo.och.common.module.utils.ResourcesUtils
import com.mogo.och.common.module.wigets.OCHGradientTextView
import com.mogo.och.data.bean.BusStationBean
import com.mogo.och.shuttle.weaknet.passenger.R
import java.text.SimpleDateFormat
import java.util.Locale
abstract class StationViewHolder(view: View) : RecyclerView.ViewHolder(view) {
abstract fun bind(item: BusStationBean)
open fun viewRecycled(holder: StationViewHolder){}
private val sampleDateFormat = SimpleDateFormat("HH:mm", Locale.CHINA)
protected val TAG = javaClass.simpleName
companion object{
val CurrentStationStart = 0
val CurrentStationEnd = 1
val CurrentStation = 2
val NormalStationStart = 3
var NormalStationEnd = 4
val NormalStationPass = 5
val NormalStationFuture = 6
val OmitStationPass = 7
val OmitStationFuture = 8
}
}
class NormalStationStartViewHolder(binding: View) : StationViewHolder(binding) {
private var startStaionName: AppCompatTextView = binding.findViewById(R.id.actv_normal_station_start)
override fun bind(item: BusStationBean) {
startStaionName.text = item.name
}
}
class NormalStationEndViewHolder(binding: View) : StationViewHolder(binding) {
private var endStaionName: AppCompatTextView = binding.findViewById(R.id.actv_normal_station_end)
override fun bind(item: BusStationBean) {
endStaionName.text = item.name
}
}
class NormalStationPassViewHolder(binding: View) : StationViewHolder(binding) {
private var passStaionName: AppCompatTextView = binding.findViewById(R.id.actv_normal_station_pass)
override fun bind(item: BusStationBean) {
passStaionName.text = item.name
}
}
class NormalStationFutureViewHolder(binding: View) : StationViewHolder(binding) {
private var futureStaionName: AppCompatTextView = binding.findViewById(R.id.actv_normal_station_future)
override fun bind(item: BusStationBean) {
futureStaionName.text = item.name
}
}
class CurrentStationViewHolder(val binding: View) : StationViewHolder(binding) {
private var currentStaionName: OCHGradientTextView = binding.findViewById(R.id.och_current_station_name)
override fun bind(item: BusStationBean) {
currentStaionName.text = item.name
currentStaionName.setVertrial(true)
val intArrayOf = intArrayOf(
ResourcesUtils.getColor(R.color.shuttle_p_m2_color_43cefe),
ResourcesUtils.getColor(R.color.shuttle_p_m2_color_1466fb),
)
currentStaionName.setmColorList(intArrayOf)
}
}
class CurrentStationStartViewHolder(binding: View) : StationViewHolder(binding) {
private var currentStaionStartName: OCHGradientTextView = binding.findViewById(R.id.och_current_station_start_name)
override fun bind(item: BusStationBean) {
currentStaionStartName.text = item.name
val intArrayOf = intArrayOf(
ResourcesUtils.getColor(R.color.shuttle_p_m2_color_43cefe),
ResourcesUtils.getColor(R.color.shuttle_p_m2_color_1466fb),
)
currentStaionStartName.setmColorList(intArrayOf)
}
}
class CurrentStationEndViewHolder(binding: View) : StationViewHolder(binding) {
private var currentStaionEndName: OCHGradientTextView = binding.findViewById(R.id.och_current_station_end_name)
override fun bind(item: BusStationBean) {
currentStaionEndName.text = item.name
val intArrayOf = intArrayOf(
ResourcesUtils.getColor(R.color.shuttle_p_m2_color_43cefe),
ResourcesUtils.getColor(R.color.shuttle_p_m2_color_1466fb),
)
currentStaionEndName.setmColorList(intArrayOf)
}
}
class OmitPassViewHolder(val binding: View) : StationViewHolder(binding) {
private var omitCout: AppCompatTextView = binding.findViewById(R.id.actv_pass_omit_cout)
override fun bind(item: BusStationBean) {
if(item is StationBeanOmit){
omitCout.text = "${item.coutOmit}"
}
}
}
class OmitFutureViewHolder(binding: View) : StationViewHolder(binding) {
private var omitCout: AppCompatTextView = binding.findViewById(R.id.actv_future_omit_count)
override fun bind(item: BusStationBean) {
if(item is StationBeanOmit){
omitCout.text = "${item.coutOmit}"
}
}
}

View File

@@ -1,4 +1,4 @@
package com.mogo.och.shuttle.weaknet.passenger.ui
package com.mogo.och.shuttle.weaknet.passenger.ui.map
import android.graphics.BitmapFactory
import android.os.Bundle

View File

@@ -1,4 +1,4 @@
package com.mogo.och.shuttle.weaknet.passenger.ui.widget
package com.mogo.och.shuttle.weaknet.passenger.ui.statusbar
import android.annotation.*
import android.content.Context
@@ -9,18 +9,20 @@ import androidx.constraintlayout.widget.ConstraintLayout
import chassis.ChassisStatesOuterClass
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisStatesListener
import com.mogo.eagle.core.function.call.autopilot.CallerChassisStatesListenerManager
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager
import com.mogo.eagle.core.function.call.setting.CallerSkinModeListenerManager
import com.mogo.eagle.core.utilcode.kotlin.*
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.util.ClickUtils
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.och.common.module.manager.bluetooth.BleManager
import com.mogo.och.common.module.manager.loop.BizLoopManager
import com.mogo.och.common.module.utils.ResourcesUtils
import com.mogo.och.shuttle.weaknet.passenger.R
import com.mogo.och.shuttle.weaknet.passenger.callback.ICommonCallback
import com.mogo.och.shuttle.weaknet.passenger.model.CommonModel
import kotlinx.android.synthetic.main.shuttle_p_m2_view_status_bar.view.iv_logon
import kotlinx.android.synthetic.main.shuttle_p_m2_view_status_bar.view.tv_power_cos
import kotlinx.android.synthetic.main.shuttle_p_m2_view_status_bar.view.tv_status_line_name
import kotlinx.coroutines.*
import me.jessyan.autosize.utils.AutoSizeUtils
@@ -31,7 +33,7 @@ import me.jessyan.autosize.utils.AutoSizeUtils
class M2StatusBarView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null
) : ConstraintLayout(context, attrs),
IMoGoChassisStatesListener {
IMoGoChassisStatesListener, ICommonCallback {
companion object {
const val TAG = "M2StatusBarView"
@@ -52,6 +54,8 @@ class M2StatusBarView @JvmOverloads constructor(
override fun onAttachedToWindow() {
super.onAttachedToWindow()
CallerLogger.d(TAG,"onAttachedToWindow-------${this}")
post {
val params: ViewGroup.LayoutParams = getLayoutParams()
params.height = AutoSizeUtils.dp2px(context,100f)
@@ -60,6 +64,7 @@ class M2StatusBarView @JvmOverloads constructor(
//电量
CallerChassisStatesListenerManager.addListener(TAG,this)
CommonModel.setRouteLineInfoCallback(TAG,this)
tv_power_cos?.also {
it.text = "?"
@@ -74,14 +79,35 @@ class M2StatusBarView @JvmOverloads constructor(
BleManager.sendData2Wx("1889480", "00,${System.currentTimeMillis()}")
}
}
tv_status_line_name.onClick {
updateLineInfo("线路名称")
}
}
override fun updateLineInfo(lineName: String?) {
post {
CallerLogger.d(TAG,"updateLineInfo2-------${lineName}----${this}")
if(lineName==null){
tv_status_line_name.setText(R.string.m2_line_name_detaile)
}else{
tv_status_line_name.text = lineName
}
}
}
override fun showNoTaskView(isTrue: Boolean) {
BizLoopManager.runInMainThread {
CallerLogger.d(TAG,"updateLineInfo1-------${isTrue}----${this}")
if(isTrue) {
tv_status_line_name.setText(R.string.m2_line_name_detaile)
}
}
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
CallerHmiViewControlListenerManager.removeListener(TAG)
CallerSkinModeListenerManager.removeListener(TAG)
CallerChassisStatesListenerManager.removeListener(TAG)
CallerDevaToolsManager.hideStatusBar()
CommonModel.setRouteLineInfoCallback(TAG,null)
}
@SuppressLint("SetTextI18n")

View File

@@ -1,36 +0,0 @@
package com.mogo.och.shuttle.weaknet.passenger.ui.widget
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsListener
import com.mogo.eagle.core.function.hmi.ui.widget.BlueToothView
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.och.shuttle.weaknet.passenger.R
import kotlinx.android.synthetic.main.shuttle_p_m2_view_blue_tooth.view.blueView
/**
* 魔戒蓝牙控件
* 放置于StatusBar右侧位置
*/
class M2BlueToothView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : BlueToothView(context, attrs, defStyleAttr),IMoGoDevaToolsListener {
init {
LayoutInflater.from(context).inflate(R.layout.shuttle_p_m2_view_blue_tooth, this, true)
}
override fun mofangStatus(status: Boolean) {
ThreadUtils.runOnUiThread {
if (status) {
blueView.setImageResource(R.drawable.shuttle_p_m2_blue_tooth_close)
} else {
blueView.setImageResource(R.drawable.shuttle_p_m2_blue_tooth_open)
}
}
}
}

View File

@@ -9,17 +9,15 @@ import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.util.ActivityUtils
import com.mogo.eagle.core.utilcode.util.DeviceUtils
import com.mogo.eagle.core.utilcode.util.MultiDisplayUtils
import com.mogo.och.bridge.ui.autopilot.AutopilotState
import com.mogo.och.common.module.constant.OchCommonConst
import com.mogo.och.common.module.biz.provider.CommonServiceImpl
import com.mogo.och.common.module.biz.scanner.ScannerManager
import com.mogo.och.common.module.voice.OutOffVoice
import com.mogo.och.common.module.wigets.media.MediaPlayerActivity
import com.mogo.och.shuttle.weaknet.passenger.model.TicketModel
import com.mogo.och.shuttle.weaknet.passenger.ui.widget.BusPStatusBarView
import com.mogo.och.shuttle.weaknet.passenger.ui.BusPassengerRouteFragment
import com.mogo.och.shuttle.weaknet.passenger.ui.PM2BaseFragment
import com.mogo.och.shuttle.weaknet.passenger.ui.widget.M2StatusBarView
import com.mogo.och.shuttle.weaknet.passenger.ui.statusbar.M2StatusBarView
/**
* 网约车-Bus-乘客端

View File

@@ -257,7 +257,7 @@ object CommonModel {
}
}
d(TAG, "queryDriverSiteByCoordinate = update")
d(TAG, "queryDriverSiteByCoordinate = update ${result}")
routesResult = result
if (result.sites != null) {

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 811 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 811 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 921 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 900 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 838 B

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">
<solid android:color="@color/common_B3FFFFFF"/>
<corners android:radius="@dimen/dp_18"/>
</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">
<gradient android:startColor="@color/common_B3FFFFFF" android:endColor="@color/common_color_00000000" android:angle="0"/>
<corners android:radius="@dimen/dp_18"/>
</shape>

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,105 @@
<?xml version="1.0" encoding="utf-8"?>
<merge 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"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
android:background="@drawable/m2_top_arrive_station_bg"
android:layout_width="1080dp"
android:layout_height="@dimen/dp_614">
<View
android:id="@+id/arrive_station_bg"
android:background="@drawable/b2_arrive_title_bg"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="@dimen/dp_121"
android:layout_width="@dimen/dp_996"
android:layout_height="@dimen/dp_178"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/arrive_station_title"
android:text="@string/m2_arrive_station_title"
android:textColor="@color/common_203555"
android:textSize="@dimen/dp_34"
app:layout_constraintTop_toTopOf="@+id/arrive_station_bg"
app:layout_constraintStart_toStartOf="@+id/arrive_station_bg"
android:layout_marginTop="@dimen/dp_23"
android:layout_marginStart="@dimen/dp_50"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView
app:layout_constraintTop_toTopOf="@+id/arrive_station_title"
app:layout_constraintBottom_toBottomOf="@+id/arrive_station_title"
app:layout_constraintStart_toEndOf="@+id/arrive_station_title"
android:id="@+id/iv_animal_list"
android:layout_width="@dimen/dp_18"
android:layout_height="@dimen/dp_32"
android:src="@drawable/shuttle_p_m2_bg_p_m2_arrived_station"
android:layout_marginStart="@dimen/dp_7" />
<com.mogo.och.common.module.wigets.OCHGradientTextView
android:id="@+id/ochtv_arrive_station_value"
android:textSize="@dimen/dp_50"
android:text="@string/m2_empty_line_title"
android:layout_marginBottom="@dimen/dp_30"
android:layout_marginStart="@dimen/dp_50"
app:layout_constraintBottom_toBottomOf="@+id/arrive_station_bg"
app:layout_constraintStart_toStartOf="@+id/arrive_station_bg"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_doorway"
android:src="@drawable/b2_arrive_door"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginBottom="@dimen/dp_32"
android:layout_width="@dimen/dp_262"
android:layout_height="@dimen/dp_253"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_door_left"
android:src="@drawable/b2_arrive_door_left"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/aciv_doorway"
android:layout_marginBottom="@dimen/dp_20"
android:layout_marginEnd="-58dp"
android:layout_width="@dimen/dp_146"
android:layout_height="@dimen/dp_273"/>
<androidx.appcompat.widget.AppCompatImageView
android:src="@drawable/b2_arrive_door_left_arrow"
app:layout_constraintBottom_toBottomOf="@+id/aciv_door_left"
app:layout_constraintEnd_toStartOf="@+id/aciv_door_left"
android:layout_marginBottom="@dimen/dp_20"
app:layout_constraintTop_toTopOf="@+id/aciv_door_left"
android:layout_width="@dimen/dp_119"
android:layout_height="@dimen/dp_76"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_door_right"
android:src="@drawable/b2_arrive_door_right"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/aciv_doorway"
android:layout_marginBottom="@dimen/dp_20"
android:layout_marginStart="-40dp"
android:layout_width="@dimen/dp_146"
android:layout_height="@dimen/dp_273"/>
<androidx.appcompat.widget.AppCompatImageView
android:src="@drawable/b2_arrive_door_right_arrow"
app:layout_constraintBottom_toBottomOf="@+id/aciv_door_right"
app:layout_constraintStart_toEndOf="@+id/aciv_door_right"
app:layout_constraintTop_toTopOf="@+id/aciv_door_right"
android:layout_marginBottom="@dimen/dp_20"
android:layout_width="@dimen/dp_119"
android:layout_height="@dimen/dp_76"/>
</merge>

View File

@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<merge 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"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_right_bg"
android:src="@drawable/m2_p_driver_info_right"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_width="@dimen/dp_217"
android:layout_height="@dimen/dp_476"/>
<com.mogo.och.shuttle.weaknet.passenger.ui.line.autopilot.speed.SpeedView
android:layout_marginTop="@dimen/dp_20"
app:layout_constraintTop_toTopOf="@+id/aciv_right_bg"
app:layout_constraintStart_toStartOf="@+id/aciv_right_bg"
app:layout_constraintEnd_toEndOf="@+id/aciv_right_bg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<com.mogo.och.shuttle.weaknet.passenger.ui.line.autopilot.status.StatusView
android:id="@+id/auto_tv"
android:background="@drawable/m2_autopilot_status_out"
android:text="@string/m2_autopilot_status"
android:gravity="center"
android:textColor="@color/common_284F7E"
android:textSize="@dimen/dp_26"
android:textStyle="bold"
android:layout_marginBottom="@dimen/dp_3"
app:layout_constraintBottom_toTopOf="@+id/turn_light_view"
app:layout_constraintStart_toStartOf="@+id/aciv_right_bg"
app:layout_constraintEnd_toEndOf="@+id/aciv_right_bg"
android:layout_width="@dimen/dp_142"
android:layout_height="@dimen/dp_96"/>
<!-- 转向灯-->
<com.mogo.och.shuttle.weaknet.passenger.ui.line.autopilot.light.M2TurnLightView
android:id="@+id/turn_light_view"
android:layout_width="@dimen/dp_142"
android:layout_height="@dimen/dp_96"
android:layout_marginBottom="@dimen/dp_51"
app:layout_constraintStart_toStartOf="@+id/aciv_right_bg"
app:layout_constraintEnd_toEndOf="@+id/aciv_right_bg"
app:layout_constraintBottom_toBottomOf="@+id/aciv_right_bg" />
</merge>

View File

@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<merge 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"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
android:background="@drawable/m2_top_empty_bg"
android:layout_width="1080dp"
android:layout_height="@dimen/dp_614">
<com.mogo.och.common.module.wigets.OCHGradientTextView
android:id="@+id/tv_title"
android:textSize="@dimen/dp_50"
android:text="@string/m2_empty_line_title"
android:layout_marginTop="@dimen/dp_220"
android:layout_marginStart="@dimen/dp_55"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv_content"
android:textSize="@dimen/dp_34"
android:text="@string/m2_empty_line_content"
android:layout_marginTop="@dimen/dp_20"
android:layout_marginStart="@dimen/dp_55"
app:layout_constraintTop_toBottomOf="@+id/tv_title"
app:layout_constraintStart_toStartOf="parent"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<androidx.appcompat.widget.AppCompatImageView
app:layout_constraintTop_toTopOf="@+id/tv_content"
app:layout_constraintBottom_toBottomOf="@+id/tv_content"
app:layout_constraintStart_toEndOf="@+id/tv_content"
android:layout_marginStart="@dimen/dp_10"
android:src="@drawable/m2_empty_go_statart"
android:layout_width="@dimen/dp_60"
android:layout_height="@dimen/dp_12"/>
</merge>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<merge 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"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
android:background="@drawable/m2_top_arrive_station_bg"
android:layout_width="1080dp"
android:layout_height="@dimen/dp_630">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/ll_station_container"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_width="@dimen/dp_762"
android:layout_height="wrap_content"/>
<com.mogo.och.shuttle.weaknet.passenger.ui.line.autopilot.AutopilotView
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="@dimen/dp_19"
android:layout_marginEnd="@dimen/dp_28"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</merge>

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<merge 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"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_speed"
android:textSize="@dimen/dp_100"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/common_203555"
android:text="60"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
/>
<TextView
android:textSize="@dimen/dp_24"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/common_203555"
android:text="KM/H"
android:layout_marginTop="@dimen/dp_112"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
/>
</merge>

View File

@@ -0,0 +1,55 @@
<?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"
tools:background="@color/b2_95B1D6"
android:layout_width="@dimen/dp_764"
android:layout_height="@dimen/dp_68"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
<View
android:id="@+id/bg_top_line"
app:layout_constraintStart_toStartOf="@+id/aciv_start_end_station"
app:layout_constraintEnd_toEndOf="@+id/aciv_start_end_station"
app:layout_constraintTop_toTopOf="parent"
android:background="@color/b2_95B1D6"
android:layout_width="@dimen/dp_6"
android:layout_height="@dimen/dp_34"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_current_station_bg"
android:layout_width="@dimen/dp_760"
android:layout_height="@dimen/dp_68"
android:layout_marginStart="@dimen/dp_52"
android:src="@drawable/b2_station_current_bg"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_start_end_station"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="@dimen/dp_48"
android:src="@drawable/b2_end_point"
android:layout_width="@dimen/dp_60"
android:layout_height="@dimen/dp_60"/>
<com.mogo.och.common.module.wigets.OCHGradientTextView
android:id="@+id/och_current_station_end_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_118"
android:text="惠新西街北口"
android:layout_marginBottom="@dimen/dp_8"
android:textColor="@color/m2_516582"
android:textSize="@dimen/dp_42"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,57 @@
<?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"
tools:background="@color/b2_95B1D6"
android:layout_width="@dimen/dp_764"
android:layout_height="@dimen/dp_68"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
<View
android:id="@+id/bg_bottom_line"
app:layout_constraintStart_toStartOf="@+id/aciv_start_end_station"
app:layout_constraintEnd_toEndOf="@+id/aciv_start_end_station"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@color/b2_1F82FB"
android:layout_width="@dimen/dp_6"
android:layout_height="@dimen/dp_34"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_current_station_bg"
android:layout_width="@dimen/dp_760"
android:layout_height="@dimen/dp_68"
android:layout_marginStart="@dimen/dp_52"
android:src="@drawable/b2_station_current_bg"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_start_end_station"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="@dimen/dp_48"
android:src="@drawable/b2_start_point"
android:layout_width="@dimen/dp_60"
android:layout_height="@dimen/dp_60"/>
<com.mogo.och.common.module.wigets.OCHGradientTextView
android:id="@+id/och_current_station_start_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_118"
android:layout_marginBottom="@dimen/dp_8"
android:text="惠新西街北口"
android:textColor="@color/m2_516582"
android:textSize="@dimen/dp_42"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,62 @@
<?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"
tools:background="@color/b2_95B1D6"
android:layout_width="@dimen/dp_764"
android:layout_height="@dimen/dp_68"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
<View
android:id="@+id/bg_top_line"
app:layout_constraintStart_toStartOf="@+id/aciv_station_current_point"
app:layout_constraintEnd_toEndOf="@+id/aciv_station_current_point"
app:layout_constraintTop_toTopOf="@+id/aciv_current_station_bg"
android:background="@color/b2_95B1D6"
android:layout_width="@dimen/dp_6"
android:layout_height="@dimen/dp_34"/>
<View
android:id="@+id/bg_bottom_line"
app:layout_constraintStart_toStartOf="@+id/aciv_station_current_point"
app:layout_constraintEnd_toEndOf="@+id/aciv_station_current_point"
app:layout_constraintBottom_toBottomOf="@+id/aciv_current_station_bg"
android:background="@color/b2_1F82FB"
android:layout_width="@dimen/dp_6"
android:layout_height="@dimen/dp_34"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_current_station_bg"
android:layout_width="@dimen/dp_760"
android:layout_height="@dimen/dp_68"
android:layout_marginStart="@dimen/dp_52"
android:src="@drawable/b2_station_current_bg"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_station_current_point"
android:layout_width="@dimen/dp_22"
android:layout_height="@dimen/dp_55"
android:layout_marginStart="@dimen/dp_15"
android:src="@drawable/b2_current_stattion_point"
app:layout_constraintBottom_toBottomOf="@+id/aciv_current_station_bg"
app:layout_constraintStart_toStartOf="@+id/aciv_current_station_bg"
app:layout_constraintTop_toTopOf="@+id/aciv_current_station_bg" />
<com.mogo.och.common.module.wigets.OCHGradientTextView
android:id="@+id/och_current_station_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_118"
android:text="惠新西街北口"
android:textColor="@color/m2_516582"
android:layout_marginBottom="@dimen/dp_8"
android:textSize="@dimen/dp_42"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,40 @@
<?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"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
android:layout_width="@dimen/dp_764"
android:layout_height="@dimen/dp_68">
<View
android:id="@+id/bg_top_line"
app:layout_constraintStart_toStartOf="@+id/aciv_start_end_station"
app:layout_constraintEnd_toEndOf="@+id/aciv_start_end_station"
app:layout_constraintTop_toTopOf="parent"
android:background="@color/b2_1F82FB"
android:layout_width="@dimen/dp_6"
android:layout_height="@dimen/dp_34"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_start_end_station"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="@dimen/dp_48"
android:src="@drawable/b2_end_point"
android:layout_width="@dimen/dp_60"
android:layout_height="@dimen/dp_60"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/actv_normal_station_end"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="@dimen/dp_118"
android:text="惠新西街北口"
android:textSize="@dimen/dp_34"
android:textColor="@color/common_203555"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,49 @@
<?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"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
android:layout_width="@dimen/dp_764"
android:layout_height="@dimen/dp_68">
<View
android:id="@+id/bg_top_line"
app:layout_constraintStart_toStartOf="@+id/aciv_middle_station"
app:layout_constraintEnd_toEndOf="@+id/aciv_middle_station"
app:layout_constraintTop_toTopOf="parent"
android:background="@color/b2_1F82FB"
android:layout_width="@dimen/dp_6"
android:layout_height="@dimen/dp_34"/>
<View
android:id="@+id/bg_bottom_line"
app:layout_constraintStart_toStartOf="@+id/aciv_middle_station"
app:layout_constraintEnd_toEndOf="@+id/aciv_middle_station"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@color/b2_1F82FB"
android:layout_width="@dimen/dp_6"
android:layout_height="@dimen/dp_34"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_middle_station"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="@dimen/dp_62"
android:src="@drawable/b2_station_future_point"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_30"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/actv_normal_station_future"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="@dimen/dp_118"
android:text="惠新西街北口"
android:textSize="@dimen/dp_34"
android:textColor="@color/common_203555"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,49 @@
<?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"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
android:layout_width="@dimen/dp_764"
android:layout_height="@dimen/dp_68">
<View
android:id="@+id/bg_top_line"
app:layout_constraintStart_toStartOf="@+id/aciv_middle_station"
app:layout_constraintEnd_toEndOf="@+id/aciv_middle_station"
app:layout_constraintTop_toTopOf="parent"
android:background="@color/b2_95B1D6"
android:layout_width="@dimen/dp_6"
android:layout_height="@dimen/dp_34"/>
<View
android:id="@+id/bg_bottom_line"
app:layout_constraintStart_toStartOf="@+id/aciv_middle_station"
app:layout_constraintEnd_toEndOf="@+id/aciv_middle_station"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@color/b2_95B1D6"
android:layout_width="@dimen/dp_6"
android:layout_height="@dimen/dp_34"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_middle_station"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="@dimen/dp_62"
android:src="@drawable/b2_station_pass_point"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_30"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/actv_normal_station_pass"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="@dimen/dp_118"
android:text="惠新西街北口"
android:textSize="@dimen/dp_34"
android:textColor="@color/m2_516582"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,40 @@
<?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"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
android:layout_width="@dimen/dp_764"
android:layout_height="@dimen/dp_68">
<View
android:id="@+id/bg_bottom_line"
app:layout_constraintStart_toStartOf="@+id/aciv_start_end_station"
app:layout_constraintEnd_toEndOf="@+id/aciv_start_end_station"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@color/b2_95B1D6"
android:layout_width="@dimen/dp_6"
android:layout_height="@dimen/dp_34"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_start_end_station"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="@dimen/dp_48"
android:src="@drawable/b2_start_point"
android:layout_width="@dimen/dp_60"
android:layout_height="@dimen/dp_60"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/actv_normal_station_start"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="@dimen/dp_118"
android:text="惠新西街北口"
android:textSize="@dimen/dp_34"
android:textColor="@color/m2_516582"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,61 @@
<?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"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
android:layout_width="@dimen/dp_764"
android:layout_height="@dimen/dp_68">
<View
android:id="@+id/bg_top_line"
app:layout_constraintStart_toStartOf="@+id/aciv_start_station"
app:layout_constraintEnd_toEndOf="@+id/aciv_start_station"
app:layout_constraintTop_toTopOf="parent"
android:background="@drawable/b2_station_line_rounded_future_top"
android:layout_width="@dimen/dp_6"
android:layout_height="@dimen/dp_15"/>
<View
android:id="@+id/bg_bottom_line"
app:layout_constraintStart_toStartOf="@+id/aciv_start_station"
app:layout_constraintEnd_toEndOf="@+id/aciv_start_station"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@drawable/b2_station_line_rounded_future_bottom"
android:layout_width="@dimen/dp_6"
android:layout_height="@dimen/dp_15"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_start_station"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="@dimen/dp_74"
android:src="@drawable/b2_end_omit"
android:layout_width="@dimen/dp_7"
android:layout_height="@dimen/dp_28"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_omit_count_bg_future"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/aciv_start_station"
android:layout_marginStart="@dimen/dp_10"
android:src="@drawable/b2_station_omit_count_bg"
android:layout_width="@dimen/dp_78"
android:layout_height="@dimen/dp_40"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/actv_future_omit_count"
app:layout_constraintTop_toTopOf="@+id/aciv_omit_count_bg_future"
app:layout_constraintBottom_toBottomOf="@+id/aciv_omit_count_bg_future"
app:layout_constraintEnd_toEndOf="@+id/aciv_omit_count_bg_future"
android:layout_marginEnd="@dimen/dp_11"
android:text="3站"
android:textSize="@dimen/dp_24"
android:textColor="@color/common_203555"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,62 @@
<?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"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
android:layout_width="@dimen/dp_764"
android:layout_height="@dimen/dp_68">
<View
android:id="@+id/bg_top_line"
app:layout_constraintStart_toStartOf="@+id/aciv_start_station"
app:layout_constraintEnd_toEndOf="@+id/aciv_start_station"
app:layout_constraintTop_toTopOf="parent"
android:background="@drawable/b2_station_line_rounded_pass_top"
android:layout_width="@dimen/dp_6"
android:layout_height="@dimen/dp_15"/>
<View
android:id="@+id/bg_bottom_line"
app:layout_constraintStart_toStartOf="@+id/aciv_start_station"
app:layout_constraintEnd_toEndOf="@+id/aciv_start_station"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@drawable/b2_station_line_rounded_pass_bottom"
android:layout_width="@dimen/dp_6"
android:layout_height="@dimen/dp_15"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_start_station"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="@dimen/dp_74"
android:src="@drawable/b2_start_omit"
android:layout_width="@dimen/dp_7"
android:layout_height="@dimen/dp_28"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_omit_count_bg"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/aciv_start_station"
android:layout_marginStart="@dimen/dp_10"
android:src="@drawable/b2_station_omit_count_bg"
android:layout_width="@dimen/dp_78"
android:layout_height="@dimen/dp_40"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/actv_pass_omit_cout"
app:layout_constraintTop_toTopOf="@+id/aciv_omit_count_bg"
app:layout_constraintBottom_toBottomOf="@+id/aciv_omit_count_bg"
app:layout_constraintEnd_toEndOf="@+id/aciv_omit_count_bg"
android:layout_marginEnd="@dimen/dp_11"
android:text="3站"
android:textSize="@dimen/dp_24"
android:textColor="@color/m2_516582"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -3,73 +3,42 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:background="@drawable/m2_top_bg"
android:paddingTop="@dimen/dp_100"
android:layout_width="match_parent"
tools:layout_height="@dimen/dp_630"
android:layout_height="match_parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_right_bg"
android:src="@drawable/m2_p_driver_info_right"
app:layout_constraintEnd_toEndOf="parent"
<com.mogo.och.shuttle.weaknet.passenger.ui.line.lineinfo.LineView
android:id="@+id/lineView"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="@dimen/dp_19"
android:layout_marginEnd="@dimen/dp_28"
android:layout_width="@dimen/dp_217"
android:layout_height="@dimen/dp_476"/>
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="@dimen/dp_100"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_530"/>
<TextView
android:id="@+id/speed_tv"
android:textSize="@dimen/dp_100"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/common_203555"
android:text="60"
android:layout_marginTop="@dimen/dp_20"
app:layout_constraintTop_toTopOf="@+id/aciv_right_bg"
app:layout_constraintStart_toStartOf="@+id/aciv_right_bg"
app:layout_constraintEnd_toEndOf="@+id/aciv_right_bg"
/>
<com.mogo.och.shuttle.weaknet.passenger.ui.line.empty.EmptyView
android:id="@+id/emptyView"
android:background="@drawable/m2_top_empty_bg"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_614"/>
<com.mogo.och.shuttle.weaknet.passenger.ui.line.arrive.ArrivedView
android:id="@+id/arriveView"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:visibility="gone"
android:background="@drawable/m2_top_arrive_station_bg"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_614"/>
<TextView
android:textSize="@dimen/dp_24"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/common_203555"
android:text="KM/H"
android:layout_marginTop="@dimen/dp_132"
app:layout_constraintTop_toTopOf="@+id/aciv_right_bg"
app:layout_constraintStart_toStartOf="@+id/aciv_right_bg"
app:layout_constraintEnd_toEndOf="@+id/aciv_right_bg"
/>
<TextView
android:id="@+id/auto_tv"
android:background="@drawable/m2_autopilot_status_out"
android:text="@string/m2_autopilot_status"
android:gravity="center"
android:textColor="@color/common_284F7E"
android:textSize="@dimen/dp_26"
android:textStyle="bold"
android:layout_marginBottom="@dimen/dp_3"
app:layout_constraintBottom_toTopOf="@+id/turn_light_view"
app:layout_constraintStart_toStartOf="@+id/aciv_right_bg"
app:layout_constraintEnd_toEndOf="@+id/aciv_right_bg"
android:layout_width="@dimen/dp_142"
android:layout_height="@dimen/dp_96"/>
<!-- 转向灯-->
<com.mogo.och.shuttle.weaknet.passenger.ui.widget.M2TurnLightView
android:id="@+id/turn_light_view"
android:layout_width="@dimen/dp_142"
android:layout_height="@dimen/dp_96"
android:layout_marginBottom="@dimen/dp_51"
app:layout_constraintStart_toStartOf="@+id/aciv_right_bg"
app:layout_constraintEnd_toEndOf="@+id/aciv_right_bg"
app:layout_constraintBottom_toBottomOf="@+id/aciv_right_bg" />

View File

@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="@dimen/dp_18"
android:layout_height="@dimen/dp_26">
<ImageView
android:id="@+id/blueView"
android:layout_width="@dimen/dp_18"
android:layout_height="@dimen/dp_26"
android:scaleType="fitXY"
android:src="@drawable/shuttle_p_m2_blue_tooth_open"
tools:ignore="ContentDescription" />
</RelativeLayout>

View File

@@ -20,7 +20,7 @@
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/tv_line_name"
android:id="@+id/tv_status_line_name"
app:layout_constraintTop_toTopOf="@+id/iv_logon"
app:layout_constraintBottom_toBottomOf="@+id/iv_logon"
app:layout_constraintStart_toEndOf="@+id/iv_logon"

View File

@@ -24,4 +24,7 @@
<color name="shuttle_p_m2_color_99afc9e7">#99AFC9E7</color>
<color name="shuttle_p_m2_color_6617417B">#6617417B</color>
<color name="m2_516582">#516582</color>
<color name="b2_95B1D6">#95B1D6</color>
<color name="b2_1F82FB">#1F82FB</color>
</resources>

View File

@@ -14,4 +14,7 @@
<string name="m2_line_name_detaile">MOGO BUS</string>
<string name="m2_autopilot_status">AUTO</string>
<string name="m2_empty_line_title">MOGO自动驾驶小巴</string>
<string name="m2_empty_line_content">即将启程</string>
<string name="m2_arrive_station_title">当前到站</string>
</resources>