package cn.flightfeather.thirdappmodule.module.inspection
|
|
import android.content.Intent
|
import android.graphics.Bitmap
|
import android.graphics.Color
|
import android.net.Uri
|
import android.os.Build
|
import android.os.Bundle
|
import android.os.Environment.DIRECTORY_PODCASTS
|
import android.os.Parcelable
|
import android.os.StrictMode
|
import android.view.View
|
import cn.flightfeather.thirdappmodule.R
|
import cn.flightfeather.thirdappmodule.module.base.BaseActivity
|
import cn.flightfeather.thirdappmodule.util.SystemServiceUtils
|
import cn.flightfeather.thirdappmodule.util.photo.ImageMergeUtil
|
import com.bumptech.glide.Glide
|
import io.reactivex.Observable
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
import io.reactivex.schedulers.Schedulers
|
import kotlinx.android.parcel.Parcelize
|
import kotlinx.android.synthetic.main.activity_share_problem_preview.*
|
import org.jetbrains.anko.doAsync
|
import java.io.File
|
import java.util.*
|
import java.util.concurrent.TimeUnit
|
|
/**
|
* @author riku
|
* Date: 2020/5/15
|
*/
|
class ShareProblemPreViewActivity : BaseActivity(), View.OnClickListener {
|
|
companion object {
|
const val ARG_MERGE_INFO = "infoList"
|
const val PROBLEM_DESCRIBE = "问题描述"
|
const val CHANGE_INFO = "整改情况"
|
}
|
|
private lateinit var util: ImageMergeUtil
|
|
private lateinit var resultBitmap:Bitmap
|
|
private var infoList: List<Problem>? = null
|
private val problemImageList = mutableListOf<Bitmap>()
|
private val changeImageList = mutableListOf<Bitmap>()
|
|
override fun getLayoutId(): Int = R.layout.activity_share_problem_preview
|
|
@Suppress("UNCHECKED_CAST")
|
override fun onCreate(savedInstanceState: Bundle?) {
|
super.onCreate(savedInstanceState)
|
infoList = intent.getSerializableExtra(ARG_MERGE_INFO) as List<Problem>
|
|
util = ImageMergeUtil(this)
|
|
merge()
|
|
txt_back.setOnClickListener(this)
|
}
|
|
private fun merge() {
|
Glide.get(this).clearMemory()
|
doAsync {
|
if (infoList.isNullOrEmpty()) {
|
return@doAsync
|
}
|
resultBitmap = util.createTitle(infoList!![0].sceneName ?: "问题统计", infoList!![0].time)
|
var index = 0
|
|
infoList?.forEach { vo ->
|
changeImageList.clear()
|
problemImageList.clear()
|
index++
|
resultBitmap = util.mergeIndex(resultBitmap, index, resources)
|
|
vo.mediaFileList?.forEach {
|
val url = it.second
|
val bitmap = Glide.with(this@ShareProblemPreViewActivity)
|
.asBitmap()
|
.load(url)
|
.submit().get(20L, TimeUnit.SECONDS)
|
if (it.first) {
|
changeImageList.add(bitmap)
|
} else {
|
problemImageList.add(bitmap)
|
}
|
}
|
util.mergeImage(problemImageList).let {
|
val text = (vo.problems ?: "") + if (vo.advise!=null) "," + vo.advise else ""
|
resultBitmap = if (it != null) {
|
val b = util.mergeVerticalText(it, text, PROBLEM_DESCRIBE, R.mipmap.ic_problem_describe, resources)
|
// val b = util.mergeVerticalText(it, text)
|
util.mergeVertical(resultBitmap, b)
|
} else {
|
util.mergeVerticalText(resultBitmap, text, PROBLEM_DESCRIBE, R.mipmap.ic_problem_describe, resources)
|
}
|
}
|
|
val changeInfo = vo.changeInfo ?: ""
|
util.mergeImage(changeImageList).let {
|
resultBitmap = if (it != null) {
|
val b = util.mergeVerticalText(it, changeInfo, CHANGE_INFO, R.mipmap.ic_advice, resources)
|
util.mergeVertical(resultBitmap, b)
|
} else {
|
util.mergeVerticalText(resultBitmap, changeInfo, CHANGE_INFO, R.mipmap.ic_advice, resources)
|
}
|
}
|
|
}
|
|
util.drawBg(resultBitmap, Color.WHITE)
|
|
runOnUiThread {
|
Glide.with(this@ShareProblemPreViewActivity)
|
.load(resultBitmap)
|
.into(img_preview)
|
txt_share.setOnClickListener(this@ShareProblemPreViewActivity)
|
}
|
}
|
}
|
|
override fun onClick(v: View?) {
|
when (v?.id) {
|
R.id.txt_back -> onBackPressed()
|
R.id.txt_share -> {
|
val d = Observable.create<File> {emitter ->
|
val path = getExternalFilesDir(DIRECTORY_PODCASTS)?.path
|
path?.let {
|
SystemServiceUtils.saveBitmap(it, resultBitmap)
|
emitter.onNext(File(it))
|
}
|
emitter.onComplete()
|
}.subscribeOn(Schedulers.io())
|
.observeOn(AndroidSchedulers.mainThread())
|
.subscribe {
|
val imageUri: Uri = Uri.fromFile(it)
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
val builder = StrictMode.VmPolicy.Builder()
|
StrictMode.setVmPolicy(builder.build())
|
}
|
val intent = Intent()
|
intent.action = Intent.ACTION_SEND
|
intent.putExtra(Intent.EXTRA_STREAM, imageUri)
|
intent.type = "image/*"
|
startActivity(Intent.createChooser(intent, "分享图片"))
|
}
|
disposableList.add(d)
|
}
|
}
|
}
|
|
@Parcelize
|
data class Problem constructor(
|
val sceneName: String?,
|
val mediaFileList: MutableList<Pair<Boolean, String>>?,
|
var problems: String?,
|
var advise: String?,
|
var changeInfo: String?,
|
val time: Date?
|
):Parcelable
|
}
|