From d1ae19264522b9a0f5ce8a6ed990baf81b8aba0b Mon Sep 17 00:00:00 2001 From: sonalyadav Date: Tue, 27 May 2025 10:22:44 +0530 Subject: [PATCH] Fix: app crash --- .../java/fr/free/nrw/commons/upload/UploadActivity.kt | 4 +++- .../java/fr/free/nrw/commons/upload/UploadPresenter.kt | 10 ++++++++++ 2 files changed, 13 insertions(+), 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 020284934..a870db86b 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 @@ -170,6 +170,9 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + // Ensure basicKvStoreFactory is always initialized before use + presenter?.setupBasicKvStoreFactory { BasicKvStore(this@UploadActivity, it) } + _binding = ActivityUploadBinding.inflate(layoutInflater) setContentView(binding.root) @@ -884,7 +887,6 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C // Save the user's choice to not show the dialog again defaultKvStore.putBoolean("hasAlreadyLaunchedCategoriesDialog", true) } - presenter!!.setupBasicKvStoreFactory { BasicKvStore(this@UploadActivity, it) } presenter!!.checkImageQuality(0) UploadMediaPresenter.isCategoriesDialogShowing = false } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadPresenter.kt b/app/src/main/java/fr/free/nrw/commons/upload/UploadPresenter.kt index 3f0b16b80..32f32fff8 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadPresenter.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadPresenter.kt @@ -135,12 +135,22 @@ class UploadPresenter @Inject internal constructor( return basicKvStoreFactory ?: throw IllegalStateException("basicKvStoreFactory has not been initialized") } + private fun requireFactoryInitialized() { + val field = this::class.java.getDeclaredField("basicKvStoreFactory") + field.isAccessible = true + val value = field.get(this) + if (value == null) { + throw IllegalStateException("basicKvStoreFactory must be initialized before use. Please call setupBasicKvStoreFactory() before using presenter methods that require it.") + } + } + /** * Calls checkImageQuality of UploadMediaPresenter to check image quality of next image * * @param uploadItemIndex Index of next image, whose quality is to be checked */ override fun checkImageQuality(uploadItemIndex: Int) { + requireFactoryInitialized() repository.getUploadItem(uploadItemIndex)?.let { presenter.setupBasicKvStoreFactory(getBasicKvStoreFactory()) presenter.checkImageQuality(it, uploadItemIndex)