1
1
package com.reactnativemultipleimagepicker
2
2
3
+ import android.annotation.SuppressLint
3
4
import android.content.Context
4
5
import android.graphics.Bitmap
5
6
import android.graphics.Color
@@ -20,6 +21,7 @@ import com.luck.picture.lib.entity.LocalMedia.generateLocalMedia
20
21
import com.luck.picture.lib.interfaces.OnResultCallbackListener
21
22
import com.luck.picture.lib.style.*
22
23
import com.luck.picture.lib.utils.StyleUtils
24
+ import com.reactnativemultipleimagepicker.R.color.app_color_black
23
25
import com.yalantis.ucrop.UCrop
24
26
import com.yalantis.ucrop.UCrop.Options
25
27
import java.io.*
@@ -28,7 +30,7 @@ import java.util.*
28
30
29
31
@Suppress(" INCOMPATIBLE_ENUM_COMPARISON" , " UNCHECKED_CAST" )
30
32
class MultipleImagePickerModule (reactContext : ReactApplicationContext ) :
31
- ReactContextBaseJavaModule (reactContext), IApp {
33
+ ReactContextBaseJavaModule (reactContext), IApp {
32
34
33
35
override fun getName (): String {
34
36
return " MultipleImagePicker"
@@ -60,48 +62,48 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
60
62
setConfiguration(options)
61
63
62
64
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
+ }
96
99
}
100
+ promise.resolve(localMedia)
97
101
}
98
- promise.resolve(localMedia)
99
- }
100
102
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
+ })
105
107
}
106
108
107
109
private fun onSetCropEngine (): CropEngine ? {
@@ -133,6 +135,7 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
133
135
}
134
136
}
135
137
138
+ @SuppressLint(" ResourceAsColor" )
136
139
private fun setCropOptions (libOption : ReadableMap ) {
137
140
val options = UCrop .Options ()
138
141
val mainStyle: SelectMainStyle = style.selectMainStyle
@@ -145,7 +148,7 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
145
148
options.isForbidSkipMultipleCrop(true )
146
149
options.setMaxScaleMultiplier(100f )
147
150
options.setLogoColor(primaryColor)
148
- options.setToolbarWidgetColor(R .color. app_color_black)
151
+ options.setToolbarWidgetColor(app_color_black)
149
152
options.setStatusBarColor(mainStyle.statusBarColor)
150
153
options.isDarkStatusBarBlack(mainStyle.isDarkStatusBarBlack)
151
154
@@ -159,38 +162,38 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
159
162
160
163
// ANIMATION SLIDE FROM BOTTOM
161
164
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 )
164
167
165
168
// TITLE BAR
166
169
val titleBar = TitleBarStyle ()
167
170
titleBar.titleBackgroundColor =
168
- ContextCompat .getColor(appContext, R .color.app_color_white)
171
+ ContextCompat .getColor(appContext, R .color.app_color_white)
169
172
170
173
titleBar.setHideCancelButton(true );
171
174
titleBar.setAlbumTitleRelativeLeft(true );
172
175
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);
177
180
titleBar.setHideCancelButton(true )
178
181
179
182
// BOTTOM BAR
180
183
val bottomBar = BottomNavBarStyle ()
181
184
bottomBar.bottomPreviewNormalTextColor =
182
- ContextCompat .getColor(appContext, R .color.app_color_pri)
185
+ ContextCompat .getColor(appContext, R .color.app_color_pri)
183
186
bottomBar.bottomPreviewSelectTextColor =
184
- ContextCompat .getColor(appContext, R .color.app_color_pri)
187
+ ContextCompat .getColor(appContext, R .color.app_color_pri)
185
188
bottomBar.bottomNarBarBackgroundColor =
186
- ContextCompat .getColor(appContext, R .color.ps_color_white)
189
+ ContextCompat .getColor(appContext, com.luck.picture.lib. R .color.ps_color_white)
187
190
bottomBar.bottomSelectNumResources = R .drawable.num_oval_orange
188
191
bottomBar.bottomEditorTextColor =
189
- ContextCompat .getColor(appContext, R .color.ps_color_53575e)
192
+ ContextCompat .getColor(appContext, com.luck.picture.lib. R .color.ps_color_53575e)
190
193
bottomBar.bottomOriginalTextColor =
191
- ContextCompat .getColor(appContext, R .color.ps_color_53575e)
194
+ ContextCompat .getColor(appContext, com.luck.picture.lib. R .color.ps_color_53575e)
192
195
bottomBar.bottomPreviewNormalTextColor = R .color.app_color_53575e
193
- bottomBar.bottomPreviewNormalTextColor = R .color. app_color_black
196
+ bottomBar.bottomPreviewNormalTextColor = app_color_black
194
197
bottomBar.setCompleteCountTips(false )
195
198
196
199
// MAIN STYLE
@@ -202,9 +205,9 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
202
205
mainStyle.isSelectNumberStyle = true
203
206
mainStyle.selectBackground = R .drawable.picture_selector
204
207
mainStyle.mainListBackgroundColor =
205
- ContextCompat .getColor(appContext, R .color.ps_color_white)
208
+ ContextCompat .getColor(appContext, com.luck.picture.lib. R .color.ps_color_white)
206
209
mainStyle.previewSelectBackground =
207
- R .drawable.picture_selector
210
+ R .drawable.picture_selector
208
211
209
212
// custom select text on top
210
213
mainStyle.setSelectText(doneTitle)
@@ -213,15 +216,15 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
213
216
214
217
215
218
mainStyle.selectNormalTextColor =
216
- ContextCompat .getColor(appContext, R .color.ps_color_9b)
219
+ ContextCompat .getColor(appContext, com.luck.picture.lib. R .color.ps_color_9b)
217
220
mainStyle.selectTextColor = primaryColor
218
221
mainStyle.selectText = doneTitle
219
222
220
223
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
+ )
225
228
);
226
229
mainStyle.setDarkStatusBarBlack(true );
227
230
@@ -258,7 +261,7 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
258
261
val assetsType = options.getType(" selectedAssets" )
259
262
if (assetsType == ReadableType .Array ) {
260
263
val assets: ReadableNativeArray =
261
- options.getArray(" selectedAssets" ) as ReadableNativeArray
264
+ options.getArray(" selectedAssets" ) as ReadableNativeArray
262
265
if (assets.size() > 0 ) {
263
266
val list = mutableListOf<LocalMedia >()
264
267
for (i in 0 until assets.size()) {
@@ -320,7 +323,7 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
320
323
val image = retriever.getFrameAtTime(1000000 , MediaMetadataRetriever .OPTION_CLOSEST_SYNC )
321
324
322
325
val fullPath: String =
323
- reactApplicationContext.applicationContext.cacheDir.absolutePath.toString() + " /thumbnails"
326
+ reactApplicationContext.applicationContext.cacheDir.absolutePath.toString() + " /thumbnails"
324
327
try {
325
328
val fileName = " thumb-" + UUID .randomUUID().toString() + " .jpeg"
326
329
val file = File (fullPath, fileName)
0 commit comments