Skip to content

Commit 469336a

Browse files
committed
fix: path for crop #161 and refactor import R.** #134
1 parent 2accac0 commit 469336a

File tree

4 files changed

+53
-97
lines changed

4 files changed

+53
-97
lines changed

android/build.gradle

+5-5
Original file line numberDiff line numberDiff line change
@@ -124,17 +124,17 @@ dependencies {
124124
// noinspection GradleDynamicVersion
125125
api 'com.facebook.react:react-native:+'
126126
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
127-
implementation 'com.github.bumptech.glide:glide:4.12.0'
127+
implementation 'com.github.bumptech.glide:glide:4.16.0'
128128
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
129129
// PictureSelector basic (Necessary)
130-
implementation 'io.github.lucksiege:pictureselector:v3.11.1'
130+
implementation 'io.github.lucksiege:pictureselector:v3.11.2'
131131

132132
// image compress library (Not necessary)
133-
implementation 'io.github.lucksiege:compress:v3.11.1'
133+
implementation 'io.github.lucksiege:compress:v3.11.2'
134134

135135
// uCrop library (Not necessary)
136-
implementation 'io.github.lucksiege:ucrop:v3.11.1'
136+
implementation 'io.github.lucksiege:ucrop:v3.11.2'
137137

138138
// simple camerax library (Not necessary)
139-
implementation 'io.github.lucksiege:camerax:v3.11.1'
139+
implementation 'io.github.lucksiege:camerax:v3.11.2'
140140
}

android/src/main/java/com/reactnativemultipleimagepicker/MultipleImagePickerModule.kt

+41-89
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@ import android.content.Context
55
import android.graphics.Bitmap
66
import android.graphics.Color
77
import android.media.MediaMetadataRetriever
8-
import android.os.Build
9-
import android.os.Bundle
10-
import androidx.annotation.RequiresApi
118
import androidx.core.content.ContextCompat
129
import com.facebook.react.bridge.*
1310
import com.luck.picture.lib.app.IApp
@@ -20,23 +17,19 @@ import com.luck.picture.lib.entity.LocalMedia
2017
import com.luck.picture.lib.entity.LocalMedia.generateLocalMedia
2118
import com.luck.picture.lib.interfaces.OnResultCallbackListener
2219
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
2620
import com.yalantis.ucrop.UCrop.Options
2721
import java.io.*
2822
import java.util.*
2923

3024

31-
@Suppress("INCOMPATIBLE_ENUM_COMPARISON", "UNCHECKED_CAST")
3225
class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
3326
ReactContextBaseJavaModule(reactContext), IApp {
3427

3528
override fun getName(): String {
3629
return "MultipleImagePicker"
3730
}
3831

39-
var style = PictureSelectorStyle()
32+
private var style = PictureSelectorStyle()
4033

4134
private var selectedAssets: List<LocalMedia> = ArrayList()
4235
private var singleSelectedMode: Boolean = false
@@ -48,15 +41,15 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
4841
private var isExportThumbnail: Boolean = false
4942
private var maxVideo: Int = 20
5043
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
5346

5447

5548
@ReactMethod
5649
fun openPicker(options: ReadableMap?, promise: Promise): Unit {
5750
PictureAppMaster.getInstance().app = this
5851
val activity = currentActivity
59-
var imageEngine = GlideEngine.createGlideEngine();
52+
val imageEngine = GlideEngine.createGlideEngine()
6053

6154
// set config
6255
setConfiguration(options)
@@ -125,7 +118,7 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
125118

126119
setStyle(options) // set style for UI
127120

128-
val isCrop = options.getBoolean("isCrop") && singleSelectedMode == true
121+
val isCrop = options.getBoolean("isCrop") && singleSelectedMode
129122

130123
if (isCrop) {
131124
setCropOptions(options)
@@ -137,7 +130,7 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
137130

138131
@SuppressLint("ResourceAsColor")
139132
private fun setCropOptions(libOption: ReadableMap) {
140-
val options = UCrop.Options()
133+
val options = Options()
141134
val mainStyle: SelectMainStyle = style.selectMainStyle
142135

143136
options.setShowCropFrame(true)
@@ -148,7 +141,7 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
148141
options.isForbidSkipMultipleCrop(true)
149142
options.setMaxScaleMultiplier(100f)
150143
options.setLogoColor(primaryColor)
151-
options.setToolbarWidgetColor(app_color_black)
144+
options.setToolbarWidgetColor(Color.BLACK)
152145
options.setStatusBarColor(mainStyle.statusBarColor)
153146
options.isDarkStatusBarBlack(mainStyle.isDarkStatusBarBlack)
154147

@@ -162,22 +155,22 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
162155

163156
// ANIMATION SLIDE FROM BOTTOM
164157
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)
167160

168161
// TITLE BAR
169162
val titleBar = TitleBarStyle()
170163
titleBar.titleBackgroundColor =
171164
ContextCompat.getColor(appContext, R.color.app_color_white)
172165

173-
titleBar.setHideCancelButton(true);
174-
titleBar.setAlbumTitleRelativeLeft(true);
166+
titleBar.isHideCancelButton = true
167+
titleBar.isAlbumTitleRelativeLeft = true
175168

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
181174

182175
// BOTTOM BAR
183176
val bottomBar = BottomNavBarStyle()
@@ -186,74 +179,50 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
186179
bottomBar.bottomPreviewSelectTextColor =
187180
ContextCompat.getColor(appContext, R.color.app_color_pri)
188181
bottomBar.bottomNarBarBackgroundColor =
189-
ContextCompat.getColor(appContext, com.luck.picture.lib.R.color.ps_color_white)
182+
ContextCompat.getColor(appContext, R.color.ps_color_white)
190183
bottomBar.bottomSelectNumResources = R.drawable.num_oval_orange
191184
bottomBar.bottomEditorTextColor =
192-
ContextCompat.getColor(appContext, com.luck.picture.lib.R.color.ps_color_53575e)
185+
ContextCompat.getColor(appContext, R.color.ps_color_53575e)
193186
bottomBar.bottomOriginalTextColor =
194-
ContextCompat.getColor(appContext, com.luck.picture.lib.R.color.ps_color_53575e)
187+
ContextCompat.getColor(appContext, R.color.ps_color_53575e)
195188
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
198191

199192
// MAIN STYLE
200193
val mainStyle = SelectMainStyle()
201194

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
205198
mainStyle.isSelectNumberStyle = true
206199
mainStyle.selectBackground = R.drawable.picture_selector
207200
mainStyle.mainListBackgroundColor =
208-
ContextCompat.getColor(appContext, com.luck.picture.lib.R.color.ps_color_white)
201+
ContextCompat.getColor(appContext, R.color.ps_color_white)
209202
mainStyle.previewSelectBackground =
210203
R.drawable.picture_selector
211204

212205
// 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
216209

217210

218211
mainStyle.selectNormalTextColor =
219-
ContextCompat.getColor(appContext, com.luck.picture.lib.R.color.ps_color_9b)
212+
ContextCompat.getColor(appContext, R.color.ps_color_9b)
220213
mainStyle.selectTextColor = primaryColor
221214
mainStyle.selectText = doneTitle
222215

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
257226
}
258227

259228
private fun handleSelectedAssets(options: ReadableMap?) {
@@ -265,7 +234,7 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
265234
if (assets.size() > 0) {
266235
val list = mutableListOf<LocalMedia>()
267236
for (i in 0 until assets.size()) {
268-
val asset: ReadableNativeMap = assets.getMap(i) as ReadableNativeMap
237+
val asset: ReadableNativeMap = assets.getMap(i)
269238
val localMedia: LocalMedia = handleSelectedAssetItem(asset)
270239
list.add(localMedia)
271240
}
@@ -285,7 +254,6 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
285254
return generateLocalMedia(appContext, path)
286255
}
287256

288-
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
289257
private fun createAttachmentResponse(item: LocalMedia): WritableMap {
290258
val media: WritableMap = WritableNativeMap()
291259
val type: String = if (item.mimeType.startsWith("video/")) "video" else "image"
@@ -305,7 +273,7 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
305273
media.putString("parentFolderName", item.parentFolderName)
306274
if (item.isCut) {
307275
val crop = WritableNativeMap()
308-
crop.putString("path", item.cutPath)
276+
crop.putString("path", "file://${item.cutPath}")
309277
crop.putDouble("width", item.cropImageWidth.toDouble())
310278
crop.putDouble("height", item.cropImageHeight.toDouble())
311279
media.putMap("crop", crop)
@@ -346,22 +314,6 @@ class MultipleImagePickerModule(reactContext: ReactApplicationContext) :
346314
}
347315
}
348316

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-
365317
override fun getAppContext(): Context {
366318
return reactApplicationContext
367319
}

example/src/App.js

+6-2
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ export default function App() {
5353

5454
const crop = response.crop;
5555

56+
console.log('crop: ', crop);
57+
5658
if (crop) {
5759
response.path = crop.path;
5860
response.width = crop.width;
@@ -61,7 +63,9 @@ export default function App() {
6163

6264
setImages(Array.isArray(response) ? response : [response]);
6365
layoutEffect();
64-
} catch (e) {}
66+
} catch (e) {
67+
//
68+
}
6569
};
6670

6771
const onRemovePhoto = (_, index) => {
@@ -82,7 +86,7 @@ export default function App() {
8286
width={Dimensions.get('window').width - 6}
8387
sourceKey={'path'}
8488
videoKey={'type'}
85-
prefixPath={Platform.OS === 'ios' ? 'file://' : null}
89+
prefixPath={Platform.OS === 'ios' ? 'file://' : ''}
8690
conditionCheckVideo={'video'}
8791
videoURLKey={'thumbnail'}
8892
showDelete

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@baronha/react-native-multiple-image-picker",
3-
"version": "1.1.8",
3+
"version": "1.1.9",
44
"description": "react-native-multiple-image-picker enables application to pick images and videos from multiple smart album in iOS/Android, similar to the current facebook app.",
55
"main": "lib/commonjs/index",
66
"module": "lib/module/index",

0 commit comments

Comments
 (0)