[6.6.0]接管记录

This commit is contained in:
xuxinchao
2024-08-19 12:11:57 +08:00
parent 074dec6804
commit b4ed1f8585
17 changed files with 339 additions and 188 deletions

View File

@@ -82,6 +82,7 @@ import com.zhjt.mogo_core_function_devatools.tts.TtsManager.Companion.ttsManager
import com.zhjt.mogo_core_function_devatools.upgrade.UpgradeManager.Companion.upgradeManager
import com.zhjt.mogo_core_function_devatools.weaknetwork.DetectResultImpl
import com.zhjt.mogo_core_function_devatools.weaknetwork.WeakNetworkStrategy
import com.zhjt.mogo_core_function_devatools.workorder.WorkOrderManager
import com.zhjt.service.chain.ChainLog
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
@@ -449,6 +450,13 @@ class DevaToolsProvider : IDevaToolsProvider, IAppStateListener {
BadCaseManager.showBadCaseManagerWindow(context)
}
/**
* 展示接管记录页面
*/
override fun showTakeOverRecordView(context: Context) {
WorkOrderManager.workOrderManager.showTakeOverRecordView(context)
}
/**
* 启动调用SSM停服命令超时检测
*/

View File

@@ -13,6 +13,7 @@ import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.Lifecycle.Event
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.LifecycleOwner
import com.mogo.commons.env.ProjectUtils
import com.mogo.commons.module.status.IMogoStatusChangedListener
import com.mogo.commons.module.status.MogoStatusManager
import com.mogo.commons.module.status.StatusDescriptor
@@ -53,6 +54,7 @@ import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig
import com.zhjt.mogo_core_function_devatools.badcase.repository.db.entity.AutoPilotRecord
import com.zhjt.mogo_core_function_devatools.badcase.util.RecordBitmapUtils
import com.zhjt.mogo_core_function_devatools.ext.enqueuePop
import com.zhjt.mogo_core_function_devatools.workorder.ReportTypeWindow
import com.zhjt.mogo_core_function_devatools.workorder.WorkOrderWindow
import me.jessyan.autosize.utils.AutoSizeUtils
import record_cache.RecordPanelOuterClass
@@ -189,15 +191,28 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis
view.setOnClickListener{
if (ClickUtils.isFastClick()){
if (NetworkUtils.isConnected()){
if (BadCaseConfig.dockerVersion != null){
//展示工单上报弹窗
val workOrderWindow = WorkOrderWindow(activity)
workOrderWindow.setClickListener(object: WorkOrderWindow.ClickListener{
override fun closeWindow() {
workOrderWindow.hideFloatWindow()
}
})
workOrderWindow.showFloatWindow()
//TODO 更改dockerVersion是否为空
if (BadCaseConfig.dockerVersion == null){
if(ProjectUtils.isSaas()){
//660版本数据闭环增加统一上报问题入口仅限于saas渠道
//TODO 已存在WIndow再次点击会再次创建WIndow
val reportTypeWindow = ReportTypeWindow(activity)
reportTypeWindow.setClickListener(object: ReportTypeWindow.ClickListener{
override fun closeWindow() {
reportTypeWindow.hideFloatWindow()
}
})
reportTypeWindow.showFloatWindow()
}else{
//展示工单上报弹窗
val workOrderWindow = WorkOrderWindow(activity)
workOrderWindow.setClickListener(object: WorkOrderWindow.ClickListener{
override fun closeWindow() {
workOrderWindow.hideFloatWindow()
}
})
workOrderWindow.showFloatWindow()
}
}else{
ToastUtils.showShort("工控机连接状态异常")
}

View File

@@ -2,11 +2,27 @@ package com.zhjt.mogo_core_function_devatools.workorder
import android.annotation.SuppressLint
import android.app.Activity
import android.graphics.PixelFormat
import android.os.CountDownTimer
import android.os.SystemClock
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 android.widget.TextView
import androidx.appcompat.widget.AppCompatTextView
import androidx.constraintlayout.widget.Group
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.mogo.eagle.core.utilcode.util.BarUtils
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.zhjt.mogo_core_function_devatools.R
import com.zhjt.mogo_core_function_devatools.badcase.record.RecordManager
import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig
import java.util.Random
import kotlin.math.absoluteValue
import kotlin.math.round
/**
* 上报类型选择,包括一键上报及上报类型选择:故障类、接管类
@@ -22,6 +38,18 @@ class ReportTypeWindow constructor(activity: Activity) {
private var mWindowParams: WindowManager.LayoutParams? = null
private var mWindowManager: WindowManager? = null
private lateinit var mFloatLayout: View
private var clickListener: ClickListener? = null
private lateinit var tvOneClickReportTitle: TextView
private lateinit var ivOneClickReport: ImageView
private lateinit var oneClickGroup: Group
private lateinit var tvReportTypeFault: AppCompatTextView
private lateinit var tvReportTypeTakeOver: AppCompatTextView
private lateinit var reportTypeGroup: Group
private lateinit var tvReportSuccess: AppCompatTextView
private var isOneClickType: Boolean = false //是否是一键上报类型
private var hasReportOperate: Boolean = false //是否点击了一键上报按钮
init {
initFloatWindow()
@@ -30,13 +58,105 @@ class ReportTypeWindow constructor(activity: Activity) {
@SuppressLint("InflateParams")
private fun initFloatWindow(){
mFloatLayout = LayoutInflater.from(mActivity).inflate(R.layout.view_report_type, null) as View
initView()
initEvent()
mWindowParams = WindowManager.LayoutParams()
mWindowManager = mActivity.windowManager
mWindowParams?.let {
it.format = PixelFormat.RGBA_8888
it.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
it.gravity = Gravity.START or Gravity.TOP
it.width = 457
it.height = 333
it.alpha = 1.0f
}
}
private fun initView(){
tvOneClickReportTitle = mFloatLayout.findViewById(R.id.tvOneClickReportTitle)
ivOneClickReport = mFloatLayout.findViewById(R.id.ivOneClickReport)
oneClickGroup = mFloatLayout.findViewById(R.id.oneClickGroup)
tvReportTypeFault = mFloatLayout.findViewById(R.id.tvReportTypeFault)
tvReportTypeTakeOver = mFloatLayout.findViewById(R.id.tvReportTypeTakeOver)
reportTypeGroup = mFloatLayout.findViewById(R.id.reportTypeGroup)
tvReportSuccess = mFloatLayout.findViewById(R.id.tvReportSuccess)
}
private fun initEvent(){
if(isOneClickType){
oneClickGroup.visibility = View.VISIBLE
reportTypeGroup.visibility = View.GONE
tvReportSuccess.visibility = View.GONE
tvOneClickReportTitle.text = String.format(mActivity.resources.getString(R.string.identified_vehicle_malfunction),5)
val oneClickTimer = object : CountDownTimer(5000, 1000) {
override fun onTick(count: Long) {
ThreadUtils.runOnUiThread {
tvOneClickReportTitle.text = String.format(mActivity.resources.getString(R.string.identified_vehicle_malfunction),round((count.toDouble()/1000)).toInt())
}
}
override fun onFinish() {
//如果有页面操作,则不自动关闭窗口
if(!hasReportOperate){
clickListener?.closeWindow()
}
}
}
oneClickTimer.start()
}else{
oneClickGroup.visibility = View.GONE
reportTypeGroup.visibility = View.VISIBLE
tvReportSuccess.visibility = View.GONE
}
//一键上报
ivOneClickReport.setOnClickListener {
hasReportOperate = true
//TODO
}
//故障类
tvReportTypeFault.setOnClickListener {
val faultReasonWindow = FaultReasonWindow(mActivity)
faultReasonWindow.showFloatWindow()
clickListener?.closeWindow()
}
//主动录包
tvReportTypeTakeOver.setOnClickListener {
val response = CallerAutoPilotControlManager.recordPackage(
BadCaseConfig.type, Random(SystemClock.elapsedRealtime()).nextInt().absoluteValue,
BadCaseConfig.totalDuration, BadCaseConfig.previousDuration)
if(response){
ToastUtils.showShort("主动录包命令下发成功")
}else{
ToastUtils.showShort("主动录包命令下发失败")
}
clickListener?.closeWindow()
}
}
fun showFloatWindow() {
if (mFloatLayout.parent == null) {
val metrics = DisplayMetrics()
// 默认固定位置,靠屏幕右边缘的中间
mWindowManager!!.defaultDisplay.getMetrics(metrics)
mWindowParams!!.x = metrics.widthPixels-2257
mWindowParams!!.y = metrics.heightPixels - BarUtils.getStatusBarHeight()-420
mWindowManager!!.addView(mFloatLayout, mWindowParams)
}
}
fun hideFloatWindow() {
if (mFloatLayout.parent != null){
mWindowManager!!.removeView(mFloatLayout)
}
}
fun setClickListener(clickListener: ClickListener) {
this.clickListener = clickListener
}
interface ClickListener {
fun closeWindow()
}
}

View File

@@ -1,6 +1,5 @@
package com.zhjt.mogo_core_function_devatools.workorder
import android.annotation.SuppressLint
import android.app.Activity
import android.graphics.PixelFormat
@@ -21,6 +20,7 @@ import android.widget.EditText
import android.widget.ImageView
import android.widget.TextView
import androidx.appcompat.widget.AppCompatEditText
import androidx.appcompat.widget.AppCompatTextView
import androidx.constraintlayout.widget.Group
import androidx.recyclerview.widget.RecyclerView
import com.iflytek.cloud.ErrorCode
@@ -43,7 +43,7 @@ import kotlin.math.absoluteValue
/**
* 接管原因编辑窗口
*/
class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListener{
class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListener {
companion object{
const val TAG = "TakeOverReasonWindow"
@@ -71,21 +71,17 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
private var clickListener: ClickListener? = null
private lateinit var tvTakeOverTitle: TextView
private lateinit var tvTakeOverTime: TextView
private lateinit var tvFaultType: TextView
private lateinit var ivFaultTypeSelect: ImageView
private lateinit var tvFaultReason: TextView
private lateinit var ivFaultReasonSelect: ImageView
private lateinit var ivTimeReduce: ImageView
private lateinit var tvOccurrenceTime: TextView
private lateinit var ivTimeAdd: ImageView
private lateinit var tvTakeOverType: TextView
private lateinit var ivTakeOverTypeSelect: ImageView
private lateinit var tvTakeOverReason: TextView
private lateinit var ivTakeOverReasonSelect: ImageView
private lateinit var etNoteInput: AppCompatEditText
private lateinit var ivNoteAudio: ImageView
private lateinit var tvTakeOverReport: TextView
private lateinit var tvTakeOverCancel: TextView
private lateinit var rvFaultList: RecyclerView
private lateinit var tvUploadSuccess: TextView
private lateinit var rvTakeOverList: RecyclerView
private lateinit var tvUploadSuccess: AppCompatTextView
private lateinit var takeOverReasonGroup: Group
init {
@@ -115,44 +111,27 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
}
private fun initView(){
tvTakeOverTitle = mFloatLayout.findViewById(R.id.tvTakeOverTitle)
tvTakeOverTime = mFloatLayout.findViewById(R.id.tvTakeOverTime)
tvFaultType = mFloatLayout.findViewById(R.id.tvFaultType)
ivFaultTypeSelect = mFloatLayout.findViewById(R.id.ivFaultTypeSelect)
tvFaultReason = mFloatLayout.findViewById(R.id.tvFaultReason)
ivFaultReasonSelect = mFloatLayout.findViewById(R.id.ivFaultReasonSelect)
ivTimeReduce = mFloatLayout.findViewById(R.id.ivTimeReduce)
tvOccurrenceTime = mFloatLayout.findViewById(R.id.tvOccurrenceTime)
ivTimeAdd = mFloatLayout.findViewById(R.id.ivTimeAdd)
tvTakeOverType = mFloatLayout.findViewById(R.id.tvTakeOverType)
ivTakeOverTypeSelect = mFloatLayout.findViewById(R.id.ivTakeOverTypeSelect)
tvTakeOverReason = mFloatLayout.findViewById(R.id.tvTakeOverReason)
ivTakeOverReasonSelect = mFloatLayout.findViewById(R.id.ivTakeOverReasonSelect)
etNoteInput = mFloatLayout.findViewById(R.id.etNoteInput)
ivNoteAudio = mFloatLayout.findViewById(R.id.ivNoteAudio)
tvTakeOverReport = mFloatLayout.findViewById(R.id.tvTakeOverReport)
tvTakeOverCancel = mFloatLayout.findViewById(R.id.tvTakeOverCancel)
rvFaultList = mFloatLayout.findViewById(R.id.rvFaultList)
rvTakeOverList = mFloatLayout.findViewById(R.id.rvTakeOverList)
tvUploadSuccess = mFloatLayout.findViewById(R.id.tvUploadSuccess)
takeOverReasonGroup = mFloatLayout.findViewById(R.id.takeOverReasonGroup)
}
@OptIn(DelicateCoroutinesApi::class)
@SuppressLint("SetTextI18n")
private fun initEvent(){
//弹窗展示时间
tvTakeOverTime.text = mActivity.resources.getString(R.string.take_over_time) +
millis2String(System.currentTimeMillis(), TimeUtils.getHourMinSecondFormat())
//发生时间
tvOccurrenceTime.text = millis2String(workOrderOccurrenceTime, TimeUtils.getHourMinFormat())
ivTimeReduce.setOnClickListener {
workOrderOccurrenceTime -= 60000
tvOccurrenceTime.text = millis2String(workOrderOccurrenceTime, TimeUtils.getHourMinFormat())
}
ivTimeAdd.setOnClickListener {
if(workOrderOccurrenceTime + 60000 > System.currentTimeMillis()){
ToastUtils.showShort("发生时间应在当前时间之前")
return@setOnClickListener
}
workOrderOccurrenceTime += 60000
tvOccurrenceTime.text = millis2String(workOrderOccurrenceTime, TimeUtils.getHourMinFormat())
}
//补充描述
etNoteInput.onFocusChangeListener = OnFocusChangeListener { v, hasFocus ->
val edit = v as EditText
@@ -187,9 +166,8 @@ class TakeOverReasonWindow constructor(activity: Activity) : View.OnTouchListene
}
//取消
tvTakeOverCancel.setOnClickListener {
clickListener?.closeWindow()
hideFloatWindow()
}
}
private fun setAudio(status: Boolean){

View File

@@ -28,6 +28,7 @@ class TakeOverRecordView @JvmOverloads constructor(
}
private var takeOverListAdapter: TakeOverListAdapter ?= null
private var clickListener: ClickListener? = null
init {
LayoutInflater.from(context).inflate(R.layout.view_take_over_record, this, true)
@@ -37,7 +38,7 @@ class TakeOverRecordView @JvmOverloads constructor(
private fun initView(){
//关闭窗口
ivTakeOverRecordClose.setOnClickListener {
clickListener?.onClose()
}
takeOverListAdapter = TakeOverListAdapter()
val linearLayoutManager = LinearLayoutManager(context)
@@ -50,4 +51,12 @@ class TakeOverRecordView @JvmOverloads constructor(
}
fun setOnClickListener(clickListener: ClickListener) {
this.clickListener = clickListener
}
interface ClickListener {
fun onClose()
}
}

View File

@@ -1,8 +1,11 @@
package com.zhjt.mogo_core_function_devatools.workorder
import android.content.Context
import android.view.WindowManager
import com.mogo.eagle.core.data.deva.report.WorkOrderReportInfo
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager
import com.zhjt.mogo_core_function_devatools.ext.enqueuePop
import me.jessyan.autosize.utils.AutoSizeUtils
/**
* @author XuXinChao
@@ -20,11 +23,34 @@ class WorkOrderManager{
private var mContext: Context? = null
private val workOrderNetWorkModel = WorkOrderNetWorkModel()
private var hideFloat: (() -> Unit)? = null
fun init(context: Context){
mContext = context
}
/**
* 展示接管记录页面
*/
fun showTakeOverRecordView(context: Context){
val takeOverRecordView = TakeOverRecordView(context)
takeOverRecordView.setOnClickListener(object: TakeOverRecordView.ClickListener{
override fun onClose() {
hideFloat?.invoke()
hideFloat = null
}
})
context.enqueuePop(
takeOverRecordView,
AutoSizeUtils.dp2px(context, 960f),
WindowManager.LayoutParams.MATCH_PARENT,
key = "BadCaseManagerView"
).also {
hideFloat = it
}
}
/**
* 工单上报
*/

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 108 KiB

View File

@@ -48,7 +48,7 @@
android:text="@string/report_type"
android:textColor="@color/white"
android:textSize="@dimen/sp_32"
android:layout_marginTop="@dimen/dp_30"
android:layout_marginTop="@dimen/dp_50"
/>
<androidx.appcompat.widget.AppCompatTextView
@@ -61,9 +61,9 @@
android:textColor="@color/white"
android:textSize="@dimen/sp_26"
app:drawableTopCompat="@drawable/icon_type_fault"
android:drawablePadding="@dimen/dp_12"
android:layout_marginLeft="@dimen/dp_81"
android:layout_marginTop="@dimen/dp_107"
android:drawablePadding="@dimen/dp_3"
android:layout_marginLeft="@dimen/dp_72"
android:layout_marginTop="@dimen/dp_118"
/>
<androidx.appcompat.widget.AppCompatTextView
@@ -76,9 +76,9 @@
android:textColor="@color/white"
android:textSize="@dimen/sp_26"
app:drawableTopCompat="@drawable/icon_type_take_over"
android:drawablePadding="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_107"
android:layout_marginRight="@dimen/dp_81"
android:drawablePadding="@dimen/dp_3"
android:layout_marginTop="@dimen/dp_118"
android:layout_marginRight="@dimen/dp_72"
/>
<View
@@ -97,7 +97,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="tvReportTypeTitle,tvReportTypeFault,tvReportTypeTakeOver,viewDivider"
android:visibility="gone"
android:visibility="visible"
/>
<androidx.appcompat.widget.AppCompatTextView
@@ -113,6 +113,7 @@
app:drawableTopCompat="@drawable/icon_report_success"
android:layout_marginTop="@dimen/dp_59"
android:drawablePadding="@dimen/dp_22"
android:visibility="gone"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="@dimen/dp_844"
android:layout_height="@dimen/dp_991"
android:layout_height="@dimen/dp_846"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@drawable/bg_take_over_reason">
@@ -41,7 +41,7 @@
/>
<View
android:id="@+id/viewFaultTypeLabel"
android:id="@+id/viewTakeOverTypeLabel"
android:layout_width="@dimen/dp_6"
android:layout_height="@dimen/dp_29"
android:background="#FF0176FF"
@@ -55,18 +55,18 @@
android:id="@+id/tvTypeTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/fault_type"
android:text="@string/take_over_type"
android:textSize="@dimen/sp_32"
android:textColor="@color/white"
android:textStyle="bold"
app:layout_constraintTop_toTopOf="@id/viewFaultTypeLabel"
app:layout_constraintBottom_toBottomOf="@id/viewFaultTypeLabel"
app:layout_constraintLeft_toRightOf="@id/viewFaultTypeLabel"
app:layout_constraintTop_toTopOf="@id/viewTakeOverTypeLabel"
app:layout_constraintBottom_toBottomOf="@id/viewTakeOverTypeLabel"
app:layout_constraintLeft_toRightOf="@id/viewTakeOverTypeLabel"
android:layout_marginStart="@dimen/dp_14"
/>
<View
android:id="@+id/viewFaultType"
android:id="@+id/viewTakeOverType"
android:layout_width="@dimen/dp_781"
android:layout_height="@dimen/dp_70"
app:layout_constraintLeft_toLeftOf="parent"
@@ -77,56 +77,56 @@
/>
<TextView
android:id="@+id/tvFaultType"
android:id="@+id/tvTakeOverType"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/viewFaultType"
app:layout_constraintBottom_toBottomOf="@id/viewFaultType"
app:layout_constraintLeft_toLeftOf="@id/viewFaultType"
app:layout_constraintTop_toTopOf="@id/viewTakeOverType"
app:layout_constraintBottom_toBottomOf="@id/viewTakeOverType"
app:layout_constraintLeft_toLeftOf="@id/viewTakeOverType"
android:layout_marginLeft="@dimen/dp_21"
android:textSize="@dimen/sp_30"
android:textColor="@color/white"
/>
<ImageView
android:id="@+id/ivFaultTypeSelect"
android:id="@+id/ivTakeOverTypeSelect"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/viewFaultType"
app:layout_constraintBottom_toBottomOf="@id/viewFaultType"
app:layout_constraintRight_toRightOf="@id/viewFaultType"
app:layout_constraintTop_toTopOf="@id/viewTakeOverType"
app:layout_constraintBottom_toBottomOf="@id/viewTakeOverType"
app:layout_constraintRight_toRightOf="@id/viewTakeOverType"
android:src="@drawable/icon_fault_expand"
android:layout_marginRight="@dimen/dp_21"
android:contentDescription="@string/fault_type_select"
android:contentDescription="@string/take_over_type_select"
/>
<View
android:id="@+id/viewFaultReasonLabel"
android:id="@+id/viewTakeOverReasonLabel"
android:layout_width="@dimen/dp_6"
android:layout_height="@dimen/dp_29"
android:background="#FF0176FF"
app:layout_constraintTop_toBottomOf="@id/viewFaultType"
app:layout_constraintTop_toBottomOf="@id/viewTakeOverType"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="@dimen/dp_32"
android:layout_marginTop="@dimen/dp_48"
/>
<TextView
android:id="@+id/tvFaultReasonTitle"
android:id="@+id/tvTakeOverReasonTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/fault_reason"
android:text="@string/take_over_reason"
android:textSize="@dimen/sp_32"
android:textColor="@color/white"
android:textStyle="bold"
app:layout_constraintTop_toTopOf="@id/viewFaultReasonLabel"
app:layout_constraintBottom_toBottomOf="@id/viewFaultReasonLabel"
app:layout_constraintLeft_toRightOf="@id/viewFaultReasonLabel"
app:layout_constraintTop_toTopOf="@id/viewTakeOverReasonLabel"
app:layout_constraintBottom_toBottomOf="@id/viewTakeOverReasonLabel"
app:layout_constraintLeft_toRightOf="@id/viewTakeOverReasonLabel"
android:layout_marginStart="@dimen/dp_14"
/>
<View
android:id="@+id/viewFaultReason"
android:id="@+id/viewTakeOverReason"
android:layout_width="@dimen/dp_781"
android:layout_height="@dimen/dp_70"
app:layout_constraintLeft_toLeftOf="parent"
@@ -137,121 +137,61 @@
/>
<TextView
android:id="@+id/tvFaultReason"
android:id="@+id/tvTakeOverReason"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/viewFaultReason"
app:layout_constraintBottom_toBottomOf="@id/viewFaultReason"
app:layout_constraintLeft_toLeftOf="@id/viewFaultReason"
app:layout_constraintTop_toTopOf="@id/viewTakeOverReason"
app:layout_constraintBottom_toBottomOf="@id/viewTakeOverReason"
app:layout_constraintLeft_toLeftOf="@id/viewTakeOverReason"
android:layout_marginLeft="@dimen/dp_21"
android:textSize="@dimen/sp_30"
android:textColor="@color/white"
/>
<ImageView
android:id="@+id/ivFaultReasonSelect"
android:id="@+id/ivTakeOverReasonSelect"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/viewFaultReason"
app:layout_constraintBottom_toBottomOf="@id/viewFaultReason"
app:layout_constraintRight_toRightOf="@id/viewFaultReason"
app:layout_constraintTop_toTopOf="@id/viewTakeOverReason"
app:layout_constraintBottom_toBottomOf="@id/viewTakeOverReason"
app:layout_constraintRight_toRightOf="@id/viewTakeOverReason"
android:src="@drawable/icon_fault_expand"
android:layout_marginRight="@dimen/dp_21"
android:contentDescription="@string/fault_type_select"
/>
<View
android:id="@+id/viewFaultTimeLabel"
android:id="@+id/viewTakeOverNoteLabel"
android:layout_width="@dimen/dp_6"
android:layout_height="@dimen/dp_29"
android:background="#FF0176FF"
app:layout_constraintTop_toBottomOf="@id/viewFaultReason"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="@dimen/dp_32"
android:layout_marginTop="@dimen/dp_48"
/>
<TextView
android:id="@+id/tvFaultTimeTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/fault_time"
android:textSize="@dimen/sp_32"
android:textColor="@color/white"
android:textStyle="bold"
app:layout_constraintTop_toTopOf="@id/viewFaultTimeLabel"
app:layout_constraintBottom_toBottomOf="@id/viewFaultTimeLabel"
app:layout_constraintLeft_toRightOf="@id/viewFaultTimeLabel"
android:layout_marginStart="@dimen/dp_14"
/>
<ImageView
android:id="@+id/ivTimeReduce"
android:layout_width="@dimen/dp_72"
android:layout_height="@dimen/dp_72"
android:src="@drawable/icon_work_order_reduce"
app:layout_constraintLeft_toLeftOf="@id/viewFaultTimeLabel"
app:layout_constraintTop_toBottomOf="@id/tvFaultTimeTitle"
android:layout_marginTop="@dimen/dp_17"
android:contentDescription="@string/fault_time_reduce"
/>
<TextView
android:id="@+id/tvOccurrenceTime"
android:layout_width="@dimen/dp_150"
android:layout_height="@dimen/dp_72"
android:textSize="@dimen/sp_30"
android:textColor="@color/white"
android:gravity="center"
android:background="#1AA7B6F0"
app:layout_constraintTop_toTopOf="@id/ivTimeReduce"
app:layout_constraintBottom_toBottomOf="@id/ivTimeReduce"
app:layout_constraintStart_toEndOf="@id/ivTimeReduce"
/>
<ImageView
android:id="@+id/ivTimeAdd"
android:layout_width="@dimen/dp_72"
android:layout_height="@dimen/dp_72"
android:src="@drawable/icon_work_order_add"
app:layout_constraintTop_toTopOf="@id/tvOccurrenceTime"
app:layout_constraintBottom_toBottomOf="@id/tvOccurrenceTime"
app:layout_constraintStart_toEndOf="@id/tvOccurrenceTime"
android:contentDescription="@string/fault_time_add"
/>
<View
android:id="@+id/viewFaultNoteLabel"
android:layout_width="@dimen/dp_6"
android:layout_height="@dimen/dp_29"
android:background="#FF0176FF"
app:layout_constraintTop_toBottomOf="@id/ivTimeReduce"
app:layout_constraintTop_toBottomOf="@id/viewTakeOverReason"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="@dimen/dp_32"
android:layout_marginTop="@dimen/dp_47"
/>
<TextView
android:id="@+id/tvFaultNoteTitle"
android:id="@+id/tvTakeOverNoteTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/fault_note"
android:textSize="@dimen/sp_32"
android:textColor="@color/white"
android:textStyle="bold"
app:layout_constraintTop_toTopOf="@id/viewFaultNoteLabel"
app:layout_constraintBottom_toBottomOf="@id/viewFaultNoteLabel"
app:layout_constraintLeft_toRightOf="@id/viewFaultNoteLabel"
app:layout_constraintTop_toTopOf="@id/viewTakeOverNoteLabel"
app:layout_constraintBottom_toBottomOf="@id/viewTakeOverNoteLabel"
app:layout_constraintLeft_toRightOf="@id/viewTakeOverNoteLabel"
android:layout_marginStart="@dimen/dp_14"
/>
<TextView
android:id="@+id/tvFaultNoteSupplement"
android:id="@+id/tvTakeOverNoteSupplement"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/tvFaultNoteTitle"
app:layout_constraintBottom_toBottomOf="@id/tvFaultNoteTitle"
app:layout_constraintLeft_toRightOf="@id/tvFaultNoteTitle"
app:layout_constraintTop_toTopOf="@id/tvTakeOverNoteTitle"
app:layout_constraintBottom_toBottomOf="@id/tvTakeOverNoteTitle"
app:layout_constraintLeft_toRightOf="@id/tvTakeOverNoteTitle"
android:text="@string/fault_note_supplement"
android:textSize="@dimen/sp_30"
android:textColor="#A3ABC0"
@@ -261,7 +201,7 @@
android:id="@+id/etNoteInput"
android:layout_width="@dimen/dp_779"
android:layout_height="@dimen/dp_115"
app:layout_constraintTop_toBottomOf="@id/viewFaultNoteLabel"
app:layout_constraintTop_toBottomOf="@id/viewTakeOverNoteLabel"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:hint="@string/take_over_note_input"
@@ -322,12 +262,12 @@
/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvFaultList"
android:id="@+id/rvTakeOverList"
android:layout_width="@dimen/dp_0"
android:layout_height="@dimen/dp_0"
app:layout_constraintLeft_toLeftOf="@id/viewFaultType"
app:layout_constraintRight_toRightOf="@id/viewFaultType"
app:layout_constraintTop_toBottomOf="@id/viewFaultType"
app:layout_constraintLeft_toLeftOf="@id/viewTakeOverType"
app:layout_constraintRight_toRightOf="@id/viewTakeOverType"
app:layout_constraintTop_toBottomOf="@id/viewTakeOverType"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="@dimen/dp_39"
android:visibility="gone"
@@ -353,11 +293,12 @@
android:id="@+id/takeOverReasonGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="viewFaultTypeLabel,tvTypeTitle,viewFaultType,tvFaultType,
ivFaultTypeSelect,viewFaultReasonLabel,tvFaultReasonTitle,viewFaultReason,tvFaultReason,
ivFaultReasonSelect,viewFaultTimeLabel,tvFaultTimeTitle,ivTimeReduce,tvOccurrenceTime,
ivTimeAdd,viewFaultNoteLabel,tvFaultNoteTitle,tvFaultNoteSupplement,etNoteInput,
ivNoteAudio,tvTakeOverReport,tvTakeOverCancel,rvFaultList"
app:constraint_referenced_ids="viewTakeOverTypeLabel,tvTypeTitle,viewTakeOverType,
tvTakeOverType,ivTakeOverTypeSelect,viewTakeOverReasonLabel,tvTakeOverReasonTitle,
viewTakeOverReason,tvTakeOverReason,ivTakeOverReasonSelect,viewTakeOverNoteLabel,
tvTakeOverNoteTitle,tvTakeOverNoteSupplement,etNoteInput,ivNoteAudio,
tvTakeOverReport,tvTakeOverCancel,rvTakeOverList"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -33,11 +33,11 @@
<string name="exam_emergency_stop">应急停车</string>
<string name="exam_close">关闭考试车辆控制</string>
<string name="identified_vehicle_malfunction">识别到车辆故障%d</string>
<string name="identified_vehicle_malfunction">识别到车辆故障%ds</string>
<string name="one_click_report">一键上报</string>
<string name="report_type">上报类型</string>
<string name="report_type_fault">故障类</string>
<string name="report_type_take_over">接管类</string>
<string name="report_type_take_over">主动录包</string>
<string name="report_success">已发起上报</string>
<string name="record_success">已发起录包</string>
<string name="take_over_record_close">接管记录关闭按钮</string>
@@ -45,13 +45,16 @@
<string name="take_over_record_upload">一键上传</string>
<string name="take_over_record_delete">删除</string>
<string name="take_over_record_status_label">接管记录状态标签</string>
<string name="take_over_reason">故障原因</string>
<string name="take_over_reason">接管原因</string>
<string name="take_over_time">时间:</string>
<string name="take_over_type_select">接管类型选择</string>
<string name="take_over_type">接管类型</string>
<string name="fault_type">故障类型</string>
<string name="fault_type_select">故障类型选择</string>
<string name="fault_reason">故障原因</string>
<string name="fault_reason_select">故障原因选择</string>
<string name="fault_time">发生时间</string>
<string name="fault_open_time">时间:</string>
<string name="fault_time_reduce">发生时间前溯</string>
<string name="fault_time_add">发生时间后置</string>
<string name="fault_note">补充描述</string>