[6.7.0][状态栏改版] 代码提交
@@ -15,10 +15,10 @@ internal class StatusModel : ViewModel() {
|
||||
val DEFAULTS = Pair(null, ArrayList<Status>().also {
|
||||
it += OverViewStatus()
|
||||
it += FSMStatus(FSMStateCode.UnKnown, "")
|
||||
it += RTKStatus("", -1)
|
||||
it += IpcStatus(CallerAutoPilotStatusListenerManager.isConnect())
|
||||
it += CanStatus(false)
|
||||
// it += TracingStatus(UNKNOWN)
|
||||
it += RTKStatus("", -1)
|
||||
// it += NetStatus(false)
|
||||
// it += GpsStatus(enabled = false, isGranted = false)
|
||||
it += SteerStatus(0f)
|
||||
|
||||
@@ -61,7 +61,7 @@ internal class StatusView(private val model: StatusModel, ctx: Context): Constra
|
||||
itx.addItemDecoration(
|
||||
CommonDividerItemDecoration.Builder()
|
||||
.spanCountTBCare(false)
|
||||
.horizontalInnerSpace(10.PX)
|
||||
.horizontalInnerSpace(30.PX)
|
||||
.build()
|
||||
)
|
||||
}
|
||||
|
||||
@@ -9,8 +9,6 @@ import androidx.core.content.ContextCompat
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
|
||||
import com.mogo.eagle.core.utilcode.kotlin.onClick
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA
|
||||
import com.zhjt.mogo_core_function_devatools.R
|
||||
import com.zhjt.mogo_core_function_devatools.R.drawable
|
||||
import com.zhjt.mogo_core_function_devatools.status.entity.CanStatus
|
||||
@@ -21,58 +19,53 @@ import com.zhjt.mogo_core_function_devatools.status.entity.IpcStatus
|
||||
import com.zhjt.mogo_core_function_devatools.status.entity.OverViewStatus
|
||||
import com.zhjt.mogo_core_function_devatools.status.entity.RTKStatus
|
||||
import com.zhjt.mogo_core_function_devatools.status.entity.Status
|
||||
import com.zhjt.mogo_core_function_devatools.status.entity.TracingStatus
|
||||
import com.zhjt.mogo_core_function_devatools.status.entity.TracingStatus.Tracing.MAP_DATA_EXIST
|
||||
import com.zhjt.mogo_core_function_devatools.status.entity.TracingStatus.Tracing.MAP_DATA_NOT_EXIST
|
||||
import com.zhjt.mogo_core_function_devatools.status.entity.TracingStatus.Tracing.MAP_TRA_TYPE
|
||||
import com.zhjt.mogo_core_function_devatools.status.entity.TracingStatus.Tracing.ROUTE_FAILED
|
||||
import com.zhjt.mogo_core_function_devatools.status.entity.TracingStatus.Tracing.ROUTE_LOADED
|
||||
import com.zhjt.mogo_core_function_devatools.status.entity.TracingStatus.Tracing.TRACK_FINDED
|
||||
import com.zhjt.mogo_core_function_devatools.status.entity.TracingStatus.Tracing.TRACK_LOADED
|
||||
import com.zhjt.mogo_core_function_devatools.status.entity.TracingStatus.Tracing.TRACK_LOAD_FAIL
|
||||
import com.zhjt.mogo_core_function_devatools.status.entity.TracingStatus.Tracing.TRACK_NOT_EXIST
|
||||
import com.zhjt.mogo_core_function_devatools.status.entity.TracingStatus.Tracing.UNKNOWN
|
||||
import com.zhjt.mogo_core_function_devatools.status.ui.adapter.StatusAdapter.StatusViewHolder
|
||||
import me.jessyan.autosize.AutoSizeCompat
|
||||
|
||||
internal class StatusAdapter(val ctx: Context, var data: List<Status>): RecyclerView.Adapter<StatusViewHolder>() {
|
||||
internal class StatusAdapter(val ctx: Context, var data: List<Status>) : RecyclerView.Adapter<StatusViewHolder>() {
|
||||
|
||||
companion object {
|
||||
const val TAG = "StatusAdapter"
|
||||
private const val ITEM_TYPE_NORMAL = 1
|
||||
private const val ITEM_TYPE_OVER_VIEW = 2
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): StatusViewHolder =
|
||||
StatusViewHolder(LayoutInflater.from(ctx).inflate(R.layout.layout_status_bar_item, parent, false))
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): StatusViewHolder {
|
||||
if (viewType == ITEM_TYPE_NORMAL) {
|
||||
return NormalViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.layout_status_bar_item, parent, false))
|
||||
}
|
||||
return OverViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.layout_status_bar_over_item, parent, false))
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: StatusViewHolder, position: Int) {
|
||||
AutoSizeCompat.autoConvertDensityOfGlobal(holder.itemView.resources)
|
||||
holder.bind(data[position])
|
||||
}
|
||||
|
||||
override fun getItemViewType(position: Int): Int {
|
||||
if (position < 0 || position >= data.size) {
|
||||
return super.getItemViewType(position)
|
||||
}
|
||||
val status = data[position]
|
||||
if (status is OverViewStatus) {
|
||||
return ITEM_TYPE_OVER_VIEW
|
||||
}
|
||||
return ITEM_TYPE_NORMAL
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = data.size
|
||||
|
||||
internal class StatusViewHolder(item: View) : RecyclerView.ViewHolder(item) {
|
||||
internal abstract class StatusViewHolder(item: View) : RecyclerView.ViewHolder(item) {
|
||||
abstract fun bind(status: Status)
|
||||
}
|
||||
|
||||
internal class NormalViewHolder(item: View) : StatusViewHolder(item) {
|
||||
|
||||
private val iv: ImageView by lazy {
|
||||
itemView.findViewById(R.id.iv)
|
||||
}
|
||||
|
||||
fun bind(status: Status) {
|
||||
if (status !is OverViewStatus) {
|
||||
itemView.setOnClickListener(null)
|
||||
itemView.isClickable = false
|
||||
if (iv.drawable != null) {
|
||||
iv.setImageDrawable(null)
|
||||
}
|
||||
} else {
|
||||
if (iv.background != null) {
|
||||
iv.background = null
|
||||
}
|
||||
itemView.onClick {
|
||||
CallerHmiManager.showStatusSummaryDialog()
|
||||
}
|
||||
}
|
||||
when(status) {
|
||||
override fun bind(status: Status) {
|
||||
when (status) {
|
||||
is IpcStatus -> {
|
||||
if (status.enabled) {
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_ipc_enable)
|
||||
@@ -80,6 +73,7 @@ internal class StatusAdapter(val ctx: Context, var data: List<Status>): Recycler
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_ipc_disable)
|
||||
}
|
||||
}
|
||||
|
||||
is CanStatus -> {
|
||||
if (status.enabled) {
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_can_enable)
|
||||
@@ -87,152 +81,94 @@ internal class StatusAdapter(val ctx: Context, var data: List<Status>): Recycler
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_can_disable)
|
||||
}
|
||||
}
|
||||
// is NetStatus -> {
|
||||
// if (status.enabled) {
|
||||
// iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_net_enable)
|
||||
|
||||
// is GpsStatus -> {
|
||||
// if (status.enabled && status.isGranted) {
|
||||
// iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_gps_enable)
|
||||
// } else {
|
||||
// iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_net_disable)
|
||||
// iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_gps_disable)
|
||||
// }
|
||||
// }
|
||||
is GpsStatus -> {
|
||||
if (status.enabled && status.isGranted) {
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_gps_enable)
|
||||
} else {
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_gps_disable)
|
||||
}
|
||||
}
|
||||
is TracingStatus -> {
|
||||
when(status.state) {
|
||||
MAP_DATA_NOT_EXIST, MAP_DATA_EXIST, MAP_TRA_TYPE, ROUTE_FAILED, TRACK_LOAD_FAIL, TRACK_NOT_EXIST, TRACK_FINDED, UNKNOWN -> {
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_trace_unkown)
|
||||
}
|
||||
TRACK_LOADED -> {
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_track_enable)
|
||||
}
|
||||
ROUTE_LOADED -> {
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_route_enable)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// is TracingStatus -> {
|
||||
// when (status.state) {
|
||||
// MAP_DATA_NOT_EXIST, MAP_DATA_EXIST, MAP_TRA_TYPE, ROUTE_FAILED, TRACK_LOAD_FAIL, TRACK_NOT_EXIST, TRACK_FINDED, UNKNOWN -> {
|
||||
// iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_trace_unkown)
|
||||
// }
|
||||
//
|
||||
// TRACK_LOADED -> {
|
||||
// iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_track_enable)
|
||||
// }
|
||||
//
|
||||
// ROUTE_LOADED -> {
|
||||
// iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_route_enable)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
is RTKStatus -> {
|
||||
when(status.desc) {
|
||||
"RTK" ->
|
||||
when(status.state) {
|
||||
0 -> iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_rtk_good)
|
||||
1 -> iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_rtk_not_credible)
|
||||
2 -> iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_rtk_inaccurate)
|
||||
else -> iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_rtk_error)
|
||||
}
|
||||
"SLAM" ->
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_slam_good)
|
||||
"VSLAM" ->
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_vslam_good)
|
||||
"VAL" ->
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_val_good)
|
||||
else ->
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_rtk_unknow)
|
||||
when (status.desc) {
|
||||
"RTK" -> when (status.state) {
|
||||
0 -> iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_rtk_good)
|
||||
1 -> iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_rtk_not_credible)
|
||||
2 -> iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_rtk_inaccurate)
|
||||
else -> iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_rtk_error)
|
||||
}
|
||||
|
||||
"SLAM" -> iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_slam_good)
|
||||
"VSLAM" -> iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_vslam_good)
|
||||
"VAL" -> iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_val_good)
|
||||
else -> iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_rtk_unknow)
|
||||
}
|
||||
}
|
||||
|
||||
is FSMStatus -> {
|
||||
when (status.state) {
|
||||
FSMStateCode.UnKnown -> {
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_fsm_not_connected)
|
||||
CallerHmiManager.dismissFSMStatusDetailWindow()
|
||||
}
|
||||
|
||||
FSMStateCode.NotExist -> {
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_fsm_not_exist)
|
||||
CallerHmiManager.dismissFSMStatusDetailWindow()
|
||||
}
|
||||
|
||||
FSMStateCode.ExistNormal -> {
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_fsm_normal)
|
||||
CallerHmiManager.dismissFSMStatusDetailWindow()
|
||||
}
|
||||
|
||||
FSMStateCode.ExistError -> {
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_fsm_error)
|
||||
CallerHmiManager.showFSMStatusDetailWindow("FSM异常:", "#FF3B3B", status.desc)
|
||||
}
|
||||
}
|
||||
}
|
||||
is OverViewStatus -> {
|
||||
if (status.hasException) {
|
||||
iv.scaleType = ImageView.ScaleType.FIT_CENTER
|
||||
iv.setImageResource(drawable.icon_red_warning)
|
||||
} else {
|
||||
iv.scaleType = ImageView.ScaleType.FIT_CENTER
|
||||
iv.setImageResource(drawable.icon_grey_warning)
|
||||
}
|
||||
}
|
||||
|
||||
else -> throw IllegalStateException()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal class OverViewHolder(item: View) : StatusViewHolder(item) {
|
||||
|
||||
private val iv: ImageView by lazy {
|
||||
itemView.findViewById(R.id.iv)
|
||||
}
|
||||
|
||||
init {
|
||||
itemView.onClick {
|
||||
CallerHmiManager.showStatusSummaryDialog()
|
||||
}
|
||||
}
|
||||
|
||||
private fun getText(status: Status): String = when (status) {
|
||||
is CanStatus -> "CAN:${if (status.enabled) "状态正常" else "非正常连接"}"
|
||||
is GpsStatus -> "GPS:${if (status.enabled) "状态正常" else "非正常连接"}"
|
||||
is IpcStatus -> "工控机:${if (status.enabled) "状态正常" else "非正常连接"}"
|
||||
// is NetStatus -> "WIFI:${ if (status.enabled) "${status.name}" else "非正常连接" }"
|
||||
is RTKStatus -> when (status.desc) {
|
||||
"RTK" ->
|
||||
when (status.state) {
|
||||
0 -> "RTK定位,状态良好"
|
||||
1 -> "RTK定位,定位不可信"
|
||||
2 -> "RTK定位,误差增大到米级"
|
||||
else -> "RTK定位,状态异常"
|
||||
}
|
||||
|
||||
"SLAM" ->
|
||||
"SLAM定位,状态良好"
|
||||
|
||||
else ->
|
||||
"定位异常"
|
||||
}
|
||||
|
||||
is FSMStatus -> when (status.state) {
|
||||
FSMStateCode.UnKnown -> {
|
||||
"FSM:未知"
|
||||
}
|
||||
FSMStateCode.NotExist -> {
|
||||
"FSM:无FSM模块"
|
||||
}
|
||||
FSMStateCode.ExistNormal -> {
|
||||
"FSM:状态正常"
|
||||
}
|
||||
FSMStateCode.ExistError -> {
|
||||
"FSM:状态异常"
|
||||
}
|
||||
}
|
||||
|
||||
is TracingStatus -> {
|
||||
val extra = status.state.extra
|
||||
val extraDesc =
|
||||
if (extra != null && extra.isNotEmpty()) extra.values.joinToString(",") else ""
|
||||
CallerLogger.d(
|
||||
"$M_DEVA$TAG",
|
||||
"traceing_state: $status -> extra: $extraDesc :: extra: $extra"
|
||||
)
|
||||
when (status.state) {
|
||||
//"轨迹类型:${ if (status.state == TRACK_LOADED) "循迹" else if (status.state == ROUTE_LOADED) "自主算路" else "暂无轨迹" }"
|
||||
MAP_TRA_TYPE -> {
|
||||
"暂无轨迹"
|
||||
}
|
||||
|
||||
MAP_DATA_EXIST -> "地图数据存在,正在加载${if (extraDesc.isNotEmpty()) "\n[$extraDesc]" else ""}"
|
||||
MAP_DATA_NOT_EXIST -> "地图数据不存在${if (extraDesc.isNotEmpty()) "\n[$extraDesc]" else ""}"
|
||||
TRACK_FINDED -> "轨迹类型:循迹(已找到轨迹)${if (extraDesc.isNotEmpty()) "\n[$extraDesc]" else ""}"
|
||||
TRACK_LOADED -> "轨迹类型:循迹(加载成功)${if (extraDesc.isNotEmpty()) "\n[$extraDesc]" else ""}"
|
||||
TRACK_NOT_EXIST -> "轨迹类型:循迹(未找到轨迹)${if (extraDesc.isNotEmpty()) "\n[$extraDesc]" else ""}"
|
||||
TRACK_LOAD_FAIL -> "轨迹类型:循迹(加载失败)${if (extraDesc.isNotEmpty()) "\n[$extraDesc]" else ""}"
|
||||
ROUTE_LOADED -> "轨迹类型:自主算路(加载成功)${if (extraDesc.isNotEmpty()) "\n[$extraDesc]" else ""}"
|
||||
ROUTE_FAILED -> "轨迹类型:自主算路(加载失败)${if (extraDesc.isNotEmpty()) "\n[$extraDesc]" else ""}"
|
||||
UNKNOWN -> "暂无轨迹"
|
||||
}
|
||||
}
|
||||
|
||||
is OverViewStatus -> {
|
||||
""
|
||||
}
|
||||
|
||||
else -> {
|
||||
throw AssertionError()
|
||||
override fun bind(status: Status) {
|
||||
val over = status as OverViewStatus
|
||||
if (over.hasException) {
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_red_warning)
|
||||
} else {
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_grey_warning)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 997 B |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 291 B After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 291 B After Width: | Height: | Size: 1.5 KiB |
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/iv"
|
||||
android:layout_width="@dimen/dp_115"
|
||||
android:layout_width="@dimen/dp_100"
|
||||
android:layout_height="@dimen/dp_46" />
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/iv"
|
||||
android:layout_width="@dimen/dp_51"
|
||||
android:layout_height="@dimen/dp_40" />
|
||||