1
1
package com.margelo.nitro.multipleimagepicker
2
2
3
3
import android.app.Activity
4
- import android.content.ContentResolver
5
4
import android.content.Context
6
5
import android.content.Intent
7
6
import android.graphics.Color
8
7
import android.net.Uri
9
8
import androidx.core.content.ContextCompat
10
- import com.facebook.react.bridge.ActivityEventListener
11
9
import com.facebook.react.bridge.BaseActivityEventListener
12
10
import com.facebook.react.bridge.ColorPropConverter
13
11
import com.facebook.react.bridge.ReactApplicationContext
@@ -19,9 +17,9 @@ import com.luck.picture.lib.basic.PictureSelector
19
17
import com.luck.picture.lib.config.PictureMimeType
20
18
import com.luck.picture.lib.config.SelectMimeType
21
19
import com.luck.picture.lib.config.SelectModeConfig
22
- import com.luck.picture.lib.engine.ImageEngine
23
20
import com.luck.picture.lib.engine.PictureSelectorEngine
24
21
import com.luck.picture.lib.entity.LocalMedia
22
+ import com.luck.picture.lib.interfaces.OnCustomLoadingListener
25
23
import com.luck.picture.lib.interfaces.OnMediaEditInterceptListener
26
24
import com.luck.picture.lib.interfaces.OnResultCallbackListener
27
25
import com.luck.picture.lib.language.LanguageConfig
@@ -32,6 +30,7 @@ import com.luck.picture.lib.style.SelectMainStyle
32
30
import com.luck.picture.lib.style.TitleBarStyle
33
31
import com.luck.picture.lib.utils.DateUtils
34
32
import com.luck.picture.lib.utils.DensityUtil
33
+ import com.luck.picture.lib.utils.MediaUtils
35
34
import com.yalantis.ucrop.UCrop
36
35
import com.yalantis.ucrop.UCrop.Options
37
36
import com.yalantis.ucrop.UCrop.REQUEST_CROP
@@ -99,7 +98,8 @@ class MultipleImagePickerImp(reactContext: ReactApplicationContext?) :
99
98
.openGallery(chooseMode)
100
99
.setImageEngine(imageEngine)
101
100
.setSelectedData(dataList)
102
- .setSelectorUIStyle(style).apply {
101
+ .setSelectorUIStyle(style)
102
+ .apply {
103
103
if (isCrop) {
104
104
setCropOption(config.crop)
105
105
// Disabled force crop engine for multiple
@@ -126,7 +126,8 @@ class MultipleImagePickerImp(reactContext: ReactApplicationContext?) :
126
126
if (videoQuality != null && videoQuality != 1.0 ) {
127
127
setVideoQuality(if (videoQuality > 0.5 ) 1 else 0 )
128
128
}
129
- }.setImageSpanCount(config.numberOfColumn?.toInt() ? : 3 )
129
+ }
130
+ .setImageSpanCount(config.numberOfColumn?.toInt() ? : 3 )
130
131
.setMaxSelectNum(maxSelect)
131
132
.isDirectReturnSingle(true )
132
133
.isSelectZoomAnim(true )
@@ -263,20 +264,61 @@ class MultipleImagePickerImp(reactContext: ReactApplicationContext?) :
263
264
}
264
265
265
266
@ReactMethod
266
- fun openPreview (media : Array <MediaPreview >, config : NitroPreviewConfig ) {
267
-
267
+ fun openPreview (media : Array <MediaPreview >, index : Int , config : NitroPreviewConfig ) {
268
268
val imageEngine = GlideEngine .createGlideEngine()
269
269
270
- var list: ArrayList <LocalMedia > = arrayListOf ()
270
+ val assets: ArrayList <LocalMedia > = arrayListOf ()
271
+
272
+ val previewStyle = PictureSelectorStyle ()
273
+ val titleBarStyle = TitleBarStyle ()
274
+
275
+ previewStyle.windowAnimationStyle.setActivityEnterAnimation(R .anim.anim_modal_in)
276
+ previewStyle.windowAnimationStyle.setActivityExitAnimation(com.luck.picture.lib.R .anim.ps_anim_modal_out)
277
+ previewStyle.selectMainStyle.previewBackgroundColor = Color .BLACK
278
+
279
+ titleBarStyle.previewTitleBackgroundColor = Color .BLACK
280
+ previewStyle.titleBarStyle = titleBarStyle
281
+
282
+ media.forEach { mediaItem ->
283
+ var asset: LocalMedia ? = null
284
+
285
+ mediaItem.path?.let { path ->
286
+ // network asset
287
+ if (path.startsWith(" https://" ) || path.startsWith(" http://" )) {
288
+ val localMedia = LocalMedia .create()
289
+ localMedia.path = path
290
+ localMedia.mimeType =
291
+ if (mediaItem.type == ResultType .VIDEO ) " video/mp4" else MediaUtils .getMimeTypeFromMediaHttpUrl(
292
+ path
293
+ ) ? : " image/jpg"
294
+ asset = localMedia
295
+ } else {
296
+ asset = LocalMedia .generateLocalMedia(appContext, path)
297
+ }
298
+ }
299
+
300
+ asset?.let { assets.add(it) }
301
+ }
271
302
272
303
PictureSelector
273
304
.create(currentActivity)
274
305
.openPreview()
275
306
.setImageEngine(imageEngine)
276
307
.setLanguage(getLanguage(config.language))
277
- .startFragmentPreview(config.index.toInt(), false , list)
308
+ .setSelectorUIStyle(previewStyle)
309
+ .isPreviewFullScreenMode(true )
310
+ .isAutoVideoPlay(true )
311
+ .setVideoPlayerEngine(ExoPlayerEngine ())
312
+ .isVideoPauseResumePlay(true )
313
+ .setCustomLoadingListener(getCustomLoadingListener())
314
+ .startActivityPreview(index, false , assets)
315
+ }
316
+
317
+ private fun getCustomLoadingListener (): OnCustomLoadingListener {
318
+ return OnCustomLoadingListener { context -> LoadingDialog (context) }
278
319
}
279
320
321
+
280
322
private fun getLanguage (language : Language ): Int {
281
323
return when (language) {
282
324
Language .VI -> LanguageConfig .VIETNAM // -> 🇻🇳 My country. Yeahhh
@@ -343,9 +385,7 @@ class MultipleImagePickerImp(reactContext: ReactApplicationContext?) :
343
385
0 ,
344
386
* ratioList.take(5 ).toTypedArray()
345
387
)
346
-
347
388
}
348
-
349
389
}
350
390
}
351
391
@@ -515,4 +555,4 @@ class MultipleImagePickerImp(reactContext: ReactApplicationContext?) :
515
555
override fun getPictureSelectorEngine (): PictureSelectorEngine {
516
556
return PictureSelectorEngineImp ()
517
557
}
518
- }
558
+ }
0 commit comments