From ed21e17f5696504f4918edf63efc4c64b162d631 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Tue, 10 Mar 2026 11:33:59 +0800 Subject: [PATCH] =?UTF-8?q?[8.4.0]=20[b4]=20[=E9=AB=98=E7=BA=A7=E5=9C=B0?= =?UTF-8?q?=E5=9B=BE=E5=B1=95=E7=A4=BA=20=E9=80=9F=E5=BA=A6=E3=80=81?= =?UTF-8?q?=E8=BD=AC=E5=90=91=E7=81=AF=E5=92=8C=E8=87=AA=E9=A9=BE=E7=8A=B6?= =?UTF-8?q?=E6=80=81]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/line/autopilot/status/B4StatusView.kt | 12 +- .../ui/map/autopilot/B4AutopilotView.kt | 38 ++++ .../ui/map/autopilot/light/B4TurnLightView.kt | 180 ++++++++++++++++++ .../ui/map/autopilot/speed/B4SpeedView.kt | 64 +++++++ .../ui/map/autopilot/status/B4StatusView.kt | 127 ++++++++++++ .../shuttle_p_b4_youzhuan_open.png | Bin 3099 -> 679 bytes .../shuttle_p_b4_youzhuan_un_open.png | Bin 1025 -> 738 bytes .../shuttle_p_b4_zuozhuan_open.png | Bin 3153 -> 797 bytes .../shuttle_p_b4_zuozhuan_un_open.png | Bin 974 -> 842 bytes .../res/b4/drawable/b4_turen_light_bg.xml | 6 + .../src/main/res/b4/layout/b4_autopilot.xml | 14 +- .../src/main/res/b4/layout/b4_speed.xml | 5 +- .../layout/shuttle_p_b4_turn_light_status.xml | 33 ++-- .../src/main/res/b4/values/colors.xml | 2 + 14 files changed, 450 insertions(+), 31 deletions(-) create mode 100644 OCH/shuttle/passenger_weaknet/src/main/java/b4/com/mogo/och/shuttle/weaknet/passenger/ui/map/autopilot/B4AutopilotView.kt create mode 100644 OCH/shuttle/passenger_weaknet/src/main/java/b4/com/mogo/och/shuttle/weaknet/passenger/ui/map/autopilot/light/B4TurnLightView.kt create mode 100644 OCH/shuttle/passenger_weaknet/src/main/java/b4/com/mogo/och/shuttle/weaknet/passenger/ui/map/autopilot/speed/B4SpeedView.kt create mode 100644 OCH/shuttle/passenger_weaknet/src/main/java/b4/com/mogo/och/shuttle/weaknet/passenger/ui/map/autopilot/status/B4StatusView.kt create mode 100644 OCH/shuttle/passenger_weaknet/src/main/res/b4/drawable/b4_turen_light_bg.xml diff --git a/OCH/shuttle/passenger_weaknet/src/main/java/b4/com/mogo/och/shuttle/weaknet/passenger/ui/line/autopilot/status/B4StatusView.kt b/OCH/shuttle/passenger_weaknet/src/main/java/b4/com/mogo/och/shuttle/weaknet/passenger/ui/line/autopilot/status/B4StatusView.kt index a3bdb96145..6643969fb1 100644 --- a/OCH/shuttle/passenger_weaknet/src/main/java/b4/com/mogo/och/shuttle/weaknet/passenger/ui/line/autopilot/status/B4StatusView.kt +++ b/OCH/shuttle/passenger_weaknet/src/main/java/b4/com/mogo/och/shuttle/weaknet/passenger/ui/line/autopilot/status/B4StatusView.kt @@ -84,25 +84,25 @@ class B4StatusView : AppCompatTextView, ICommonCallback, IReceivedMsgListener { "数据刷新来源=$sourceStr 自动驾驶状态=${autopilotState} 订单状态=${CommonModel.inOrder} 美化模式状态=${FunctionBuildConfig.isDemoMode} B2美化模式状态=${FunctionBuildConfig.isB2DemoMode} " ) if (IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING == autopilotState) { - return R.drawable.b4_status_parallel + return R.color.b4_9A2EFF } // 处理非平行驾驶状态的情况 return when { // 无订单的情况 !CommonModel.inOrder -> { - R.drawable.b4_status_basic + return R.color.b4_333333 } // 有订单,且美化状态和b2美化状态任意开着 CommonModel.inOrder && (FunctionBuildConfig.isDemoMode || FunctionBuildConfig.isB2DemoMode) -> { - R.drawable.b4_status_order_auto + R.color.b4_2EACFF } // 有订单,且美化状态和b2美化状态都关着 CommonModel.inOrder && !FunctionBuildConfig.isDemoMode && !FunctionBuildConfig.isB2DemoMode -> { - if (autopilotState == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) R.drawable.b4_status_order_auto else R.drawable.b4_status_basic + if (autopilotState == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) R.color.b4_2EACFF else R.color.b4_333333 } // 覆盖所有可能的情况 - else -> R.drawable.b4_status_basic + else -> R.color.b4_333333 } } @@ -110,7 +110,7 @@ class B4StatusView : AppCompatTextView, ICommonCallback, IReceivedMsgListener { BizLoopManager.runInMainThread { context?.let { setTextColor(ContextCompat.getColor(it, R.color.common_FFFFFF)) - background = ContextCompat.getDrawable(it, getStateIcon(source)) + setBackgroundColor(getStateIcon(source)) } } } diff --git a/OCH/shuttle/passenger_weaknet/src/main/java/b4/com/mogo/och/shuttle/weaknet/passenger/ui/map/autopilot/B4AutopilotView.kt b/OCH/shuttle/passenger_weaknet/src/main/java/b4/com/mogo/och/shuttle/weaknet/passenger/ui/map/autopilot/B4AutopilotView.kt new file mode 100644 index 0000000000..15088d1a06 --- /dev/null +++ b/OCH/shuttle/passenger_weaknet/src/main/java/b4/com/mogo/och/shuttle/weaknet/passenger/ui/map/autopilot/B4AutopilotView.kt @@ -0,0 +1,38 @@ +package com.mogo.och.shuttle.weaknet.passenger.ui.map.autopilot + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.och.shuttle.weaknet.passenger.R + +class B4AutopilotView : ConstraintLayout { + + private val TAG = "B4AutopilotView" + + 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.b4_autopilot, this, true) + } + + override fun onVisibilityAggregated(isVisible: Boolean) { + super.onVisibilityAggregated(isVisible) + } + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + + +} \ No newline at end of file diff --git a/OCH/shuttle/passenger_weaknet/src/main/java/b4/com/mogo/och/shuttle/weaknet/passenger/ui/map/autopilot/light/B4TurnLightView.kt b/OCH/shuttle/passenger_weaknet/src/main/java/b4/com/mogo/och/shuttle/weaknet/passenger/ui/map/autopilot/light/B4TurnLightView.kt new file mode 100644 index 0000000000..d9d523ea01 --- /dev/null +++ b/OCH/shuttle/passenger_weaknet/src/main/java/b4/com/mogo/och/shuttle/weaknet/passenger/ui/map/autopilot/light/B4TurnLightView.kt @@ -0,0 +1,180 @@ +package com.mogo.och.shuttle.weaknet.passenger.ui.map.autopilot.light + +import android.animation.AnimatorSet +import android.animation.ObjectAnimator +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import android.view.animation.AlphaAnimation +import android.view.animation.Animation +import android.widget.ImageView +import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.eagle.core.function.api.datacenter.union.IMoGoTurnLightListener +import com.mogo.eagle.core.function.call.v2x.CallerTurnLightListenerManager +import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.och.common.module.manager.light.TurnLightManager +import com.mogo.och.shuttle.weaknet.passenger.R +import kotlinx.android.synthetic.main.shuttle_p_b4_turn_light_status.view.b4_left_select_image +import kotlinx.android.synthetic.main.shuttle_p_b4_turn_light_status.view.b4_right_nor_image +import kotlinx.android.synthetic.main.shuttle_p_b4_turn_light_status.view.b4_right_select_image + +/** + * @author: wangmingjun + * @date: 2023/2/13 + */ +class B4TurnLightView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr), + IMoGoTurnLightListener, TurnLightManager.TurnLightListener { + + + companion object { + private const val TAG = "B4TurnLightView" + } + + private var isLeftLight: Boolean = false + private var isRightLight: Boolean = false + private var isDisappear: Boolean = false + + init { + LayoutInflater.from(context).inflate(R.layout.shuttle_p_b4_turn_light_status, this, true) + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + CallerTurnLightListenerManager.addListener(TAG, this) + TurnLightManager.addTurnLightStatusChangeListener(TAG, this) + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + CallerTurnLightListenerManager.removeListener(TAG) + TurnLightManager.removeTurnLightStatusChangeListener(TAG) + } + + override fun hideTurnLightView() { + ThreadUtils.runOnUiThread { + if (!isDisappear) { + isDisappear = true + isLeftLight = false + isRightLight = false + animationDisappear() + } + } + } + + override fun statusChange(newStatus: TurnLightManager.TurnLightStatus) { + ThreadUtils.runOnUiThread { + setTurnLight(newStatus) + } + } + + /** + * 转向灯动画 + */ + private fun setTurnLight(directionLight: TurnLightManager.TurnLightStatus) { + if (!isAttachedToWindow) { + return + } + //根据左右进行显示和隐藏,实际要判断每个来的时间和频度 + when (directionLight) { + TurnLightManager.TurnLightStatus.TURN_LIGHT_LEFT -> { //左转向 + if (!isLeftLight) { + isLeftLight = true + isRightLight = false + isDisappear = false + showNormalAnimation() + b4_left_select_image.visibility = View.VISIBLE + b4_right_select_image.visibility = View.GONE + b4_right_select_image.clearAnimation() + setAnimation(b4_left_select_image) + } + } + + TurnLightManager.TurnLightStatus.TURN_LIGHT_RIGHT -> { //右转向 + if (!isRightLight) { + isRightLight = true + isLeftLight = false + isDisappear = false + showNormalAnimation() + b4_left_select_image.visibility = View.GONE + b4_right_select_image.visibility = View.VISIBLE + b4_left_select_image.clearAnimation() + setAnimation(b4_right_select_image) + } + } + + TurnLightManager.TurnLightStatus.TURN_LIGHT_NONE -> { //消失 + if (!isDisappear) { + isDisappear = true + isLeftLight = false + isRightLight = false + animationDisappear() + } + } + } + } + + //显示背景 + private fun showNormalAnimation() { + val appearAnimation = AlphaAnimation(0f, 1.0f) + appearAnimation.duration = 300 + val appearAnimationImage = AlphaAnimation(0f, 1.0f) + appearAnimation.duration = 500 +// turn_light_layout.startAnimation(appearAnimation) +// left_nor_image.startAnimation(appearAnimationImage) + b4_right_nor_image.startAnimation(appearAnimationImage) + +// turn_light_layout.visibility = View.VISIBLE +// left_nor_image.visibility = View.VISIBLE + b4_right_nor_image.visibility = View.VISIBLE + } + + //消失动画,当转向等数据为空时候 + private fun animationDisappear() { + b4_left_select_image.visibility = View.GONE + b4_right_select_image.visibility = View.GONE + b4_left_select_image.clearAnimation() + b4_right_select_image.clearAnimation() + + //left_nor_image.clearAnimation() + b4_right_nor_image.clearAnimation() + + val disappearAnimationLeft = AlphaAnimation(1.0f, 0f) + disappearAnimationLeft.duration = 300 + + //left_nor_image.startAnimation(disappearAnimationLeft) + b4_right_nor_image.startAnimation(disappearAnimationLeft) + + + disappearAnimationLeft.setAnimationListener(object : Animation.AnimationListener { + override fun onAnimationRepeat(p0: Animation?) { + } + + override fun onAnimationStart(p0: Animation?) { + } + + override fun onAnimationEnd(p0: Animation?) { +// left_nor_image.visibility = View.GONE +// right_nor_image.visibility = View.GONE + } + }) + } + + //实现图片闪烁效果 + private fun setAnimation(imageView: ImageView) { + val animationSet = AnimatorSet() + val valueAnimator = ObjectAnimator.ofFloat(imageView, "alpha", 0f, 1.0f) + val valueAnimatorDisappear = ObjectAnimator.ofFloat(imageView, "alpha", 1.0f, 0f) + valueAnimator.duration = 1000 + valueAnimatorDisappear.duration = 800 + valueAnimator.repeatCount = -1 + valueAnimatorDisappear.repeatCount = -1 + animationSet.playTogether(valueAnimatorDisappear, valueAnimator) + animationSet.start() + } + +} \ No newline at end of file diff --git a/OCH/shuttle/passenger_weaknet/src/main/java/b4/com/mogo/och/shuttle/weaknet/passenger/ui/map/autopilot/speed/B4SpeedView.kt b/OCH/shuttle/passenger_weaknet/src/main/java/b4/com/mogo/och/shuttle/weaknet/passenger/ui/map/autopilot/speed/B4SpeedView.kt new file mode 100644 index 0000000000..c2f53acf27 --- /dev/null +++ b/OCH/shuttle/passenger_weaknet/src/main/java/b4/com/mogo/och/shuttle/weaknet/passenger/ui/map/autopilot/speed/B4SpeedView.kt @@ -0,0 +1,64 @@ +package com.mogo.och.shuttle.weaknet.passenger.ui.map.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.b4_speed.view.b4_tv_speed +import kotlin.math.abs + +class B4SpeedView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener { + + private val TAG = "B4SpeedView" + + 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.b4_speed, this, true) + + b4_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() + b4_tv_speed.text = speedKM.toString() + } + } + } + + +} \ No newline at end of file diff --git a/OCH/shuttle/passenger_weaknet/src/main/java/b4/com/mogo/och/shuttle/weaknet/passenger/ui/map/autopilot/status/B4StatusView.kt b/OCH/shuttle/passenger_weaknet/src/main/java/b4/com/mogo/och/shuttle/weaknet/passenger/ui/map/autopilot/status/B4StatusView.kt new file mode 100644 index 0000000000..76d8d74377 --- /dev/null +++ b/OCH/shuttle/passenger_weaknet/src/main/java/b4/com/mogo/och/shuttle/weaknet/passenger/ui/map/autopilot/status/B4StatusView.kt @@ -0,0 +1,127 @@ +package com.mogo.och.shuttle.weaknet.passenger.ui.map.autopilot.status + +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 B4StatusView : AppCompatTextView, ICommonCallback, IReceivedMsgListener { + + private val TAG = "B4StatusView" + + constructor(context: Context) : super(context) + + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) + + 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 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.b4_status_parallel + } + + // 处理非平行驾驶状态的情况 + return when { + // 无订单的情况 + !CommonModel.inOrder -> { + R.drawable.b4_status_basic + } + // 有订单,且美化状态和b2美化状态任意开着 + CommonModel.inOrder && (FunctionBuildConfig.isDemoMode || FunctionBuildConfig.isB2DemoMode) -> { + R.drawable.b4_status_order_auto + } + // 有订单,且美化状态和b2美化状态都关着 + CommonModel.inOrder && !FunctionBuildConfig.isDemoMode && !FunctionBuildConfig.isB2DemoMode -> { + if (autopilotState == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) R.drawable.b4_status_order_auto else R.drawable.b4_status_basic + } + // 覆盖所有可能的情况 + else -> R.drawable.b4_status_basic + } + } + + private fun updateAutoIconState(source: Int) { + BizLoopManager.runInMainThread { + context?.let { + setTextColor(ContextCompat.getColor(it, R.color.common_FFFFFF)) + background = ContextCompat.getDrawable(it, getStateIcon(source)) + } + } + } + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + + +} \ No newline at end of file diff --git a/OCH/shuttle/passenger_weaknet/src/main/res/b4/drawable-nodpi/shuttle_p_b4_youzhuan_open.png b/OCH/shuttle/passenger_weaknet/src/main/res/b4/drawable-nodpi/shuttle_p_b4_youzhuan_open.png index 2ac9526450ab8c7b57d96ed6be9a670356e12d2a..44a541d9aaabbbab0961172b68434aa8b91fdf1a 100644 GIT binary patch delta 620 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 Bn;rlF diff --git a/OCH/shuttle/passenger_weaknet/src/main/res/b4/drawable-nodpi/shuttle_p_b4_youzhuan_un_open.png b/OCH/shuttle/passenger_weaknet/src/main/res/b4/drawable-nodpi/shuttle_p_b4_youzhuan_un_open.png index 7f585ef4b6f90dae1237d1c4e68c87d6f3b048e9..36b7e683f93ec648adc2eed975beaa2afdadebb4 100644 GIT binary patch delta 679 zcmV;Y0$BZl2;v1HiBL{Q4GJ0x0000DNk~Le0000Y0000b2nGNE04G8_dXXVWezafKIf4`F$U z=1tV=^$ScYmJS_^o`V>9rsDCqE&?M9B!CjlpkGcq2=L7;4aCSa2W5`Fe`U2W$Oa*0 z7NN|ZMeZ*qB^HZ~puvW}SRLG8O&^kE9k{k#;9o44%j=!|70^CovbU3i$Myn_f{ay6 zD$QR(Q2sP3V5y??9x*>XN|ZwbZK!~iIwOiK*LPmlo0bO2=* z2!?h|i&6PBQvO+A6)_&1e-6j|e*hsxGXDW2g)ceX^{bsB>#qiEo!Y@U#IEA-)2nO1UPJk2O1ULbI2|$0tRgM-& z5^baE3DGk9BuExMzIpMZa%%pJB7ef{jS?qjBP2kyh|t@9<8jO0yZ-h90Z@`i2!;X@ z&UcKcr%GdfUjqd|#Zm|e6fblQK5F(`JdGDP0Gb3L2!a^s>%KmAlJ@;;AH3M z_|aO5r*nrA08I=7EMOB}?jBT+(0;9&r=8%LyQ*Sl*O}+2%PXx22ni>m>}oJ&%bfc# z{c_cbJ*y3K@}&TsH=p(Ze@t3S{aRir1S8g@{$LIj~m%J>BW`D=X{l*GfTn$AH02L`C zp!9d&RvTO?E^~?^0QvzH!-e8N@3niL-$RiEKo`;ec8D30GH`KNf2}K9RHklZ0qj7q zpM@;2l1z%rj3W(TM+*j9Wty0}kp_Se{I!@A-Z3dIGZxGG(diQS`;)x*7N{Ebl5{jH z0FysG@t%30X_go9)HiY!KprBst9UyT--3P2dH z*Z*9ZOJ!bHO*{qYe;$BDzJsEDnrk0xv#x}F{;AkbjyEt6l8t!F>2zlLnZX+CAbaNI z51P=){d2dTw3!y@a$*Yr+!Pc+U(nQ|GkZ2G_Z7ev$DK6+Tc)*^UeqRQBAzA{S^xy% ztYvQMOEZ%Ncl4Zjg%SV(AXnIs^>3-#il>M|2Y`ytDp`Gbe`+G{Yz@6xg=!yw2-1UA5MT1-~>1UUkLmK%u(g6fD@xp00000NkvXXu0mjft@y1h diff --git a/OCH/shuttle/passenger_weaknet/src/main/res/b4/drawable-nodpi/shuttle_p_b4_zuozhuan_open.png b/OCH/shuttle/passenger_weaknet/src/main/res/b4/drawable-nodpi/shuttle_p_b4_zuozhuan_open.png index 2c1f8c62f4d9192186db2e6c2b690cdbf1d73cdf..ea66e1c43feeeab0f729660d45c2f28616660701 100644 GIT binary patch delta 739 zcmV<90v!F(7@YSnJfSR0*6UNK~z`?&6wXy6j2n%zguQSg=kp$BWV>SDnmgC z1Rpe^uqdJjAN*f@(SJk`f}yuCwdR-n(LI+3o5Ho3U$lMfgC)d@t4eJbRmNCD|<2z59yg1Dyj`CGf|K4p$vuz zGfU%VO#l?@hzFF#Aa~MhDmhoI$W%Kzkc$EAV~&Q;n=&4zCmN80eomfef4&f=#AM&e zi`v6Iu9-J9dNHEmG$gcPDNjwMlZ<^zl^*Aai$4CoXRa$NXKFBy>Cz!{&`UdS6N8b5 zO5sX)$UNMobKg;tj999ukO9s3$>Y{zax7V5DVRM3lIAt+@^CT27vr)msG~qa(TE@T%_Azmyf&bY z0|`YZFMK&XU~MI7sPe}T4-I@_E^r6-!~pw6*}WL@N>t86ljVU#e>BUF>^?rQ)-BBl zX&h~sh#(g#5+1UkXe++)=5?Q4pM%}is-FxbmYcAHKNw=@zE%rF>5T>?((TyhLLXvn zRZXr&868Nh-@q3C0TQV7YQTujctA3vmCL-QaI0{nX*$IR5`t#lM{)%y_x}JAiZmSl zO87RJjit&wq|CQrIgLASkj*XCrCaI&iS_H;b^h+#)`c-UKZ9FbS+5vKxnNeD{sMpD VZPtb<>Wu&Z002ovPDHLkV1kh+MZo|7 delta 3113 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 DcnZ=X diff --git a/OCH/shuttle/passenger_weaknet/src/main/res/b4/drawable-nodpi/shuttle_p_b4_zuozhuan_un_open.png b/OCH/shuttle/passenger_weaknet/src/main/res/b4/drawable-nodpi/shuttle_p_b4_zuozhuan_un_open.png index 71643afccec459c57f8beba4adba42d0128f05b8..f974d632120891ef08c5f8797c97b4df67543e8b 100644 GIT binary patch delta 784 zcmV+r1MmFK2g(K^iBL{Q4GJ0x0000DNk~Le0000a0000d2nGNE0B4lyHjyDneSnJfSR0<=j)K~z`?&6wM36G0S*b2CPQiWU{|Q4k?23W6Z` z&?+b@O33Y@|BD3l|1gq<+(-h6_~8AaAQXI!g`$+AloEVVl!lPR?}Thg)6HggXR~o& znAx-E{LZ&$W|v_-9tT@Go%X59fB97fwD@>DzT9fHRwI$fdb8PF*X&kD%p!ZHj!;NX%n6%mAU5zVe_$FUJ>o>- zNgAerfVs){mL9DCNf;6g>h#$ zuJ-`}a}k(#BtGRva=jdTe?X~J>H;wDaXO>t=$35&1k8C}Nr5@*R^mx{20*~b7x>&H zCpYcdl6`SAsZp*0P&gc3#z{8w+}i*slgaGT9zpYQ-bC7xc^Zwz-%u#@5TMn0LhS(w zL^hlK({8u#GyOC#sC_^JQLop32ZKR5qOQ#Y>Hv^HC!uUrNCPMq zi(fh1Nu{^5uoJzBv5tU!k1#R+x`LJajW#JY5_^Dj46+IO{L$D01NbnX=RFtbaN>)n-&E)Hz(p;N52Kr>2s%=Zbyf zYYM*J#fUJ4?_^@MpCGo%%~hbMD^O75&6#92OOvJEv);ZtXEJkM*?qtJ z)%)+iJ9kd6;iqIh^RWiQ1Re<_YQZsvz~FE7p-Ye6u9}l({jO}Mp3YwB$|=E$O3N0l zSX24!*L z-0J%x=5en;>iSOY2aenonzoy?7nl}rPh_r?I=Xdz{i~emtED>`IOpH+Sz`H+_vx$v zN$$U57I)uXxh`7K#gHGu`6|>pgfZ8){FP3%w(kVBJyHR({Jsq>{gJwv4j07YPVuLz zYRvmwxGmCyIl@~;7 zI~>wCH)izb%l3_4wsRG0ijn`?sYlAh9c_Zt_J3RWiY3M9+L>cM;sHe=)j|Dif4K`} zZtW|5*EOTHuky*d&JFK9H`I2`eco_9yXjMdT5UYzi66HZE3==~PsnH7dGYxC#*H;+ zCsdidif%Y#Zf-T<`GI@YKy3w~Oe%?W6$yQXKLUieq|RCs)o@1BKC|2P!f~UYTlra) z9D>r?f2VOipT9+2FVnz)(I`J}$^W$#*3lX(7k*v$zO+GnYK3WS@v~pdPMq^TNp03Y z_tK2v_ip_-$A;j2Q3nmq*DE&G^WRwQVwGnpE?FFHt1T|OU`ow-yZ6%iT&~+BU+4y0 zF+FEj92e{~tt%-iuT9nAP*T~7_o4-x)~NoB3r^&^G1b8QQ-Kucx))lCIgCxSAN)zJ zp2hrg+2R%s7LJ^cSIy>cS@tAl`RtYq7LP1N#p;u@R2u9{CJD@Ku;twO>rb|d!q1i6 zEg7sHuMRq1yLrKqQDk-00Txw*D#qP>d7FjzzvWbU5+0yX_gOG;9n1AHQv?zk(lO3Vi3C{I^Emvv4FO#t#jj3WR5 diff --git a/OCH/shuttle/passenger_weaknet/src/main/res/b4/drawable/b4_turen_light_bg.xml b/OCH/shuttle/passenger_weaknet/src/main/res/b4/drawable/b4_turen_light_bg.xml new file mode 100644 index 0000000000..b154902c07 --- /dev/null +++ b/OCH/shuttle/passenger_weaknet/src/main/res/b4/drawable/b4_turen_light_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OCH/shuttle/passenger_weaknet/src/main/res/b4/layout/b4_autopilot.xml b/OCH/shuttle/passenger_weaknet/src/main/res/b4/layout/b4_autopilot.xml index 65f60d374c..8b5b69c2b3 100644 --- a/OCH/shuttle/passenger_weaknet/src/main/res/b4/layout/b4_autopilot.xml +++ b/OCH/shuttle/passenger_weaknet/src/main/res/b4/layout/b4_autopilot.xml @@ -8,9 +8,11 @@ @@ -24,10 +26,10 @@ + android:layout_width="@dimen/dp_119" + android:layout_height="@dimen/dp_65" + android:visibility="visible"> diff --git a/OCH/shuttle/passenger_weaknet/src/main/res/b4/values/colors.xml b/OCH/shuttle/passenger_weaknet/src/main/res/b4/values/colors.xml index d37a4ce24b..8399a9297a 100644 --- a/OCH/shuttle/passenger_weaknet/src/main/res/b4/values/colors.xml +++ b/OCH/shuttle/passenger_weaknet/src/main/res/b4/values/colors.xml @@ -16,4 +16,6 @@ #555555 #333333 #7C7C7C + #2EACFF + #9A2EFF \ No newline at end of file