From d51ddb989d04e334f3cb1ac774650e312e61a38e Mon Sep 17 00:00:00 2001 From: Maxwell Zhou-Smith Date: Sun, 26 Oct 2025 20:30:17 +1100 Subject: [PATCH 1/4] Bypassed Storage Perms Check for External Share The share intent provides files via content uris with temporary read permissions, so we do not need to obtain storage permissions --- .../java/fr/free/nrw/commons/upload/UploadActivity.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt b/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt index 66e0257f68..928043844d 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt @@ -314,6 +314,16 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C // Check if all required permissions are granted val hasAllPermissions = hasPermission(this, PERMISSIONS_STORAGE) val hasPartialAccess = hasPartialAccess(this) + + // The share intent provides files via content uris with temporary read permissions, + // so we do not need to obtain storage permissions + val intent = intent + val action = intent.action + if (Intent.ACTION_SEND == action || Intent.ACTION_SEND_MULTIPLE == action) { + receiveSharedItems() + return + } + if (hasAllPermissions || hasPartialAccess) { // All required permissions are granted, so enable UI elements and perform actions receiveSharedItems() From 2b7e032239a49106d123856534bed821837b7921 Mon Sep 17 00:00:00 2001 From: Maxwell Zhou-Smith Date: Mon, 3 Nov 2025 00:22:41 +1100 Subject: [PATCH 2/4] Removed Unnecessary Local Variable --- app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt b/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt index 928043844d..a0ed8490f4 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt @@ -317,7 +317,6 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C // The share intent provides files via content uris with temporary read permissions, // so we do not need to obtain storage permissions - val intent = intent val action = intent.action if (Intent.ACTION_SEND == action || Intent.ACTION_SEND_MULTIPLE == action) { receiveSharedItems() From f7e67c620418c656dd815e47994073023d11cb4f Mon Sep 17 00:00:00 2001 From: Maxwell Zhou-Smith Date: Mon, 3 Nov 2025 01:44:48 +1100 Subject: [PATCH 3/4] Moved Bypass to the Start of checkStoragePermissions() --- .../java/fr/free/nrw/commons/upload/UploadActivity.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt b/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt index a0ed8490f4..59deb85fb2 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt @@ -311,10 +311,6 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C } private fun checkStoragePermissions() { - // Check if all required permissions are granted - val hasAllPermissions = hasPermission(this, PERMISSIONS_STORAGE) - val hasPartialAccess = hasPartialAccess(this) - // The share intent provides files via content uris with temporary read permissions, // so we do not need to obtain storage permissions val action = intent.action @@ -323,6 +319,10 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C return } + // Check if all required permissions are granted + val hasAllPermissions = hasPermission(this, PERMISSIONS_STORAGE) + val hasPartialAccess = hasPartialAccess(this) + if (hasAllPermissions || hasPartialAccess) { // All required permissions are granted, so enable UI elements and perform actions receiveSharedItems() From a1fcbe938922c110be4612aac428d413f96a30e7 Mon Sep 17 00:00:00 2001 From: Maxwell Zhou-Smith Date: Mon, 3 Nov 2025 02:35:33 +1100 Subject: [PATCH 4/4] Removed Duplicate Check in receiveSharedItems --- .../main/java/fr/free/nrw/commons/upload/UploadActivity.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt b/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt index 59deb85fb2..e83ea2c5f9 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt @@ -315,6 +315,8 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C // so we do not need to obtain storage permissions val action = intent.action if (Intent.ACTION_SEND == action || Intent.ACTION_SEND_MULTIPLE == action) { + // Get the external items first + receiveExternalSharedItems() receiveSharedItems() return } @@ -481,9 +483,7 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C private fun receiveSharedItems() { val intent = intent val action = intent.action - if (Intent.ACTION_SEND == action || Intent.ACTION_SEND_MULTIPLE == action) { - receiveExternalSharedItems() - } else if (ContributionController.ACTION_INTERNAL_UPLOADS == action) { + if (ContributionController.ACTION_INTERNAL_UPLOADS == action) { receiveInternalSharedItems() }