package com.example.smart.image
|
|
import FileUploader
|
import android.R
|
import android.app.Activity
|
import android.content.Context
|
import android.content.Intent
|
import android.graphics.Color
|
import android.net.Uri
|
import android.os.Build
|
import android.os.Environment
|
import android.provider.Settings
|
import androidx.activity.result.contract.ActivityResultContracts
|
import androidx.appcompat.app.AppCompatActivity
|
import androidx.fragment.app.FragmentActivity
|
import com.donkingliang.imageselector.ImageSelectorActivity
|
import com.donkingliang.imageselector.entry.RequestConfig
|
import com.donkingliang.imageselector.utils.ImageSelector
|
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 java.util.ArrayList
|
|
|
class ImageProvider(val activity: Activity, val callback: IImageCallback) {
|
|
private val REQUEST_CODE: Int = 6666
|
|
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) {
|
// .backResId(android.support.v7.appcompat.R.drawable.abc_ic_ab_back_mtrl_am_alpha) // 标题
|
// val config = ISListConfig.Builder() // 是否多选, 默认true
|
// .multiSelect(false) // 是否记住上次选中记录, 仅当multiSelect为true的时候配置,默认为true
|
// .rememberSelected(false) // “确定”按钮背景色
|
// .btnBgColor(Color.GRAY) // “确定”按钮文字颜色
|
// .btnTextColor(Color.BLUE) // 使用沉浸式状态栏
|
// .statusBarColor(Color.parseColor("#3F51B5")) // 返回图标ResId
|
//
|
// .title("图片") // 标题文字颜色
|
// .titleColor(Color.WHITE) // TitleBar背景色
|
// .titleBgColor(Color.parseColor("#3F51B5")) // 裁剪大小。needCrop为true的时候配置
|
// .cropSize(1, 1, 200, 200)
|
// .needCrop(true) // 第一个是否显示相机,默认true
|
// .needCamera(false) // 最大选择图片数量,默认9
|
// .maxNum(maxCount)
|
// .build()
|
//
|
//
|
//// 跳转到图片选择器
|
// ISNav.getInstance().toListActivity(activity, config, REQUEST_CODE)
|
|
|
|
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
|
}
|
|
|
val config = RequestConfig()
|
config.useCamera = true
|
config.isSingle = false
|
config.maxSelectCount = maxCount
|
config.canPreview = true
|
|
this.maxCount = maxCount
|
val intent = Intent(activity, ImageSelectorActivity::class.java)
|
intent.putExtra(ImageSelector.KEY_CONFIG, config)
|
if (activity is FragmentActivity) {
|
val register = activity.activityResultRegistry.register(
|
"101",
|
ActivityResultContracts.StartActivityForResult()
|
) {
|
if (it == null) {
|
return@register
|
}
|
onActivityResult(REQUEST_CODE, it.resultCode, it.data)
|
}
|
register.launch(intent)
|
}
|
}
|
|
fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
if (resultCode != AppCompatActivity.RESULT_OK) {
|
return
|
}
|
if (requestCode == REQUEST_CODE && data != null) {
|
onSelectPhotoSuccess(data)
|
}
|
}
|
|
private fun onSelectPhotoSuccess(data: Intent) {
|
//获取选择器返回的数据
|
val images: ArrayList<String> =
|
data.getStringArrayListExtra(ImageSelector.SELECT_RESULT) as ArrayList<String>
|
val isCameraImage: Boolean = data.getBooleanExtra(ImageSelector.IS_CAMERA_IMAGE, false)
|
|
|
|
LogUtils.e("images:$images")
|
loadingDialog.show()
|
if (maxCount == 1) {
|
FileUploader.uploadFile(images[0], callback) {
|
loadingDialog.dismiss()
|
}
|
} else {
|
FileUploader.uploadFile(images, callback) {
|
loadingDialog.dismiss()
|
}
|
}
|
}
|
|
|
/**
|
* 上传绘制后的图片
|
*/
|
fun uploadPicAfterDraw(uri: Uri) {
|
val pathFromUri = FileTools.getRealPathFromUri(activity, uri)
|
FileUploader.uploadFile(pathFromUri, callback) {
|
loadingDialog.dismiss()
|
}
|
}
|
|
// private val callBack = OssCallBack()
|
//
|
// private inner class OssCallBack : IOssCallBack {
|
// override fun onAllListSuccess(ossPaths: MutableList<EntityRef>) {
|
// super.onAllListSuccess(ossPaths)
|
// loadingDialog.dismiss()
|
// }
|
//
|
// override fun onSuccess(entityRef: EntityRef) {
|
// activity.runOnUiThread {
|
// if (maxCount == 1) {
|
// loadingDialog.dismiss()
|
// }
|
// onUploadSuccess(entityRef)
|
// }
|
// }
|
//
|
// override fun onFailed() {
|
// activity.runOnUiThread {
|
// loadingDialog.dismiss()
|
// onUploadFailed()
|
// activity.toast("图片上传失败,请重新选择")
|
// }
|
// }
|
// }
|
//
|
// private fun onUploadSuccess(entity: EntityRef) {
|
// synchronized(this) {
|
// callback.onUploadSuccess(entity)
|
// }
|
// }
|
//
|
// private fun onUploadFailed() {
|
// synchronized(this) {
|
// callback.onUploadFailed()
|
// }
|
// }
|
|
interface IImageCallback {
|
|
fun onUploadSuccess(entityRef: List<ImageRef>)
|
|
fun onUploadFailed()
|
|
}
|
}
|