From 0b40392b2527b14724eece124c0fdf199dd10f06 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Wed, 8 Feb 2023 14:53:37 +0800 Subject: [PATCH] =?UTF-8?q?[2.14.0]BadCase=E4=B8=89=E6=9C=9F-=E5=BD=95?= =?UTF-8?q?=E5=8C=85=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autopilot/MoGoAutopilotProvider.kt | 61 +++--- .../badcase/biz/BadCaseManagerView.kt | 190 +++++++++++------- .../badcase/biz/BagUploadDialog.java | 29 ++- .../badcase/biz/SpaceWarningDialog.java | 12 +- .../biz/adapter/BagManagerListAdapter.kt | 169 +++++++++------- .../res/drawable-xhdpi/icon_bag_audio.png | Bin 0 -> 1658 bytes .../src/main/res/drawable/icon_bag_edit.png | Bin 0 -> 926 bytes .../src/main/res/layout/dialog_bag_upload.xml | 6 +- .../src/main/res/layout/item_bag_manager.xml | 10 +- .../main/res/layout/item_bag_time_title.xml | 16 ++ .../res/layout/layout_badcase_manager.xml | 4 +- .../core/function/hmi/ui/MoGoHmiFragment.kt | 4 +- .../drawable-xhdpi/debug_icon_bag_manager.png | Bin 0 -> 17440 bytes .../main/res/layout/view_auto_pilot_check.xml | 3 +- .../eagle/core/data/badcase/BagInfoEntity.kt | 2 + 15 files changed, 304 insertions(+), 202 deletions(-) create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/drawable-xhdpi/icon_bag_audio.png create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_bag_edit.png create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_time_title.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/debug_icon_bag_manager.png diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt index f44ee28a01..c89509c59e 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt @@ -599,38 +599,39 @@ class MoGoAutopilotProvider : // 包信息列表,获取响应且reqType=2时有效 for(bagsInfoRespEntity in bagManagerEntity.bagsInfoResp){ - // 包描述信息 - val bagDescription = BagManagerOuterClass.BagDescription - .newBuilder() - - bagsInfoRespEntity.description?.let { - bagDescription.description = it.description - bagDescription.hasAudio = it.hasAudio - bagDescription.audioUrl = it.audioUrl - bagDescription.setReportBI(it.reportBI) - } - - val bagsInfoResp = BagManagerOuterClass.BagInfo - .newBuilder() - .setKey(bagsInfoRespEntity.key) - .setTotalSize(bagsInfoRespEntity.totalSize) - .setTimestamp(bagsInfoRespEntity.timestamp) - .setBagPath(bagsInfoRespEntity.bagPath) - .setMergeStat(bagsInfoRespEntity.mergeStat) - .setUploadStat(bagsInfoRespEntity.uploadStat) - .setDescription(bagDescription.build()) - - // 子包信息 - for(subBagEntity in bagsInfoRespEntity.subBags){ - val subBag = BagManagerOuterClass.SubBag + if(bagsInfoRespEntity.itemType == 0){ + // 包描述信息 + val bagDescription = BagManagerOuterClass.BagDescription .newBuilder() - .setKey(subBagEntity.key) - .setHost(subBagEntity.host) - .setSize(subBagEntity.size) - .build() - bagsInfoResp.addSubBags(subBag) + bagsInfoRespEntity.description?.let { + bagDescription.description = it.description + bagDescription.hasAudio = it.hasAudio + bagDescription.audioUrl = it.audioUrl + bagDescription.setReportBI(it.reportBI) + } + + val bagsInfoResp = BagManagerOuterClass.BagInfo + .newBuilder() + .setKey(bagsInfoRespEntity.key) + .setTotalSize(bagsInfoRespEntity.totalSize) + .setTimestamp(bagsInfoRespEntity.timestamp) + .setBagPath(bagsInfoRespEntity.bagPath) + .setMergeStat(bagsInfoRespEntity.mergeStat) + .setUploadStat(bagsInfoRespEntity.uploadStat) + .setDescription(bagDescription.build()) + + // 子包信息 + for(subBagEntity in bagsInfoRespEntity.subBags){ + val subBag = BagManagerOuterClass.SubBag + .newBuilder() + .setKey(subBagEntity.key) + .setHost(subBagEntity.host) + .setSize(subBagEntity.size) + .build() + bagsInfoResp.addSubBags(subBag) + } + bagManager.addBagsInfoResp(bagsInfoResp) } - bagManager.addBagsInfoResp(bagsInfoResp) } //反馈上传cos桶结果,获取响应且reqType=3时有效 diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt index ffca422d84..79e5aaa59e 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BadCaseManagerView.kt @@ -6,7 +6,6 @@ import android.graphics.Color import android.graphics.drawable.ColorDrawable import android.os.Handler import android.util.AttributeSet -import android.util.Log import android.view.LayoutInflater import android.view.View import androidx.constraintlayout.widget.ConstraintLayout @@ -75,11 +74,13 @@ internal class BadCaseManagerView @JvmOverloads constructor( if(bagManagerEntity.bagsInfoResp.size>0){ selectedBagSize = 0 for(selectBagInfo in bagManagerEntity.bagsInfoResp){ - selectBagInfo.selectStatus = true - selectedBagSize += selectBagInfo.totalSize - bagManagerList.add(selectBagInfo) + if(selectBagInfo.itemType == 0){ + selectBagInfo.selectStatus = true + selectedBagSize += selectBagInfo.totalSize + bagManagerList.add(selectBagInfo) + selectedBagNum++ + } } - selectedBagNum = bagManagerEntity.bagsInfoResp.size //显示选择包的个数和大小 tvSelectedBagSize.text = "已选${selectedBagNum}个包,共${selectedBagSize/(1000*1024*1024)}G" tvSelectedBagSize.visibility = View.VISIBLE @@ -109,12 +110,14 @@ internal class BadCaseManagerView @JvmOverloads constructor( CallerAutoPilotManager.sendBagManagerCmd(bagManagerEntity) bagUploadDialog = BagUploadDialog(context) - bagUploadDialog?.setListener { //删除选择 + bagUploadDialog?.setListener { //删除选择,取消上传 bagManagerList.clear() if (bagManagerEntity.bagsInfoResp.size > 0) { for (cancelBagInfo in bagManagerEntity.bagsInfoResp) { - cancelBagInfo.selectStatus = false - bagManagerList.remove(cancelBagInfo) + if(cancelBagInfo.itemType == 0){ + cancelBagInfo.selectStatus = false + bagManagerList.remove(cancelBagInfo) + } } selectedBagNum = 0 selectedBagSize = 0 @@ -122,9 +125,8 @@ internal class BadCaseManagerView @JvmOverloads constructor( bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) } } - bagUploadDialog?.setAllUpload(selectedBagNum,selectedBagSize) bagUploadDialog?.show() - + bagUploadDialog?.setAllUpload(selectedBagNum,selectedBagSize) }else{ ToastUtils.showShort("请先选择要上传的Bag包") } @@ -211,56 +213,78 @@ internal class BadCaseManagerView @JvmOverloads constructor( // DownloadManager.getInstance().download("CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav", // "/mnt/sdcard/mogo/","test13.wav") - val descriptionEntityOne = BagDescriptionEntity("包信息描述1",false, - "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",false) - val bagInfoEntityOne = BagInfoEntity() - bagInfoEntityOne.key = 12341 - bagInfoEntityOne.totalSize = 1*1024*1024*1000 - bagInfoEntityOne.timestamp = System.currentTimeMillis().toString() - bagInfoEntityOne.bagPath = "" - bagInfoEntityOne.mergeStat = false - bagInfoEntityOne.uploadStat = false - bagInfoEntityOne.description = descriptionEntityOne - - val descriptionEntityTwo = BagDescriptionEntity("包信息描述2",true, - "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",true) - val bagInfoEntityTwo = BagInfoEntity() - bagInfoEntityTwo.key = 12342 - bagInfoEntityTwo.totalSize = 2*1024*1024*1000 - bagInfoEntityTwo.timestamp = System.currentTimeMillis().toString() - bagInfoEntityTwo.bagPath = "" - bagInfoEntityTwo.mergeStat = false - bagInfoEntityTwo.uploadStat = false - bagInfoEntityTwo.description = descriptionEntityTwo - - val descriptionEntityThree = BagDescriptionEntity("包信息描述3",true, - "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",true) - val bagInfoEntityThree = BagInfoEntity() - bagInfoEntityThree.key = 12343 - bagInfoEntityThree.totalSize = 1*1024*1024*1000 - bagInfoEntityThree.timestamp = System.currentTimeMillis().toString() - bagInfoEntityThree.bagPath = "" - bagInfoEntityThree.mergeStat = false - bagInfoEntityThree.uploadStat = false - bagInfoEntityThree.description = descriptionEntityThree - - val descriptionEntityFour = BagDescriptionEntity("包信息描述1",true, - "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",true) - val bagInfoEntityFour = BagInfoEntity() - bagInfoEntityFour.key = 12344 - bagInfoEntityFour.totalSize = 10*1024*1024*1000L - bagInfoEntityFour.timestamp = System.currentTimeMillis().toString() - bagInfoEntityFour.bagPath = "" - bagInfoEntityFour.mergeStat = false - bagInfoEntityFour.uploadStat = false - bagInfoEntityFour.description = descriptionEntityFour - - bagManagerEntity.bagsInfoResp.add(bagInfoEntityOne) - bagManagerEntity.bagsInfoResp.add(bagInfoEntityTwo) - bagManagerEntity.bagsInfoResp.add(bagInfoEntityThree) - bagManagerEntity.bagsInfoResp.add(bagInfoEntityFour) - - bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) +// val descriptionEntityOne = BagDescriptionEntity("包信息描述1",false, +// "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",false) +// val bagInfoEntityOne = BagInfoEntity() +// bagInfoEntityOne.key = 12341 +// bagInfoEntityOne.totalSize = 1*1024*1024*1000 +// bagInfoEntityOne.timestamp = "20230208125414" +// bagInfoEntityOne.bagPath = "" +// bagInfoEntityOne.mergeStat = false +// bagInfoEntityOne.uploadStat = false +// bagInfoEntityOne.description = descriptionEntityOne +// +// val descriptionEntityTwo = BagDescriptionEntity("包信息描述2",true, +// "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",true) +// val bagInfoEntityTwo = BagInfoEntity() +// bagInfoEntityTwo.key = 12342 +// bagInfoEntityTwo.totalSize = 2*1024*1024*1000 +// bagInfoEntityTwo.timestamp = "20230208125414" +// bagInfoEntityTwo.bagPath = "" +// bagInfoEntityTwo.mergeStat = false +// bagInfoEntityTwo.uploadStat = false +// bagInfoEntityTwo.description = descriptionEntityTwo +// +// val descriptionEntityThree = BagDescriptionEntity("包信息描述3",true, +// "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",true) +// val bagInfoEntityThree = BagInfoEntity() +// bagInfoEntityThree.key = 12343 +// bagInfoEntityThree.totalSize = 1*1027*1000 +// bagInfoEntityThree.timestamp = "20230208125414" +// bagInfoEntityThree.bagPath = "" +// bagInfoEntityThree.mergeStat = false +// bagInfoEntityThree.uploadStat = false +// bagInfoEntityThree.description = descriptionEntityThree +// +// val descriptionEntityFour = BagDescriptionEntity("包信息描述4",true, +// "CarPad/mogopadlog/X20202111230C01YYW/2023-01-30/Audio_1675049657187_BadCase.wav",true) +// val bagInfoEntityFour = BagInfoEntity() +// bagInfoEntityFour.key = 12344 +// bagInfoEntityFour.totalSize = 10*1024*1024*1000L +// bagInfoEntityFour.timestamp = "20230208125414" +// bagInfoEntityFour.bagPath = "" +// bagInfoEntityFour.mergeStat = false +// bagInfoEntityFour.uploadStat = false +// bagInfoEntityFour.description = descriptionEntityFour +// +// val list: MutableList = ArrayList() +// list.add(bagInfoEntityOne) +// list.add(bagInfoEntityTwo) +// list.add(bagInfoEntityThree) +// list.add(bagInfoEntityFour) +// for(entity in list){ +// entity.timestamp?.let { +// val month = it.substring(4,6) +// val day = it.substring(6,8) +// val time = "${month}月${day}日" +// var containTime = false +// for(bag in bagManagerEntity.bagsInfoResp){ +// if(bag.timeStr == time){ +// containTime = true +// } +// } +// if(!containTime || bagManagerEntity.bagsInfoResp.size ==0){ +// //增加时间的 +// val bagInfoEntity = BagInfoEntity() +// bagInfoEntity.itemType = 1 +// bagInfoEntity.timeStr = time +// bagManagerEntity.bagsInfoResp.add(bagInfoEntity) +// } +// bagManagerEntity.bagsInfoResp.add(entity) +// } +// } +// +// bagManagerListAdapter?.setData(bagManagerEntity.bagsInfoResp) } @@ -300,20 +324,40 @@ internal class BadCaseManagerView @JvmOverloads constructor( if(bagManager.bagsInfoRespCount>0){ for(bagInfo in bagManager.bagsInfoRespList){ bagInfo?.let { - val descriptionEntity = BagDescriptionEntity(it.description.description,it.description.hasAudio,it.description.audioUrl,it.description.reportBI) - val bagInfoEntity = BagInfoEntity() - bagInfoEntity.key = it.key - bagInfoEntity.totalSize = it.totalSize - bagInfoEntity.timestamp = it.timestamp - bagInfoEntity.bagPath = it.bagPath - bagInfoEntity.mergeStat = it.mergeStat - bagInfoEntity.uploadStat = it.uploadStat - bagInfoEntity.description = descriptionEntity - for(subBag in it.subBagsList){ - val subBagEntity = SubBagEntity(subBag.key,subBag.host,subBag.size) - bagInfoEntity.subBags.add(subBagEntity) + it.timestamp?.let { time -> + val descriptionEntity = BagDescriptionEntity(it.description.description,it.description.hasAudio,it.description.audioUrl,it.description.reportBI) + val bagInfoEntity = BagInfoEntity() + bagInfoEntity.key = it.key + bagInfoEntity.totalSize = it.totalSize + bagInfoEntity.timestamp = it.timestamp + bagInfoEntity.bagPath = it.bagPath + bagInfoEntity.mergeStat = it.mergeStat + bagInfoEntity.uploadStat = it.uploadStat + bagInfoEntity.description = descriptionEntity + for(subBag in it.subBagsList){ + val subBagEntity = SubBagEntity(subBag.key,subBag.host,subBag.size) + bagInfoEntity.subBags.add(subBagEntity) + } + + val month = time.substring(4,6) + val day = time.substring(6,8) + val time = "${month}月${day}日" + var containTime = false + for(bag in bagManagerEntity.bagsInfoResp){ + if(bag.timeStr == time){ + containTime = true + } + } + if(!containTime || bagManagerEntity.bagsInfoResp.size ==0){ + //增加时间的 + val bagInfoEntity = BagInfoEntity() + bagInfoEntity.itemType = 1 + bagInfoEntity.timeStr = time + bagManagerEntity.bagsInfoResp.add(bagInfoEntity) + } + + bagManagerEntity.bagsInfoResp.add(bagInfoEntity) } - bagManagerEntity.bagsInfoResp.add(bagInfoEntity) } } //更新List diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BagUploadDialog.java b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BagUploadDialog.java index 52045bd0c4..95154416e3 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BagUploadDialog.java +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/BagUploadDialog.java @@ -1,5 +1,6 @@ package com.zhjt.mogo_core_function_devatools.badcase.biz; +import android.annotation.SuppressLint; import android.app.Dialog; import android.content.Context; import android.os.Bundle; @@ -11,6 +12,8 @@ import androidx.annotation.NonNull; import com.zhjt.mogo_core_function_devatools.R; +import java.text.DecimalFormat; + /** * @author XuXinChao * @description Bag包上传进度展示弹窗 @@ -23,12 +26,13 @@ public class BagUploadDialog extends Dialog { private TextView tvUploadDetail;//上传详情 private ProgressBar viewUploadProgress;//上传进度条 - private int totalNum; - private Long totalSize; - private int remainNum; - private Long remainSize; + private int totalNum = 0; + private Long totalSize = 0L; + private int remainNum = 0; + private Long remainSize = 0L; private BagUploadListener uploadListener; + private DecimalFormat format = new DecimalFormat("0.0"); public BagUploadDialog(@NonNull Context context) { super(context, R.style.bad_case_dialog); @@ -82,17 +86,26 @@ public class BagUploadDialog extends Dialog { uploadListener = listener; } - public void setAllUpload(int totalNum,Long totalSize){ + @SuppressLint("SetTextI18n") + public void setAllUpload(int totalNum, Long totalSize){ this.totalNum = totalNum; this.totalSize = totalSize; + //更新进度条和进度文字 + String totalStr = format.format((totalSize/(1000*1024*1024.0))); + tvUploadDetail.setText("共计"+totalNum+"个包 ("+totalStr+"G) 已上传"+(0)+"个包 (" + +0+"G) 剩余"+totalNum+"个包 ("+ totalStr+"G)"); } - public void updateRemainUpload(int remainNum,Long remainSize){ + @SuppressLint("SetTextI18n") + public void updateRemainUpload(int remainNum, Long remainSize){ this.remainNum = remainNum; this.remainSize = remainSize; //更新进度条和进度文字 - tvUploadDetail.setText("共计"+totalNum+"个包 ("+(totalSize/(1000*1024*1024L))+"G) 已上传"+(totalNum-remainNum)+"个包 (" - +((totalSize-remainSize)/(1000*1024*1024L))+"G) 剩余"+remainNum+"个包 ("+ (remainSize/(1000*1024*1024L))+"G)"); + String updateTotalStr = format.format((totalSize/(1000*1024*1024.0))); + String updateUploadStr = format.format(((totalSize-remainSize)/(1000*1024*1024.0))); + String updateRemainStr = format.format((remainSize/(1000*1024*1024.0))); + tvUploadDetail.setText("共计"+totalNum+"个包 ("+updateTotalStr+"G) 已上传"+(totalNum-remainNum)+"个包 (" + +updateUploadStr+"G) 剩余"+remainNum+"个包 ("+ updateRemainStr +"G)"); viewUploadProgress.setProgress((totalNum-remainNum)*100/totalNum); } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/SpaceWarningDialog.java b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/SpaceWarningDialog.java index 68fb89106d..0b1656014a 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/SpaceWarningDialog.java +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/SpaceWarningDialog.java @@ -1,7 +1,7 @@ package com.zhjt.mogo_core_function_devatools.badcase.biz; +import android.app.Activity; import android.app.Dialog; -import android.content.Context; import android.os.Bundle; import android.view.WindowManager; import android.widget.TextView; @@ -20,9 +20,11 @@ public class SpaceWarningDialog extends Dialog { private TextView tvCleanDisk;//清理磁盘 private TextView tvCancel;//取消 + private Activity mActivity; - public SpaceWarningDialog(@NonNull Context context) { - super(context, R.style.bad_case_dialog); + public SpaceWarningDialog(@NonNull Activity activity) { + super(activity, R.style.bad_case_dialog); + mActivity = activity; } @Override @@ -47,7 +49,9 @@ public class SpaceWarningDialog extends Dialog { //清理磁盘 tvCleanDisk.setOnClickListener(v -> { //跳转录包管理页面 - CallerDevaToolsManager.INSTANCE.showBadCaseManagerView(getContext()); + if(mActivity!=null){ + CallerDevaToolsManager.INSTANCE.showBadCaseManagerView(mActivity); + } dismiss(); }); //取消 diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt index ae037f522d..a5bc9e11d0 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/adapter/BagManagerListAdapter.kt @@ -9,119 +9,140 @@ import android.widget.CheckBox import android.widget.EditText import android.widget.ImageView import android.widget.TextView -import androidx.core.widget.addTextChangedListener import androidx.recyclerview.widget.RecyclerView import com.mogo.eagle.core.data.badcase.BagDescriptionEntity import com.mogo.eagle.core.data.badcase.BagInfoEntity -import com.mogo.eagle.core.utilcode.util.TimeUtils import com.zhjt.mogo_core_function_devatools.R -import kotlinx.coroutines.NonDisposableHandle -import kotlinx.coroutines.NonDisposableHandle.parent +import java.text.DecimalFormat /** * @author XuXinChao * @description Bag包管理列表适配器 * @since: 2022/12/19 */ -class BagManagerListAdapter: RecyclerView.Adapter() { +class BagManagerListAdapter: RecyclerView.Adapter() { private var data:List ?= null private var bagClickListener: BagClickListener ?= null + private val format = DecimalFormat("0.0") fun setData(data: List?){ this.data = data notifyDataSetChanged() } - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BagManagerListHolder { - val view = LayoutInflater.from(parent.context) - .inflate(R.layout.item_bag_manager, parent, false) - return BagManagerListHolder(view) + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + if(viewType == 1){ + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_bag_time_title,parent,false) + return BagTimeTitleHolder(view) + }else{ + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_bag_manager, parent, false) + return BagManagerListHolder(view) + } } - override fun onBindViewHolder(holder: BagManagerListHolder, position: Int) { - data?.let { - val bagInfoEntity = it[position] -// if(bagInfoEntity.description?.description.isNullOrEmpty()){ -// holder.cbBagSelect.text = bagInfoEntity.key.toString() -// }else{ -// holder.cbBagSelect.text = bagInfoEntity.description?.description -// } - holder.cbBagSelect.setOnCheckedChangeListener(null) - holder.cbBagSelect.isChecked = bagInfoEntity.selectStatus - holder.cbBagSelect.tag = bagInfoEntity - holder.cbBagSelect.setOnCheckedChangeListener { _, isChecked -> - bagClickListener?.onClick(bagInfoEntity,isChecked) + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + when(holder){ + is BagTimeTitleHolder ->{ + data?.let { + holder.tvBagTimeTitle.text = it[position].timeStr + } } + is BagManagerListHolder->{ + data?.let { + val bagInfoEntity = it[position] + holder.cbBagSelect.setOnCheckedChangeListener(null) + holder.cbBagSelect.isChecked = bagInfoEntity.selectStatus + holder.cbBagSelect.tag = bagInfoEntity + holder.cbBagSelect.setOnCheckedChangeListener { _, isChecked -> + bagClickListener?.onClick(bagInfoEntity,isChecked) + } - holder.etBagNameEdit.addTextChangedListener(object:TextWatcher{ - override fun beforeTextChanged( - s: CharSequence?, - start: Int, - count: Int, - after: Int - ) { + holder.etBagNameEdit.addTextChangedListener(object:TextWatcher{ + override fun beforeTextChanged( + s: CharSequence?, + start: Int, + count: Int, + after: Int + ) { - } + } - override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { - } + } - override fun afterTextChanged(s: Editable?) { - bagInfoEntity.description?.let { desc-> - val descriptionStr = s.toString() - if(desc.description != descriptionStr){ - desc.description = descriptionStr - bagClickListener?.editDescription(bagInfoEntity.key,desc) + override fun afterTextChanged(s: Editable?) { + bagInfoEntity.description?.let { desc-> + val descriptionStr = s.toString() + if(desc.description != descriptionStr){ + desc.description = descriptionStr + bagClickListener?.editDescription(bagInfoEntity.key,desc) + } + } + } + + }) + + bagInfoEntity.description?.let { des-> + if(des.reportBI){ + //已上报 + holder.tvBagReportStatus.text = "已上报" + holder.tvBagReportStatus.setBackgroundResource(R.drawable.bag_reported_button_bg) + }else{ + //未上报 + holder.tvBagReportStatus.text = "上报" + holder.tvBagReportStatus.setBackgroundResource(R.drawable.bag_report_button_bg) + holder.tvBagReportStatus.setOnClickListener { + bagClickListener?.uploadBI(bagInfoEntity) + } + } + if(des.description.isEmpty()){ + holder.etBagNameEdit.setText(bagInfoEntity.key.toString()) + }else{ + holder.etBagNameEdit.setText(des.description) } } - } - }) - bagInfoEntity.description?.let { des-> - if(des.reportBI){ - //已上报 - holder.tvBagReportStatus.text = "已上报" - holder.tvBagReportStatus.setBackgroundResource(R.drawable.bag_reported_button_bg) - }else{ - //未上报 - holder.tvBagReportStatus.text = "上报" - holder.tvBagReportStatus.setBackgroundResource(R.drawable.bag_report_button_bg) - holder.tvBagReportStatus.setOnClickListener { - bagClickListener?.uploadBI(bagInfoEntity) + if(bagInfoEntity.description?.hasAudio == true){ + holder.ivBagAudio.visibility = View.VISIBLE + holder.ivBagAudio.setOnClickListener { + bagInfoEntity.description?.let { description-> + bagClickListener?.bagAudio(bagInfoEntity.key,description.audioUrl) + } + } + }else{ + holder.ivBagAudio.visibility = View.INVISIBLE + } + //大小 + val bagSize = format.format(bagInfoEntity.totalSize/(1000*1024*1024.0)) + holder.tvBagSize.text = "${bagSize}G" + + //时间 + bagInfoEntity.timestamp?.let { time-> + val hour = time.substring(8,10) + val min = time.substring(10,12) + val second = time.substring(12,14) + holder.tvBagTime.text = "${hour}:${min}:${second}" } } - if(des.description.isEmpty()){ - holder.etBagNameEdit.setText(bagInfoEntity.key.toString()) - }else{ - holder.etBagNameEdit.setText(des.description) - } } - - - if(bagInfoEntity.description?.hasAudio == true){ - holder.ivBagAudio.visibility = View.VISIBLE - holder.ivBagAudio.setOnClickListener { - bagInfoEntity.description?.let { description-> - bagClickListener?.bagAudio(bagInfoEntity.key,description.audioUrl) - } - } - }else{ - holder.ivBagAudio.visibility = View.INVISIBLE - } - - holder.tvBagSize.text = "${bagInfoEntity.totalSize/(1000*1024*1024)}G" - holder.tvBagTime.text = - it[position].timestamp?.let { it1 -> TimeUtils.millis2String(it1.toLong(),TimeUtils.getHourMinSecondFormat()) } - - } } override fun getItemCount() = data?.size ?: 0 + override fun getItemViewType(position: Int): Int { + return data!![position].itemType + } + + class BagTimeTitleHolder(itemView: View): RecyclerView.ViewHolder(itemView){ + var tvBagTimeTitle: TextView = itemView.findViewById(R.id.tvBagTimeTitle) + } + class BagManagerListHolder(itemView: View) : RecyclerView.ViewHolder(itemView){ var cbBagSelect: CheckBox = itemView.findViewById(R.id.cbBagSelect) var etBagNameEdit: EditText = itemView.findViewById(R.id.etBagNameEdit) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable-xhdpi/icon_bag_audio.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable-xhdpi/icon_bag_audio.png new file mode 100644 index 0000000000000000000000000000000000000000..2959045ff30d8eae9d56d7b4a4279a7cf5a9ba42 GIT binary patch literal 1658 zcmV-=28H>FP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91ET97b1ONa40RR91EC2ui0Q_#}qW}N}SA`GeR^%0?HI5u*qa< z7-2woZ1O4yV?#E!ZnWzP>#qNQ+TQi9TX%1Fhwe}Qp2z<<-#zy~_x$HH2z?+)l7h%Q zi`YbLAWrsTiRyL4wQe?3d4RYgC@6?!5040_k$5|C9kEto8@4s}J7O9noA?;9Uc|n# zbq7vP4a9r(LfMTU_RS&HcOpmp`Ww3$MDH#hqiy6BhKOSpUK+{ZyTm3lh zZ_!pwp!q5L8<7hC>Smf8am+r}`%N!}Z!^ER4yQXm)v1(3PsH&C)Bcejp7`HA5G5rgVDUl|BErLP z|NaB)-g6jt?^+Z(DjF{^R-R$bXGf?o@T+pCz7cER-;BLKlw!?$TX5A}qtKr}X9hAS zjTe2@7q8*cl^Y7ViUwoMV!$R9%6?TkIyw+SF?#KKEjTl;JY9uPw|$59cBgE|3-77v z8KP}#wWH+M3R$M1Vq(As4F=t+@`4&NBmp0;Ux8ssuFrVM(Fz=|IH%Az&X|UT_*l_* zielMrZ&S!sGz<)wk2Shb?$eVoJ8wF8Q8YHS;FrUHDEy8wj6zDvNYU45X+e|aoSCT_X zu4#t(HO^bG23O2Ck&qCFx8HmjuPvJ=4>N37B1Q~P!kzjiSgmc~cx9kWAtAwtkBb)d z<`x@T0|3l3tmy=M_WTvp)ZT$aR!#KU4;}eavACk6BM}$B;kG%daCtyHaTnys6 z$UHiJ$~p$j_XesdeZm;5UA+WTGAE$m#XRgP`dGYbkAt)4F5~YTw?%Vs{2;`}xI%zC z_~Gn!SH{MGV`DpI9{XO(T8?2&fZ5@qg4xKQJ5%Hbp`ju27;W_Wzy1Co9PTtSZ`P9( z9-Z=*dp1~_U0()%5Pn-4NdT6UV=czvw9R^x)7gQIo4-L>d8Jqsqzmy489BeDPIGQ72Nv10bfKR(~FM^1Pq zKAuLpn)9t<#wq}iLp~|%LXdKRlgu4*UV6%7C*{av7r|o&&`p91S%$fp?(>+;v_zk44rwV!AGr~m)}07*qoM6N<$ Ef}msa`v3p{ literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_bag_edit.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_bag_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..09ffe565d777f8880887c16cb1f22af8aee20211 GIT binary patch literal 926 zcmV;P17ZA$P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91AfN*P1ONa40RR91AOHXW0IY^$^8f$?2uVaiR9Fecmq}<8K@^6klNgbp zsKot{gC2x{7lR-X#FH2zi6SV9pdg3{qKFGf@Zfd`UPKf@RFEKoh~OnIAPk5L4lV@I zgNJ|~H6}>ZaT&kA=T#`1nPGYnAN=#G-e2{o=H{{L39ClXX2mmi$&oZz%`5C`zHk;J{P>T zByzvN7Pmm!?FwRJnHPX)D;SbGHUbJ^tNetmqdgTowpbz40uY@6^f=2#!7?x%xY&2v zFM#YT=*+AD#HN9#K=uW!@V0yw{nsMQR7h9Iy9hqVq9aRE%$w%!0Tt!#57xsqHI zX|~((^p{vnI~K&g1WeM(224aN+wR1jCwA6&x&1CKPrt+C;uXL|t?ZH~u*(;>1gAaz zNCiGs0p~sOy%oeyc>J*_Zv`eR0O5X5{BTqpuFvE9qrB@gCVl}-(m~_?wv}h66O^Za zKtZ!JJ{N5>CQ$)hCjQa9ZoX|2$M3P2+yxLsllp!5LnH*TflQCzWi`yM;AIGU_&yjEc%yw^D^cB?x2mdtMvQ3#u8_L5D-A>^_73D& z?QkWrEMg5=h@{a_0Ywv-lSU}U+<7*($j*k>Ri9)X;5gT(1)uiQ%=9a|nM4m6qrBl! z+D+pBVdb}CE25VQ^zNR;=XtHgNWTEO!`1Wi2YsMk8!-a?0000007*qoM6N<$f(+h` ASO5S3 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_bag_upload.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_bag_upload.xml index ac59ac7c64..0f76ebdba2 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_bag_upload.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/dialog_bag_upload.xml @@ -73,10 +73,10 @@ app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" - android:layout_marginTop="275px" + android:layout_marginTop="270px" style="?android:attr/progressBarStyleHorizontal" android:max="100" - android:progress="40" + android:progress="0" android:progressDrawable="@drawable/progress_bar_drawable" /> @@ -87,7 +87,7 @@ app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" - android:layout_marginTop="378px" + android:layout_marginTop="370px" android:textColor="#FF06D1ED" android:textSize="43px" android:gravity="center" diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_manager.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_manager.xml index feb1231767..eb969081db 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_manager.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_bag_manager.xml @@ -26,9 +26,9 @@ app:layout_constraintLeft_toRightOf="@id/cbBagSelect" app:layout_constraintRight_toLeftOf="@id/tvBagTime" android:layout_marginStart="15dp" - android:layout_marginEnd="20dp" + android:layout_marginEnd="30dp" android:background="@null" - android:drawableEnd="@drawable/icon_dev_status_un_fold" + android:drawableEnd="@drawable/icon_bag_edit" android:textColor="#FFFFFFFF" android:textSize="32dp" android:maxLines="1" @@ -57,9 +57,9 @@ app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintRight_toLeftOf="@id/tvBagReportStatus" - android:src="@drawable/icon_dev_status_un_fold" + android:src="@drawable/icon_bag_audio" android:visibility="invisible" - android:layout_marginEnd="20dp" + android:layout_marginEnd="30dp" /> + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/layout_badcase_manager.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/layout_badcase_manager.xml index 78c13df55d..3db62e3e3f 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/layout_badcase_manager.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/layout_badcase_manager.xml @@ -174,8 +174,8 @@ app:layout_constraintRight_toRightOf="@id/pbSpacePercent" app:layout_constraintTop_toBottomOf="@id/tvSelectAll" app:layout_constraintBottom_toTopOf="@id/tvUploadCloud" - android:layout_marginTop="20dp" - android:layout_marginBottom="20dp" + android:layout_marginTop="30dp" + android:layout_marginBottom="30dp" /> \ 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/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt index ff7c2dbe2a..f8dd7bd27d 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt @@ -1,6 +1,7 @@ package com.mogo.eagle.core.function.hmi.ui import android.animation.Animator +import android.app.Activity import android.content.* import android.graphics.* import android.graphics.drawable.* @@ -401,13 +402,12 @@ class MoGoHmiFragment : MvpFragment(), super.onBagManagerResult(bagManager) //判断磁盘是否已满,展示预警弹窗 UiThreadHandler.post{ - bagManager.spaceInfoRespCount if(bagManager.spaceInfoRespCount>0){ for(spaceInfo in bagManager.spaceInfoRespList){ for(bagSpaceInfo in spaceInfo.bagDirsSpaceInfoList){ if(bagSpaceInfo.free == 0L){ //磁盘空间已满 - val spaceWarningDialog = SpaceWarningDialog(requireContext()) + val spaceWarningDialog = SpaceWarningDialog(context as Activity) spaceWarningDialog.show() } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/debug_icon_bag_manager.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/debug_icon_bag_manager.png new file mode 100644 index 0000000000000000000000000000000000000000..8dc2dff73f1e0769f569aaa51277933fffafa463 GIT binary patch literal 17440 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 + android:background="@drawable/debug_icon_bag_manager" + /> =ArrayList()// 子包信息 var selectStatus: Boolean = false //Bag包勾选状态,默认为未勾选 + var itemType: Int = 0 //0是正常Bag包,1为时间Title + var timeStr: String = "" } \ No newline at end of file