11package com.margelo.nitro.multipleimagepicker
22
33import android.app.Activity
4- import android.content.ContentResolver
54import android.content.Context
65import android.content.Intent
76import android.graphics.Color
87import android.net.Uri
98import androidx.core.content.ContextCompat
10- import com.facebook.react.bridge.ActivityEventListener
119import com.facebook.react.bridge.BaseActivityEventListener
1210import com.facebook.react.bridge.ColorPropConverter
1311import com.facebook.react.bridge.ReactApplicationContext
@@ -19,9 +17,9 @@ import com.luck.picture.lib.basic.PictureSelector
1917import com.luck.picture.lib.config.PictureMimeType
2018import com.luck.picture.lib.config.SelectMimeType
2119import com.luck.picture.lib.config.SelectModeConfig
22- import com.luck.picture.lib.engine.ImageEngine
2320import com.luck.picture.lib.engine.PictureSelectorEngine
2421import com.luck.picture.lib.entity.LocalMedia
22+ import com.luck.picture.lib.interfaces.OnCustomLoadingListener
2523import com.luck.picture.lib.interfaces.OnMediaEditInterceptListener
2624import com.luck.picture.lib.interfaces.OnResultCallbackListener
2725import com.luck.picture.lib.language.LanguageConfig
@@ -32,6 +30,7 @@ import com.luck.picture.lib.style.SelectMainStyle
3230import com.luck.picture.lib.style.TitleBarStyle
3331import com.luck.picture.lib.utils.DateUtils
3432import com.luck.picture.lib.utils.DensityUtil
33+ import com.luck.picture.lib.utils.MediaUtils
3534import com.yalantis.ucrop.UCrop
3635import com.yalantis.ucrop.UCrop.Options
3736import com.yalantis.ucrop.UCrop.REQUEST_CROP
@@ -99,7 +98,8 @@ class MultipleImagePickerImp(reactContext: ReactApplicationContext?) :
9998 .openGallery(chooseMode)
10099 .setImageEngine(imageEngine)
101100 .setSelectedData(dataList)
102- .setSelectorUIStyle(style).apply {
101+ .setSelectorUIStyle(style)
102+ .apply {
103103 if (isCrop) {
104104 setCropOption(config.crop)
105105 // Disabled force crop engine for multiple
@@ -126,7 +126,8 @@ class MultipleImagePickerImp(reactContext: ReactApplicationContext?) :
126126 if (videoQuality != null && videoQuality != 1.0 ) {
127127 setVideoQuality(if (videoQuality > 0.5 ) 1 else 0 )
128128 }
129- }.setImageSpanCount(config.numberOfColumn?.toInt() ? : 3 )
129+ }
130+ .setImageSpanCount(config.numberOfColumn?.toInt() ? : 3 )
130131 .setMaxSelectNum(maxSelect)
131132 .isDirectReturnSingle(true )
132133 .isSelectZoomAnim(true )
@@ -263,20 +264,61 @@ class MultipleImagePickerImp(reactContext: ReactApplicationContext?) :
263264 }
264265
265266 @ReactMethod
266- fun openPreview (media : Array <MediaPreview >, config : NitroPreviewConfig ) {
267-
267+ fun openPreview (media : Array <MediaPreview >, index : Int , config : NitroPreviewConfig ) {
268268 val imageEngine = GlideEngine .createGlideEngine()
269269
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+ }
271302
272303 PictureSelector
273304 .create(currentActivity)
274305 .openPreview()
275306 .setImageEngine(imageEngine)
276307 .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) }
278319 }
279320
321+
280322 private fun getLanguage (language : Language ): Int {
281323 return when (language) {
282324 Language .VI -> LanguageConfig .VIETNAM // -> 🇻🇳 My country. Yeahhh
@@ -343,9 +385,7 @@ class MultipleImagePickerImp(reactContext: ReactApplicationContext?) :
343385 0 ,
344386 * ratioList.take(5 ).toTypedArray()
345387 )
346-
347388 }
348-
349389 }
350390 }
351391
@@ -515,4 +555,4 @@ class MultipleImagePickerImp(reactContext: ReactApplicationContext?) :
515555 override fun getPictureSelectorEngine (): PictureSelectorEngine {
516556 return PictureSelectorEngineImp ()
517557 }
518- }
558+ }
0 commit comments