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..ca769c1b31 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
@@ -417,7 +417,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 +440,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 +472,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/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..10f50ff625 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,46 @@ 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..c8e271919e
--- /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,102 @@
+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.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()
+
+ 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(){
+ var currentIndex = 0
+ vpSceneImage.adapter =takeOverSceneAdapter
+ //关闭弹窗
+ ivSceneClose.setOnClickListener {
+ hideFloatWindow()
+ }
+ //前一个场景
+ ivScenePrevious.setOnClickListener {
+ currentIndex = (currentIndex-1).coerceAtLeast(0)
+ vpSceneImage.currentItem = currentIndex
+ }
+ //后一个场景
+ ivSceneNext.setOnClickListener {
+ currentIndex = (currentIndex + 1).coerceAtMost(2)
+ vpSceneImage.currentItem = currentIndex
+ }
+ }
+
+ @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)
+ }
+ }
+
+ 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°摄像头
+ 高精地图截图
+ 上一个场景
+ 关闭场景
+ 下一个场景
上报
保存
取消