diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt index 08be23c..e43d26e 100644 --- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt @@ -1,13 +1,10 @@ package com.casic.br.app.view -import android.app.ActionBar.LayoutParams import android.os.Bundle -import android.os.CountDownTimer -import android.os.Handler -import android.os.Message import android.util.Log import android.view.View import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.lifecycleScope import com.casic.br.app.adapter.EditableImageAdapter import com.casic.br.app.databinding.ActivityAddHiddenTroubleBinding import com.casic.br.app.extensions.combineFilePath @@ -25,21 +22,21 @@ import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.LoadState -import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.launch import top.zibin.luban.Luban import top.zibin.luban.OnCompressListener import java.io.File -class AddHiddenTroubleActivity : KotlinBaseActivity(), - Handler.Callback { +class AddHiddenTroubleActivity : KotlinBaseActivity() { private val kTag = "AddHiddenTroubleActivity" private val selectedImages = ArrayList() private val imagePaths = ArrayList() private val recyclerViewImages = ArrayList() private val marginOffset by lazy { 1.dp2px(this) } - private val weakReferenceHandler by lazy { WeakReferenceHandler(this) } - private lateinit var editableImageAdapter: EditableImageAdapter + private lateinit var imageAdapter: EditableImageAdapter private lateinit var imageFileViewModel: ImageFileViewModel override fun initViewBinding(): ActivityAddHiddenTroubleBinding { @@ -59,33 +56,29 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - val params = window.attributes - params.height = LayoutParams.WRAP_CONTENT - window.attributes = params - imageFileViewModel = ViewModelProvider(this)[ImageFileViewModel::class.java] imageFileViewModel.resultModel.observe(this) { if (it.code == 200) { val url = it.data.toString() imagePaths.add(url) + recyclerViewImages.add(url.combineFilePath()) - editableImageAdapter.notifyDataSetChanged() + imageAdapter.notifyDataSetChanged() } } //左外边距,左内边距,TextView宽度,内间距,右内边距,右外边距 val viewWidth = getScreenWidth() - (15 + 15 + 65 + 10 + 15 + 15).dp2px(this) - editableImageAdapter = EditableImageAdapter(this, viewWidth, 3, 3) - editableImageAdapter.setupImage(recyclerViewImages) + imageAdapter = EditableImageAdapter(this, viewWidth, 3, 3) + imageAdapter.setupImage(recyclerViewImages) binding.recyclerView.addItemDecoration( RecyclerViewItemOffsets(marginOffset, marginOffset, marginOffset, marginOffset) ) - binding.recyclerView.adapter = editableImageAdapter + binding.recyclerView.adapter = imageAdapter } override fun initEvent() { - editableImageAdapter.setOnItemClickListener(object : - EditableImageAdapter.OnItemClickListener { + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { selectPicture() } @@ -95,7 +88,7 @@ } override fun onItemLongClick(view: View?, position: Int) { - editableImageAdapter.deleteImage(position) + imageAdapter.deleteImage(position) selectedImages.removeAt(position) } }) @@ -116,48 +109,43 @@ override fun onResult(result: ArrayList) { // 如果设置了setSelectedData,它会将之前的结果作为最新的返回值,要注意重复问题 // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 - val sum = (result.size * 500).toLong() - object : CountDownTimer(sum, 500) { - override fun onTick(millisUntilFinished: Long) { - val i = millisUntilFinished / 500 - val message = weakReferenceHandler.obtainMessage() - message.obj = result[i.toInt()] - message.what = 2024042201 - weakReferenceHandler.handleMessage(message) + lifecycleScope.launch { + flow { + result.forEach { + emit(it) + delay(1000) + } + }.collect { + selectedImages.add(it) + compressImage(it) } - - override fun onFinish() { - - } - }.start() + } } override fun onCancel() {} }) } - override fun handleMessage(msg: Message): Boolean { - if (msg.what == 2024042201) { - val result = msg.obj as LocalMedia - selectedImages.add(result) - //压缩图片 - Luban.with(this).load(result.realPath).ignoreBy(100) - .setTargetDir(createCompressImageDir().toString()) - .setCompressListener(object : OnCompressListener { - override fun onStart() { + /** + * 压缩图片并上传 + * */ + private fun compressImage(result: LocalMedia) { + //压缩图片 + Luban.with(this).load(result.realPath).ignoreBy(100) + .setTargetDir(createCompressImageDir().toString()) + .setCompressListener(object : OnCompressListener { + override fun onStart() { - } + } - override fun onSuccess(file: File) { - //上传图片 - imageFileViewModel.uploadImage(file) - } + override fun onSuccess(file: File) { + //上传图片 + imageFileViewModel.uploadImage(file) + } - override fun onError(e: Throwable) { - e.printStackTrace() - } - }).launch() - } - return true + override fun onError(e: Throwable) { + e.printStackTrace() + } + }).launch() } } \ No newline at end of file