From d4a9ccede9d9e7170717a48c9550563a8e562f22 Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Fri, 10 Dec 2021 16:14:42 +0800 Subject: [PATCH] =?UTF-8?q?[Feat]=E6=B7=BB=E5=8A=A0=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E9=A9=BE=E9=A9=B6=E8=AE=BE=E7=BD=AE=E8=BD=A6=E9=80=9F=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.gradle | 2 +- .../autopilot/MoGoAutopilotProvider.kt | 6 +- .../core/function/hmi/ui/MoGoHmiFragment.kt | 91 ++++++++++++ .../hmi/ui/tools/AutoPilotAndCheckView.kt | 59 ++++++++ .../function/hmi/ui/widget/CheckStatusView.kt | 8 +- .../res/drawable-xxhdpi/check_car_nor.png | Bin 0 -> 21636 bytes .../src/main/res/drawable/pilot_speed_bg.xml | 6 + .../main/res/layout/view_auto_pilot_check.xml | 130 ++++++++++++++++++ .../api/autopilot/IMoGoAutopilotProvider.java | 1 + .../api/hmi/warning/IMoGoWaringProvider.kt | 4 + .../call/autopilot/CallerAutoPilotManager.kt | 3 + .../function/call/hmi/CallerHmiManager.kt | 8 ++ .../module/adas/OnAdasListenerAdapter.java | 6 + 13 files changed, 317 insertions(+), 7 deletions(-) create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/check_car_nor.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/pilot_speed_bg.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml diff --git a/config.gradle b/config.gradle index cb8ba9f2d3..9a89bc55e5 100644 --- a/config.gradle +++ b/config.gradle @@ -114,7 +114,7 @@ ext { obusdk : "com.zhidao.enterprise.smartv2x:smartv2x:1.0.0.3", mogoobu : 'com.zhidao.support.obu:mogoobu:1.0.0.19', mogoami : 'com.zhidao.support.obu.ami:mogoami:1.0.0.10', - adasHigh : 'com.zhidao.support.adas:high:1.2.0.14', + adasHigh : 'com.zhidao.support.adas:high:1.2.1.1', // google googlezxing : "com.google.zxing:core:3.3.3", diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt index cf93a876e3..f626fe2720 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt @@ -57,7 +57,7 @@ class MoGoAutopilotProvider : } override fun recordPackage(): Boolean { - return AdasManager.getInstance().recordPackage() + return AdasManager.getInstance().recordPackage(1, (System.currentTimeMillis() / 1000).toInt()) } override fun setEnableLog(isEnableLog: Boolean) { @@ -72,5 +72,7 @@ class MoGoAutopilotProvider : } - + override fun setAutoPilotSpeed(speed: Int) { + AdasManager.getInstance().setSpeed(speed) + } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt index ca8a5bf68d..8fcfef0aee 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt @@ -18,6 +18,7 @@ import com.mogo.eagle.core.data.notice.NoticeNormalData import com.mogo.eagle.core.data.notice.NoticeTrafficStylePushData import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWaringProvider import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener +import com.mogo.eagle.core.function.call.check.CallerCheckManager import com.mogo.eagle.core.function.call.monitor.CallerMonitorManager import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.function.hmi.WaringConst @@ -29,9 +30,11 @@ import com.mogo.eagle.core.function.hmi.ui.camera.CameraListView import com.mogo.eagle.core.function.hmi.ui.notice.NoticeBannerView import com.mogo.eagle.core.function.hmi.ui.notice.NoticeNormalBannerView import com.mogo.eagle.core.function.hmi.ui.setting.DebugSettingView +import com.mogo.eagle.core.function.hmi.ui.tools.AutoPilotAndCheckView import com.mogo.eagle.core.function.hmi.ui.utils.visible import com.mogo.eagle.core.function.hmi.ui.widget.V2XNotificationView import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.module.common.enums.EventTypeEnum import com.mogo.utils.logger.Logger import kotlinx.android.synthetic.main.fragment_hmi.* @@ -62,6 +65,10 @@ class MoGoHmiFragment : MvpFragment private var cameraListView: CameraListView? = null private var cameraViewFloat: WarningFloat.Builder? = null + private var toolsView: AutoPilotAndCheckView? = null + // 检测、自动驾驶速度设置 + private var toolsViewFloat: WarningFloat.Builder? = null + override fun vipIdentification(visible: Boolean) { ThreadUtils.runOnUiThread { Logger.d(TAG, "vipIdentification") @@ -80,6 +87,11 @@ class MoGoHmiFragment : MvpFragment showCameraList(CallerMonitorManager.getCameraList()) } } + viewCheckStatus?.setOnClickListener { + if (toolsViewFloat == null) { + showToolsFloat() + } + } viewShowDebugView.setOnLongClickListener { Log.d(TAG, "长按显示状态工具栏") @@ -126,6 +138,65 @@ class MoGoHmiFragment : MvpFragment } } + private fun showToolsFloat() { + Logger.d(TAG, "showToolsFloat") + context?.let { + if (toolsViewFloat == null) { + if (toolsView == null) { + toolsView = AutoPilotAndCheckView(it) + toolsView!!.setClickListener(object : AutoPilotAndCheckView.ClickListener { + override fun go2CheckPage() { + // 启动检测页面 + CallerCheckManager.startCheckActivity(context) + dismissToolsFloatView() + } + + override fun onClose(v: View) { + dismissToolsFloatView() + } + }) + } + toolsViewFloat = WarningFloat.with(it) + .setTag("ToolsViewFloat") + .setLayout(toolsView!!) + .setSidePattern(SidePattern.LEFT) + .setGravity(Gravity.LEFT, offsetY = 72) + .setImmersionStatusBar(true) + .setAnimator(object : DefaultAnimator() { + override fun enterAnim( + view: View, + params: WindowManager.LayoutParams, + windowManager: WindowManager, + sidePattern: SidePattern + ): Animator? = + super.enterAnim(view, params, windowManager, sidePattern) + ?.apply { + interpolator = OvershootInterpolator() + } + + override fun exitAnim( + view: View, + params: WindowManager.LayoutParams, + windowManager: WindowManager, + sidePattern: SidePattern + ): Animator? = + super.exitAnim(view, params, windowManager, sidePattern) + ?.setDuration(200) + }) + .addWarningStatusListener(object : IMoGoWarningStatusListener { + override fun onDismiss() { + toolsViewFloat = null + toolsView = null + // TODO:("") + } + }) + .show() + } else { + toolsViewFloat?.show() + } + } + } + /** * 根据配置文件初始化视图显示 */ @@ -468,6 +539,18 @@ class MoGoHmiFragment : MvpFragment cameraListView?.showNoSignal() } + override fun showToolsView() { + if (toolsViewFloat == null) { + showToolsFloat() + } else { + ToastUtils.showShort("弹窗状态有误!") + } + } + + override fun hideToolsView() { + dismissToolsFloatView() + } + private fun showCameraList(cameraList: List?) { context?.let { if (cameraViewFloat == null) { @@ -544,6 +627,14 @@ class MoGoHmiFragment : MvpFragment } } + private fun dismissToolsFloatView() { + toolsViewFloat?.let { + WarningFloat.dismiss(it.config.floatTag, false) + toolsViewFloat = null + toolsView = null + } + } + override fun onDestroy() { super.onDestroy() Log.d(TAG, "onDestroy") diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt new file mode 100644 index 0000000000..f079337f1e --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt @@ -0,0 +1,59 @@ +package com.mogo.eagle.core.function.hmi.ui.tools + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import android.widget.FrameLayout +import com.mogo.eagle.core.function.call.check.CallerCheckManager +import com.mogo.eagle.core.function.hmi.R +import kotlinx.android.synthetic.main.view_auto_pilot_check.view.* + +/** + * @author ChenFufeng + * 设置自动驾驶速度和检测页入口 + */ +class AutoPilotAndCheckView : FrameLayout { + + private val TAG = "AutoPilotAndCheckView" + + private var clickListener: ClickListener? = null + + @JvmOverloads + constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : super( + context, + attrs, + defStyleAttr + ) + + init { + LayoutInflater.from(context).inflate(R.layout.view_auto_pilot_check, this, true) + initView() + } + + private fun initView() { + ivCloseIcon.setOnClickListener { + clickListener?.onClose(it) + } + ivCheckIcon.setOnClickListener { + clickListener?.go2CheckPage() + } + } + + fun setClickListener(clickListener: ClickListener) { + this.clickListener = clickListener + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + } + + interface ClickListener { + fun go2CheckPage() + fun onClose(v: View) + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CheckStatusView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CheckStatusView.kt index 7c1472fa11..50315d1323 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CheckStatusView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CheckStatusView.kt @@ -27,10 +27,10 @@ class CheckStatusView @JvmOverloads constructor( setBackgroundResource(R.drawable.module_ext_check) - setOnClickListener { - // 启动检测页面 - CallerCheckManager.startCheckActivity(getContext()) - } +// setOnClickListener { +// // 启动检测页面 +// CallerCheckManager.startCheckActivity(getContext()) +// } } private fun showErrorIcon() { diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/check_car_nor.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/check_car_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..7d7d3726ad9148bc5864a1d1d7b41d2c375bbfdb GIT binary patch literal 21636 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 TdJyYO00000NkvXXu0mjfkGEtR literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/pilot_speed_bg.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/pilot_speed_bg.xml new file mode 100644 index 0000000000..e4fe7e8614 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/pilot_speed_bg.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml new file mode 100644 index 0000000000..3df5368ac2 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotProvider.java b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotProvider.java index 2c33f8e5f1..fecf0f428f 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotProvider.java +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotProvider.java @@ -56,4 +56,5 @@ public interface IMoGoAutopilotProvider extends IMoGoFunctionServerProvider { */ void setIsWriteLog(boolean isWriteLog); + void setAutoPilotSpeed(int speed); } diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt index 0243ff311c..238e023f9c 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt @@ -144,4 +144,8 @@ interface IMoGoWaringProvider { fun startRoadCameraLive(flvUrl: String) fun showNoSignView() + + fun showToolsView() + + fun hideToolsView() } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotManager.kt index dd30beef17..896afd89a1 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotManager.kt @@ -63,4 +63,7 @@ object CallerAutoPilotManager { providerApi.setIsWriteLog(isWriteLog) } + fun setAutoPilotSpeed(speed: Int) { + providerApi.setAutoPilotSpeed(speed) + } } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt index 70705c09a5..476f963dd9 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt @@ -200,4 +200,12 @@ object CallerHmiManager : CallerBase() { fun showNoSignalView() { waringProviderApi.showNoSignView() } + + fun showToolsView() { + waringProviderApi.showToolsView() + } + + fun hideToolsView() { + waringProviderApi.hideToolsView() + } } \ No newline at end of file diff --git a/modules/mogo-module-adas/src/main/java/com/mogo/module/adas/OnAdasListenerAdapter.java b/modules/mogo-module-adas/src/main/java/com/mogo/module/adas/OnAdasListenerAdapter.java index 3e8a93fab4..46f62c40a3 100644 --- a/modules/mogo-module-adas/src/main/java/com/mogo/module/adas/OnAdasListenerAdapter.java +++ b/modules/mogo-module-adas/src/main/java/com/mogo/module/adas/OnAdasListenerAdapter.java @@ -28,6 +28,7 @@ import com.zhidao.support.adas.high.bean.RectInfo; import com.zhidao.support.adas.high.bean.TrajectoryInfo; import com.zhidao.support.adas.high.bean.WarnMessageInfo; import com.zhidao.support.adas.high.bean.guardian.AutopilotGuardianInfo; +import com.zhidao.support.adas.high.bean.record.AutopilotRecordResult; import com.zhidao.support.obu.ami.AmiClientManager; import java.util.ArrayList; @@ -150,6 +151,11 @@ public class OnAdasListenerAdapter implements OnAdasListener { CallerAutoPilotStatusListenerManager.INSTANCE.invokeAutopilotGuardian(autopilotRoute); } + @Override + public void onAutopilotRecord(AutopilotRecordResult result) { + + } + @Override public void onLightStateData(LightStatueInfo lightStatueInfo) {