From e4f0492a2acac27cb7344dd0fd70e0f83eae7fd4 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Sat, 4 Feb 2023 16:57:12 +0800 Subject: [PATCH] =?UTF-8?q?[1.0.0]=20[m1]=20[=E5=9B=9E=E5=86=99=E6=8F=90?= =?UTF-8?q?=E7=A4=BA]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...BusBasePassengerFunctionDevicePresenter.kt | 8 + .../BusPassengerFunctionDevicePresenter.kt | 53 +++- .../BusPassengerFunctionPresenter.kt | 47 ++- .../BusPassengerFunctionSoftPresenter.kt | 84 ++++- .../BusPassengerFunctionVideoPresenter.kt | 2 +- .../presenter/BusPassengerPresenter.kt | 2 +- .../ui/BusPassengerFunctionDeviceFragment.kt | 23 ++ .../ui/BusPassengerFunctionSoftFragment.kt | 286 +++++++++++++++--- .../passenger/view/PickerLayoutManager.java | 108 +++++++ .../view/drawable/MineGradientDrawable.kt | 4 +- ...us_p_function_setting_devices_fragment.xml | 24 +- .../bus_p_function_setting_soft_fragment.xml | 270 +++++++++-------- .../src/m1/res/values/color.xml | 3 + .../src/m1/res/values/strings.xml | 11 + .../src/main/res/raw/bus_di.mp3 | Bin 0 -> 15150 bytes ...OCHM1LightAirconditionDoorStatusManager.kt | 133 ++++++++ .../OCHPlanningStopSideStatusManager.kt | 134 ++++++++ 17 files changed, 1008 insertions(+), 184 deletions(-) create mode 100644 OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusBasePassengerFunctionDevicePresenter.kt create mode 100644 OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/view/PickerLayoutManager.java create mode 100644 OCH/mogo-och-bus-passenger/src/main/res/raw/bus_di.mp3 create mode 100644 OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/OCHM1LightAirconditionDoorStatusManager.kt create mode 100644 OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/OCHPlanningStopSideStatusManager.kt diff --git a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusBasePassengerFunctionDevicePresenter.kt b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusBasePassengerFunctionDevicePresenter.kt new file mode 100644 index 0000000000..949bde9277 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusBasePassengerFunctionDevicePresenter.kt @@ -0,0 +1,8 @@ +package com.mogo.och.bus.passenger.presenter + +import com.mogo.commons.mvp.IView +import com.mogo.commons.mvp.Presenter +import com.mogo.och.bus.passenger.ui.BusPassengerFunctionDeviceFragment + +abstract class BusBasePassengerFunctionDevicePresenter(view: V) : + Presenter(view) \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionDevicePresenter.kt b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionDevicePresenter.kt index 49bb875204..47ce998aa4 100644 --- a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionDevicePresenter.kt +++ b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionDevicePresenter.kt @@ -1,7 +1,56 @@ package com.mogo.och.bus.passenger.presenter -import com.mogo.commons.mvp.Presenter +import androidx.lifecycle.LifecycleOwner +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager +import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.och.bus.passenger.ui.BusPassengerFunctionDeviceFragment +import com.mogo.och.common.module.manager.OCHM1LightAirconditionDoorStatusManager +import com.zhidao.support.adas.high.AdasManager class BusPassengerFunctionDevicePresenter(view: BusPassengerFunctionDeviceFragment?) : - Presenter(view) \ No newline at end of file + BusBasePassengerFunctionDevicePresenter(view), + OCHM1LightAirconditionDoorStatusManager.OCHM1LightAirconditionDoorCallback { + + companion object{ + private const val TAG = "BusPassengerFunctionDevicePresenter" + } + override fun onCreate(owner: LifecycleOwner) { + super.onCreate(owner) + OCHM1LightAirconditionDoorStatusManager.addListener(TAG,this) + } + + override fun onDestroy(owner: LifecycleOwner) { + super.onDestroy(owner) + OCHM1LightAirconditionDoorStatusManager.removeListener(TAG) + } + + override fun onDoorStatusCallback(isOpen: Boolean) { + if(isOpen){ + ToastUtils.showShort("开门状态") + }else{ + ToastUtils.showShort("关门状态") + } + } + + fun startStopSide() { + when (CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().state) { + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE -> {// 不可自动驾驶 + ToastUtils.showShort("设备未就绪请稍等") + } + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE -> {// + ToastUtils.showShort("启动自动驾驶中") + // TODO: 查找线路和订单来确定 CallerAutoPilotControlManager.startAutoPilot(parameters); + } + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING -> { + AdasManager.getInstance().sendPlanningCmd(2) + } + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING -> { + ToastUtils.showShort("平行驾驶中请稍后") + } + else -> {} + } + } + +} \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionPresenter.kt b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionPresenter.kt index 359a5fa247..48a912a4ff 100644 --- a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionPresenter.kt +++ b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionPresenter.kt @@ -1,7 +1,52 @@ package com.mogo.och.bus.passenger.presenter +import androidx.lifecycle.LifecycleOwner import com.mogo.commons.mvp.Presenter +import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.och.bus.passenger.ui.BusPassengerFunctionFragment +import com.mogo.och.common.module.manager.OCHPlanningStopSideStatusManager class BusPassengerFunctionPresenter(view: BusPassengerFunctionFragment?) : - Presenter(view) \ No newline at end of file + BusBasePassengerFunctionDevicePresenter(view), + OCHPlanningStopSideStatusManager.OCHPlanningActionsCallback { + companion object{ + private const val TAG = "BusPassengerFunctionPresenter" + } + override fun onCreate(owner: LifecycleOwner) { + super.onCreate(owner) + OCHPlanningStopSideStatusManager.addListener(TAG,this) + } + + override fun onDestroy(owner: LifecycleOwner) { + super.onDestroy(owner) + OCHPlanningStopSideStatusManager.removeListener(TAG) + } + + override fun onStartAutopilotFailure( + actionStatus: OCHPlanningStopSideStatusManager.Status, + stopSideStatus: Boolean?, + errorInfo: String? + ) { + when (actionStatus) { + OCHPlanningStopSideStatusManager.Status.NOSTART -> { + ToastUtils.showShort(errorInfo) + } + OCHPlanningStopSideStatusManager.Status.START -> { + ToastUtils.showShort("开始靠边停车") + } + OCHPlanningStopSideStatusManager.Status.DOING -> { + + } + OCHPlanningStopSideStatusManager.Status.Ending -> { + stopSideStatus?.let { + if(it){ + ToastUtils.showShort("靠边停车成功") + }else{ + ToastUtils.showShort("靠边停车失败") + } + } + + } + } + } +} \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionSoftPresenter.kt b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionSoftPresenter.kt index 14e8be097e..28ed65446a 100644 --- a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionSoftPresenter.kt +++ b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionSoftPresenter.kt @@ -1,7 +1,89 @@ package com.mogo.och.bus.passenger.presenter +import androidx.lifecycle.LifecycleOwner import com.mogo.commons.mvp.Presenter import com.mogo.och.bus.passenger.ui.BusPassengerFunctionSoftFragment +import com.mogo.och.common.module.manager.OCHM1LightAirconditionDoorStatusManager +import com.zhidao.support.adas.high.AdasManager class BusPassengerFunctionSoftPresenter(view: BusPassengerFunctionSoftFragment?) : - Presenter(view) \ No newline at end of file + BusBasePassengerFunctionDevicePresenter(view), + OCHM1LightAirconditionDoorStatusManager.OCHM1LightAirconditionDoorCallback { + companion object { + private const val TAG = "BusPassengerFunctionSoftPresenter" + } + + override fun onCreate(owner: LifecycleOwner) { + super.onCreate(owner) + OCHM1LightAirconditionDoorStatusManager.addListener(TAG, this) + } + + override fun onDestroy(owner: LifecycleOwner) { + super.onDestroy(owner) + + } + + /** + * 空调状态变化 + */ + override fun onAirconditionStatusCallback(heaterIsOpen: Boolean,airconditionStatus: OCHM1LightAirconditionDoorStatusManager.AirconditionStatus) { + mView?.setAirconditionHeaterView( + airconditionStatus.isOpen, + heaterIsOpen, + airconditionStatus.temperature, + airconditionStatus.pattert, + airconditionStatus.windSpeed + ) + } + /** + * 暖风机状态变化 + */ + override fun onHeaterStatusCallback(airconditionIsOpen:Boolean,heaterStatue: OCHM1LightAirconditionDoorStatusManager.HeaterStatue) { + mView?.setAirconditionHeaterView( + heaterStatue.isOpen, + airconditionIsOpen, + 0, + 0, + heaterStatue.windSpeed + ) + } + /** + * 灯状态变化 + */ + override fun onLightCallback(lightStatus: OCHM1LightAirconditionDoorStatusManager.LightStatus) { + mView?.setLightView(lightStatus.isOpenLight1,lightStatus.isOpenLight2,lightStatus.isOpenatmosphere) + } + + /** + * 设置空调 + */ + fun sendRoboBusJinlvM1AirConditionerCmd(switchCmd: Int, modeCmd: Int, windSpeedCmd: Int, temperatureCmd: Int) { + AdasManager.getInstance().sendRoboBusJinlvM1AirConditionerCmd(switchCmd,modeCmd,windSpeedCmd,temperatureCmd) + } + /** + * 设置暖风 + */ + fun sendRoboBusJinlvM1HeaderCmd(switchCmd: Int, windSpeedCmd: Int) { + AdasManager.getInstance().sendRoboBusJinlvM1HeaderCmd(switchCmd,windSpeedCmd) + } + + fun setLightData(leftLight: Boolean, rightLight: Boolean, atmosphereLight: Boolean) { + if (leftLight && rightLight) { + AdasManager.getInstance().sendRoboBusJinlvM1MainLampCmd(1,1) + } else if (!leftLight && !rightLight) { + AdasManager.getInstance().sendRoboBusJinlvM1MainLampCmd(2,2) + } else { + if (leftLight) { + AdasManager.getInstance().sendRoboBusJinlvM1MainLampCmd(1,2) + } + if (rightLight) { + AdasManager.getInstance().sendRoboBusJinlvM1MainLampCmd(2,1) + } + } + if (atmosphereLight) { + AdasManager.getInstance().sendRoboBusJinlvM1SmallLampCmd(1) + } else { + AdasManager.getInstance().sendRoboBusJinlvM1SmallLampCmd(2) + } + } +} \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionVideoPresenter.kt b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionVideoPresenter.kt index 9b51284e02..d9bd255b92 100644 --- a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionVideoPresenter.kt +++ b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionVideoPresenter.kt @@ -4,4 +4,4 @@ import com.mogo.commons.mvp.Presenter import com.mogo.och.bus.passenger.ui.BusPassengerFunctionVideoFragment class BusPassengerFunctionVideoPresenter(view: BusPassengerFunctionVideoFragment?) : - Presenter(view) \ No newline at end of file + BusBasePassengerFunctionDevicePresenter(view) \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerPresenter.kt b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerPresenter.kt index 6df3e4a056..f7164f6adc 100644 --- a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerPresenter.kt +++ b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/presenter/BusPassengerPresenter.kt @@ -4,4 +4,4 @@ import com.mogo.commons.mvp.Presenter import com.mogo.och.bus.passenger.ui.BusPassengerRouteFragment class BusPassengerPresenter(view: BusPassengerRouteFragment?) : - Presenter(view) \ No newline at end of file + BusBasePassengerFunctionDevicePresenter(view) \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/BusPassengerFunctionDeviceFragment.kt b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/BusPassengerFunctionDeviceFragment.kt index 26193286c2..17ec57fd98 100644 --- a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/BusPassengerFunctionDeviceFragment.kt +++ b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/BusPassengerFunctionDeviceFragment.kt @@ -2,8 +2,11 @@ package com.mogo.och.bus.passenger.ui import android.os.Bundle import com.mogo.commons.mvp.MvpFragment +import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.och.bus.passenger.R import com.mogo.och.bus.passenger.presenter.BusPassengerFunctionDevicePresenter +import com.zhidao.support.adas.high.AdasManager +import kotlinx.android.synthetic.m1.bus_p_function_setting_devices_fragment.* /** * @author: yangyakun @@ -16,7 +19,27 @@ class BusPassengerFunctionDeviceFragment : override fun getTagName(): String = TAG override fun initViews() { + initListener() + } + private fun initListener() { + tv_car_setting_go.setOnClickListener { + //判断自动驾驶状态 + // 自动驾驶状态中: AdasManager.getInstance().sendPlanningCmd(2); + // 没有在自动驾驶中:启动自动驾驶 CallerAutoPilotControlManager.INSTANCE.startAutoPilot(parameters); + mPresenter?.startStopSide() + } + tv_car_setting_stopside.setOnClickListener { + // 执行靠边停车 AdasManager.getInstance().sendPlanningCmd(1); + AdasManager.getInstance().sendPlanningCmd(1); + } + tv_car_setting_opendoor.onClick { + // 开门 AdasManager.getInstance().sendRoboBusJinlvM1FrontDoorCmd(2); + AdasManager.getInstance().sendRoboBusJinlvM1FrontDoorCmd(1); + } + tv_car_setting_closedoor.onClick { + AdasManager.getInstance().sendRoboBusJinlvM1FrontDoorCmd(2); + } } override fun createPresenter(): BusPassengerFunctionDevicePresenter = diff --git a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/BusPassengerFunctionSoftFragment.kt b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/BusPassengerFunctionSoftFragment.kt index 96c7cdec05..6ab87e17b3 100644 --- a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/BusPassengerFunctionSoftFragment.kt +++ b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/ui/BusPassengerFunctionSoftFragment.kt @@ -1,7 +1,6 @@ package com.mogo.och.bus.passenger.ui import android.content.Context -import android.graphics.Color import android.graphics.drawable.LayerDrawable import android.graphics.drawable.ScaleDrawable import android.media.AudioManager @@ -10,10 +9,15 @@ import android.view.Gravity import android.view.View import android.widget.SeekBar import android.widget.SeekBar.OnSeekBarChangeListener +import androidx.core.content.ContextCompat import com.mogo.commons.mvp.MvpFragment +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.och.bus.passenger.R import com.mogo.och.bus.passenger.presenter.BusPassengerFunctionSoftPresenter +import com.mogo.och.common.module.utils.SoundPoolHelper import com.yangyakun.main.ui.loading.drawable.MineGradientDrawable +import com.zhidao.support.adas.high.AdasManager import kotlinx.android.synthetic.m1.bus_p_function_setting_soft_fragment.* import me.jessyan.autosize.utils.AutoSizeUtils @@ -50,35 +54,266 @@ class BusPassengerFunctionSoftFragment : } } rg_select_function.check(R.id.tv_setting_aircondition) - tv_light_top_01.setOnCheckedChangeListener { buttonView, isChecked -> - setLightImage(isChecked, tv_light_top_02.isChecked, tv_light_atmosphere.isChecked) - } - tv_light_top_02.setOnCheckedChangeListener { buttonView, isChecked -> - setLightImage(tv_light_top_01.isChecked, isChecked, tv_light_atmosphere.isChecked) - } - tv_light_atmosphere.setOnCheckedChangeListener { buttonView, isChecked -> - setLightImage(tv_light_top_01.isChecked, tv_light_top_02.isChecked, isChecked) - } + setAirconditionListener() + setLightListener() setVoiceInfo() } + private fun setAirconditionListener() { + // 开关空调或暖风机 + tv_aircondition_switch.setOnCheckedChangeListener { buttonView, isChecked -> + if (tv_aircondition_switch.tag == touchTag) { + tv_aircondition_switch.tag = null + }else{ + SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(context, R.raw.bus_di) + } + if (rg_setting_pattern.checkedRadioButtonId==R.id.rb_pattern_heating) { + if(isChecked){// 打开暖风机 + openHeater() + }else{// 关闭暖风机 + closeHeater() + } + }else{ + if(isChecked){// 打开空调 + openAircondition() + }else{//关闭空调 + closeAircondition() + } + } + } + // 模式调节 + rg_setting_pattern.setOnCheckedChangeListener { group, checkedId -> + if (rg_setting_pattern.tag == touchTag) { + rg_setting_pattern.tag = null + }else{ + SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(context, R.raw.bus_di) + } + CallerLogger.d(SceneConstant.M_BUS_P+ TAG,"调节模式") + when (checkedId) { + R.id.rb_pattern_heating -> { + openHeater() + } + else -> { + openAircondition() + } + } + } + // 风速调节 + rg_setting_windspeed.setOnCheckedChangeListener { group, checkedId -> + if (rg_setting_windspeed.tag == touchTag) { + rg_setting_windspeed.tag = null + }else{ + SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(context, R.raw.bus_di) + } + CallerLogger.d(SceneConstant.M_BUS_P+ TAG,"调节风速") + if (rg_setting_pattern.checkedRadioButtonId==R.id.rb_pattern_heating) {//暖风机 + openHeater() + }else{ + openAircondition() + } + } + } + + /** + * 关闭空调 + */ + private fun closeAircondition() { + CallerLogger.d(SceneConstant.M_BUS_P+ TAG,"关闭空调") + mPresenter?.sendRoboBusJinlvM1AirConditionerCmd(2,0,0,0) + } + + /** + * 开启空调 + */ + private fun openAircondition() { + CallerLogger.d(SceneConstant.M_BUS_P+ TAG,"打开空调") + var modeCmd = 0 + var windSpeedCmd = 0 + var temperatureCmd = 0 + closeHeater()//关闭暖风 + when (rg_setting_pattern.checkedRadioButtonId) { + R.id.rb_pattern_automatic -> modeCmd = 1 // 自动 + R.id.rb_pattern_refrigeration -> modeCmd = 2 // 制冷 + R.id.rb_pattern_ventilate -> modeCmd = 3 // 通风 + else -> {} + } + when (rg_setting_windspeed.checkedRadioButtonId) { + R.id.rb_wind_speed_low -> windSpeedCmd = 1 // 1档 + R.id.rb_wind_speed_middle -> windSpeedCmd = 2 // 2档 + R.id.rb_wind_speed_high -> windSpeedCmd = 3 // 3档 + else -> {} + } + mPresenter?.sendRoboBusJinlvM1AirConditionerCmd(1,modeCmd,windSpeedCmd,18) + } + + /** + * 根据车的状态会写页面状态 + */ + fun setAirconditionHeaterView(airIsOpen:Boolean,heaterIsOpen:Boolean,temperatureCmd:Int,pattern:Int,windSpeed:Int){ + if(!airIsOpen&&!heaterIsOpen){ + tv_aircondition_switch.tag = touchTag + tv_aircondition_switch.isChecked = false + }else{ + tv_aircondition_switch.tag = touchTag + tv_aircondition_switch.isChecked = true + } + if(airIsOpen){ + // TODO: 差一个温度 + rg_setting_pattern.tag = touchTag + when (pattern) {//1: 自动模式, 2: 制冷模式, 3: 通风模式(仅送风,无温度) + 1 -> {rb_pattern_automatic.isChecked = true} + 2 -> {rb_pattern_refrigeration.isChecked = true} + 3 -> {rb_pattern_ventilate.isChecked = true} + else -> {} + } + heaterAirEnable(true) + rg_setting_windspeed.tag = touchTag + when (windSpeed) {//1: 1档,2: 2档,3:3档 + 1 -> {rb_wind_speed_low.isChecked = true} + 2 -> {rb_wind_speed_middle.isChecked = true} + 3 -> {rb_wind_speed_high.isChecked = true} + else -> {} + } + } + if(heaterIsOpen){ + rg_setting_pattern.tag = touchTag + rb_pattern_heating.isChecked = true + heaterAirEnable(false) + rg_setting_windspeed.tag = touchTag + when (windSpeed) {//1: 1档,2: 2档 + 1 -> {rb_wind_speed_middle.isChecked = true} + 2 -> {rb_wind_speed_high.isChecked = true} + else -> {} + } + } + } + + /** + * 关闭暖风机 + */ + private fun closeHeater() { + CallerLogger.d(SceneConstant.M_BUS_P+ TAG,"关闭暖风") + heaterAirEnable(true) + when (rg_setting_windspeed.checkedRadioButtonId) { + R.id.rb_wind_speed_low -> {} + R.id.rb_wind_speed_middle -> { + mPresenter?.sendRoboBusJinlvM1HeaderCmd(2,1) + } + R.id.rb_wind_speed_high -> { + mPresenter?.sendRoboBusJinlvM1HeaderCmd(2,2) + AdasManager.getInstance().sendRoboBusJinlvM1HeaderCmd(2,2) + } + else -> {} + } + } + + private fun heaterAirEnable(enable:Boolean){ + tv_temperature_title.isEnabled = enable + v_temp.isEnabled = enable + rb_wind_speed_low.isEnabled = enable + } + + /** + * 开启暖风机 + */ + private fun openHeater() { + CallerLogger.d(SceneConstant.M_BUS_P+ TAG,"打开暖风") + heaterAirEnable(false) + closeAircondition()//关闭空调 + when (rg_setting_windspeed.checkedRadioButtonId) { + R.id.rb_wind_speed_low -> { + rb_wind_speed_middle.tag = touchTag + rb_wind_speed_middle.toggle() + } + R.id.rb_wind_speed_middle -> { + AdasManager.getInstance().sendRoboBusJinlvM1HeaderCmd(1,1) + } + R.id.rb_wind_speed_high -> { + AdasManager.getInstance().sendRoboBusJinlvM1HeaderCmd(1,2) + } + else -> { + rb_wind_speed_middle.tag = touchTag + rb_wind_speed_middle.toggle() + } + } + } + + + + // region 灯 + private fun setLightListener() { + tv_light_top_01.setOnCheckedChangeListener { buttonView, isChecked -> + mPresenter?.setLightData(isChecked, tv_light_top_02.isChecked, tv_light_atmosphere.isChecked) + setLightView(isChecked, tv_light_top_02.isChecked, tv_light_atmosphere.isChecked) + } + tv_light_top_02.setOnCheckedChangeListener { buttonView, isChecked -> + mPresenter?.setLightData(isChecked, tv_light_top_02.isChecked, tv_light_atmosphere.isChecked) + setLightView(tv_light_top_01.isChecked, isChecked, tv_light_atmosphere.isChecked) + + } + tv_light_atmosphere.setOnCheckedChangeListener { buttonView, isChecked -> + mPresenter?.setLightData(isChecked, tv_light_top_02.isChecked, tv_light_atmosphere.isChecked) + setLightView(tv_light_top_01.isChecked, tv_light_top_02.isChecked, isChecked) + } + } + + /** + * 灯的UI发生变化 + */ + fun setLightView(leftLight: Boolean, rightLight: Boolean, atmosphereLight: Boolean) { + if(leftLight){ + tv_light_top_01.text = requireContext().getString(R.string.bus_p_m1_close_light1) + }else{ + tv_light_top_01.text = requireContext().getString(R.string.bus_p_m1_open_light1) + } + if(rightLight){ + tv_light_top_02.text = requireContext().getString(R.string.bus_p_m1_close_light2) + }else{ + tv_light_top_02.text = requireContext().getString(R.string.bus_p_m1_open_light2) + } + if (leftLight && rightLight) { + iv_top_light_setting.setImageResource(R.drawable.bus_p_function_light_middle_selected)// 都打开 + } else if (!leftLight && !rightLight) { + iv_top_light_setting.setImageResource(R.drawable.bus_p_function_light_nor)// 都关闭 + } else { + if (leftLight) { + iv_top_light_setting.setImageResource(R.drawable.bus_p_function_light_select_left)// 左面开 + } + if (rightLight) { + iv_top_light_setting.setImageResource(R.drawable.bus_p_function_light_select_right)// 左面开 + } + } + if (atmosphereLight) { + tv_light_atmosphere.text = requireContext().getString(R.string.bus_p_m1_close_atmosphere) + iv_bottom_light_setting.setImageResource(R.drawable.bus_p_function_atmosphere_select) + } else { + tv_light_atmosphere.text = requireContext().getString(R.string.bus_p_m1_open_atmosphere) + iv_bottom_light_setting.setImageResource(R.drawable.bus_p_function_atmosphere_nor) + } + } + // endregion + + // region 声音 private var mAudioManager: AudioManager? = null private var mMaxVolume: Int? = 100; private fun setVoiceInfo() { val dp2px = AutoSizeUtils.dp2px(context, 26f)//进度条高度 - val temp03 = - MineGradientDrawable(Color.parseColor("#2CBFFC"), Color.parseColor("#1060FF"), dp2px) + R.color.bus_p_m1_47576E + val color2CBFFC = ContextCompat.getColor(requireContext(), R.color.bus_p_m1_2cbffc) + val color1060FF = ContextCompat.getColor(requireContext(), R.color.bus_p_m1_1060ff) + val color96A5C2 = ContextCompat.getColor(requireContext(), R.color.bus_p_m1_96a5c2) + val temp03 = MineGradientDrawable(color2CBFFC, color1060FF, dp2px) val scaleDrawable3 = ScaleDrawable(temp03, Gravity.START, 1f, 0f) - val temp01 = - MineGradientDrawable(Color.parseColor("#96A5C2"), Color.parseColor("#96A5C2"), dp2px) + val temp01 = MineGradientDrawable(color96A5C2, color96A5C2, dp2px) val arr = arrayOf(temp01, scaleDrawable3) val ld = LayerDrawable(arr) ld.setDrawableByLayerId(android.R.id.background, temp01) ld.setDrawableByLayerId(android.R.id.progress, scaleDrawable3) sb_voice_bar.setProgressDrawableTiled(ld) sb_voice_bar.max = 100 + sb_voice_bar.min = 5 sb_voice_bar.setOnSeekBarChangeListener(object : OnSeekBarChangeListener { override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { tv_current_voice_value.text = "$progress%" @@ -118,32 +353,15 @@ class BusPassengerFunctionSoftFragment : } } - - private fun setLightImage(leftLight: Boolean, rightLight: Boolean, atmosphereLight: Boolean) { - if (leftLight && rightLight) { - iv_top_light_setting.setImageResource(R.drawable.bus_p_function_light_middle_selected)// 都打开 - } else if (!leftLight && !rightLight) { - iv_top_light_setting.setImageResource(R.drawable.bus_p_function_light_nor)// 都关闭 - } else { - if (leftLight) { - iv_top_light_setting.setImageResource(R.drawable.bus_p_function_light_select_left)// 左面开 - } - if (rightLight) { - iv_top_light_setting.setImageResource(R.drawable.bus_p_function_light_select_right)// 左面开 - } - } - if (atmosphereLight) { - iv_bottom_light_setting.setImageResource(R.drawable.bus_p_function_atmosphere_select) - } else { - iv_bottom_light_setting.setImageResource(R.drawable.bus_p_function_atmosphere_nor) - } - } + // endregion override fun createPresenter(): BusPassengerFunctionSoftPresenter = BusPassengerFunctionSoftPresenter(this) companion object { const val TAG = "BusPassengerFunctionSoftFragment" + const val touchTagKey = 2 + const val touchTag = 2 @JvmStatic fun newInstance(): BusPassengerFunctionSoftFragment { val args = Bundle() diff --git a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/view/PickerLayoutManager.java b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/view/PickerLayoutManager.java new file mode 100644 index 0000000000..7a4608ef2d --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/view/PickerLayoutManager.java @@ -0,0 +1,108 @@ +package com.mogo.och.bus.passenger.view; + +import android.content.Context; +import android.view.View; + +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +public class PickerLayoutManager extends LinearLayoutManager { + + private float scaleDownBy = 0.66f; + private float scaleDownDistance = 0.9f; + private boolean changeAlpha = true; + + private onScrollStopListener onScrollStopListener; + + public PickerLayoutManager(Context context, int orientation, boolean reverseLayout) { + super(context, orientation, reverseLayout); + } + + @Override + public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) { + super.onLayoutChildren(recycler, state); + scaleDownView(); + } + + @Override + public int scrollHorizontallyBy(int dx, RecyclerView.Recycler recycler, RecyclerView.State state) { + int orientation = getOrientation(); + if (orientation == HORIZONTAL) { + int scrolled = super.scrollHorizontallyBy(dx, recycler, state); + scaleDownView(); + return scrolled; + } else return 0; + } + + private void scaleDownView() { + float mid = getWidth() / 2.0f; + float unitScaleDownDist = scaleDownDistance * mid; + for (int i = 0; i < getChildCount(); i++) { + View child = getChildAt(i); + if (child == null) { + continue; + } + float childMid = (getDecoratedLeft(child) + getDecoratedRight(child)) / 2.0f; + float scale = 1.0f + (-1 * scaleDownBy) * (Math.min(unitScaleDownDist, Math.abs(mid - childMid))) / unitScaleDownDist; + child.setScaleX(scale); + child.setScaleY(scale); + if (changeAlpha) { + child.setAlpha(scale); + } + } + } + + @Override + public void onScrollStateChanged(int state) { + super.onScrollStateChanged(state); + if (state == 0) { + if (onScrollStopListener != null) { + int selected = 0; + float lastHeight = 0f; + for (int i = 0; i < getChildCount(); i++) { + View child = getChildAt(i); + if (child == null) { + continue; + } + if (lastHeight < child.getScaleY()) { + lastHeight = child.getScaleY(); + selected = i; + } + } + onScrollStopListener.selectedView(getChildAt(selected)); + } + } + } + + public float getScaleDownBy() { + return scaleDownBy; + } + + public void setScaleDownBy(float scaleDownBy) { + this.scaleDownBy = scaleDownBy; + } + + public float getScaleDownDistance() { + return scaleDownDistance; + } + + public void setScaleDownDistance(float scaleDownDistance) { + this.scaleDownDistance = scaleDownDistance; + } + + public boolean isChangeAlpha() { + return changeAlpha; + } + + public void setChangeAlpha(boolean changeAlpha) { + this.changeAlpha = changeAlpha; + } + + public void setOnScrollStopListener(onScrollStopListener onScrollStopListener) { + this.onScrollStopListener = onScrollStopListener; + } + + public interface onScrollStopListener { + void selectedView(View view); + } +} diff --git a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/view/drawable/MineGradientDrawable.kt b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/view/drawable/MineGradientDrawable.kt index 539da9fb7c..fce4124456 100644 --- a/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/view/drawable/MineGradientDrawable.kt +++ b/OCH/mogo-och-bus-passenger/src/m1/java/com/mogo/och/bus/passenger/view/drawable/MineGradientDrawable.kt @@ -5,6 +5,9 @@ import android.graphics.drawable.Drawable import android.util.Log import androidx.core.graphics.toRectF +/** + * 进度条drawable + */ class MineGradientDrawable(colorStart: Int = Color.BLUE,colorEnd:Int = Color.RED,height:Int) : Drawable() { private var mPaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG) @@ -74,7 +77,6 @@ class MineGradientDrawable(colorStart: Int = Color.BLUE,colorEnd:Int = Color.RED countstep++ canvas.drawRoundRect(rectF,48f,48f,mPaint) } - Log.d("MineGradientDrawable","$countstep-------------$size") } override fun setAlpha(alpha: Int) { diff --git a/OCH/mogo-och-bus-passenger/src/m1/res/layout/bus_p_function_setting_devices_fragment.xml b/OCH/mogo-och-bus-passenger/src/m1/res/layout/bus_p_function_setting_devices_fragment.xml index 1e8e6ee569..9820fe351d 100644 --- a/OCH/mogo-och-bus-passenger/src/m1/res/layout/bus_p_function_setting_devices_fragment.xml +++ b/OCH/mogo-och-bus-passenger/src/m1/res/layout/bus_p_function_setting_devices_fragment.xml @@ -16,13 +16,13 @@ app:layout_constraintWidth_percent="0.4589"> @@ -50,12 +50,12 @@ android:id="@+id/tv_car_setting_opendoor" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="开车门" - android:gravity="center" android:clickable="true" + android:drawableTop="@drawable/bus_p_function_device_opendoor_press_selecor" + android:gravity="center" + android:text="开车门" android:textColor="@color/bus_p_m1_203555" android:textSize="@dimen/dp_28" - android:drawableTop="@drawable/bus_p_function_device_opendoor_press_selecor" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/tv_car_setting_closedoor" app:layout_constraintStart_toEndOf="@+id/tv_car_setting_stopside" @@ -65,13 +65,13 @@ android:id="@+id/tv_car_setting_closedoor" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="关车门" - android:gravity="center" android:clickable="true" + android:drawableTop="@drawable/bus_p_function_device_closedoor_press_selecor" + android:gravity="center" + android:text="关车门" android:textColor="@color/bus_p_m1_203555" android:textSize="@dimen/dp_28" app:layout_constraintBottom_toBottomOf="parent" - android:drawableTop="@drawable/bus_p_function_device_closedoor_press_selecor" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/tv_car_setting_opendoor" app:layout_constraintTop_toTopOf="parent" /> diff --git a/OCH/mogo-och-bus-passenger/src/m1/res/layout/bus_p_function_setting_soft_fragment.xml b/OCH/mogo-och-bus-passenger/src/m1/res/layout/bus_p_function_setting_soft_fragment.xml index cdfba148c1..cfbbc41075 100644 --- a/OCH/mogo-och-bus-passenger/src/m1/res/layout/bus_p_function_setting_soft_fragment.xml +++ b/OCH/mogo-och-bus-passenger/src/m1/res/layout/bus_p_function_setting_soft_fragment.xml @@ -29,9 +29,9 @@ android:id="@+id/tv_setting_aircondition" android:layout_width="@dimen/dp_160" android:layout_height="50dp" + android:layout_marginBottom="@dimen/dp_26" android:background="@drawable/bus_p_function_airconditon_bg_selector" android:button="@null" - android:layout_marginBottom="@dimen/dp_26" android:drawableLeft="@drawable/bus_p_function_airconditon_left_selector" android:drawablePadding="-20dp" android:gravity="center" @@ -43,9 +43,9 @@ android:id="@+id/tv_setting_lighting" android:layout_width="@dimen/dp_160" android:layout_height="50dp" + android:layout_marginBottom="@dimen/dp_26" android:background="@drawable/bus_p_function_airconditon_bg_selector" android:button="@null" - android:layout_marginBottom="@dimen/dp_26" android:drawableLeft="@drawable/bus_p_function_light_left_selector" android:drawablePadding="-20dp" android:gravity="center" @@ -83,170 +83,177 @@ + app:layout_constraintVertical_chainStyle="packed" + app:layout_constraintWidth_percent="0.289" /> + android:layout_height="wrap_content" + android:text="@string/bus_p_m1_temperature" + android:textColor="@color/bus_p_m1_47576E" + android:textSize="@dimen/dp_24" + app:layout_constraintBottom_toBottomOf="@+id/v_temp" + app:layout_constraintStart_toStartOf="@+id/tv_aircondition_switch" + app:layout_constraintTop_toTopOf="@+id/v_temp" /> + app:layout_constraintEnd_toEndOf="@+id/tv_aircondition_switch" + app:layout_constraintTop_toBottomOf="@+id/tv_aircondition_switch" + app:layout_constraintWidth_percent="0.244" /> + android:layout_height="wrap_content" + android:text="设置" + android:textColor="@color/bus_p_m1_47576E" + android:textSize="@dimen/dp_24" + app:layout_constraintBottom_toBottomOf="@+id/rg_setting_pattern" + app:layout_constraintStart_toStartOf="@+id/tv_aircondition_switch" + app:layout_constraintTop_toTopOf="@+id/rg_setting_pattern" /> + app:layout_constraintWidth_percent="0.244"> + - + + + android:layout_height="match_parent" + android:layout_marginEnd="@dimen/dp_21" + android:background="@drawable/bus_p_function_aircondition_pattern_selecotr" + android:button="@null" + android:gravity="center" + android:text="@string/bus_p_m1_refrigeration" + android:textColor="@drawable/bus_p_function_airconditon_text_color_selector" + android:textSize="@dimen/dp_24" /> + + android:layout_height="match_parent" + android:layout_marginEnd="@dimen/dp_21" + android:background="@drawable/bus_p_function_aircondition_pattern_selecotr" + android:button="@null" + android:gravity="center" + android:text="@string/bus_p_m1_heating" + android:textColor="@drawable/bus_p_function_airconditon_text_color_selector" + android:textSize="@dimen/dp_24" /> + + android:layout_height="match_parent" + android:background="@drawable/bus_p_function_aircondition_pattern_selecotr" + android:button="@null" + android:gravity="center" + android:text="@string/bus_p_m1_ventilate" + android:textColor="@drawable/bus_p_function_airconditon_text_color_selector" + android:textSize="@dimen/dp_24" /> + android:layout_height="wrap_content" + android:text="@string/bus_p_m1_wind_speed" + android:textColor="@color/bus_p_m1_47576E" + android:textSize="@dimen/dp_24" + app:layout_constraintBottom_toBottomOf="@+id/rg_setting_windspeed" + app:layout_constraintStart_toStartOf="@+id/tv_aircondition_switch" + app:layout_constraintTop_toTopOf="@+id/rg_setting_windspeed" /> + app:layout_constraintWidth_percent="0.244"> + + android:checked="true" + android:gravity="center" + android:text="@string/bus_p_m1_wind_speed_low" + android:textColor="@drawable/bus_p_function_airconditon_pattern_text_color_selector" + android:textSize="@dimen/dp_24" /> + + android:layout_height="match_parent" + android:layout_marginEnd="@dimen/dp_44" + android:background="@drawable/bus_p_function_aircondition_pattern_selecotr" + android:button="@null" + android:gravity="center" + android:text="@string/bus_p_m1_wind_speed_middle" + android:textColor="@drawable/bus_p_function_airconditon_text_color_selector" + android:textSize="@dimen/dp_24" /> + + android:layout_height="match_parent" + android:background="@drawable/bus_p_function_aircondition_pattern_selecotr" + android:button="@null" + android:gravity="center" + android:text="@string/bus_p_m1_wind_speed_high" + android:textColor="@drawable/bus_p_function_airconditon_text_color_selector" + android:textSize="@dimen/dp_24" /> + app:layout_constraintStart_toEndOf="@+id/gl_right" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.404" + app:layout_constraintWidth_percent="0.253" /> + app:layout_constraintStart_toStartOf="@+id/sb_voice_bar" /> + + app:layout_constraintEnd_toEndOf="@+id/sb_voice_bar" /> + + app:layout_constraintTop_toBottomOf="@+id/sb_voice_bar" /> + app:layout_constraintTop_toBottomOf="@+id/sb_voice_bar" /> diff --git a/OCH/mogo-och-bus-passenger/src/m1/res/values/color.xml b/OCH/mogo-och-bus-passenger/src/m1/res/values/color.xml index 1436db6b27..1a80db558f 100644 --- a/OCH/mogo-och-bus-passenger/src/m1/res/values/color.xml +++ b/OCH/mogo-och-bus-passenger/src/m1/res/values/color.xml @@ -5,6 +5,9 @@ #203555 #47576E #374968 + #2CBFFC + #1060FF + #96A5C2 #CCFFFFFF \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/m1/res/values/strings.xml b/OCH/mogo-och-bus-passenger/src/m1/res/values/strings.xml index 516efa7bd3..383de93c7b 100644 --- a/OCH/mogo-och-bus-passenger/src/m1/res/values/strings.xml +++ b/OCH/mogo-och-bus-passenger/src/m1/res/values/strings.xml @@ -12,4 +12,15 @@ + + 关闭顶灯1 + 关闭顶灯2 + 关闭氛围灯 + + 开启顶灯1 + 开启顶灯2 + 开启氛围灯 + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/raw/bus_di.mp3 b/OCH/mogo-och-bus-passenger/src/main/res/raw/bus_di.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..15b31ed247d4390b1d571976c4f05d7d3da1571b GIT binary patch literal 15150 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 w<=LtEOaJJt%2@k{4eiMKgITNo8$iX11poj5 literal 0 HcmV?d00001 diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/OCHM1LightAirconditionDoorStatusManager.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/OCHM1LightAirconditionDoorStatusManager.kt new file mode 100644 index 0000000000..294afa67f1 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/OCHM1LightAirconditionDoorStatusManager.kt @@ -0,0 +1,133 @@ +package com.mogo.och.common.module.manager + +import chassis.VehicleStateOuterClass +import com.mogo.eagle.core.function.api.autopilot.IMoGoRoboBusJinlvM1StatesListener +import com.mogo.eagle.core.function.call.autopilot.CallerRoboBusJinlvM1StatesListenerManager +import java.util.concurrent.ConcurrentHashMap + +object OCHM1LightAirconditionDoorStatusManager : IMoGoRoboBusJinlvM1StatesListener { + private const val TAG = "OCHM1LightAirconditionDoorStatusManager" + + init { + CallerRoboBusJinlvM1StatesListenerManager.addListener(TAG, this) + } + + val M_LISTENERS: ConcurrentHashMap = + ConcurrentHashMap() + + val airconditionStatus = AirconditionStatus(false, 0, 26, 2) + val heaterStatue = HeaterStatue(false, 2) + val doorStatus = DoorStatus(false) + val lightStatus = LightStatus(false, false, false) + + fun addListener( + tag: String, + listener: OCHM1LightAirconditionDoorCallback + ) { + if (M_LISTENERS.containsKey(tag)) { + return + } + M_LISTENERS[tag] = listener + } + + fun removeListener(tag: String) { + if (!M_LISTENERS.containsKey(tag)) { + return + } + M_LISTENERS.remove(tag) + } + + /** + * 删除监听 + * @param listener 要删除的监听对象 + */ + fun removeListener(listener: OCHM1LightAirconditionDoorCallback) { + if (!M_LISTENERS.containsValue(listener)) { + return + } + M_LISTENERS.forEach { + if (it.value == listener) { + M_LISTENERS.remove(it.key) + } + } + } + + + interface OCHM1LightAirconditionDoorCallback { + + fun onAirconditionStatusCallback(heaterIsOpen:Boolean,airconditionStatus: AirconditionStatus){} + + fun onHeaterStatusCallback(airconditionIsOpen: Boolean,heaterStatue: HeaterStatue){} + + fun onDoorStatusCallback(isOpen: Boolean){} + + fun onLightCallback(lightStatus: LightStatus){} + + } + + data class AirconditionStatus( + var isOpen: Boolean, + var pattert: Int, + var temperature: Int, + var windSpeed: Int + ) + + data class HeaterStatue(var isOpen: Boolean, var windSpeed: Int) + data class DoorStatus(var isOpen: Boolean) + data class LightStatus( + var isOpenLight1: Boolean, + var isOpenLight2: Boolean, + var isOpenatmosphere: Boolean + ) + + override fun onRoboBusJinlvM1States(states: VehicleStateOuterClass.RoboBusJinlvM1State) { + val airConditionerState = states.airConditionerState + val heaterState = states.heaterState + if (airConditionerState.isOn != airconditionStatus.isOpen || + airConditionerState.mode != airconditionStatus.pattert || + airConditionerState.temperature != airconditionStatus.temperature || + airConditionerState.windSpeed != airconditionStatus.windSpeed + ) { + airconditionStatus.isOpen = airConditionerState.isOn + airconditionStatus.pattert = airConditionerState.mode + airconditionStatus.temperature = airConditionerState.temperature + airconditionStatus.windSpeed = airConditionerState.windSpeed + M_LISTENERS.forEach { + val tag = it.key + val listener = it.value + listener.onAirconditionStatusCallback(heaterState.isOn,airconditionStatus) + } + } + if (heaterState.isOn != heaterStatue.isOpen || + heaterState.windSpeed != heaterStatue.windSpeed + ) { + heaterStatue.isOpen = heaterState.isOn + heaterStatue.windSpeed = heaterState.windSpeed + M_LISTENERS.forEach { + val tag = it.key + val listener = it.value + listener.onHeaterStatusCallback(airConditionerState.isOn,heaterStatue) + } + } + if (states.frontDoorState.isOn != doorStatus.isOpen) { + doorStatus.isOpen = states.frontDoorState.isOn + M_LISTENERS.forEach { + val tag = it.key + val listener = it.value + listener.onDoorStatusCallback(doorStatus.isOpen) + } + } + if (states.mainLamp1State.isOn != lightStatus.isOpenLight1|| + states.mainLamp2State.isOn != lightStatus.isOpenLight2|| + states.smallLampState.isOn != lightStatus.isOpenatmosphere) { + lightStatus.isOpenLight1 = states.mainLamp1State.isOn + lightStatus.isOpenLight2 = states.mainLamp2State.isOn + lightStatus.isOpenatmosphere = states.smallLampState.isOn + M_LISTENERS.forEach { + val tag = it.key + val listener = it.value + listener.onLightCallback(lightStatus) + } + } + } +} diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/OCHPlanningStopSideStatusManager.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/OCHPlanningStopSideStatusManager.kt new file mode 100644 index 0000000000..bddf2a88ed --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/OCHPlanningStopSideStatusManager.kt @@ -0,0 +1,134 @@ +package com.mogo.och.common.module.manager + +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotPlanningActionsListener +import com.mogo.eagle.core.function.call.autopilot.CallerPlanningActionsListenerManager +import mogo.telematics.pad.MessagePad +import java.util.concurrent.ConcurrentHashMap + +object OCHPlanningStopSideStatusManager : IMoGoAutopilotPlanningActionsListener { + private const val TAG = "OCHPlanningActionsManager" + + init { + CallerPlanningActionsListenerManager.addListener(TAG, this) + } + + val M_LISTENERS: ConcurrentHashMap = ConcurrentHashMap() + + fun addListener( + tag: String, + listener: OCHPlanningActionsCallback + ) { + if (M_LISTENERS.containsKey(tag)) { + return + } + M_LISTENERS[tag] = listener + } + + fun removeListener(tag: String) { + if (!M_LISTENERS.containsKey(tag)) { + return + } + M_LISTENERS.remove(tag) + } + /** + * 删除监听 + * @param listener 要删除的监听对象 + */ + fun removeListener(listener: OCHPlanningActionsCallback) { + if (!M_LISTENERS.containsValue(listener)) { + return + } + M_LISTENERS.forEach { + if (it.value == listener) { + M_LISTENERS.remove(it.key) + } + } + } + + + + override fun pncActions(planningActionMsg: MessagePad.PlanningActionMsg) { + val drivingState = planningActionMsg.parkScenarioAction.actionMsg.drivingState + val drivingAction = planningActionMsg.parkScenarioAction.actionMsg.drivingAction + when (drivingState) { + MessagePad.ParkScenarioDrivingState.PARK_SENARIO_FORCE_PULL_OVER_ON -> { + when (drivingAction) { + MessagePad.DrivingAction.DRIVING_ACTION_STATE_ONE -> { + // 表示开始靠边停车 + M_LISTENERS.forEach { + val tag = it.key + val listener = it.value + listener.onStartAutopilotFailure(Status.START,null,null) + listener.onStartAutopilotFailure(Status.DOING,null,null) + } + } + MessagePad.DrivingAction.DRIVING_ACTION_STATE_TWO -> { + //表示靠边停车成功 + M_LISTENERS.forEach { + val tag = it.key + val listener = it.value + listener.onStartAutopilotFailure(Status.Ending,true,null) + } + } + MessagePad.DrivingAction.DRIVING_ACTION_STATE_THREE -> { + //靠边停车失败 + M_LISTENERS.forEach { + val tag = it.key + val listener = it.value + listener.onStartAutopilotFailure(Status.Ending,false,null) + } + } + else -> {} + } + } + MessagePad.ParkScenarioDrivingState.PARK_SENARIO_FORCE_PULL_OVER_OFF -> { + when (drivingAction) { + MessagePad.DrivingAction.DRIVING_ACTION_STATE_ONE -> { + // 表示距离前方站点100m + M_LISTENERS.forEach { + val tag = it.key + val listener = it.value + listener.onStartAutopilotFailure(Status.NOSTART,false,"距离前方站点100m") + } + } + MessagePad.DrivingAction.DRIVING_ACTION_STATE_TWO -> { + //表示距离路口100m + M_LISTENERS.forEach { + val tag = it.key + val listener = it.value + listener.onStartAutopilotFailure(Status.NOSTART,false,"距离路口100m") + } + } + MessagePad.DrivingAction.DRIVING_ACTION_STATE_THREE -> { + //正在变道 + M_LISTENERS.forEach { + val tag = it.key + val listener = it.value + listener.onStartAutopilotFailure(Status.NOSTART,false,"正在变道") + } + } + else -> { + //未知问题 + M_LISTENERS.forEach { + val tag = it.key + val listener = it.value + listener.onStartAutopilotFailure(Status.NOSTART,false,"正在变道") + } + } + } + } + else -> {} + } + } + + enum class Status(val code: Int){ + NOSTART(-1), + START(0), + DOING(1), + Ending(2) + } + + interface OCHPlanningActionsCallback { + fun onStartAutopilotFailure(actionStatus:Status,stopSideStatus : Boolean?, errorInfo : String?) + } +}