Skip to content

Commit 0ef6c22

Browse files
authored
Merge pull request #4 from BasemNasr/elasil
Elasil
2 parents 42cd48c + 6ce5e8d commit 0ef6c22

File tree

6 files changed

+143
-37
lines changed

6 files changed

+143
-37
lines changed

EasyMediaPicker/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ android {
88
compileSdk 33
99

1010
defaultConfig {
11-
minSdk 21
11+
minSdk 24
1212
targetSdk 33
1313

1414
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

EasyMediaPicker/src/main/java/com/bn/easypicker/EasyPicker.kt

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class EasyPicker(
3838
const val MULTI_IMAGES_TYPE = 2
3939
const val VIDEO_TYPE = 3
4040
const val FILE_TYPE = 4
41+
const val GALLERY_TYPE = 5
4142
}
4243

4344
private val request: Int = builder.request
@@ -69,6 +70,9 @@ class EasyPicker(
6970
FILE_TYPE->{
7071
chooseFile()
7172
}
73+
GALLERY_TYPE->{
74+
openGallery()
75+
}
7276

7377
}
7478
}
@@ -185,6 +189,45 @@ class EasyPicker(
185189
}
186190
}
187191
}
192+
193+
private var imageGalleryLauncher =
194+
act.registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
195+
if (result.resultCode == Activity.RESULT_OK) {
196+
val data: Intent? = result.data
197+
var imageUri: Uri = try {
198+
data?.data!!
199+
} catch (e: Exception) {
200+
getImageUri(mContext, result.data!!.extras!!.get("data") as Bitmap)!!
201+
}
202+
203+
CoroutineScope(Main).launch {
204+
var resulting: ArrayList<FileResource> = ArrayList()
205+
async {
206+
try {
207+
resulting.add(MediaStoreUtils.getResourceByUri(mContext, imageUri))
208+
} catch (e: Exception) {
209+
try {
210+
Log.e("ExceptionVideo", ">>> Exception Video First: ${e.message}")
211+
resulting.add(
212+
FileResource(
213+
uri = imageUri,
214+
path = FilesVersionUtil.getRealPathFromUri(
215+
mContext,
216+
imageUri
217+
)
218+
)
219+
)
220+
} catch (e: Exception) {
221+
Log.e("ExceptionVideo", ">>> Exception Video: ${e.message}")
222+
}
223+
}
224+
}.await()
225+
mListener.onCaptureMedia(request, resulting)
226+
}
227+
}
228+
}
229+
230+
188231
private var multiImageLauncher =
189232
act.registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
190233
if (result.resultCode == Activity.RESULT_OK) {
@@ -364,10 +407,10 @@ class EasyPicker(
364407
try {
365408
resulting.add(MediaStoreUtils.getResourceByUri(mContext, imageUri))
366409
} catch (e: Exception) {
367-
FileResource(
410+
resulting.add( FileResource(
368411
uri = imageUri,
369412
path = FilesVersionUtil.getRealPathFromUri(mContext, imageUri)
370-
)
413+
))
371414
}
372415
}.await()
373416
resulting[0].path?.let {
@@ -441,6 +484,21 @@ class EasyPicker(
441484
}
442485
}
443486

487+
fun openGallery() {
488+
currentChoseType = IMAGE_CHOSE_TYPE
489+
if (checkPermission()) {
490+
val intent = Intent(
491+
Intent.ACTION_PICK,
492+
MediaStore.Images.Media.INTERNAL_CONTENT_URI
493+
).apply {
494+
type = "image/*"
495+
}
496+
imageGalleryLauncher.launch(intent)
497+
} else {
498+
PickActions.openStorageRequest(act, resultLauncher)
499+
}
500+
}
501+
444502
fun chooseMultipleImages() {
445503
currentChoseType = MULTI_IMAGES_TYPE
446504
if (checkPermission()) {

EasyMediaPicker/src/main/java/com/bn/easypicker/FragmentEasyPicker.kt

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ class FragmentEasyPicker(
6363
EasyPicker.FILE_TYPE ->{
6464
chooseFile()
6565
}
66+
EasyPicker.GALLERY_TYPE ->{
67+
openGallery()
68+
}
6669

6770
}
6871
}
@@ -177,6 +180,42 @@ class FragmentEasyPicker(
177180
}
178181
}
179182
}
183+
private var imageGalleryLauncher =
184+
fragment.registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
185+
if (result.resultCode == Activity.RESULT_OK) {
186+
val data: Intent? = result.data
187+
var imageUri: Uri = try {
188+
data?.data!!
189+
} catch (e: Exception) {
190+
getImageUri(mContext, result.data!!.extras!!.get("data") as Bitmap)!!
191+
}
192+
193+
CoroutineScope(Dispatchers.Main).launch {
194+
var resulting: ArrayList<FileResource> = ArrayList()
195+
async {
196+
try {
197+
resulting.add(MediaStoreUtils.getResourceByUri(mContext, imageUri))
198+
} catch (e: Exception) {
199+
try {
200+
Log.e("ExceptionVideo", ">>> Exception Video First: ${e.message}")
201+
resulting.add(
202+
FileResource(
203+
uri = imageUri,
204+
path = FilesVersionUtil.getRealPathFromUri(
205+
mContext,
206+
imageUri
207+
)
208+
)
209+
)
210+
} catch (e: Exception) {
211+
Log.e("ExceptionVideo", ">>> Exception Video: ${e.message}")
212+
}
213+
}
214+
}.await()
215+
mListener.onCaptureMedia(request, resulting)
216+
}
217+
}
218+
}
180219

181220

182221
private var multiImageLauncher =
@@ -355,10 +394,10 @@ class FragmentEasyPicker(
355394
try {
356395
resulting.add(MediaStoreUtils.getResourceByUri(mContext, imageUri))
357396
} catch (e: Exception) {
358-
FileResource(
397+
resulting.add( FileResource(
359398
uri = imageUri,
360399
path = FilesVersionUtil.getRealPathFromUri(mContext, imageUri)
361-
)
400+
))
362401
}
363402
}.await()
364403
resulting[0]?.path?.let {
@@ -431,6 +470,20 @@ class FragmentEasyPicker(
431470
PickActions.openStorageRequest(fragment.requireActivity(), resultLauncher)
432471
}
433472
}
473+
fun openGallery() {
474+
currentChoseType = EasyPicker.GALLERY_TYPE
475+
if (checkPermission()) {
476+
val intent = Intent(
477+
Intent.ACTION_PICK,
478+
MediaStore.Images.Media.INTERNAL_CONTENT_URI
479+
).apply {
480+
type = "image/*"
481+
}
482+
imageGalleryLauncher.launch(intent)
483+
} else {
484+
PickActions.openStorageRequest(fragment.requireActivity(), resultLauncher)
485+
}
486+
}
434487

435488
fun chooseMultipleImages() {
436489
currentChoseType = EasyPicker.MULTI_IMAGES_TYPE

EasyMediaPicker/src/main/java/com/bn/easypicker/mutils/request_permission/RequestStoragePermissionActivity.kt

Lines changed: 25 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.bn.easypicker.mutils.request_permission
33
import android.Manifest
44
import android.app.Activity
55
import android.content.Intent
6+
import android.content.pm.PackageManager
67
import android.net.Uri
78
import android.os.Build
89
import android.os.Bundle
@@ -46,49 +47,42 @@ class RequestStoragePermissionActivity : AppCompatActivity(), OnPermissionDialog
4647
) {
4748
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
4849
if (requestCode == 3001) {
49-
if (Build.VERSION.SDK_INT > 32) {
50-
if (!PermissionUtils.hasPermissions(this, PermissionUtils.NEW_IMAGE_PERMISSIONS)
51-
&& shouldShowRequestPermissionRationale(Manifest.permission.READ_MEDIA_IMAGES)
52-
) {
53-
if (!mPermission?.isAdded!!) mPermission?.show(supportFragmentManager, "tag")
54-
} else {
55-
val returnIntent = Intent()
56-
returnIntent.putExtra("result", Constants.MEDIA_PERMISSION_DONE);
57-
setResult(Activity.RESULT_OK, returnIntent)
58-
finish()
59-
}
50+
val permissionGranted = grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED
51+
52+
if (permissionGranted) {
53+
// Permission granted
54+
val returnIntent = Intent()
55+
returnIntent.putExtra("result", Constants.MEDIA_PERMISSION_DONE)
56+
setResult(Activity.RESULT_OK, returnIntent)
57+
finish()
6058
} else {
61-
if (!PermissionUtils.hasPermissions(this, PermissionUtils.IMAGE_PERMISSIONS)) {
62-
if (!mPermission.isAdded) mPermission.show(supportFragmentManager, "tag")
63-
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && !PermissionUtils.hasPermissions(
64-
this,
65-
PermissionUtils.IMAGE_PERMISSIONS
66-
)
67-
) {
59+
// Permission denied
60+
val shouldShowRationale = shouldShowRequestPermissionRationale(readImagePermission)
61+
62+
if (!PermissionUtils.hasPermissions(this, PermissionUtils.NEW_IMAGE_PERMISSIONS) && shouldShowRationale) {
6863
if (!mPermission.isAdded) {
6964
mPermission.show(supportFragmentManager, "tag")
7065
}
7166
} else {
72-
val returnIntent = Intent()
73-
returnIntent.putExtra("result", Constants.MEDIA_PERMISSION_DONE);
74-
setResult(Activity.RESULT_OK, returnIntent)
75-
finish()
67+
// User has denied permission and selected "Don't ask again"
68+
// You might want to show a message or take them to settings
69+
if (!mPermission.isAdded) {
70+
mPermission.show(supportFragmentManager, "tag")
71+
}
7672
}
7773
}
78-
7974
}
8075
}
8176

82-
8377
private fun getStorageAccess() {
84-
if (Build.VERSION.SDK_INT > 32) {
85-
if (!PermissionUtils.hasPermissions(this, PermissionUtils.NEW_IMAGE_PERMISSIONS)) {
86-
requestPermissions(PermissionUtils.NEW_IMAGE_PERMISSIONS, 3001)
87-
} else finish()
78+
// Only request permissions if not already granted
79+
if (!PermissionUtils.hasPermissions(this, if (Build.VERSION.SDK_INT > 32) PermissionUtils.NEW_IMAGE_PERMISSIONS else PermissionUtils.IMAGE_PERMISSIONS)) {
80+
requestPermissions(
81+
if (Build.VERSION.SDK_INT > 32) PermissionUtils.NEW_IMAGE_PERMISSIONS else PermissionUtils.IMAGE_PERMISSIONS,
82+
3001
83+
)
8884
} else {
89-
if (!PermissionUtils.hasPermissions(this, PermissionUtils.IMAGE_PERMISSIONS)) {
90-
requestPermissions(PermissionUtils.IMAGE_PERMISSIONS, 3001)
91-
} else finish()
85+
finish()
9286
}
9387
}
9488

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ android {
99

1010
defaultConfig {
1111
applicationId "com.bn.easypicker"
12-
minSdk 21
12+
minSdk 24
1313
targetSdk 33
1414
versionCode 1
1515
versionName "1.0"

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
android:label="@string/app_name"
1818
android:roundIcon="@mipmap/mp_ic_launcher_round"
1919
android:supportsRtl="true"
20+
android:requestLegacyExternalStorage="true"
2021
android:theme="@style/Theme.EasyPicker"
2122
tools:targetApi="31">
2223
<activity

0 commit comments

Comments
 (0)