package com.example.smart.image
|
|
import FileUploader
|
import android.app.Activity
|
import android.content.Intent
|
import android.net.Uri
|
import android.os.Build
|
import android.os.Environment
|
import android.provider.Settings
|
import com.example.basecore.util.FileTools
|
import com.example.basecore.util.LogUtils
|
import com.example.smart.bean.ImageRef
|
import com.example.smart.widget.dialog.LoadingDialog
|
import com.luck.picture.lib.basic.PictureSelector
|
import com.luck.picture.lib.config.SelectMimeType
|
import com.luck.picture.lib.entity.LocalMedia
|
import com.luck.picture.lib.interfaces.OnResultCallbackListener
|
import com.luck.picture.lib.style.PictureSelectorStyle
|
import com.luck.picture.lib.style.SelectMainStyle
|
import com.luck.picture.lib.style.TitleBarStyle
|
|
|
class ImageProvider(val activity: Activity, val callback: IImageCallback) {
|
private var ossObjectName = ""
|
|
private var maxCount = 1
|
val loadingDialog: LoadingDialog = LoadingDialog(activity)
|
|
/**
|
* oss object name
|
*/
|
fun setObjectName(name: String) {
|
ossObjectName = name
|
}
|
|
/**
|
* 检测android13 存储权限
|
*/
|
private fun checkPer(): Boolean {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
|
return Environment.isExternalStorageManager()
|
// return ContextCompat.checkSelfPermission(
|
// activity,
|
// Manifest.permission.MANAGE_EXTERNAL_STORAGE
|
// ) == PackageManager.PERMISSION_GRANTED
|
}
|
return true
|
}
|
|
fun showImageSelect(maxCount: Int = 9) {
|
if (!checkPer()) {
|
val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
|
intent.data = Uri.parse("package:" + activity.packageName)
|
activity.startActivityForResult(intent, 0x00000012)
|
return
|
}
|
this.maxCount = maxCount
|
//https://gitcode.com/gh_mirrors/pict/PictureSelector/?utm_source=gitcode_aigc_v1_t1&index=bottom&type=card&&uuid_tt_dd=10_37197039080-1778553766662-368769&isLogin=9&from_id=156450437&from_link=2b5eaab318b433d2570db6b0ce95c381
|
PictureSelector.create(activity)
|
.openGallery(SelectMimeType.ofImage())
|
.setImageEngine(GlideEngine.createGlideEngine())
|
.setCompressEngine(CompressEngine())
|
.setSandboxFileEngine(SandboxEngine())
|
.isPreviewImage(true)
|
.isDisplayCamera(true)
|
.setImageSpanCount(3)
|
.setSelectorUIStyle(PictureSelectorStyle().apply {//https://github.com/LuckSiege/PictureSelector/wiki/PictureSelector-3.0-%E4%B8%BB%E9%A2%98api%E8%AF%B4%E6%98%8E
|
titleBarStyle = TitleBarStyle().apply {
|
isHideCancelButton = true
|
}
|
selectMainStyle = SelectMainStyle().apply {
|
isCompleteSelectRelativeTop = true//完成按钮从底部放在右上角
|
isPreviewSelectRelativeBottom = true//预览页选择按钮从顶部放在右下角
|
}
|
})
|
.setMaxSelectNum(maxCount)
|
.forResult(object : OnResultCallbackListener<LocalMedia?> {
|
override fun onResult(result: ArrayList<LocalMedia?>?) {
|
if (result == null) {
|
return
|
}
|
val filterNotNull = result.filterNotNull()
|
if (filterNotNull.isEmpty()) {
|
return
|
}
|
//获取选择器返回的数据
|
val images = filterNotNull.mapNotNull { it.getAvailablePath() }
|
LogUtils.e("images:$images")
|
if (images.isEmpty()) {
|
return
|
}
|
loadingDialog.show()
|
if (maxCount == 1) {
|
FileUploader.uploadFile(images[0], callback) {
|
loadingDialog.dismiss()
|
}
|
} else {
|
FileUploader.uploadFile(images, callback) {
|
loadingDialog.dismiss()
|
}
|
}
|
}
|
|
override fun onCancel() {
|
}
|
})
|
}
|
|
/**
|
* 上传绘制后的图片
|
*/
|
fun uploadPicAfterDraw(uri: Uri) {
|
val pathFromUri = FileTools.getRealPathFromUri(activity, uri)
|
FileUploader.uploadFile(pathFromUri, callback) {
|
loadingDialog.dismiss()
|
}
|
}
|
|
interface IImageCallback {
|
|
fun onUploadSuccess(entityRef: List<ImageRef>)
|
|
fun onUploadFailed()
|
|
}
|
}
|