Skip to content

Commit e1ea9da

Browse files
authored
Merge pull request #114 from Mindinventory/faeture/photo_picker_with_permission
Feature/photo picker with permission
2 parents 0c7095f + 30c51f1 commit e1ea9da

File tree

14 files changed

+330
-74
lines changed

14 files changed

+330
-74
lines changed

app/src/main/java/com/lassi/app/MainActivity.kt

Lines changed: 54 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import android.os.Build
88
import android.os.Bundle
99
import android.os.Environment
1010
import android.provider.Settings
11+
import android.util.Log
1112
import android.view.View
1213
import android.webkit.MimeTypeMap
1314
import androidx.activity.result.contract.ActivityResultContracts
@@ -46,6 +47,7 @@ class MainActivity : AppCompatActivity(), View.OnClickListener {
4647
it.btnImageCapture.setOnClickListener(this)
4748
it.btnVideoCapture.setOnClickListener(this)
4849
it.btnDocumentSystemIntent.setOnClickListener(this)
50+
it.btnPhotoPicker.setOnClickListener(this)
4951
it.rvSelectedMedia.adapter = selectedMediaAdapter
5052
it.rvSelectedMedia.addItemDecoration(GridSpacingItemDecoration(2, 10))
5153
}
@@ -70,13 +72,15 @@ class MainActivity : AppCompatActivity(), View.OnClickListener {
7072
setSortByDateLbl = "Trier par date"
7173
)
7274
}
75+
binding.btnPhotoPicker.visibility = View.VISIBLE
7376
}
7477

7578
override fun onClick(v: View?) {
7679
when (v?.id) {
7780
R.id.btnImagePicker -> {
7881
val intent = lassi.with(LassiOption.CAMERA_AND_GALLERY).setMaxCount(1)
7982
.setAscSort(SortingOption.ASCENDING).setGridSize(2)
83+
.setMediaType(MediaType.IMAGE)
8084
.setPlaceHolder(R.drawable.ic_image_placeholder)
8185
.setErrorDrawable(R.drawable.ic_image_placeholder)
8286
.setSelectionDrawable(R.drawable.ic_checked_media)
@@ -88,7 +92,7 @@ class MainActivity : AppCompatActivity(), View.OnClickListener {
8892
.setProgressBarColor(R.color.colorAccent)
8993
.setGalleryBackgroundColor(R.color.colorGrey)
9094
.setCropType(CropImageView.CropShape.OVAL).setCropAspectRatio(1, 1)
91-
.setCompressionRatio(10).setMinFileSize(0).setMaxFileSize(10000)
95+
.setCompressionRatio(10).setMinFileSize(0).setMaxFileSize(Int.MAX_VALUE.toLong())
9296
.enableActualCircleCrop()
9397
.setSupportedFileTypes("jpg", "jpeg", "png", "webp", "gif").enableFlip()
9498
.enableRotate().build()
@@ -98,7 +102,10 @@ class MainActivity : AppCompatActivity(), View.OnClickListener {
98102
R.id.btnVideoPicker -> {
99103
val intent =
100104
lassi.with(LassiOption.CAMERA_AND_GALLERY).setMaxCount(4).setGridSize(3)
101-
.setMinTime(5).setMaxTime(30).setMinFileSize(0).setMaxFileSize(20000)
105+
.setMinTime(5)
106+
.setMaxTime(Int.MAX_VALUE.toLong()) // Set time larger to let file be visible
107+
.setMinFileSize(0)
108+
.setMaxFileSize(Integer.MAX_VALUE.toLong()) // For setting file size
102109
.setMediaType(MediaType.VIDEO).setStatusBarColor(R.color.colorPrimaryDark)
103110
.setToolbarColor(R.color.colorPrimary)
104111
.setToolbarResourceColor(android.R.color.white)
@@ -114,7 +121,7 @@ class MainActivity : AppCompatActivity(), View.OnClickListener {
114121
}
115122

116123
R.id.btnAudioPicker -> {
117-
val intent = lassi.setMediaType(MediaType.AUDIO).setMaxCount(4).setGridSize(2)
124+
val intent = lassi.with(LassiOption.CAMERA_AND_GALLERY).setMediaType(MediaType.AUDIO).setMaxCount(4).setGridSize(2)
118125
.setPlaceHolder(R.drawable.ic_audio_placeholder)
119126
.setErrorDrawable(R.drawable.ic_audio_placeholder)
120127
.setSelectionDrawable(R.drawable.ic_checked_media)
@@ -156,7 +163,12 @@ class MainActivity : AppCompatActivity(), View.OnClickListener {
156163
"xlsx",
157164
"xls"
158165
).setMaxCount(3)
159-
.setCustomLimitExceedingErrorMessage(MultiLangConfig.getConfig().errorExceedMsg)
166+
.setStatusBarColor(R.color.colorPrimaryDark)
167+
.setToolbarColor(R.color.colorPrimary)
168+
.setToolbarResourceColor(android.R.color.white)
169+
.setProgressBarColor(R.color.colorAccent)
170+
.setGalleryBackgroundColor(R.color.colorGrey)
171+
.setCustomLimitExceedingErrorMessage("Selected item exceeded the limit!!!")
160172
.build()
161173
receiveData.launch(intent)
162174
}
@@ -175,7 +187,7 @@ class MainActivity : AppCompatActivity(), View.OnClickListener {
175187
.setAlertDialogPositiveButtonColor(R.color.emerald_green)
176188
.setMediaType(MediaType.IMAGE).setCropType(CropImageView.CropShape.OVAL)
177189
.setCropAspectRatio(1, 1).setCompressionRatio(0).setMinFileSize(0)
178-
.setMaxFileSize(1000000).enableActualCircleCrop()
190+
.setMaxFileSize(Int.MAX_VALUE.toLong()).enableActualCircleCrop()
179191
.setSupportedFileTypes("jpg", "jpeg", "png", "webp", "gif").enableFlip()
180192
.enableRotate().build()
181193
receiveData.launch(intent)
@@ -195,17 +207,52 @@ class MainActivity : AppCompatActivity(), View.OnClickListener {
195207
.setProgressBarColor(R.color.colorAccent)
196208
.setGalleryBackgroundColor(R.color.colorGrey)
197209
.setCropType(CropImageView.CropShape.OVAL).setCropAspectRatio(1, 1)
198-
.setCompressionRatio(0).setMinFileSize(0).setMaxFileSize(10000)
210+
.setCompressionRatio(0).setMinFileSize(0).setMaxFileSize(Int.MAX_VALUE.toLong())
199211
.enableActualCircleCrop()
200212
.setSupportedFileTypes("jpg", "jpeg", "png", "webp", "gif").enableFlip()
201213
.enableRotate().build()
202214
receiveData.launch(intent)
203215
}
216+
217+
R.id.btnPhotoPicker -> {
218+
val intent = lassi.with(LassiOption.CAMERA_AND_GALLERY).setMaxCount(4)
219+
.setAscSort(SortingOption.ASCENDING).setGridSize(2)
220+
.setMediaType(MediaType.PHOTO_PICKER)
221+
.setPlaceHolder(R.drawable.ic_image_placeholder)
222+
.setErrorDrawable(R.drawable.ic_image_placeholder)
223+
.setSelectionDrawable(R.drawable.ic_checked_media)
224+
.setStatusBarColor(R.color.colorPrimaryDark)
225+
.setToolbarColor(R.color.colorPrimary)
226+
.setToolbarResourceColor(android.R.color.white)
227+
.setAlertDialogNegativeButtonColor(R.color.cherry_red)
228+
.setAlertDialogPositiveButtonColor(R.color.emerald_green)
229+
.setProgressBarColor(R.color.colorAccent)
230+
.setGalleryBackgroundColor(R.color.colorGrey)
231+
.setCropType(CropImageView.CropShape.OVAL).setCropAspectRatio(1, 1)
232+
.setCompressionRatio(10).setMinFileSize(0).setMaxFileSize(Int.MAX_VALUE.toLong())
233+
.enableActualCircleCrop()
234+
.setCustomLimitExceedingErrorMessage("Selected item exceeded the limit!")
235+
.setSupportedFileTypes(
236+
"jpg",
237+
"jpeg",
238+
"png",
239+
"webp",
240+
"gif",
241+
"mp4",
242+
"mkv",
243+
"webm",
244+
"avi",
245+
"flv",
246+
"3gp"
247+
).enableFlip()
248+
.enableRotate().build()
249+
receiveData.launch(intent)
250+
}
204251
}
205252
}
206253

207254
private fun launchDocPicker() {
208-
val intent = lassi.setMediaType(MediaType.DOC).setMaxCount(4).setGridSize(2)
255+
val intent = lassi.with(LassiOption.CAMERA_AND_GALLERY).setMediaType(MediaType.DOC).setMaxCount(4).setGridSize(2)
209256
.setPlaceHolder(R.drawable.ic_document_placeholder)
210257
.setErrorDrawable(R.drawable.ic_document_placeholder)
211258
.setSelectionDrawable(R.drawable.ic_checked_media)
@@ -224,7 +271,6 @@ class MainActivity : AppCompatActivity(), View.OnClickListener {
224271
if (it.resultCode == Activity.RESULT_OK) {
225272
val selectedMedia =
226273
it.data?.getSerializableExtra(KeyUtils.SELECTED_MEDIA) as ArrayList<MiMedia>
227-
228274
if (selectedMedia.isNotEmpty()) {
229275
binding.ivEmpty.isVisible = selectedMedia.isEmpty()
230276
selectedMediaAdapter.setList(selectedMedia)

app/src/main/res/layout/activity_main.xml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,25 @@
150150
app:layout_constraintHorizontal_bias="0.5"
151151
app:layout_constraintStart_toEndOf="@+id/btnImageCapture"
152152
app:layout_constraintTop_toBottomOf="@+id/btnDocumentSystemIntent" />
153+
154+
<Button
155+
android:id="@+id/btnPhotoPicker"
156+
android:layout_width="wrap_content"
157+
android:layout_height="wrap_content"
158+
android:layout_marginTop="16dp"
159+
android:background="@drawable/bg_rounded_button"
160+
android:drawableStart="@drawable/ic_document"
161+
android:padding="10dp"
162+
android:text="@string/photo_picker"
163+
android:textAllCaps="false"
164+
android:textColor="@android:color/white"
165+
android:textSize="16sp"
166+
android:textStyle="bold"
167+
android:visibility="gone"
168+
app:layout_constraintEnd_toEndOf="parent"
169+
app:layout_constraintHorizontal_bias="0.5"
170+
app:layout_constraintStart_toStartOf="parent"
171+
app:layout_constraintTop_toBottomOf="@+id/btnVideoCapture" />
153172
</androidx.constraintlayout.widget.ConstraintLayout>
154173

155174
<androidx.recyclerview.widget.RecyclerView

app/src/main/res/values-es/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<string name="document">Documento</string>
1010
<string name="audio">Audio</string>
1111
<string name="open_system_view">"Abrir vista del sistema "</string>
12+
<string name="photo_picker">Selector de fotos</string>
1213

1314
<string name="sort_by_date">Ordenar por fecha</string>
1415
<string name="sort_ascending">Ascendente</string>

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<string name="document">Document</string>
99
<string name="audio">Audio</string>
1010
<string name="open_system_view">Open System View</string>
11+
<string name="photo_picker">Photo Picker</string>
1112

1213
<string name="sort_by_date">Sort by Date</string>
1314
<string name="sort_ascending">Ascending</string>
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
#Thu Aug 31 11:56:21 IST 2023
1+
#Tue Mar 12 19:15:15 IST 2024
22
distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
4-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
4+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
55
zipStoreBase=GRADLE_USER_HOME
66
zipStorePath=wrapper/dists

lassi/src/main/AndroidManifest.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
1010
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
1111

12+
<!-- To handle the reselection within the app on Android 14 (API level 34) -->
13+
<uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
14+
1215
<!-- Required to maintain app compatibility. -->
1316
<uses-permission
1417
android:name="android.permission.READ_EXTERNAL_STORAGE"

lassi/src/main/java/com/lassi/common/utils/KeyUtils.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ object KeyUtils {
1818
const val DESCENDING_ORDER = 0
1919
const val ASCENDING_ORDER = 1
2020
const val DEFAULT_ORDER = 2
21+
const val ERROR_EXCEEDING_MSG = "You are exceeding the defined Max limit."
2122
}

lassi/src/main/java/com/lassi/domain/media/LassiConfig.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import androidx.annotation.ColorRes
66
import androidx.annotation.DrawableRes
77
import com.lassi.R
88
import com.lassi.common.utils.KeyUtils
9+
import com.lassi.common.utils.KeyUtils.ERROR_EXCEEDING_MSG
910
import com.lassi.data.media.MiMedia
1011
import com.lassi.presentation.cameraview.controls.AspectRatio
1112
import com.lassi.presentation.cropper.CropImageView
@@ -45,7 +46,7 @@ data class LassiConfig(
4546
var isCrop: Boolean = true,
4647
var alertDialogNegativeButtonColor: Int = Color.BLACK,
4748
var alertDialogPositiveButtonColor: Int = Color.BLACK,
48-
var customLimitExceedingErrorMessage: String = MultiLangConfig.getConfig().defaultExceedErrorMsg
49+
var customLimitExceedingErrorMessage: String = ERROR_EXCEEDING_MSG
4950
) : Parcelable {
5051
companion object {
5152

lassi/src/main/java/com/lassi/domain/media/MediaType.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ enum class MediaType(val value: Int) {
55
VIDEO(2),
66
AUDIO(3),
77
DOC(4),
8-
FILE_TYPE_WITH_SYSTEM_VIEW(5)
8+
FILE_TYPE_WITH_SYSTEM_VIEW(5),
9+
PHOTO_PICKER(6)
910
}

lassi/src/main/java/com/lassi/presentation/builder/Lassi.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ import com.lassi.presentation.mediadirectory.LassiMediaPickerActivity
2020

2121
class Lassi(private val context: Context) {
2222

23-
private var lassiConfig = LassiConfig()
2423
private var multiLangConfig = MultiLangConfig()
24+
private var lassiConfig = LassiConfig()
2525

2626
init {
2727
getMultiLngBuilder()

0 commit comments

Comments
 (0)