Take persistable permissions for images shared directly from Gallery apps
Some checks failed
Android CI / Run tests and generate APK (push) Has been cancelled

This commit is contained in:
Ritika Pahwa 2025-09-14 13:51:23 +05:30
parent df6015ef0a
commit 6360de3169

View file

@ -208,6 +208,7 @@ object FilePicker : Constants {
@JvmStatic @JvmStatic
fun handleExternalImagesPicked(data: Intent?, activity: Activity): List<UploadableFile> { fun handleExternalImagesPicked(data: Intent?, activity: Activity): List<UploadableFile> {
return try { return try {
takePersistableUriPermissions(activity, data)
getFilesFromGalleryPictures(data, activity) getFilesFromGalleryPictures(data, activity)
} catch (e: IOException) { } catch (e: IOException) {
e.printStackTrace() e.printStackTrace()
@ -273,7 +274,7 @@ object FilePicker : Constants {
callbacks: Callbacks callbacks: Callbacks
) { ) {
if (result.resultCode == Activity.RESULT_OK && !isPhoto(result.data)) { if (result.resultCode == Activity.RESULT_OK && !isPhoto(result.data)) {
takePersistableUriPermissions(activity, result) takePersistableUriPermissions(activity, result.data)
try { try {
val files = getFilesFromGalleryPictures(result.data, activity) val files = getFilesFromGalleryPictures(result.data, activity)
callbacks.onImagesPicked(files, ImageSource.DOCUMENTS, restoreType(activity)) callbacks.onImagesPicked(files, ImageSource.DOCUMENTS, restoreType(activity))
@ -295,8 +296,8 @@ object FilePicker : Constants {
* This helps fix the SecurityException reported in this issue: * This helps fix the SecurityException reported in this issue:
* https://github.com/commons-app/apps-android-commons/issues/6357 * https://github.com/commons-app/apps-android-commons/issues/6357
*/ */
private fun takePersistableUriPermissions(context: Context, result: ActivityResult) { private fun takePersistableUriPermissions(context: Context, data: Intent?) {
result.data?.let { intentData -> data?.let { intentData ->
val takeFlags: Int = (Intent.FLAG_GRANT_READ_URI_PERMISSION) val takeFlags: Int = (Intent.FLAG_GRANT_READ_URI_PERMISSION)
// Persist the URI permission for all URIs in the clip data // Persist the URI permission for all URIs in the clip data
// if multiple images are selected, // if multiple images are selected,
@ -367,7 +368,7 @@ object FilePicker : Constants {
callbacks: Callbacks callbacks: Callbacks
) { ) {
if (result.resultCode == Activity.RESULT_OK && !isPhoto(result.data)) { if (result.resultCode == Activity.RESULT_OK && !isPhoto(result.data)) {
takePersistableUriPermissions(activity, result) takePersistableUriPermissions(activity, result.data)
try { try {
val files = getFilesFromGalleryPictures(result.data, activity) val files = getFilesFromGalleryPictures(result.data, activity)
callbacks.onImagesPicked(files, ImageSource.GALLERY, restoreType(activity)) callbacks.onImagesPicked(files, ImageSource.GALLERY, restoreType(activity))