[6.10.0]数据落盘

This commit is contained in:
xuxinchao
2025-02-11 15:16:56 +08:00
parent 42a98050e3
commit f3cb8c9046
8 changed files with 286 additions and 4 deletions

View File

@@ -48,6 +48,9 @@ import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.bone.status.fsm.FSMStatusDetailWindowManager
import com.mogo.eagle.core.function.hmi.bone.toolkit.ToolKitDataManager
import com.mogo.eagle.core.function.hmi.ui.camera.RoadVideoDialog
import com.mogo.eagle.core.function.hmi.ui.diskcopy.CopyBagSuccessDialog
import com.mogo.eagle.core.function.hmi.ui.diskcopy.DiskCopyExceptionDialog
import com.mogo.eagle.core.function.hmi.ui.diskcopy.TerminateCopyDataDialog
import com.mogo.eagle.core.function.hmi.ui.lookaround.M1LookAroundView
import com.mogo.eagle.core.function.hmi.ui.notice.DispatchDialogManager
import com.mogo.eagle.core.function.hmi.ui.notice.NoticeCheckDialog
@@ -733,4 +736,40 @@ class MoGoHmiProvider : IMoGoHmiProvider {
}
}
/**
* 展示数据落盘拷贝成功对话框
*/
override fun showCopyBagSuccessDialog() {
ThreadUtils.runOnUiThread{
context?.let{
val copyBagSuccessDialog = CopyBagSuccessDialog(it)
copyBagSuccessDialog.show()
}
}
}
/**
* 展示数据落盘辅助工具-异常情况及建议操作弹窗
*/
override fun showDiskCopyExceptionDialog() {
ThreadUtils.runOnUiThread{
context?.let{
val diskCopyExceptionDialog = DiskCopyExceptionDialog(it)
diskCopyExceptionDialog.show()
}
}
}
/**
* 展示数据落盘-终止数据拷贝确认弹窗
*/
override fun showTerminateCopyDataDialog() {
ThreadUtils.runOnUiThread{
context?.let{
val terminateCopyDataDialog = TerminateCopyDataDialog(it)
terminateCopyDataDialog.show()
}
}
}
}

View File

@@ -0,0 +1,41 @@
package com.mogo.eagle.core.function.hmi.ui.diskcopy
import android.content.Context
import androidx.lifecycle.LifecycleObserver
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.dialog.BaseFloatDialog
import kotlinx.android.synthetic.main.dialog_copy_bag_success.tvCopyBagSuccessClose
/**
* 数据落盘拷贝成功对话框
*/
class CopyBagSuccessDialog(context: Context) :
BaseFloatDialog(context,TAG), LifecycleObserver {
companion object {
private const val TAG = "CopyBagSuccessDialog"
}
init{
setContentView(R.layout.dialog_copy_bag_success)
setCanceledOnTouchOutside(false)
initView()
}
private fun initView(){
tvCopyBagSuccessClose.setOnClickListener {
dismiss()
}
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
}
}

View File

@@ -3,22 +3,35 @@ package com.mogo.eagle.core.function.hmi.ui.diskcopy
import android.content.Context
import android.os.Build
import android.util.AttributeSet
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import androidx.annotation.RequiresApi
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.GridLayoutManager
import com.mogo.eagle.core.data.deva.diskcopy.CopyCalendarInfo
import com.mogo.eagle.core.function.api.devatools.IDiskCopyListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.mogo.eagle.core.function.call.devatools.CallerDiskCopyManager
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.ui.diskcopy.adapter.DiskCopyCalendarAdapter
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import kotlinx.android.synthetic.main.view_disk_copy.view.groupDateSelect
import kotlinx.android.synthetic.main.view_disk_copy.view.groupDiskCopy
import kotlinx.android.synthetic.main.view_disk_copy.view.ivDiskUnplug
import kotlinx.android.synthetic.main.view_disk_copy.view.pbDiskCopyProgress
import kotlinx.android.synthetic.main.view_disk_copy.view.pbDiskUsedSpaces
import kotlinx.android.synthetic.main.view_disk_copy.view.rvCalendar
import kotlinx.android.synthetic.main.view_disk_copy.view.tvCopyStatus
import kotlinx.android.synthetic.main.view_disk_copy.view.tvCurrentDate
import kotlinx.android.synthetic.main.view_disk_copy.view.tvCurrentMonth
import kotlinx.android.synthetic.main.view_disk_copy.view.tvCurrentWeek
import kotlinx.android.synthetic.main.view_disk_copy.view.tvDiskFreeSpace
import kotlinx.android.synthetic.main.view_disk_copy.view.tvDiskUsedPercent
import kotlinx.android.synthetic.main.view_disk_copy.view.viewDiskCopyDate
import packet_mytest_upload.CopyBag
import java.time.DayOfWeek
import java.time.LocalDate
import java.time.Month
@@ -31,7 +44,7 @@ class DiskCopyView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr){
) : ConstraintLayout(context, attrs, defStyleAttr), IDiskCopyListener {
companion object {
const val TAG = "DiskCopyView"
@@ -64,6 +77,15 @@ class DiskCopyView @JvmOverloads constructor(
rvCalendar.adapter = diskCopyCalendarAdapter
rvCalendar.layoutManager = gridLayoutManager
//拔出硬盘
ivDiskUnplug.setOnClickListener {
//TODO
//如果处于拷贝中,弹出终止数据拷贝确认提示窗
CallerHmiManager.showTerminateCopyDataDialog()
}
//数据日期
viewDiskCopyDate.setOnClickListener {
//隐藏当前视图
pbDiskCopyProgress.visibility = View.GONE
@@ -204,12 +226,91 @@ class DiskCopyView @JvmOverloads constructor(
override fun onAttachedToWindow() {
super.onAttachedToWindow()
CallerDiskCopyManager.addListener(TAG, this)
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
CallerDiskCopyManager.removeListener(TAG)
}
/**
* 数据落盘拷贝信息回调
*/
override fun onCopyBag(diskCopy: CopyBag.DiskCopy) {
super.onCopyBag(diskCopy)
ThreadUtils.runOnUiThread {
//挂载状态
Logger.i(TAG,"diskCopy.status="+diskCopy.status)
when(diskCopy.status){
//挂载成功
0->{
//显示数据落盘辅助工具视图
this@DiskCopyView.visibility = View.VISIBLE
}
//挂载异常
1->{
//TODO
}
//未挂载
2->{
//隐藏数据落盘辅助工具视图
this@DiskCopyView.visibility = View.GONE
}
}
//挂载成功的信息集合
Logger.i(TAG,"磁盘总空间="+diskCopy.mountSuccess.totalSize)
Logger.i(TAG,"磁盘剩余空间="+diskCopy.mountSuccess.diskFree)
//磁盘剩余空间显示
tvDiskFreeSpace.text = String.format(resources.getString(R.string.disk_free_space),diskCopy.mountSuccess.diskFree)
val diskUsedPercent = ((diskCopy.mountSuccess.totalSize-diskCopy.mountSuccess.diskFree)*100/diskCopy.mountSuccess.totalSize).toInt()
//磁盘已用空间百分比文字显示
tvDiskUsedPercent.text = String.format(resources.getString(R.string.disk_used_percent),diskUsedPercent)
//磁盘已用空间百分比进度条
pbDiskUsedSpaces.progress = diskUsedPercent
Logger.i(TAG,"磁盘空间不足提示: 移动硬盘剩余空间不足,建议更换硬盘="+diskCopy.mountSuccess.tips)
//TODO 需要确定字段具体示意
Logger.i(TAG,"可拷贝日期数量="+diskCopy.mountSuccess.datesCount)
diskCopy.mountSuccess.datesList.forEach {
Logger.i(TAG, "可拷贝日期=$it")
}
//挂载异常: 移动硬盘挂载失败,请重插或更换硬盘
Logger.i(TAG,"挂载异常="+diskCopy.mountError)
//需要拷贝的文件总大小
Logger.i(TAG,"需要拷贝的文件总大小="+diskCopy.copyTotalSize)
//已拷贝大小
Logger.i(TAG,"已拷贝大小="+diskCopy.copiedSize)
if(diskCopy.copiedSize == 0L){
//隐藏拷贝进度条
pbDiskCopyProgress.visibility = View.GONE
}else{
//展示拷贝进度条,并且展示进度
pbDiskCopyProgress.visibility = View.VISIBLE
val copyProgress = (diskCopy.copiedSize*100/diskCopy.copyTotalSize).toInt()
pbDiskCopyProgress.progress = copyProgress
//拷贝状态控件显示当前拷贝进度
tvCopyStatus.text = String.format(resources.getString(R.string.disk_copy_progress),copyProgress)
}
//拷贝剩余时间
Logger.i(TAG,"拷贝剩余时间="+diskCopy.freeTime)
//拷贝是否成功,是-True,否-False
Logger.i(TAG,"拷贝是否成功,是-True,否-False="+diskCopy.copyStatus)
//拷贝异常提示,如域控间连接超时拷贝失败,建议查看各域控是否在线,不在线请重启车辆再试
Logger.i(TAG,"拷贝异常提示="+diskCopy.copyErr)
//即将中止数据拷贝并安全弹出硬盘,是否继续操作?
Logger.i(TAG,"即将中止数据拷贝并安全弹出硬盘,是否继续操作?="+diskCopy.abortData)
//硬盘是否已安全弹出,是-True,否-False
Logger.i(TAG,"硬盘是否已安全弹出,是-True,否-False="+diskCopy.diskUnmount)
//硬盘弹出失败提示:安全弹出失败,建议车辆下电后拔走硬盘
Logger.i(TAG,"硬盘弹出失败提示="+diskCopy.unmountErr)
//拷贝成功的信息提示,如当前车辆拷贝的各类型的包各有多少个
Logger.i(TAG,"拷贝成功的信息提示="+diskCopy.successInfo)
}
}
}

View File

@@ -2,6 +2,7 @@ package com.mogo.eagle.core.function.hmi.ui.diskcopy
import android.content.Context
import androidx.lifecycle.LifecycleObserver
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.dialog.BaseFloatDialog
import kotlinx.android.synthetic.main.dialog_terminate_copy_data.tvCopyTerminateCancel
@@ -26,12 +27,11 @@ class TerminateCopyDataDialog(context: Context) :
private fun initView(){
//确认终止数据拷贝
tvCopyTerminateConfirm.setOnClickListener {
//TODO
CallerAutoPilotControlManager.sendCopyBagAbortCopy()
dismiss()
}
//取消终止数据拷贝
tvCopyTerminateCancel.setOnClickListener {
//TODO
dismiss()
}
}

View File

@@ -0,0 +1,60 @@
<?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_900"
android:layout_height="@dimen/dp_620"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@drawable/bg_bone_dialog"
app:roundLayoutRadius="@dimen/dp_50">
<ImageView
android:id="@+id/ivCopyBagSuccess"
android:layout_width="@dimen/dp_140"
android:layout_height="@dimen/dp_140"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="@dimen/dp_87"
android:src="@drawable/icon_ota_upgrade_success"
android:contentDescription="@string/copy_bag_success_icon"
/>
<TextView
android:id="@+id/tvCopyBagSuccessTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/ivCopyBagSuccess"
android:layout_marginTop="@dimen/dp_30"
android:textColor="@color/white"
android:textSize="@dimen/sp_45"
/>
<TextView
android:id="@+id/tvCopyBagSuccessContent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvCopyBagSuccessTitle"
android:layout_marginTop="@dimen/dp_10"
android:textColor="@color/white"
android:textSize="@dimen/sp_36"
/>
<TextView
android:id="@+id/tvCopyBagSuccessClose"
android:layout_width="@dimen/dp_356"
android:layout_height="@dimen/dp_120"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="@dimen/dp_62"
android:gravity="center"
android:text="@string/copy_bag_success_close"
android:background="@drawable/bg_dialog_btn"
android:textColor="@color/color_2EACFF"
android:textSize="@dimen/dp_40"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -284,5 +284,10 @@
<string name="disk_copy_terminate_cancel">取消</string>
<string name="disk_copy_exception_icon">数据落盘异常图标</string>
<string name="disk_copy_exception_close">关闭</string>
<string name="copy_bag_success_icon">数据落盘成功图标</string>
<string name="copy_bag_success_close">关闭</string>
<string name="disk_free_space">%dG可用</string>
<string name="disk_used_percent">%d%</string>
<string name="disk_copy_progress">拷贝中…%d%</string>
</resources>

View File

@@ -340,4 +340,19 @@ interface IMoGoHmiProvider :IProvider{
* @param result true升级成功 false升级失败
*/
fun showOTAResultDialog(result: Boolean)
/**
* 展示数据落盘拷贝成功对话框
*/
fun showCopyBagSuccessDialog()
/**
* 展示数据落盘辅助工具-异常情况及建议操作弹窗
*/
fun showDiskCopyExceptionDialog()
/**
* 展示数据落盘-终止数据拷贝确认弹窗
*/
fun showTerminateCopyDataDialog()
}

View File

@@ -496,4 +496,25 @@ object CallerHmiManager {
hmiProviderApi?.showOTAResultDialog(result)
}
/**
* 展示数据落盘拷贝成功对话框
*/
fun showCopyBagSuccessDialog(){
hmiProviderApi?.showCopyBagSuccessDialog()
}
/**
* 展示数据落盘辅助工具-异常情况及建议操作弹窗
*/
fun showDiskCopyExceptionDialog(){
hmiProviderApi?.showDiskCopyExceptionDialog()
}
/**
* 展示数据落盘-终止数据拷贝确认弹窗
*/
fun showTerminateCopyDataDialog(){
hmiProviderApi?.showTerminateCopyDataDialog()
}
}