Reverted the previous commit and pulled PR-6402

This commit is contained in:
Sonal Yadav 2025-08-17 18:36:24 +05:30
parent 239bd72cf9
commit 8fd8dcee8e
3 changed files with 24 additions and 31 deletions

View file

@ -296,10 +296,19 @@ object FilePicker : Constants {
* 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, result: ActivityResult) {
result.data?.data?.also { uri -> result.data?.let { intentData ->
val takeFlags: Int = (Intent.FLAG_GRANT_READ_URI_PERMISSION val takeFlags: Int = (Intent.FLAG_GRANT_READ_URI_PERMISSION)
or Intent.FLAG_GRANT_WRITE_URI_PERMISSION) // Persist the URI permission for all URIs in the clip data
context.contentResolver.takePersistableUriPermission(uri, takeFlags) // if multiple images are selected,
// or for the single URI if only one image is selected
intentData.clipData?.let { clipData ->
for (i in 0 until clipData.itemCount) {
context.contentResolver.takePersistableUriPermission(
clipData.getItemAt(i).uri, takeFlags)
}
} ?: intentData.data?.let { uri ->
context.contentResolver.takePersistableUriPermission(uri, takeFlags)
}
} }
} }
@ -358,6 +367,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)
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))

View file

@ -128,33 +128,10 @@ class ImageProcessingService @Inject constructor(
* @return IMAGE_DUPLICATE or IMAGE_OK * @return IMAGE_DUPLICATE or IMAGE_OK
*/ */
fun checkIfFileAlreadyExists(originalFilePath: Uri, modifiedFilePath: Uri): Single<Int> { fun checkIfFileAlreadyExists(originalFilePath: Uri, modifiedFilePath: Uri): Single<Int> {
// Safely open the original (picker) URI. If permission is gone after app restart, return Single.zip(
// skip this leg and proceed with the modified file check to avoid crashing. checkDuplicateImage(inputStream = appContext.contentResolver.openInputStream(originalFilePath)!!),
val originalCheck: Single<Int> = checkDuplicateImage(inputStream = fileUtilsWrapper.getFileInputStream(modifiedFilePath.path))
Single.fromCallable { appContext.contentResolver.openInputStream(originalFilePath) } ) { resultForOriginal, resultForDuplicate ->
.flatMap { inputStream ->
if (inputStream != null) checkDuplicateImage(inputStream) else Single.just(IMAGE_OK)
}
.onErrorReturn { t ->
Timber.w(t, "Skipping original URI duplicate check (no permission or not found)")
IMAGE_OK
}
.subscribeOn(Schedulers.io())
// Safely open the modified file stream as well; be defensive in case the temp/cached file
// was cleaned up while the app was backgrounded.
val modifiedCheck: Single<Int> =
Single.fromCallable { fileUtilsWrapper.getFileInputStream(modifiedFilePath.path) }
.flatMap { inputStream ->
if (inputStream != null) checkDuplicateImage(inputStream) else Single.just(IMAGE_OK)
}
.onErrorReturn { t ->
Timber.w(t, "Skipping modified file duplicate check (file missing)")
IMAGE_OK
}
.subscribeOn(Schedulers.io())
return Single.zip(originalCheck, modifiedCheck) { resultForOriginal, resultForDuplicate ->
return@zip if (resultForOriginal == IMAGE_DUPLICATE || resultForDuplicate == IMAGE_DUPLICATE) return@zip if (resultForOriginal == IMAGE_DUPLICATE || resultForDuplicate == IMAGE_DUPLICATE)
IMAGE_DUPLICATE else IMAGE_OK IMAGE_DUPLICATE else IMAGE_OK
} }

View file

@ -434,6 +434,12 @@ class UploadWorker(
makeWikiDataEdit(uploadResult, contribution) makeWikiDataEdit(uploadResult, contribution)
} }
showSuccessNotification(contribution) showSuccessNotification(contribution)
if (appContext.contentResolver.persistedUriPermissions.any {
it.uri == contribution.contentUri }) {
appContext.contentResolver.releasePersistableUriPermission(
contribution.contentUri!!, Intent.FLAG_GRANT_READ_URI_PERMISSION
)
}
} else { } else {
Timber.e("Stash Upload failed") Timber.e("Stash Upload failed")
showFailedNotification(contribution) showFailedNotification(contribution)