@@ -5,9 +5,6 @@ import android.content.Context
5
5
import android.graphics.Bitmap
6
6
import android.graphics.Color
7
7
import android.media.MediaMetadataRetriever
8
- import android.os.Build
9
- import android.os.Bundle
10
- import androidx.annotation.RequiresApi
11
8
import androidx.core.content.ContextCompat
12
9
import com.facebook.react.bridge.*
13
10
import com.luck.picture.lib.app.IApp
@@ -20,23 +17,19 @@ import com.luck.picture.lib.entity.LocalMedia
20
17
import com.luck.picture.lib.entity.LocalMedia.generateLocalMedia
21
18
import com.luck.picture.lib.interfaces.OnResultCallbackListener
22
19
import com.luck.picture.lib.style.*
23
- import com.luck.picture.lib.utils.StyleUtils
24
- import com.reactnativemultipleimagepicker.R.color.app_color_black
25
- import com.yalantis.ucrop.UCrop
26
20
import com.yalantis.ucrop.UCrop.Options
27
21
import java.io.*
28
22
import java.util.*
29
23
30
24
31
- @Suppress(" INCOMPATIBLE_ENUM_COMPARISON" , " UNCHECKED_CAST" )
32
25
class MultipleImagePickerModule (reactContext : ReactApplicationContext ) :
33
26
ReactContextBaseJavaModule (reactContext), IApp {
34
27
35
28
override fun getName (): String {
36
29
return " MultipleImagePicker"
37
30
}
38
31
39
- var style = PictureSelectorStyle ()
32
+ private var style = PictureSelectorStyle ()
40
33
41
34
private var selectedAssets: List <LocalMedia > = ArrayList ()
42
35
private var singleSelectedMode: Boolean = false
@@ -48,15 +41,15 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
48
41
private var isExportThumbnail: Boolean = false
49
42
private var maxVideo: Int = 20
50
43
private var isCamera: Boolean = true
51
- private var cropOption: UCrop . Options ? = null ;
52
- private var primaryColor: Int = Color .BLACK ;
44
+ private var cropOption: Options ? = null
45
+ private var primaryColor: Int = Color .BLACK
53
46
54
47
55
48
@ReactMethod
56
49
fun openPicker (options : ReadableMap ? , promise : Promise ): Unit {
57
50
PictureAppMaster .getInstance().app = this
58
51
val activity = currentActivity
59
- var imageEngine = GlideEngine .createGlideEngine();
52
+ val imageEngine = GlideEngine .createGlideEngine()
60
53
61
54
// set config
62
55
setConfiguration(options)
@@ -125,7 +118,7 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
125
118
126
119
setStyle(options) // set style for UI
127
120
128
- val isCrop = options.getBoolean(" isCrop" ) && singleSelectedMode == true
121
+ val isCrop = options.getBoolean(" isCrop" ) && singleSelectedMode
129
122
130
123
if (isCrop) {
131
124
setCropOptions(options)
@@ -137,7 +130,7 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
137
130
138
131
@SuppressLint(" ResourceAsColor" )
139
132
private fun setCropOptions (libOption : ReadableMap ) {
140
- val options = UCrop . Options ()
133
+ val options = Options ()
141
134
val mainStyle: SelectMainStyle = style.selectMainStyle
142
135
143
136
options.setShowCropFrame(true )
@@ -148,7 +141,7 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
148
141
options.isForbidSkipMultipleCrop(true )
149
142
options.setMaxScaleMultiplier(100f )
150
143
options.setLogoColor(primaryColor)
151
- options.setToolbarWidgetColor(app_color_black )
144
+ options.setToolbarWidgetColor(Color . BLACK )
152
145
options.setStatusBarColor(mainStyle.statusBarColor)
153
146
options.isDarkStatusBarBlack(mainStyle.isDarkStatusBarBlack)
154
147
@@ -162,22 +155,22 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
162
155
163
156
// ANIMATION SLIDE FROM BOTTOM
164
157
val animationStyle = PictureWindowAnimationStyle ()
165
- animationStyle.setActivityEnterAnimation(com.luck.picture.lib. R .anim.ps_anim_up_in)
166
- animationStyle.setActivityExitAnimation(com.luck.picture.lib. R .anim.ps_anim_down_out)
158
+ animationStyle.setActivityEnterAnimation(R .anim.ps_anim_up_in)
159
+ animationStyle.setActivityExitAnimation(R .anim.ps_anim_down_out)
167
160
168
161
// TITLE BAR
169
162
val titleBar = TitleBarStyle ()
170
163
titleBar.titleBackgroundColor =
171
164
ContextCompat .getColor(appContext, R .color.app_color_white)
172
165
173
- titleBar.setHideCancelButton( true );
174
- titleBar.setAlbumTitleRelativeLeft( true );
166
+ titleBar.isHideCancelButton = true
167
+ titleBar.isAlbumTitleRelativeLeft = true
175
168
176
- titleBar.setTitleAlbumBackgroundResource(com.luck.picture.lib. R .drawable.ps_album_bg);
177
- titleBar.setTitleDrawableRightResource(com.luck.picture.lib. R .drawable.ps_ic_grey_arrow);
178
- titleBar.setPreviewTitleLeftBackResource(com.luck.picture.lib. R .drawable.ps_ic_black_back);
179
- titleBar.setTitleLeftBackResource(com.luck.picture.lib. R .drawable.ps_ic_black_back);
180
- titleBar.setHideCancelButton( true )
169
+ titleBar.titleAlbumBackgroundResource = R .drawable.ps_album_bg
170
+ titleBar.titleDrawableRightResource = R .drawable.ps_ic_grey_arrow
171
+ titleBar.previewTitleLeftBackResource = R .drawable.ps_ic_black_back
172
+ titleBar.titleLeftBackResource = R .drawable.ps_ic_black_back
173
+ titleBar.isHideCancelButton = true
181
174
182
175
// BOTTOM BAR
183
176
val bottomBar = BottomNavBarStyle ()
@@ -186,74 +179,50 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
186
179
bottomBar.bottomPreviewSelectTextColor =
187
180
ContextCompat .getColor(appContext, R .color.app_color_pri)
188
181
bottomBar.bottomNarBarBackgroundColor =
189
- ContextCompat .getColor(appContext, com.luck.picture.lib. R .color.ps_color_white)
182
+ ContextCompat .getColor(appContext, R .color.ps_color_white)
190
183
bottomBar.bottomSelectNumResources = R .drawable.num_oval_orange
191
184
bottomBar.bottomEditorTextColor =
192
- ContextCompat .getColor(appContext, com.luck.picture.lib. R .color.ps_color_53575e)
185
+ ContextCompat .getColor(appContext, R .color.ps_color_53575e)
193
186
bottomBar.bottomOriginalTextColor =
194
- ContextCompat .getColor(appContext, com.luck.picture.lib. R .color.ps_color_53575e)
187
+ ContextCompat .getColor(appContext, R .color.ps_color_53575e)
195
188
bottomBar.bottomPreviewNormalTextColor = R .color.app_color_53575e
196
- bottomBar.bottomPreviewNormalTextColor = app_color_black
197
- bottomBar.setCompleteCountTips( false )
189
+ bottomBar.bottomPreviewNormalTextColor = Color . BLACK
190
+ bottomBar.isCompleteCountTips = false
198
191
199
192
// MAIN STYLE
200
193
val mainStyle = SelectMainStyle ()
201
194
202
- mainStyle.setPreviewSelectRelativeBottom( true )
203
- mainStyle.setSelectNumberStyle( if (singleSelectedMode) false else true )
204
- mainStyle.setPreviewSelectNumberStyle( true );
195
+ mainStyle.isPreviewSelectRelativeBottom = true
196
+ mainStyle.isSelectNumberStyle = ! singleSelectedMode
197
+ mainStyle.isPreviewSelectNumberStyle = true
205
198
mainStyle.isSelectNumberStyle = true
206
199
mainStyle.selectBackground = R .drawable.picture_selector
207
200
mainStyle.mainListBackgroundColor =
208
- ContextCompat .getColor(appContext, com.luck.picture.lib. R .color.ps_color_white)
201
+ ContextCompat .getColor(appContext, R .color.ps_color_white)
209
202
mainStyle.previewSelectBackground =
210
203
R .drawable.picture_selector
211
204
212
205
// custom select text on top
213
- mainStyle.setSelectText( doneTitle)
214
- mainStyle.setCompleteSelectRelativeTop( true )
215
- mainStyle.setSelectNormalText( doneTitle)
206
+ mainStyle.selectText = doneTitle
207
+ mainStyle.isCompleteSelectRelativeTop = true
208
+ mainStyle.selectNormalText = doneTitle
216
209
217
210
218
211
mainStyle.selectNormalTextColor =
219
- ContextCompat .getColor(appContext, com.luck.picture.lib. R .color.ps_color_9b)
212
+ ContextCompat .getColor(appContext, R .color.ps_color_9b)
220
213
mainStyle.selectTextColor = primaryColor
221
214
mainStyle.selectText = doneTitle
222
215
223
- mainStyle.setStatusBarColor(
224
- ContextCompat .getColor(
225
- appContext,
226
- R .color.app_color_white
227
- )
228
- );
229
- mainStyle.setDarkStatusBarBlack(true );
230
-
231
- style.setTitleBarStyle(titleBar)
232
- style.setBottomBarStyle(bottomBar)
233
- style.setSelectMainStyle(mainStyle)
234
- style.setWindowAnimationStyle(animationStyle)
235
-
236
-
237
- // pictureStyle.selectMainStyle.adapterImageEditorResources =
238
- // if (singleSelectedMode) R.drawable.checkbox_selector else R.drawable.picture_selector
239
- // numberSelectMainStyle.isSelectNumberStyle = if (singleSelectedMode) false else true
240
- // //bottom style
241
- // pictureStyle.bottomBarStyle.bottomOriginalText = options.getString("doneTitle")
242
- // pictureStyle.isOpenCheckNumStyle = if(singleSelectedMode) false else true
243
- // pictureStyle.isCompleteReplaceNum = true
244
- // pictureStyle.pictureCompleteTextSize = 16
245
- // pictureStyle.pictureCheckNumBgStyle = R.drawable.num_oval_orange
246
- // pictureStyle.pictureCompleteTextColor = Color.parseColor("#ffffff")
247
- // pictureStyle.pictureNavBarColor = Color.parseColor("#000000")
248
- // pictureStyle.pictureBottomBgColor = Color.parseColor("#393a3e")
249
- // //preview Style
250
- // pictureStyle.picturePreviewBottomBgColor = Color.parseColor("#000000")
251
- // pictureStyle.pictureUnPreviewTextColor = Color.parseColor("#ffffff")
252
- // //header
253
- // pictureStyle.pictureTitleDownResId = R.drawable.picture_icon_arrow_down
254
- // pictureStyle.pictureCancelTextColor = Color.parseColor("#393a3e")
255
- // pictureStyle.pictureStatusBarColor = Color.parseColor("#393a3e")
256
- // pictureStyle.pictureTitleBarBackgroundColor = Color.parseColor("#393a3e")
216
+ mainStyle.statusBarColor = ContextCompat .getColor(
217
+ appContext,
218
+ R .color.app_color_white
219
+ )
220
+ mainStyle.isDarkStatusBarBlack = true
221
+
222
+ style.titleBarStyle = titleBar
223
+ style.bottomBarStyle = bottomBar
224
+ style.selectMainStyle = mainStyle
225
+ style.windowAnimationStyle = animationStyle
257
226
}
258
227
259
228
private fun handleSelectedAssets (options : ReadableMap ? ) {
@@ -265,7 +234,7 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
265
234
if (assets.size() > 0 ) {
266
235
val list = mutableListOf<LocalMedia >()
267
236
for (i in 0 until assets.size()) {
268
- val asset: ReadableNativeMap = assets.getMap(i) as ReadableNativeMap
237
+ val asset: ReadableNativeMap = assets.getMap(i)
269
238
val localMedia: LocalMedia = handleSelectedAssetItem(asset)
270
239
list.add(localMedia)
271
240
}
@@ -285,7 +254,6 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
285
254
return generateLocalMedia(appContext, path)
286
255
}
287
256
288
- @RequiresApi(Build .VERSION_CODES .LOLLIPOP )
289
257
private fun createAttachmentResponse (item : LocalMedia ): WritableMap {
290
258
val media: WritableMap = WritableNativeMap ()
291
259
val type: String = if (item.mimeType.startsWith(" video/" )) " video" else " image"
@@ -305,7 +273,7 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
305
273
media.putString(" parentFolderName" , item.parentFolderName)
306
274
if (item.isCut) {
307
275
val crop = WritableNativeMap ()
308
- crop.putString(" path" , item.cutPath)
276
+ crop.putString(" path" , " file:// ${ item.cutPath} " )
309
277
crop.putDouble(" width" , item.cropImageWidth.toDouble())
310
278
crop.putDouble(" height" , item.cropImageHeight.toDouble())
311
279
media.putMap(" crop" , crop)
@@ -346,22 +314,6 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
346
314
}
347
315
}
348
316
349
- private fun createDirIfNotExists (path : String ): File {
350
- val dir = File (path)
351
- if (dir.exists()) {
352
- return dir
353
- }
354
- try {
355
- dir.mkdirs()
356
- // Add .nomedia to hide the thumbnail directory from gallery
357
- val noMedia = File (path, " .nomedia" )
358
- noMedia.createNewFile()
359
- } catch (e: IOException ) {
360
- e.printStackTrace()
361
- }
362
- return dir
363
- }
364
-
365
317
override fun getAppContext (): Context {
366
318
return reactApplicationContext
367
319
}
0 commit comments