18034727885
2026-04-27 3a4c1bbb2cf4fb1cdda8a5061b0674f30e7456b4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
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()
 
    }
}