diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt
index 0b9d7fb0d0..d77d232eb4 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt
@@ -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()
+ }
+ }
+ }
+
}
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/diskcopy/CopyBagSuccessDialog.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/diskcopy/CopyBagSuccessDialog.kt
new file mode 100644
index 0000000000..070cbd7d90
--- /dev/null
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/diskcopy/CopyBagSuccessDialog.kt
@@ -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()
+
+ }
+
+}
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/diskcopy/DiskCopyView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/diskcopy/DiskCopyView.kt
index 721dc7a7f7..531930ab29 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/diskcopy/DiskCopyView.kt
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/diskcopy/DiskCopyView.kt
@@ -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)
+ }
}
}
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/diskcopy/TerminateCopyDataDialog.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/diskcopy/TerminateCopyDataDialog.kt
index 645d87acc8..c7c1295f03 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/diskcopy/TerminateCopyDataDialog.kt
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/diskcopy/TerminateCopyDataDialog.kt
@@ -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()
}
}
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_copy_bag_success.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_copy_bag_success.xml
new file mode 100644
index 0000000000..98cab912e3
--- /dev/null
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_copy_bag_success.xml
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml
index dd42350a7e..0030b3858a 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml
@@ -284,5 +284,10 @@
取消
数据落盘异常图标
关闭
+ 数据落盘成功图标
+ 关闭
+ %dG可用
+ %d%
+ 拷贝中…%d%
diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoHmiProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoHmiProvider.kt
index a157768e25..0154520b3d 100644
--- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoHmiProvider.kt
+++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoHmiProvider.kt
@@ -340,4 +340,19 @@ interface IMoGoHmiProvider :IProvider{
* @param result true升级成功 false升级失败
*/
fun showOTAResultDialog(result: Boolean)
+
+ /**
+ * 展示数据落盘拷贝成功对话框
+ */
+ fun showCopyBagSuccessDialog()
+
+ /**
+ * 展示数据落盘辅助工具-异常情况及建议操作弹窗
+ */
+ fun showDiskCopyExceptionDialog()
+
+ /**
+ * 展示数据落盘-终止数据拷贝确认弹窗
+ */
+ fun showTerminateCopyDataDialog()
}
\ No newline at end of file
diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt
index d44d39057e..ab17a9d15c 100644
--- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt
+++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt
@@ -496,4 +496,25 @@ object CallerHmiManager {
hmiProviderApi?.showOTAResultDialog(result)
}
+ /**
+ * 展示数据落盘拷贝成功对话框
+ */
+ fun showCopyBagSuccessDialog(){
+ hmiProviderApi?.showCopyBagSuccessDialog()
+ }
+
+ /**
+ * 展示数据落盘辅助工具-异常情况及建议操作弹窗
+ */
+ fun showDiskCopyExceptionDialog(){
+ hmiProviderApi?.showDiskCopyExceptionDialog()
+ }
+
+ /**
+ * 展示数据落盘-终止数据拷贝确认弹窗
+ */
+ fun showTerminateCopyDataDialog(){
+ hmiProviderApi?.showTerminateCopyDataDialog()
+ }
+
}
\ No newline at end of file