[8.2.2][feat]新增B2美化呈现UI开发

This commit is contained in:
xinfengkun
2025-09-08 10:29:28 +08:00
parent ee303ec357
commit bb2d4996fc
15 changed files with 146 additions and 28 deletions

View File

@@ -94,4 +94,8 @@ public class LanSocketManagerJava implements IReceivedMsgListener {
public void onFusionColor(boolean fusionColor) {
}
@Override
public void onB2DemoMode(boolean isB2DemoMode) {
}
}

View File

@@ -4,12 +4,18 @@ import android.content.Context
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatTextView
import androidx.core.content.ContextCompat
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
import com.mogo.eagle.core.function.api.telematic.IReceivedMsgListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.function.call.telematic.CallerTelematicListenerManager
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
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 {
class StatusView : AppCompatTextView, ICommonCallback, IReceivedMsgListener {
private val TAG = "ItineraryView"
@@ -17,31 +23,94 @@ class StatusView : AppCompatTextView, ICommonCallback {
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) : super(
context,
attributeSet,
defStyleAttr
)
override fun onAttachedToWindow() {
super.onAttachedToWindow()
CallerTelematicListenerManager.addListener(TAG, this)
CommonModel.setRouteLineInfoCallback(TAG, this)
updateAutoIconState(0)
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
CallerTelematicListenerManager.removeListener(TAG)
CommonModel.setRouteLineInfoCallback(TAG, null)
}
private fun initView() {
}
override fun onVisibilityAggregated(isVisible: Boolean) {
super.onVisibilityAggregated(isVisible)
if(isVisible){
CommonModel.setRouteLineInfoCallback(TAG,this)
}else{
CommonModel.setRouteLineInfoCallback(TAG,null)
override fun onB2DemoMode(isB2DemoMode: Boolean) {
super.onB2DemoMode(isB2DemoMode)
updateAutoIconState(1)
}
//美化模式状态变更回调
override fun onDemoMode(isDemoMode: Boolean) {
super.onDemoMode(isDemoMode)
updateAutoIconState(2)
}
override fun updateInOrderStatus(inOrder: Boolean) {
super.updateInOrderStatus(inOrder)
updateAutoIconState(3)
}
//自动驾驶状态变更
override fun updateAutoStatus(state: Int) {
updateAutoIconState(4)
}
private fun getStateIcon(source: Int): Int {
// 平行驾驶状态下
val sourceStr = when (source) {
0 -> "View初始化"
1 -> "B2美化模式状态变更"
2 -> "美化模式状态变更"
3 -> "订单状态变更"
4 -> "自动驾驶状态变更"
else -> "错误"
}
val autopilotState = CallerAutoPilotStatusListenerManager.getState()
CallerLogger.i(
TAG,
"数据刷新来源=$sourceStr 自动驾驶状态=${autopilotState} 订单状态=${CommonModel.inOrder} 美化模式状态=${FunctionBuildConfig.isDemoMode} B2美化模式状态=${FunctionBuildConfig.isB2DemoMode} "
)
if (IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING == autopilotState) {
return R.drawable.m2_status_parallel
}
// 处理非平行驾驶状态的情况
return when {
// 无订单的情况
!CommonModel.inOrder -> {
R.drawable.m2_status_basic
}
// 有订单且美化状态和b2美化状态任意开着
CommonModel.inOrder && (FunctionBuildConfig.isDemoMode || FunctionBuildConfig.isB2DemoMode) -> {
R.drawable.m2_status_order_auto
}
// 有订单且美化状态和b2美化状态都关着
CommonModel.inOrder && !FunctionBuildConfig.isDemoMode && !FunctionBuildConfig.isB2DemoMode -> {
if (autopilotState == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) R.drawable.m2_status_order_auto else R.drawable.m2_status_basic
}
// 覆盖所有可能的情况
else -> R.drawable.m2_status_basic
}
}
override fun updateAutoStatus(isAutoPilot: Boolean) {
private fun updateAutoIconState(source: Int) {
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)
}
setTextColor(ContextCompat.getColor(it, R.color.common_FFFFFF))
background = ContextCompat.getDrawable(it, getStateIcon(source))
}
}
}

View File

@@ -20,6 +20,8 @@ public interface ICommonCallback {
*/
default void updateAutoStatus(boolean isOpen){}
default void updateAutoStatus(int state){}
default void updateInOrderStatus(boolean inOrder){}
default void updateLineStations(List<BusStationBean> stations){}
default void clearCustomPolyline(){}

View File

@@ -53,7 +53,7 @@ object CommonModel {
private val TAG: String = SceneConstant.M_BUS_P+CommonModel::class.java.simpleName
var mContext: Context? = null
var inOrder = false
private var mCommonCallbackList = mutableMapOf<String,ICommonCallback>()
@@ -140,12 +140,12 @@ object CommonModel {
override fun onAutopilotStatusResponse(state: Int) {
d(TAG, "onAutopilotStatusResponse ===== $state")
mCommonCallbackList.forEach {
it.value.updateAutoStatus(state)
}
if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING != state){
//美化模式下且行程中
if (FunctionBuildConfig.isDemoMode &&
mNextStationIndex >= 0 && mNextStationIndex <= mStations.size - 1
&& isGoingToNextStation
){
if (FunctionBuildConfig.isDemoMode && inOrder()) {
mCommonCallbackList.forEach {
it.value.updateAutoStatus(true)
}
@@ -232,6 +232,21 @@ object CommonModel {
mCommonCallbackList.forEach {
it.value.showNoTaskView(true)
}
dispatchInOrder()
}
private fun dispatchInOrder() {
val newValue = inOrder()
if (inOrder != newValue) {
inOrder = newValue
mCommonCallbackList.forEach {
it.value.updateInOrderStatus(newValue)
}
}
}
private fun inOrder(): Boolean {
return mNextStationIndex >= 0 && mNextStationIndex <= mStations.size - 1 && isGoingToNextStation
}
@@ -278,6 +293,7 @@ object CommonModel {
val endStation = mStations[i + 1]
startStationVideo(endStation)
setTrajectoryStation(startStation, endStation, result.lineId)
dispatchInOrder()
return
} else if (!station.isLeaving) {
if (i == stations.size - 1) {
@@ -288,6 +304,7 @@ object CommonModel {
mCommonCallbackList.forEach {
it.value.updateStationsInfo(stations, i, true)
}
dispatchInOrder()
return
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -24,10 +24,10 @@
<com.mogo.och.shuttle.weaknet.passenger.ui.line.autopilot.status.StatusView
android:id="@+id/auto_tv"
android:background="@drawable/m2_autopilot_status_out"
android:background="@drawable/m2_status_basic"
android:text="@string/m2_autopilot_status"
android:gravity="center"
android:textColor="@color/common_284F7E"
android:textColor="@color/common_ffffffff"
android:textSize="@dimen/dp_26"
android:textStyle="bold"
android:layout_marginBottom="@dimen/dp_3"

View File

@@ -11,7 +11,7 @@
android:id="@+id/turn_light_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/m2_autopilot_status_out"
android:background="@drawable/m2_turn_light_bg"
android:layout_gravity="top|center_horizontal"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"

View File

@@ -388,10 +388,11 @@ class TeleMsgHandler : IMsgHandler {
}
TelematicConstant.CONTROL_B2_PRETTIFY_SWITCH -> {
CallerTelematicListenerManager.invokeReceivedMsg(
TelematicConstant.CONTROL_B2_PRETTIFY_SWITCH,
it.body
)
val value = when (String(it.body)) {
"1" -> true
else -> false
}
CallerTelematicListenerManager.dispatchB2DemoMode(value)
}
TelematicConstant.SHOW_TRAFFIC_LIGHT -> {

View File

@@ -25,6 +25,14 @@ object FunctionBuildConfig {
@JvmField
var isDemoMode = false
/**
* B2专用美化模式状态
* 目前仅用于自动驾驶状态UI变更
*/
@Volatile
@JvmField
var isB2DemoMode = false
/**
* 6.2.6版本增加接管提醒开关
* 控制掉自驾、接管类的消息是否展示包括系统信息接管提醒、fm紧急停车提醒、平行驾驶接管提醒

View File

@@ -7,5 +7,7 @@ interface IReceivedMsgListener {
fun onDemoMode(isDemoMode: Boolean) {}
fun onB2DemoMode(isB2DemoMode: Boolean) {}
fun onFusionColor(fusionColor: Boolean){}
}

View File

@@ -58,6 +58,21 @@ object CallerTelematicListenerManager: CallerBase<IReceivedMsgListener>() {
}
}
fun dispatchB2DemoMode(isB2DemoMode: Boolean) {
if (isB2DemoMode != FunctionBuildConfig.isB2DemoMode) {
FunctionBuildConfig.isB2DemoMode = isB2DemoMode
M_LISTENERS.forEach {
val listener = it.value
try {
listener.onB2DemoMode(isB2DemoMode)
} catch (e: Exception) {
e.printStackTrace()
Log.e(TAG, "转发B2美化模式出现异常${e.message}")
}
}
}
}
fun dispatchFusionColor(fusionColor: Boolean) {
if (fusionColor != FunctionBuildConfig.isFusionColor) {
// FunctionBuildConfig.isFusionColor = fusionColor