11package com.reactnativemultipleimagepicker
22
3+ import android.annotation.SuppressLint
34import android.content.Context
45import android.graphics.Bitmap
56import android.graphics.Color
@@ -20,6 +21,7 @@ import com.luck.picture.lib.entity.LocalMedia.generateLocalMedia
2021import com.luck.picture.lib.interfaces.OnResultCallbackListener
2122import com.luck.picture.lib.style.*
2223import com.luck.picture.lib.utils.StyleUtils
24+ import com.reactnativemultipleimagepicker.R.color.app_color_black
2325import com.yalantis.ucrop.UCrop
2426import com.yalantis.ucrop.UCrop.Options
2527import java.io.*
@@ -28,7 +30,7 @@ import java.util.*
2830
2931@Suppress(" INCOMPATIBLE_ENUM_COMPARISON" , " UNCHECKED_CAST" )
3032class MultipleImagePickerModule (reactContext : ReactApplicationContext ) :
31- ReactContextBaseJavaModule (reactContext), IApp {
33+ ReactContextBaseJavaModule (reactContext), IApp {
3234
3335 override fun getName (): String {
3436 return " MultipleImagePicker"
@@ -60,48 +62,48 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
6062 setConfiguration(options)
6163
6264 PictureSelector .create(activity)
63- .openGallery(if (mediaType == " video" ) SelectMimeType .ofVideo() else if (mediaType == " image" ) SelectMimeType .ofImage() else SelectMimeType .ofAll())
64- .setImageEngine(imageEngine)
65- .setMaxSelectNum(maxSelectedAssets)
66- .setImageSpanCount(numberOfColumn)
67- .setCropEngine(onSetCropEngine())
68- .isDirectReturnSingle(true )
69- .isSelectZoomAnim(true )
70- .isPageStrategy(true , 50 )
71- .isWithSelectVideoImage(true )
72- .setRecordVideoMaxSecond(maxVideoDuration)
73- .setMaxVideoSelectNum(if (maxVideo != 20 ) maxVideo else maxSelectedAssets)
74- .isMaxSelectEnabledMask(true )
75- .setSelectedData(selectedAssets)
76- .setSelectorUIStyle(style)
77- .isPreviewImage(isPreview)
78- .isPreviewVideo(isPreview)
79- .isDisplayCamera(isCamera)
80- .setSelectionMode(if (singleSelectedMode) SelectModeConfig .SINGLE else SelectModeConfig .MULTIPLE )
81- .forResult(object : OnResultCallbackListener <LocalMedia ?> {
82- override fun onResult (result : ArrayList <LocalMedia ?>? ) {
83- val localMedia: WritableArray = WritableNativeArray ()
84- if (result?.size == 0 ) {
85- promise.resolve(localMedia)
86- return
87- }
88- if (result?.size == selectedAssets.size && (result[result.size - 1 ] as LocalMedia ).id == (selectedAssets[selectedAssets.size - 1 ].id)) {
89- return
90- }
91- if (result != null ) {
92- for (i in 0 until result.size) {
93- val item: LocalMedia = result[i] as LocalMedia
94- val media: WritableMap = createAttachmentResponse(item)
95- localMedia.pushMap(media)
65+ .openGallery(if (mediaType == " video" ) SelectMimeType .ofVideo() else if (mediaType == " image" ) SelectMimeType .ofImage() else SelectMimeType .ofAll())
66+ .setImageEngine(imageEngine)
67+ .setMaxSelectNum(maxSelectedAssets)
68+ .setImageSpanCount(numberOfColumn)
69+ .setCropEngine(onSetCropEngine())
70+ .isDirectReturnSingle(true )
71+ .isSelectZoomAnim(true )
72+ .isPageStrategy(true , 50 )
73+ .isWithSelectVideoImage(true )
74+ .setRecordVideoMaxSecond(maxVideoDuration)
75+ .setMaxVideoSelectNum(if (maxVideo != 20 ) maxVideo else maxSelectedAssets)
76+ .isMaxSelectEnabledMask(true )
77+ .setSelectedData(selectedAssets)
78+ .setSelectorUIStyle(style)
79+ .isPreviewImage(isPreview)
80+ .isPreviewVideo(isPreview)
81+ .isDisplayCamera(isCamera)
82+ .setSelectionMode(if (singleSelectedMode) SelectModeConfig .SINGLE else SelectModeConfig .MULTIPLE )
83+ .forResult(object : OnResultCallbackListener <LocalMedia ?> {
84+ override fun onResult (result : ArrayList <LocalMedia ?>? ) {
85+ val localMedia: WritableArray = WritableNativeArray ()
86+ if (result?.size == 0 ) {
87+ promise.resolve(localMedia)
88+ return
89+ }
90+ if (result?.size == selectedAssets.size && (result[result.size - 1 ] as LocalMedia ).id == (selectedAssets[selectedAssets.size - 1 ].id)) {
91+ return
92+ }
93+ if (result != null ) {
94+ for (i in 0 until result.size) {
95+ val item: LocalMedia = result[i] as LocalMedia
96+ val media: WritableMap = createAttachmentResponse(item)
97+ localMedia.pushMap(media)
98+ }
9699 }
100+ promise.resolve(localMedia)
97101 }
98- promise.resolve(localMedia)
99- }
100102
101- override fun onCancel () {
102- promise.reject(" PICKER_CANCELLED" , " User has canceled" , null )
103- }
104- })
103+ override fun onCancel () {
104+ promise.reject(" PICKER_CANCELLED" , " User has canceled" , null )
105+ }
106+ })
105107 }
106108
107109 private fun onSetCropEngine (): CropEngine ? {
@@ -133,6 +135,7 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
133135 }
134136 }
135137
138+ @SuppressLint(" ResourceAsColor" )
136139 private fun setCropOptions (libOption : ReadableMap ) {
137140 val options = UCrop .Options ()
138141 val mainStyle: SelectMainStyle = style.selectMainStyle
@@ -145,7 +148,7 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
145148 options.isForbidSkipMultipleCrop(true )
146149 options.setMaxScaleMultiplier(100f )
147150 options.setLogoColor(primaryColor)
148- options.setToolbarWidgetColor(R .color. app_color_black)
151+ options.setToolbarWidgetColor(app_color_black)
149152 options.setStatusBarColor(mainStyle.statusBarColor)
150153 options.isDarkStatusBarBlack(mainStyle.isDarkStatusBarBlack)
151154
@@ -159,38 +162,38 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
159162
160163 // ANIMATION SLIDE FROM BOTTOM
161164 val animationStyle = PictureWindowAnimationStyle ()
162- animationStyle.setActivityEnterAnimation(R .anim.ps_anim_up_in)
163- animationStyle.setActivityExitAnimation(R .anim.ps_anim_down_out )
165+ animationStyle.setActivityEnterAnimation(com.luck.picture.lib. R .anim.ps_anim_up_in)
166+ animationStyle.setActivityExitAnimation(com.luck.picture.lib. R .anim.ps_anim_up_in )
164167
165168 // TITLE BAR
166169 val titleBar = TitleBarStyle ()
167170 titleBar.titleBackgroundColor =
168- ContextCompat .getColor(appContext, R .color.app_color_white)
171+ ContextCompat .getColor(appContext, R .color.app_color_white)
169172
170173 titleBar.setHideCancelButton(true );
171174 titleBar.setAlbumTitleRelativeLeft(true );
172175
173- titleBar.setTitleAlbumBackgroundResource(R .drawable.ps_album_bg);
174- titleBar.setTitleDrawableRightResource(R .drawable.ps_ic_grey_arrow);
175- titleBar.setPreviewTitleLeftBackResource(R .drawable.ps_ic_black_back);
176- titleBar.setTitleLeftBackResource(R .drawable.ps_ic_black_back);
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);
177180 titleBar.setHideCancelButton(true )
178181
179182 // BOTTOM BAR
180183 val bottomBar = BottomNavBarStyle ()
181184 bottomBar.bottomPreviewNormalTextColor =
182- ContextCompat .getColor(appContext, R .color.app_color_pri)
185+ ContextCompat .getColor(appContext, R .color.app_color_pri)
183186 bottomBar.bottomPreviewSelectTextColor =
184- ContextCompat .getColor(appContext, R .color.app_color_pri)
187+ ContextCompat .getColor(appContext, R .color.app_color_pri)
185188 bottomBar.bottomNarBarBackgroundColor =
186- ContextCompat .getColor(appContext, R .color.ps_color_white)
189+ ContextCompat .getColor(appContext, com.luck.picture.lib. R .color.ps_color_white)
187190 bottomBar.bottomSelectNumResources = R .drawable.num_oval_orange
188191 bottomBar.bottomEditorTextColor =
189- ContextCompat .getColor(appContext, R .color.ps_color_53575e)
192+ ContextCompat .getColor(appContext, com.luck.picture.lib. R .color.ps_color_53575e)
190193 bottomBar.bottomOriginalTextColor =
191- ContextCompat .getColor(appContext, R .color.ps_color_53575e)
194+ ContextCompat .getColor(appContext, com.luck.picture.lib. R .color.ps_color_53575e)
192195 bottomBar.bottomPreviewNormalTextColor = R .color.app_color_53575e
193- bottomBar.bottomPreviewNormalTextColor = R .color. app_color_black
196+ bottomBar.bottomPreviewNormalTextColor = app_color_black
194197 bottomBar.setCompleteCountTips(false )
195198
196199 // MAIN STYLE
@@ -202,9 +205,9 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
202205 mainStyle.isSelectNumberStyle = true
203206 mainStyle.selectBackground = R .drawable.picture_selector
204207 mainStyle.mainListBackgroundColor =
205- ContextCompat .getColor(appContext, R .color.ps_color_white)
208+ ContextCompat .getColor(appContext, com.luck.picture.lib. R .color.ps_color_white)
206209 mainStyle.previewSelectBackground =
207- R .drawable.picture_selector
210+ R .drawable.picture_selector
208211
209212 // custom select text on top
210213 mainStyle.setSelectText(doneTitle)
@@ -213,15 +216,15 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
213216
214217
215218 mainStyle.selectNormalTextColor =
216- ContextCompat .getColor(appContext, R .color.ps_color_9b)
219+ ContextCompat .getColor(appContext, com.luck.picture.lib. R .color.ps_color_9b)
217220 mainStyle.selectTextColor = primaryColor
218221 mainStyle.selectText = doneTitle
219222
220223 mainStyle.setStatusBarColor(
221- ContextCompat .getColor(
222- appContext,
223- R .color.app_color_white
224- )
224+ ContextCompat .getColor(
225+ appContext,
226+ R .color.app_color_white
227+ )
225228 );
226229 mainStyle.setDarkStatusBarBlack(true );
227230
@@ -258,7 +261,7 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
258261 val assetsType = options.getType(" selectedAssets" )
259262 if (assetsType == ReadableType .Array ) {
260263 val assets: ReadableNativeArray =
261- options.getArray(" selectedAssets" ) as ReadableNativeArray
264+ options.getArray(" selectedAssets" ) as ReadableNativeArray
262265 if (assets.size() > 0 ) {
263266 val list = mutableListOf<LocalMedia >()
264267 for (i in 0 until assets.size()) {
@@ -320,7 +323,7 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
320323 val image = retriever.getFrameAtTime(1000000 , MediaMetadataRetriever .OPTION_CLOSEST_SYNC )
321324
322325 val fullPath: String =
323- reactApplicationContext.applicationContext.cacheDir.absolutePath.toString() + " /thumbnails"
326+ reactApplicationContext.applicationContext.cacheDir.absolutePath.toString() + " /thumbnails"
324327 try {
325328 val fileName = " thumb-" + UUID .randomUUID().toString() + " .jpeg"
326329 val file = File (fullPath, fileName)
0 commit comments