Skip to content

Commit 63a3d31

Browse files
MahdiMahdi
Mahdi
authored and
Mahdi
committed
Add Camera
1 parent 7e599cc commit 63a3d31

File tree

19 files changed

+287
-177
lines changed

19 files changed

+287
-177
lines changed

FilePicker/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
66
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
7+
<uses-permission android:name="android.permission.CAMERA" />
78

89
<application
910

FilePicker/src/main/java/com/mahdiasd/filepicker/FilePicker.kt

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,14 @@ data class FilePicker(
1212
private val fragmentManager: FragmentManager,
1313
var listener: FilePickerListener? = null,
1414

15-
var mode: List<PickerMode> = listOf(PickerMode.Image, PickerMode.Video, PickerMode.Audio),
15+
var mode: List<PickerMode> = listOf(PickerMode.Image, PickerMode.Image, PickerMode.Video, PickerMode.Audio),
1616
private var defaultMode: PickerMode? = null,
1717

1818
var videoText: String = context.getString(R.string.mahdiasd_file_picker_video),
1919
var audioText: String = context.getString(R.string.mahdiasd_file_picker_audio),
2020
var fileManagerText: String = context.getString(R.string.mahdiasd_file_picker_file_manager),
2121
var imageText: String = context.getString(R.string.mahdiasd_file_picker_image),
22+
var cameraText: String = context.getString(R.string.mahdiasd_file_picker_camera),
2223
var openStorageText: String = context.getString(R.string.mahdiasd_file_picker_open_storage),
2324
var maxTotalFileSizeText: String = context.getString(R.string.mahdiasd_file_picker_max_total_size),
2425
var maxEachFileSizeText: String = context.getString(R.string.mahdiasd_file_picker_max_each_size),
@@ -28,6 +29,8 @@ data class FilePicker(
2829
var documentIcon: Drawable? = ContextCompat.getDrawable(context, R.drawable.ic_document),
2930
var fileManagerIcon: Drawable? = ContextCompat.getDrawable(context, R.drawable.ic_file),
3031
var imageIcon: Drawable? = ContextCompat.getDrawable(context, R.drawable.ic_image),
32+
var searchIcon: Drawable? = ContextCompat.getDrawable(context, R.drawable.ic_search),
33+
var doneIcon: Drawable? = ContextCompat.getDrawable(context, R.drawable.ic_send),
3134

3235
var showFileWhenClick: Boolean = false,
3336
var maxSelection: Int = 10,
@@ -38,7 +41,9 @@ data class FilePicker(
3841
var activeColor: Int = ContextCompat.getColor(context, R.color.colorPrimary),
3942
var deActiveColor: Int = ContextCompat.getColor(context, R.color.gray),
4043
var cardBackgroundColor: Int = ContextCompat.getColor(context, R.color.white),
41-
) :
44+
45+
46+
) :
4247
BaseObservable() {
4348
private val fragmentTag = "mahdiasd_file_picker"
4449
private var filePickerFragment = FilePickerFragment.newInstance()
@@ -62,12 +67,17 @@ data class FilePicker(
6267
documentIcon: Drawable? = ContextCompat.getDrawable(context, R.drawable.ic_document),
6368
fileManagerIcon: Drawable? = ContextCompat.getDrawable(context, R.drawable.ic_file),
6469
imageIcon: Drawable? = ContextCompat.getDrawable(context, R.drawable.ic_image),
70+
doneIcon: Drawable? = ContextCompat.getDrawable(context, R.drawable.ic_send),
71+
searchIcon: Drawable? = ContextCompat.getDrawable(context, R.drawable.ic_search),
6572
): FilePicker {
66-
this.videoIcon
67-
this.audioIcon
68-
this.documentIcon
69-
this.fileManagerIcon
70-
this.imageIcon
73+
this.searchIcon = searchIcon
74+
this.videoIcon = videoIcon
75+
this.audioIcon = audioIcon
76+
this.documentIcon = documentIcon
77+
this.fileManagerIcon = fileManagerIcon
78+
this.imageIcon = imageIcon
79+
this.doneIcon = doneIcon
80+
7181
return this
7282
}
7383

@@ -141,6 +151,7 @@ data class FilePicker(
141151
audioText: String = context.getString(R.string.mahdiasd_file_picker_audio),
142152
fileManagerText: String = context.getString(R.string.mahdiasd_file_picker_file_manager),
143153
imageText: String = context.getString(R.string.mahdiasd_file_picker_image),
154+
cameraText: String = context.getString(R.string.mahdiasd_file_picker_camera),
144155
openStorageText: String = context.getString(R.string.mahdiasd_file_picker_open_storage),
145156
maxTotalFileSizeText: String = context.getString(R.string.mahdiasd_file_picker_max_total_size),
146157
maxEachFileSizeText: String = context.getString(R.string.mahdiasd_file_picker_max_each_size),
@@ -149,6 +160,7 @@ data class FilePicker(
149160
this.audioText = audioText
150161
this.fileManagerText = fileManagerText
151162
this.imageText = imageText
163+
this.cameraText = cameraText
152164
this.openStorageText = openStorageText
153165
this.maxTotalFileSizeText = maxTotalFileSizeText
154166
this.maxEachFileSizeText = maxEachFileSizeText

FilePicker/src/main/java/com/mahdiasd/filepicker/FilePickerAdapter.kt

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ class FilePickerAdapter(
2121
list: List<FileModel>?,
2222
private var selectedFiles: MutableList<FileModel>,
2323
private val pickerMode: PickerMode,
24-
private val config: FilePicker
24+
private val config: FilePicker,
25+
private val filePickerFragment: FilePickerFragment? = null,
2526
) : BaseRecyclerAdapter<FileModel>(context, list) {
2627

2728
private var stack = ArrayDeque<List<FileModel?>?>()
@@ -32,17 +33,16 @@ class FilePickerAdapter(
3233
}
3334

3435
override fun getRootLayoutId(): Int {
35-
return if (pickerMode == PickerMode.Audio || pickerMode == PickerMode.FILE)
36+
return if (pickerMode == PickerMode.Audio || pickerMode == PickerMode.File)
3637
R.layout.item_file_picker_manager
3738
else
3839
R.layout.item_file_picker
3940
}
4041

4142
override fun onBind(viewHolder: BaseViewHolder, position: Int) {
4243
val model = viewHolder.getData(position) as FileModel
43-
4444
when (pickerMode) {
45-
PickerMode.Audio, PickerMode.FILE -> {
45+
PickerMode.Audio, PickerMode.File -> {
4646
val itemBinding = viewHolder.binding as ItemFilePickerManagerBinding
4747
itemBinding.let {
4848
it.item = model
@@ -61,6 +61,7 @@ class FilePickerAdapter(
6161
it.item = model
6262
glideSdCart(itemBinding.image, model.path)
6363
it.presenter = this
64+
it.containCamera = config.mode.contains(PickerMode.Camera)
6465
it.activeColor = config.activeColor
6566
it.deActiveColor = config.deActiveColor
6667
it.type = config.selectedMode
@@ -118,7 +119,9 @@ class FilePickerAdapter(
118119
}
119120

120121
fun onClick(view: View, fileModel: FileModel) {
121-
if (config.showFileWhenClick)
122+
if (fileModel.path == "Camera")
123+
filePickerFragment?.openCamera()
124+
else if (config.showFileWhenClick)
122125
openFile(fileModel.path)
123126
else
124127
checkBox(null, fileModel)
@@ -152,9 +155,6 @@ class FilePickerAdapter(
152155
private fun glideSdCart(view: ImageView, imageUrl: String?) {
153156
if (imageUrl == null) return
154157
val file = File(imageUrl)
155-
if (!file.exists()) {
156-
return
157-
}
158158
val imageUri = Uri.fromFile(file) ?: return
159159
Glide.with(view.context)
160160
.load(imageUri)
@@ -172,14 +172,7 @@ class FilePickerAdapter(
172172
val ext = MimeTypeMap.getFileExtensionFromUrl(file.name)
173173
val type = map.getMimeTypeFromExtension(ext)
174174
val intent = Intent(Intent.ACTION_VIEW)
175-
intent.setDataAndType(
176-
FileProvider.getUriForFile(
177-
context,
178-
"com.mahdiasd.filepicker.provider",
179-
file
180-
),
181-
type
182-
)
175+
intent.setDataAndType(FileProvider.getUriForFile(context, "${context.packageName}.provider", file), type)
183176
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
184177
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
185178
context.startActivity(intent)

0 commit comments

Comments
 (0)