From e9e26973693227d64e926ccb4263846a5d6ef22b Mon Sep 17 00:00:00 2001 From: Sonal Yadav Date: Fri, 7 Feb 2025 19:40:18 +0530 Subject: [PATCH] Fix: Fix crash when adding location after removing a picture (#6175) * Fix: Resolved the Crash in UploadMediaDetailFragment * Fix uninitialized basicKvStoreFactory in UploadMediaPresenter --------- Co-authored-by: Nicolas Raoul --- .../mediaDetails/UploadMediaDetailFragment.kt | 8 ++++++-- .../upload/mediaDetails/UploadMediaPresenter.kt | 14 +++++++------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.kt b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.kt index 92a46b92a..af850a7e3 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.kt @@ -15,6 +15,7 @@ import android.widget.CompoundButton import android.widget.ImageView import android.widget.Toast import androidx.activity.result.ActivityResult +import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.core.content.ContextCompat import androidx.core.os.bundleOf @@ -60,8 +61,7 @@ import javax.inject.Named class UploadMediaDetailFragment : UploadBaseFragment(), UploadMediaDetailsContract.View, UploadMediaDetailAdapter.EventListener { - private val startForResult = registerForActivityResult( - ActivityResultContracts.StartActivityForResult(), ::onCameraPosition) + private lateinit var startForResult: ActivityResultLauncher private val startForEditActivityResult = registerForActivityResult( ActivityResultContracts.StartActivityForResult(), ::onEditActivityResult) @@ -135,6 +135,10 @@ class UploadMediaDetailFragment : UploadBaseFragment(), UploadMediaDetailsContra if (savedInstanceState != null && uploadableFile == null) { uploadableFile = savedInstanceState.getParcelable(UPLOADABLE_FILE) } + // Register the ActivityResultLauncher for LocationPickerActivity + startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + onCameraPosition(result) + } } fun setImageToBeUploaded( diff --git a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaPresenter.kt b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaPresenter.kt index 55cead370..90c426091 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaPresenter.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaPresenter.kt @@ -51,7 +51,7 @@ class UploadMediaPresenter @Inject constructor( } } } - lateinit var basicKvStoreFactory: (String) -> BasicKvStore + private var basicKvStoreFactory: ((String) -> BasicKvStore)? = null override fun onAttachView(view: UploadMediaDetailsContract.View) { this.view = view @@ -339,8 +339,8 @@ class UploadMediaPresenter @Inject constructor( */ override fun checkImageQuality(uploadItem: UploadItem, index: Int) { if ((uploadItem.imageQuality != IMAGE_OK) && (uploadItem.imageQuality != IMAGE_KEEP)) { - val value = basicKvStoreFactory(UploadActivity.storeNameForCurrentUploadImagesSize) - .getString(UPLOAD_QUALITIES_KEY, null) + val value = basicKvStoreFactory?.let { it(UploadActivity.storeNameForCurrentUploadImagesSize) } + ?.getString(UPLOAD_QUALITIES_KEY, null) try { val imageQuality = value.asJsonObject()["UploadItem$index"] as Int view.showProgress(false) @@ -363,8 +363,8 @@ class UploadMediaPresenter @Inject constructor( * @param index Index of the UploadItem which was deleted */ override fun updateImageQualitiesJSON(size: Int, index: Int) { - val value = basicKvStoreFactory(UploadActivity.storeNameForCurrentUploadImagesSize) - .getString(UPLOAD_QUALITIES_KEY, null) + val value = basicKvStoreFactory?.let { it(UploadActivity.storeNameForCurrentUploadImagesSize) } + ?.getString(UPLOAD_QUALITIES_KEY, null) try { val jsonObject = value.asJsonObject().apply { for (i in index until (size - 1)) { @@ -372,8 +372,8 @@ class UploadMediaPresenter @Inject constructor( } remove("UploadItem" + (size - 1)) } - basicKvStoreFactory(UploadActivity.storeNameForCurrentUploadImagesSize) - .putString(UPLOAD_QUALITIES_KEY, jsonObject.toString()) + basicKvStoreFactory?.let { it(UploadActivity.storeNameForCurrentUploadImagesSize) } + ?.putString(UPLOAD_QUALITIES_KEY, jsonObject.toString()) } catch (e: Exception) { Timber.e(e) }