diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt index 9962aa08aa..9cb2badf9e 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt @@ -156,6 +156,10 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis BadCaseConfig.setStartTime(currentDay) //删除前一天的接管记录 CallerTakeOverManager.deleteAllRecord(context) + //遍历是否有非当日的文件并删除 + RecordBitmapUtils.deleteExpiredFile(currentDay,"FrontCamera") + RecordBitmapUtils.deleteExpiredFile(currentDay,"RearCamera") + RecordBitmapUtils.deleteExpiredFile(currentDay,"MapScreen") } } @@ -417,7 +421,6 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis override fun onAutopilotRecordResult(recordPanel: RecordPanelOuterClass.RecordPanel) { super.onAutopilotRecordResult(recordPanel) CallerLogger.d("$M_DEVA$TAG", "recordKey=${recordPanel.key},stat=${recordPanel.stat},type=${recordPanel.type}") - CallerLogger.i(TestTag,"onAutopilotRecordResult receive recordKey=${recordPanel.key},stat=${recordPanel.stat},type=${recordPanel.type},lineName=${BadCaseConfig.lineName}") if(BadCaseConfig.notDisplayBagWindow){ //此时点击主动录包按钮,不能展示上报弹窗,需要在此处做主动录包弹窗中的一些逻辑 //开始录制 @@ -441,22 +444,18 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis CallerLogger.i(TestTag,"onAutopilotRecordResult contains recordKey=${recordPanel.key},stat=${recordPanel.stat},type=${recordPanel.type},lineName=${BadCaseConfig.lineName}") //目前type == 3包括接管被动录包和其他一些故障录包 if(recordPanel.type == 3){ - CallerLogger.i(TestTag,"onAutopilotRecordResult 符合type=3 recordKey=${recordPanel.key},stat=${recordPanel.stat},type=${recordPanel.type},lineName=${BadCaseConfig.lineName}") //录包成功 if(recordPanel.stat == 100 || recordPanel.stat == 101){ - CallerLogger.i(TestTag,"onAutopilotRecordResult 录包成功 recordKey=${recordPanel.key},stat=${recordPanel.stat},type=${recordPanel.type},lineName=${BadCaseConfig.lineName}") val activity = AppStateManager.currentActivity() if (activity !is AppCompatActivity) { return } - CallerLogger.i(TestTag,"activity符合条件") val geocodeSearch = GeocodeSearch(activity) geocodeSearch.setOnGeocodeSearchListener(object: GeocodeSearch.OnGeocodeSearchListener { override fun onRegeocodeSearched(regeocodeResult: RegeocodeResult?, p1: Int) { regeocodeResult?.regeocodeAddress?.formatAddress?.let { address = it } - CallerLogger.i(TestTag,"onRegeocodeSearched address=${address}") val takeOverRecordInfo = TakeOverRecordInfo(System.currentTimeMillis(), address,level1Id,level2Id,level3Id, level1Name, level2Name, level3Name, @@ -477,12 +476,12 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis val q = RegeocodeQuery(latLon,200f,GeocodeSearch.AMAP) geocodeSearch.getFromLocationAsyn(q) takeOverBagId = recordPanel.key -// //触发域控前后120度摄像头截图和高精地图截图 -// CallerAutoPilotControlManager.sendCaptureImgReqOnTakeOver(recordPanel.key) -// //高精地图屏幕截图 -// CallerMapScreenListenerManager.addListener(TAG,this) -// //开启高精地图截图 -// CallerMapUIServiceManager.getMapUIController()?.getMapScreenShot() + //触发域控前后120度摄像头截图和高精地图截图 + CallerAutoPilotControlManager.sendCaptureImgReqOnTakeOver(recordPanel.key) + //高精地图屏幕截图 + CallerMapScreenListenerManager.addListener(TAG,this) + //开启高精地图截图 + CallerMapUIServiceManager.getMapUIController()?.getMapScreenShot() } } } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/util/RecordBitmapUtils.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/util/RecordBitmapUtils.kt index b65884d61d..a4864f5089 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/util/RecordBitmapUtils.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/util/RecordBitmapUtils.kt @@ -36,9 +36,11 @@ object RecordBitmapUtils { /** * 删除过期文件夹 + * @param currentDay 要删除的文件日期 + * @param deleteFile 要删除的文件目录 */ - fun deleteExpiredFile(currentDay: String){ - val checkFileName = Environment.getExternalStorageDirectory().absolutePath + File.separator+ "MapScreen" + fun deleteExpiredFile(currentDay: String,deleteFile: String){ + val checkFileName = Environment.getExternalStorageDirectory().absolutePath + File.separator+ deleteFile val checkFileFolder = File(checkFileName) if(checkFileFolder.exists()){ checkFileFolder.listFiles()?.forEach {dir-> diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverReasonWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverReasonWindow.kt index c57fd8122b..d0dea26197 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverReasonWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverReasonWindow.kt @@ -3,7 +3,9 @@ package com.zhjt.mogo_core_function_devatools.workorder import android.annotation.SuppressLint import android.app.Activity import android.graphics.PixelFormat +import android.net.Uri import android.os.Bundle +import android.os.Environment import android.text.Editable import android.text.TextWatcher import android.util.DisplayMetrics @@ -41,13 +43,15 @@ import com.mogo.eagle.core.utilcode.util.BarUtils import com.mogo.eagle.core.utilcode.util.JsonParser import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.eagle.core.utilcode.util.TimeUtils +import com.mogo.eagle.core.utilcode.util.TimeUtils.getMdFormat import com.mogo.eagle.core.utilcode.util.TimeUtils.millis2String import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.tts.base.SpeechUtils import com.zhjt.mogo_core_function_devatools.R import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig import com.zhjt.mogo_core_function_devatools.workorder.adapter.OrderReasonAdapter -import kotlin.math.absoluteValue +import java.io.File + /** * 接管原因编辑窗口 @@ -63,11 +67,7 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene private var mWindowParams: WindowManager.LayoutParams? = null private var mWindowManager: WindowManager? = null private lateinit var mFloatLayout: View - - private var mInViewX = 0f - private var mInViewY = 0f - private var mInScreenX = 0f - private var mInScreenY = 0f + private var takeOverSceneWindow: TakeOverSceneWindow ?= null // 语音听写对象 private var mIat: SpeechRecognizer? = null @@ -84,6 +84,9 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene private lateinit var tvTakeOverReason: AppCompatTextView private lateinit var etNoteInput: AppCompatEditText private lateinit var ivNoteAudio: ImageView + private lateinit var ivFrontCamera: ImageView + private lateinit var ivRearCamera: ImageView + private lateinit var ivMapScreen: ImageView private lateinit var tvTakeOverSave: TextView private lateinit var tvTakeOverCancel: TextView private lateinit var rvTakeOverList: RecyclerView @@ -132,7 +135,7 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene it.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL it.gravity = Gravity.START or Gravity.TOP it.width = 902 - it.height = 1530 + it.height = 1535 it.alpha = 1.0f } } @@ -143,6 +146,9 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene tvTakeOverReason = mFloatLayout.findViewById(R.id.tvTakeOverReason) etNoteInput = mFloatLayout.findViewById(R.id.etNoteInput) ivNoteAudio = mFloatLayout.findViewById(R.id.ivNoteAudio) + ivFrontCamera = mFloatLayout.findViewById(R.id.ivFrontCamera) + ivRearCamera = mFloatLayout.findViewById(R.id.ivRearCamera) + ivMapScreen = mFloatLayout.findViewById(R.id.ivMapScreen) tvTakeOverSave = mFloatLayout.findViewById(R.id.tvTakeOverSave) tvTakeOverCancel = mFloatLayout.findViewById(R.id.tvTakeOverCancel) rvTakeOverList = mFloatLayout.findViewById(R.id.rvTakeOverList) @@ -316,6 +322,13 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene } } + private fun showSceneWindow(frontCameraUri: Uri,rearCameraUri: Uri,mapScreenUri: Uri,currentItem: Int){ + if(takeOverSceneWindow == null){ + takeOverSceneWindow = TakeOverSceneWindow(mActivity) + } + takeOverSceneWindow?.showFloatWindow(frontCameraUri,rearCameraUri,mapScreenUri,currentItem) + } + private fun setAudio(status: Boolean){ if(status){ //开始录音 @@ -417,25 +430,6 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene @SuppressLint("ClickableViewAccessibility") override fun onTouch(v: View?, motionEvent: MotionEvent?): Boolean { -// when (motionEvent?.action) { -// MotionEvent.ACTION_DOWN -> { -// // 获取相对View的坐标,即以此View左上角为原点 -// mInViewX = motionEvent.x -// mInViewY = motionEvent.y -// // 获取相对屏幕的坐标,即以屏幕左上角为原点 -// mInScreenX = motionEvent.rawX -// mInScreenY = motionEvent.rawY -// } -// MotionEvent.ACTION_MOVE -> { -// // 更新浮动窗口位置参数 -// mInScreenX = motionEvent.rawX -// mInScreenY = motionEvent.rawY -// mWindowParams!!.x = (mInScreenX - mInViewX).toInt() -// mWindowParams!!.y = (mInScreenY - mInViewY).toInt() -// // 手指移动的时候更新小悬浮窗的位置 -// mWindowManager!!.updateViewLayout(mFloatLayout, mWindowParams) -// } -// } return true } @@ -457,6 +451,40 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene tvTakeOverTime.text = mActivity.resources.getString(R.string.take_over_time) + millis2String(mTakeOverRecordInfo.faultStartTime, TimeUtils.getHourMinSecondFormat()) } + //展示前向摄像头 + val frontCameraPath: String = ((Environment.getExternalStorageDirectory() + .absolutePath + File.separator) + + "FrontCamera" + File.separator + millis2String(System.currentTimeMillis(), getMdFormat()) + + File.separator + mTakeOverRecordInfo.bagId) + ".png" + val frontCameraUri = Uri.parse(frontCameraPath) + ivFrontCamera.setImageURI(frontCameraUri) + //展示后向摄像头 + val rearCameraPath: String = ((Environment.getExternalStorageDirectory() + .absolutePath + File.separator) + + "RearCamera" + File.separator + millis2String(System.currentTimeMillis(), getMdFormat()) + + File.separator + mTakeOverRecordInfo.bagId) + ".png" + val rearCameraUri = Uri.parse(rearCameraPath) + ivRearCamera.setImageURI(rearCameraUri) + //展示高精地图截图 + val mapScreenPath: String = ((Environment.getExternalStorageDirectory() + .absolutePath + File.separator) + + "MapScreen" + File.separator + millis2String(System.currentTimeMillis(), getMdFormat()) + + File.separator + mTakeOverRecordInfo.bagId) + ".png" + val mapScreenUri = Uri.parse(mapScreenPath) + ivMapScreen.setImageURI(mapScreenUri) + + //前向120°摄像头 + ivFrontCamera.setOnClickListener { + showSceneWindow(frontCameraUri,rearCameraUri,mapScreenUri,0) + } + //后向120°摄像头 + ivRearCamera.setOnClickListener { + showSceneWindow(frontCameraUri,rearCameraUri,mapScreenUri,1) + } + //高精地图截图 + ivMapScreen.setOnClickListener { + showSceneWindow(frontCameraUri,rearCameraUri,mapScreenUri,2) + } setWindowShowStatus(true) } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverSceneWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverSceneWindow.kt new file mode 100644 index 0000000000..b4430a1172 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/TakeOverSceneWindow.kt @@ -0,0 +1,113 @@ +package com.zhjt.mogo_core_function_devatools.workorder + +import android.annotation.SuppressLint +import android.app.Activity +import android.graphics.PixelFormat +import android.net.Uri +import android.util.DisplayMetrics +import android.view.Gravity +import android.view.LayoutInflater +import android.view.View +import android.view.WindowManager +import android.widget.ImageView +import androidx.viewpager.widget.ViewPager +import com.mogo.eagle.core.utilcode.util.BarUtils +import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.zhjt.mogo_core_function_devatools.R +import com.zhjt.mogo_core_function_devatools.workorder.adapter.TakeOverSceneAdapter + +/** + * 场景图像查看窗口 + */ +class TakeOverSceneWindow constructor(activity: Activity) { + + companion object{ + const val TAG = "TakeOverSceneWindow" + } + + private var mActivity: Activity = activity + private var mWindowParams: WindowManager.LayoutParams? = null + private var mWindowManager: WindowManager? = null + private lateinit var mFloatLayout: View + private lateinit var vpSceneImage: ViewPager + private lateinit var ivSceneClose: ImageView + private lateinit var ivScenePrevious: ImageView + private lateinit var ivSceneNext: ImageView + private val takeOverSceneAdapter = TakeOverSceneAdapter() + private var currentIndex = 0 + + init { + initFloatWindow() + } + + private fun initFloatWindow(){ + mFloatLayout = LayoutInflater.from(mActivity).inflate(R.layout.view_take_over_scene, null) as View + initView() + initEvent() + mWindowParams = WindowManager.LayoutParams() + mWindowManager = mActivity.windowManager + mWindowParams?.let { + it.format = PixelFormat.RGBA_8888 + it.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE + it.gravity = Gravity.START or Gravity.TOP + it.width = WindowManager.LayoutParams.MATCH_PARENT + it.height = 1535 + it.alpha = 1.0f + } + } + + private fun initView(){ + vpSceneImage = mFloatLayout.findViewById(R.id.vpSceneImage) + ivSceneClose = mFloatLayout.findViewById(R.id.ivSceneClose) + ivScenePrevious = mFloatLayout.findViewById(R.id.ivScenePrevious) + ivSceneNext = mFloatLayout.findViewById(R.id.ivSceneNext) + } + + private fun initEvent(){ + vpSceneImage.adapter =takeOverSceneAdapter + //关闭弹窗 + ivSceneClose.setOnClickListener { + hideFloatWindow() + } + //前一个场景 + ivScenePrevious.setOnClickListener { + if(currentIndex == 0){ + ToastUtils.showShort("没有上一个场景了") + }else{ + currentIndex = (currentIndex-1).coerceAtLeast(0) + vpSceneImage.currentItem = currentIndex + } + } + //后一个场景 + ivSceneNext.setOnClickListener { + if(currentIndex < 2){ + currentIndex = (currentIndex + 1).coerceAtMost(2) + vpSceneImage.currentItem = currentIndex + }else{ + ToastUtils.showShort("没有下一个场景了") + } + } + } + + @SuppressLint("SetTextI18n") + fun showFloatWindow(frontCameraUri: Uri, rearCameraUri: Uri, mapScreenUri: Uri, currentItem: Int) { + if (mFloatLayout.parent == null) { + val metrics = DisplayMetrics() + // 默认固定位置,靠屏幕右边缘的中间 + mWindowManager!!.defaultDisplay.getMetrics(metrics) + mWindowParams!!.x = 0 + mWindowParams!!.y = metrics.heightPixels - BarUtils.getStatusBarHeight() + mWindowManager!!.addView(mFloatLayout, mWindowParams) + takeOverSceneAdapter.setSceneUri(frontCameraUri, rearCameraUri, mapScreenUri) + currentIndex = currentItem + vpSceneImage.currentItem = currentItem + } + } + + fun hideFloatWindow() { + if (mFloatLayout.parent != null){ + mWindowManager!!.removeView(mFloatLayout) + } + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/adapter/TakeOverSceneAdapter.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/adapter/TakeOverSceneAdapter.kt new file mode 100644 index 0000000000..f02a37b97b --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/workorder/adapter/TakeOverSceneAdapter.kt @@ -0,0 +1,69 @@ +package com.zhjt.mogo_core_function_devatools.workorder.adapter + +import android.net.Uri +import android.os.Environment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.viewpager.widget.PagerAdapter +import com.mogo.eagle.core.utilcode.util.TimeUtils.getMdFormat +import com.mogo.eagle.core.utilcode.util.TimeUtils.millis2String +import com.zhjt.mogo_core_function_devatools.R +import java.io.File + + +class TakeOverSceneAdapter: PagerAdapter() { + + private lateinit var mFrontCameraUri: Uri + private lateinit var mRearCameraUri: Uri + private lateinit var mMapScreenUri: Uri + + fun setSceneUri(frontCameraUri: Uri,rearCameraUri: Uri,mapScreenUri: Uri){ + mFrontCameraUri = frontCameraUri + mRearCameraUri = rearCameraUri + mMapScreenUri = mapScreenUri + } + + // 获取要滑动的控件的数量 + override fun getCount(): Int { + return 3 + } + + // 来判断显示的是否是同一张图片,这里我们将两个参数相比较返回即可 + override fun isViewFromObject(view: View, `object`: Any): Boolean { + return view == `object` + } + + // 当要显示的图片可以进行缓存的时候,会调用这个方法进行显示图片的初始化, + // 我们将要显示的ImageView加入到ViewGroup中,然后作为返回值返回即可 + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val inflater = LayoutInflater.from(container.context) + val view = inflater.inflate(R.layout.layout_scene_pager,container,false) + val sceneName: TextView = view.findViewById(R.id.tvSceneName) + val ivSceneImage: ImageView = view.findViewById(R.id.ivSceneImage) + when (position) { + 0 -> { + sceneName.text = container.resources.getString(R.string.take_over_front_camera) + ivSceneImage.setImageURI(mFrontCameraUri) + } + 1 -> { + sceneName.text = container.resources.getString(R.string.take_over_rear_camera) + ivSceneImage.setImageURI(mRearCameraUri) + } + else -> { + sceneName.text = container.resources.getString(R.string.take_over_map_screen) + ivSceneImage.setImageURI(mMapScreenUri) + } + } + container.addView(view) + return view + } + + // PagerAdapter只缓存三张要显示的图片,如果滑动的图片超出了缓存的范围,就会调用这个方法,将图片销毁 + override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) { + container.removeView(`object` as View) + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable-xhdpi/icon_scene_close.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable-xhdpi/icon_scene_close.png new file mode 100644 index 0000000000..84513b5885 Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable-xhdpi/icon_scene_close.png differ diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable-xhdpi/icon_scene_left.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable-xhdpi/icon_scene_left.png new file mode 100644 index 0000000000..ad46b155c6 Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable-xhdpi/icon_scene_left.png differ diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable-xhdpi/icon_scene_right.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable-xhdpi/icon_scene_right.png new file mode 100644 index 0000000000..b9c0a12a09 Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable-xhdpi/icon_scene_right.png differ diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bg_scene_name.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bg_scene_name.xml new file mode 100644 index 0000000000..dd0222ad49 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bg_scene_name.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/layout_scene_pager.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/layout_scene_pager.xml new file mode 100644 index 0000000000..d0dc4eebd0 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/layout_scene_pager.xml @@ -0,0 +1,26 @@ + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_take_over_reason.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_take_over_reason.xml index 2735fe0efb..70ad990d8d 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_take_over_reason.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_take_over_reason.xml @@ -145,6 +145,111 @@ android:contentDescription="@string/take_over_note_audio" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/values/strings.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/values/strings.xml index ba13a4df93..42e32d54ed 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/values/strings.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/values/strings.xml @@ -66,6 +66,13 @@ (选填) 手动输入 补充描述语音输入 + 场景图像 + 前向120°摄像头 + 后向120°摄像头 + 高精地图截图 + 上一个场景 + 关闭场景 + 下一个场景 上报 保存 取消 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/status/StartAutoPilotStatusView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/status/StartAutoPilotStatusView.kt index 551dfe6341..8fa7ff297c 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/status/StartAutoPilotStatusView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/status/StartAutoPilotStatusView.kt @@ -18,6 +18,7 @@ import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.Logger +import com.mogo.eagle.core.utilcode.util.SoundPoolUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.zhjt.mogo_core_function_devatools.status.StatusManager import com.zhjt.mogo_core_function_devatools.status.entity.AcceleratorStatus @@ -30,6 +31,7 @@ import com.zhjt.mogo_core_function_devatools.status.entity.IAutopilotBeforeLaunc import com.zhjt.mogo_core_function_devatools.status.entity.Status import com.zhjt.mogo_core_function_devatools.status.entity.SteerStatus import kotlinx.android.synthetic.main.view_start_autopilot_status.view.fSMStatusLayout +import kotlinx.android.synthetic.main.view_start_autopilot_status.view.ivFsmDemoModeError import kotlinx.android.synthetic.main.view_start_autopilot_status.view.iv_accelerator import kotlinx.android.synthetic.main.view_start_autopilot_status.view.iv_brake import kotlinx.android.synthetic.main.view_start_autopilot_status.view.iv_double_flash @@ -68,7 +70,8 @@ class StartAutoPilotStatusView @JvmOverloads constructor( } private val hasFSM by lazy { AtomicBoolean(true) } - + //是否进行了语音提示(当开启美化模式后,若fsm输出自车处于安全停车状态中提示音提示一次) + private var isAlreadyPrompted: Boolean = false init { LayoutInflater.from(context).inflate(R.layout.view_start_autopilot_status, this, true) @@ -87,9 +90,11 @@ class StartAutoPilotStatusView @JvmOverloads constructor( CallerLogger.i(TAG, "changeStatusContainer 切换展示,hasFSM=$hasFSMModule") if (hasFSMModule) { fSMStatusLayout?.visibility = View.VISIBLE + ivFsmDemoModeError?.visibility = View.GONE withoutFSMStatusLayout?.visibility = View.GONE } else { fSMStatusLayout?.visibility = View.GONE + ivFsmDemoModeError?.visibility = View.GONE withoutFSMStatusLayout?.visibility = View.VISIBLE } } @@ -104,11 +109,6 @@ class StartAutoPilotStatusView @JvmOverloads constructor( } hasFSM.set(newHasFSM) - if (FunctionBuildConfig.isDemoMode && status.isException()) { - // 美化模式下如果是异常的,修改成正常的 - status.state = FSMStateCode.ExistNormal - } - when (status.state) { FSMStateCode.UnKnown -> { fSMStatusLayout?.setOnClickListener(null) @@ -118,6 +118,8 @@ class StartAutoPilotStatusView @JvmOverloads constructor( R.drawable.icon_fsm_status_bg_unknown ) ) + ivFsmDemoModeError?.visibility = View.GONE + isAlreadyPrompted = false } FSMStateCode.NotExist -> { @@ -128,6 +130,8 @@ class StartAutoPilotStatusView @JvmOverloads constructor( R.drawable.icon_fsm_status_bg_unknown ) ) + ivFsmDemoModeError?.visibility = View.GONE + isAlreadyPrompted = false } FSMStateCode.ExistNormal -> { @@ -138,18 +142,41 @@ class StartAutoPilotStatusView @JvmOverloads constructor( R.drawable.icon_fsm_status_bg_normal ) ) + ivFsmDemoModeError?.visibility = View.GONE + isAlreadyPrompted = false } FSMStateCode.ExistError -> { - fSMStatusLayout?.onClick { - CallerHmiManager.showFSMExceptionStatusWindow(status.descList) - } - fSMStatusLayout?.setImageDrawable( - ContextCompat.getDrawable( - context, - R.drawable.icon_fsm_status_bg_error + if(FunctionBuildConfig.isDemoMode){ + fSMStatusLayout?.setOnClickListener(null) + fSMStatusLayout?.setImageDrawable( + ContextCompat.getDrawable( + context, + R.drawable.icon_fsm_status_bg_normal + ) ) - ) + ivFsmDemoModeError?.visibility = View.VISIBLE + if(!isAlreadyPrompted){ + try { + SoundPoolUtils.getSoundPool().playSoundWithRedId(context,R.raw.weak_net_tips) + }catch (e: Exception){ + e.printStackTrace() + } + isAlreadyPrompted = true + } + }else{ + fSMStatusLayout?.onClick { + CallerHmiManager.showFSMExceptionStatusWindow(status.descList) + } + fSMStatusLayout?.setImageDrawable( + ContextCompat.getDrawable( + context, + R.drawable.icon_fsm_status_bg_error + ) + ) + ivFsmDemoModeError?.visibility = View.GONE + isAlreadyPrompted = false + } } } notifyStatus(status.isException()) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_fsm_demo_mode_error.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_fsm_demo_mode_error.png new file mode 100644 index 0000000000..f61e1e87c5 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_fsm_demo_mode_error.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_start_autopilot_status.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_start_autopilot_status.xml index 1c4d4d1cb3..d9a2d0d72f 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_start_autopilot_status.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_start_autopilot_status.xml @@ -15,6 +15,19 @@ android:visibility="visible" tools:visibility="visible"/> + + 请联系管理员 关闭 + FSM美化模式状态下异常标识 +