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