Merge branch 'dev/dev_eagle_architecture_upgrade' into dev/dev_eagle_wuhan_sikua_obu

This commit is contained in:
董宏宇
2021-10-11 21:04:49 +08:00
110 changed files with 631 additions and 6307 deletions

View File

@@ -21,6 +21,7 @@ import com.mogo.utils.logger.Logger
/**
* @author donghongyu
* @date 2021/8/5 5:29 下午
* 弹窗Window 管理
*/
internal class WarningFloatWindowHelper(
val context: Context,
@@ -62,8 +63,8 @@ internal class WarningFloatWindowHelper(
// 设置浮窗以外的触摸事件可以传递给后面的窗口、不自动获取焦点
flags = if (config.immersionStatusBar)
// 没有边界限制,允许窗口扩展到屏幕外
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
else WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
else WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
width = WindowManager.LayoutParams.WRAP_CONTENT
height = WindowManager.LayoutParams.WRAP_CONTENT
@@ -142,7 +143,7 @@ internal class WarningFloatWindowHelper(
.enterAnim()?.apply {
// 可以延伸到屏幕外,动画结束按需去除该属性,不然旋转屏幕可能置于屏幕外部
params.flags =
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
addListener(object : Animator.AnimatorListener {
override fun onAnimationRepeat(animation: Animator?) {}
@@ -152,7 +153,7 @@ internal class WarningFloatWindowHelper(
if (!config.immersionStatusBar) {
// 不需要延伸到屏幕外了,防止屏幕旋转的时候,浮窗处于屏幕外
params.flags =
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
}
}
@@ -187,7 +188,7 @@ internal class WarningFloatWindowHelper(
if (config.isAnim) return
config.isAnim = true
params.flags =
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
animator.addListener(object : Animator.AnimatorListener {
override fun onAnimationRepeat(animation: Animator?) {}

View File

@@ -4,11 +4,15 @@ import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.eagle.core.data.constants.MoGoOBUConfig
import com.mogo.eagle.core.data.obu.ObuStatusInfo
import com.mogo.eagle.core.function.api.obu.IMoGoObuStatusListener
import com.mogo.eagle.core.function.call.obu.CallerOBUManager
import com.mogo.eagle.core.function.call.obu.CallerObuListenerManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.util.GsonUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.utils.storage.SharedPrefsMgr
import kotlinx.android.synthetic.main.view_debug_setting.view.*
/**
@@ -43,10 +47,20 @@ class DebugSettingView @JvmOverloads constructor(
private fun initView() {
tvObuInfo.text = CallerObuListenerManager.getObuStatusInfo()
btnSetObuIP.setOnClickListener {
val obuIP = etObuIP.text.toString()
if (obuIP.isNotEmpty()) {
CallerOBUManager.resetObuIpAddress(obuIP)
} else {
ToastUtils.showShort("请输入正确的IP地址")
}
}
}
override fun onObuStatusResponse(obuStatusInfo: ObuStatusInfo) {
tvObuInfo.text = GsonUtils.toJson(obuStatusInfo)
etObuIP.setText(obuStatusInfo.connectIP)
etObuIP.text?.let { etObuIP.setSelection(it.length) }
}
}

View File

@@ -6,13 +6,16 @@ import android.view.LayoutInflater
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.eagle.core.data.autopilot.AdasOCHData
import com.mogo.eagle.core.data.autopilot.RemoteControlAutoPilotParameters
import com.mogo.eagle.core.function.call.hmi.CallerHmiListenerManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.util.LogUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.module.common.MogoApisHandler
import com.mogo.service.adas.IMogoAdasOCHCallback
import com.mogo.utils.logger.Logger
import kotlinx.android.synthetic.main.view_autopilot_status.view.*
import java.util.*
/**
* @author xiaoyuzhou
@@ -20,8 +23,8 @@ import kotlinx.android.synthetic.main.view_autopilot_status.view.*
* 自动驾驶状态按钮
*/
class AutoPilotStatusView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet
context: Context,
attrs: AttributeSet
) : ConstraintLayout(context, attrs), View.OnClickListener, IMogoAdasOCHCallback {
private val TAG = "AutopilotStatusView"
@@ -53,7 +56,7 @@ class AutoPilotStatusView @JvmOverloads constructor(
when (mAutopilotStatus) {
0 -> {// 不可自动驾驶adas与工控机没有链接或工控机异常
LogUtils.eTag(TAG, "不可自动驾驶adas与工控机没有链接或工控机异常请检查")
ToastUtils.showShort("不可自动驾驶adas与工控机没有链接或工控机异常请检查")
// ToastUtils.showShort("不可自动驾驶adas与工控机没有链接或工控机异常请检查")
// TODO 这里临时触发自动驾驶能力,测试功过这里删除
CallerHmiListenerManager.invokeCheckAutoPilotBtnListener(true)
}
@@ -64,6 +67,15 @@ class AutoPilotStatusView @JvmOverloads constructor(
CallerHmiListenerManager.invokeCheckAutoPilotBtnListener(false)
}
}
// startAutoPilot();
}
private fun startAutoPilot() {
val currentAutopilot = RemoteControlAutoPilotParameters()
currentAutopilot.isSpeakVoice = false
currentAutopilot.startLatLon = RemoteControlAutoPilotParameters.AutoPilotLonLat(40.194795425,116.724476409);
currentAutopilot.endLatLon = RemoteControlAutoPilotParameters.AutoPilotLonLat(40.199730,116.735687);
currentAutopilot.vehicleType = 10
MogoApisHandler.getInstance().apis.adasControllerApi.aiCloudToAdasData(currentAutopilot)
}
/**

View File

@@ -0,0 +1,66 @@
package com.mogo.eagle.core.function.hmi.ui.widget
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.eagle.core.function.api.check.IMogoCheckListener
import com.mogo.eagle.core.function.call.check.CallerCheckManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import kotlinx.android.synthetic.main.view_check_status.view.*
/**
*@author xiaoyuzhou
*@date 2021/8/6 12:25 下午
*/
class CheckStatusView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr), IMogoCheckListener {
private val TAG = "CheckStatusView"
init {
LayoutInflater.from(context).inflate(R.layout.view_check_status, this, true)
setOnClickListener {
// 启动检测页面
CallerCheckManager.startCheckActivity(getContext())
}
}
private fun showErrorIcon() {
errorTipImage.visibility = View.VISIBLE
}
private fun dismissErrorIcon() {
errorTipImage.visibility = View.GONE
}
override fun updateMonitoringStatus(state: Int?) {
Logger.d(TAG, "updateCheckStatus")
if (state == 1) {
dismissErrorIcon()
} else {
showErrorIcon()
}
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
Logger.d(TAG, "onAttachedToWindow")
//车辆监控
CallerCheckManager.registerVehicleMonitoringListener(TAG, this)
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
Logger.d(TAG, "onDetachedFromWindow")
//车辆监控
CallerCheckManager.unregisterListener(TAG)
}
}

View File

@@ -61,5 +61,13 @@
app:layout_goneMarginTop="40px"
tools:visibility="visible" />
<com.mogo.eagle.core.function.hmi.ui.widget.CheckStatusView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="40px"
android:layout_marginBottom="@dimen/dp_490"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/clAutopilotStatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<!--车辆检测入口-->
<TextView
android:id="@+id/moduleHmiCheck"
android:layout_width="@dimen/dp_128"
android:layout_height="@dimen/dp_128"
android:background="@drawable/module_ext_check"
android:gravity="center"
android:text="检测"
android:textColor="#fff"
android:textSize="@dimen/module_hmi_btn_text_size"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent" />
<ImageView
android:id="@+id/errorTipImage"
android:layout_width="@dimen/dp_40"
android:layout_height="@dimen/dp_40"
android:src="@drawable/check_error_image"
android:visibility="invisible"
app:layout_constraintRight_toRightOf="@+id/moduleHmiCheck"
app:layout_constraintTop_toTopOf="@+id/moduleHmiCheck" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -9,9 +9,10 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/tvTitleObu"
@@ -24,6 +25,26 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/etObuIP"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#32009688"
android:gravity="center"
android:inputType="number"
android:padding="@dimen/dp_5"
android:text="192.168.1.199"
android:textSize="@dimen/dp_34" />
<Button
android:id="@+id/btnSetObuIP"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="@dimen/dp_5"
android:text="设置IP"
android:textSize="@dimen/dp_34" />
<TextView
android:id="@+id/tvObuInfo"
android:layout_width="match_parent"
@@ -33,7 +54,7 @@
app:layout_constraintTop_toBottomOf="@+id/tvTitleObu" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</ScrollView>