mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 20:33:53 +01:00
Reverted the previous commit and pulled PR-6402
This commit is contained in:
parent
239bd72cf9
commit
8fd8dcee8e
3 changed files with 24 additions and 31 deletions
|
|
@ -296,12 +296,21 @@ 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
|
||||||
|
// 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)
|
context.contentResolver.takePersistableUriPermission(uri, takeFlags)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* onPictureReturnedFromCustomSelector.
|
* onPictureReturnedFromCustomSelector.
|
||||||
|
|
@ -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))
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue