package com.xw.yunwei.ui.task.accident.handle
|
|
import android.annotation.SuppressLint
|
import android.net.Uri
|
import androidx.recyclerview.widget.GridLayoutManager
|
import com.blankj.utilcode.util.UriUtils
|
import com.luck.picture.lib.config.PictureMimeType
|
import com.luck.picture.lib.entity.LocalMedia
|
import com.luck.picture.lib.interfaces.OnResultCallbackListener
|
import com.xw.common.CommonDialog
|
import com.xw.common.R
|
import com.xw.common.base.FileSelectBean
|
import com.xw.common.base.ImageEventListener
|
import com.xw.common.base.ImageSelectAdapter
|
import com.xw.common.base.ShowImgListDialog
|
import com.xw.yunwei.BR
|
import com.xw.yunwei.BaseBusinessActivity
|
import com.xw.yunwei.databinding.ActivityAccidentProcessBinding
|
import com.xw.yunwei.utils.PictureSelectorFactory
|
|
/**
|
* 事故处理页面
|
*
|
* 提供事故处理信息录入功能,包括:
|
* - 人员伤亡情况(死亡、重伤、轻伤)的增减操作
|
* - 责任判定选择(我方主责 / 我方无责 / 双方同责)
|
* - 现场情况与处置情况的多行文本描述
|
* - 三组图片上传(交警判责照片、现场情况照片、处置情况照片)
|
*
|
* 图片支持拍照和从图库选择两种方式,提交时先上传图片再调用接口。
|
*/
|
class AccidentProcessActivity : BaseBusinessActivity<ActivityAccidentProcessBinding, AccidentProcessVM>(){
|
override fun getBindingVariable() = BR.viewModel
|
|
override fun init() {
|
super.init()
|
// 从Intent获取任务ID并保存到ViewModel
|
viewModel.taskId = intent.getLongExtra("taskId", 0L)
|
initAdapter()
|
// 移除默认选中状态,由用户手动选择责任判定
|
binding.stllZrpd.remove()
|
binding.stllZrpd.setData(
|
viewModel.dataZrpd,
|
this,
|
ArrayList(),
|
resources.getColor(R.color.white),
|
"shape_blue_5_bg_4"
|
)
|
}
|
|
override fun setListener() {
|
super.setListener()
|
// 责任判定标签点击监听:单选逻辑,先取消全部选中,再选中当前点击项
|
binding.stllZrpd.setListener {
|
for (index in binding.stllZrpd.selectIndexList) { // 先取消选中状态
|
binding.stllZrpd.onTvClick(index)
|
}
|
val index = it.tag as Int // 当前点击的下标
|
binding.stllZrpd.onTvClick(index)
|
viewModel.selectZrpd = viewModel.dataZrpd[index]
|
}
|
}
|
|
/**
|
* 初始化三组图片选择适配器
|
*
|
* 分别绑定到 rv1(交警判责照片)、rv2(现场情况照片)、rv3(处置情况照片),
|
* 每组最多上传 [AccidentProcessVM.maxSizes] 张图片。
|
*/
|
private fun initAdapter(){
|
viewModel.adapters.clear()
|
viewModel.imageEvents.clear()
|
for (index in 0 until 3) {
|
val imageEvent = object : ImageEventListener<FileSelectBean>() {
|
override fun addImage(item: FileSelectBean) {
|
viewModel.operateIndex = index
|
showTypeDialog()
|
}
|
|
override fun viewImage(item: FileSelectBean) {
|
val imgList: MutableList<String> = ArrayList()
|
for (item1 in viewModel.adapters[index].data) {
|
imgList.add(item1.localPath.ifEmpty { item1.url })
|
}
|
ShowImgListDialog(
|
this@AccidentProcessActivity,
|
imgList,
|
imgList.indexOf(item.localPath)
|
).show()
|
}
|
|
override fun deleteImage(item: FileSelectBean) {
|
viewModel.adapters[index].remove(item)
|
}
|
}
|
viewModel.imageEvents.add(imageEvent)
|
|
val adapter = ImageSelectAdapter(this, viewModel.maxSizes[index], 1, imageEvent)
|
viewModel.adapters.add(adapter)
|
}
|
|
binding.rv1.adapter = viewModel.adapters[0]
|
binding.rv1.layoutManager = GridLayoutManager(this, 5)
|
|
binding.rv2.adapter = viewModel.adapters[1]
|
binding.rv2.layoutManager = GridLayoutManager(this, 5)
|
|
binding.rv3.adapter = viewModel.adapters[2]
|
binding.rv3.layoutManager = GridLayoutManager(this, 5)
|
}
|
|
/**
|
* 显示图片选择方式弹窗(拍照 / 图库)
|
*/
|
private fun showTypeDialog() {
|
CommonDialog.showTypeDialog(this) {
|
if (it == 0) takeAPhotograph() else if (it == 1) enterGallery()
|
}
|
}
|
|
/**
|
* 进入图库选择图片
|
*
|
* 使用 PictureSelector 打开相册,最大可选数量为该组剩余可上传数量。
|
*/
|
// 进入图库
|
@SuppressLint("SourceLockedOrientationActivity")
|
private fun enterGallery() {
|
PictureSelectorFactory.enterGallery(
|
this,
|
viewModel.maxSizes[viewModel.operateIndex] - viewModel.adapters[viewModel.operateIndex].data.size,
|
resultCallbackListener
|
)
|
}
|
|
/**
|
* 调用系统相机拍照
|
*/
|
// 拍照
|
private fun takeAPhotograph() {
|
PictureSelectorFactory.takeAPhotograph(this,resultCallbackListener)
|
}
|
|
/**
|
* 图片选择/拍照结果回调
|
*
|
* 将选中的图片路径转换为 [FileSelectBean] 并更新到当前操作组的适配器中。
|
* 若为 Content URI 且未裁剪/压缩,则通过 [UriUtils.uri2File] 转为本地绝对路径。
|
*/
|
private var resultCallbackListener = object : OnResultCallbackListener<LocalMedia> {
|
override fun onResult(result: ArrayList<LocalMedia>?) {
|
result?.let { selectList ->
|
val dataList: MutableList<FileSelectBean> = ArrayList()
|
dataList.addAll(viewModel.adapters[viewModel.operateIndex].data)
|
for (item in selectList) {
|
val path: String = item.availablePath
|
var imgPath = if (PictureMimeType.isContent(path) && !item.isCut && !item.isCompressed) {
|
UriUtils.uri2File(Uri.parse(path)).absolutePath
|
} else {
|
path
|
}
|
dataList.add(FileSelectBean(localPath = imgPath, type = "img"))
|
}
|
viewModel.adapters[viewModel.operateIndex].setList(dataList)
|
}
|
}
|
override fun onCancel() {}
|
}
|
|
}
|