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 ee0b21210..38e7dace8 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 @@ -173,6 +173,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) @@ -903,7 +906,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 5d721f408..251f868ad 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 @@ -34,8 +34,7 @@ class UploadPresenter @Inject internal constructor( private val compositeDisposable = CompositeDisposable() - lateinit var basicKvStoreFactory: (String) -> BasicKvStore - + private var basicKvStoreFactory: ((String) -> BasicKvStore)? = null /** * Called by the submit button in [UploadActivity] */ @@ -132,14 +131,38 @@ class UploadPresenter @Inject internal constructor( basicKvStoreFactory = factory } + /** + * Returns the current BasicKvStore factory or throws if not initialized. + * + * @throws IllegalStateException if basicKvStoreFactory has not been initialized. + */ + private fun getBasicKvStoreFactory(): (String) -> BasicKvStore { + return basicKvStoreFactory ?: throw IllegalStateException("basicKvStoreFactory has not been initialized") + } + + /** + * Ensures that the BasicKvStore factory has been initialized before use. + * + * @throws IllegalStateException if the factory is null. + */ + 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(basicKvStoreFactory) + presenter.setupBasicKvStoreFactory(getBasicKvStoreFactory()) presenter.checkImageQuality(it, uploadItemIndex) } }