From 6971907bfb62b5b2213da7f2c623f23c31f2a06b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 23 Nov 2025 08:32:43 +0000 Subject: [PATCH 1/7] Initial plan From 6075454389f1be877f0c8b3e8595ce21158f1ad9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 23 Nov 2025 08:48:27 +0000 Subject: [PATCH 2/7] Fix test AndroidManifest.xml to resolve unit test build failure Co-authored-by: RitikaPahwa4444 <83745993+RitikaPahwa4444@users.noreply.github.com> --- app/src/test/AndroidManifest.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/test/AndroidManifest.xml b/app/src/test/AndroidManifest.xml index e0da21e94a..eca48e2558 100644 --- a/app/src/test/AndroidManifest.xml +++ b/app/src/test/AndroidManifest.xml @@ -2,4 +2,7 @@ + From c162df2d85fc6d93fae3c3e6465a164d53fbba36 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 23 Nov 2025 08:52:55 +0000 Subject: [PATCH 3/7] Add bounds checking to onNextButtonClicked to fix unit test failure Co-authored-by: RitikaPahwa4444 <83745993+RitikaPahwa4444@users.noreply.github.com> --- .../main/java/fr/free/nrw/commons/upload/UploadActivity.kt | 4 ++++ 1 file changed, 4 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 e377cd68f3..dbe2b9aa4f 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 @@ -814,6 +814,10 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C } override fun onNextButtonClicked(index: Int) { + // Validate index bounds + if (fragments == null || index < 0 || index >= fragments!!.size) { + return + } val currentFragment = fragments!![index] if (currentFragment is UploadMediaDetailFragment) { if (VERSION.SDK_INT >= VERSION_CODES.O) { From 21915ffd10d61d84bce767057f141ea51274ea16 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 23 Nov 2025 08:57:16 +0000 Subject: [PATCH 4/7] Improve null safety in onNextButtonClicked bounds checking Co-authored-by: RitikaPahwa4444 <83745993+RitikaPahwa4444@users.noreply.github.com> --- .../main/java/fr/free/nrw/commons/upload/UploadActivity.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 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 dbe2b9aa4f..3c3bddae71 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 @@ -815,10 +815,11 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C override fun onNextButtonClicked(index: Int) { // Validate index bounds - if (fragments == null || index < 0 || index >= fragments!!.size) { + val fragmentsList = fragments ?: return + if (index < 0 || index >= fragmentsList.size) { return } - val currentFragment = fragments!![index] + val currentFragment = fragmentsList[index] if (currentFragment is UploadMediaDetailFragment) { if (VERSION.SDK_INT >= VERSION_CODES.O) { val adapter = (currentFragment as UploadMediaDetailFragment).uploadMediaDetailAdapter From ea3908f675c565332bc3c8ec7144fedab474721b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 23 Nov 2025 09:01:44 +0000 Subject: [PATCH 5/7] Improve null safety in proceedToNextStep for consistency Co-authored-by: RitikaPahwa4444 <83745993+RitikaPahwa4444@users.noreply.github.com> --- .../fr/free/nrw/commons/upload/UploadActivity.kt | 12 ++++++++---- 1 file changed, 8 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 3c3bddae71..d94948da0c 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 @@ -867,9 +867,13 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C } private fun proceedToNextStep(index: Int) { - if (index < fragments!!.size - 1) { + val fragmentsList = fragments ?: return + if (index < 0 || index >= fragmentsList.size) { + return + } + if (index < fragmentsList.size - 1) { // Hide the keyboard before navigating to Media License screen - val isUploadCategoriesFragment = fragments!!.getOrNull(index)?.let { + val isUploadCategoriesFragment = fragmentsList.getOrNull(index)?.let { it is UploadCategoriesFragment } ?: false if (isUploadCategoriesFragment) { @@ -882,10 +886,10 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C } } binding.vpUpload.setCurrentItem(index + 1, false) - fragments!![index + 1].onBecameVisible() + fragmentsList[index + 1].onBecameVisible() (binding.rvThumbnails.layoutManager as LinearLayoutManager) .scrollToPositionWithOffset(if ((index > 0)) index - 1 else 0, 0) - if (index < fragments!!.size - 4) { + if (index < fragmentsList.size - 4) { // check image quality if next image exists presenter!!.checkImageQuality(index + 1) } From 56900cdb2aef40acf4661d817716b9180b42b86c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 23 Nov 2025 09:06:40 +0000 Subject: [PATCH 6/7] Apply consistent null safety to onPreviousButtonClicked Co-authored-by: RitikaPahwa4444 <83745993+RitikaPahwa4444@users.noreply.github.com> --- .../main/java/fr/free/nrw/commons/upload/UploadActivity.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 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 d94948da0c..aa6b277457 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 @@ -919,9 +919,10 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C } override fun onPreviousButtonClicked(index: Int) { - if (index != 0) { + val fragmentsList = fragments ?: return + if (index > 0 && index < fragmentsList.size) { binding.vpUpload.setCurrentItem(index - 1, true) - fragments!![index - 1].onBecameVisible() + fragmentsList[index - 1].onBecameVisible() (binding.rvThumbnails.layoutManager as LinearLayoutManager) .scrollToPositionWithOffset(if ((index > 3)) index - 2 else 0, 0) if ((index != 1) && ((index - 1) < uploadableFiles.size)) { From 7138e02c2383811fc6d31c0e4d0a58cb6f6caaed Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 25 Nov 2025 14:24:02 +0000 Subject: [PATCH 7/7] Revert UploadActivity.kt changes and fix test to use valid index Co-authored-by: RitikaPahwa4444 <83745993+RitikaPahwa4444@users.noreply.github.com> --- .../free/nrw/commons/upload/UploadActivity.kt | 24 ++++++------------- .../commons/upload/UploadActivityUnitTests.kt | 2 +- 2 files changed, 8 insertions(+), 18 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 aa6b277457..e377cd68f3 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 @@ -814,12 +814,7 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C } override fun onNextButtonClicked(index: Int) { - // Validate index bounds - val fragmentsList = fragments ?: return - if (index < 0 || index >= fragmentsList.size) { - return - } - val currentFragment = fragmentsList[index] + val currentFragment = fragments!![index] if (currentFragment is UploadMediaDetailFragment) { if (VERSION.SDK_INT >= VERSION_CODES.O) { val adapter = (currentFragment as UploadMediaDetailFragment).uploadMediaDetailAdapter @@ -867,13 +862,9 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C } private fun proceedToNextStep(index: Int) { - val fragmentsList = fragments ?: return - if (index < 0 || index >= fragmentsList.size) { - return - } - if (index < fragmentsList.size - 1) { + if (index < fragments!!.size - 1) { // Hide the keyboard before navigating to Media License screen - val isUploadCategoriesFragment = fragmentsList.getOrNull(index)?.let { + val isUploadCategoriesFragment = fragments!!.getOrNull(index)?.let { it is UploadCategoriesFragment } ?: false if (isUploadCategoriesFragment) { @@ -886,10 +877,10 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C } } binding.vpUpload.setCurrentItem(index + 1, false) - fragmentsList[index + 1].onBecameVisible() + fragments!![index + 1].onBecameVisible() (binding.rvThumbnails.layoutManager as LinearLayoutManager) .scrollToPositionWithOffset(if ((index > 0)) index - 1 else 0, 0) - if (index < fragmentsList.size - 4) { + if (index < fragments!!.size - 4) { // check image quality if next image exists presenter!!.checkImageQuality(index + 1) } @@ -919,10 +910,9 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C } override fun onPreviousButtonClicked(index: Int) { - val fragmentsList = fragments ?: return - if (index > 0 && index < fragmentsList.size) { + if (index != 0) { binding.vpUpload.setCurrentItem(index - 1, true) - fragmentsList[index - 1].onBecameVisible() + fragments!![index - 1].onBecameVisible() (binding.rvThumbnails.layoutManager as LinearLayoutManager) .scrollToPositionWithOffset(if ((index > 3)) index - 2 else 0, 0) if ((index != 1) && ((index - 1) < uploadableFiles.size)) { diff --git a/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadActivityUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadActivityUnitTests.kt index 97fe688625..1c0223bfd1 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadActivityUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadActivityUnitTests.kt @@ -225,7 +225,7 @@ class UploadActivityUnitTests { @Test @Throws(Exception::class) fun testOnNextButtonClicked() { - activity.onNextButtonClicked(-1) + activity.onNextButtonClicked(0) } @Test