From 7655562272bee387cdd6a25dffdc455fae43f074 Mon Sep 17 00:00:00 2001 From: Ayan Sarkar <71203077+Ayan-10@users.noreply.github.com> Date: Mon, 11 Apr 2022 17:44:26 +0530 Subject: [PATCH] Fixes 4922 : Crash when trying to edit description (in Media details) (#4929) * DescriptionEditActivity handled * Minor change * Minor changes --- .../description/DescriptionEditActivity.kt | 28 +++++++++---------- .../nrw/commons/di/ActivityBuilderModule.java | 4 +++ .../commons/media/MediaDetailFragment.java | 2 ++ .../upload/UploadMediaDetailAdapter.java | 3 +- .../DescriptionEditActivityUnitTest.kt | 3 ++ 5 files changed, 24 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt index 1389e3c0f..04c90e492 100644 --- a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt @@ -5,7 +5,6 @@ import android.content.Intent import android.os.Bundle import android.os.Parcelable import android.view.View -import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import fr.free.nrw.commons.R @@ -13,32 +12,23 @@ import fr.free.nrw.commons.databinding.ActivityDescriptionEditBinding import fr.free.nrw.commons.description.EditDescriptionConstants.LIST_OF_DESCRIPTION_AND_CAPTION import fr.free.nrw.commons.description.EditDescriptionConstants.UPDATED_WIKITEXT import fr.free.nrw.commons.description.EditDescriptionConstants.WIKITEXT -import fr.free.nrw.commons.kvstore.JsonKvStore +import fr.free.nrw.commons.recentlanguages.RecentLanguagesDao import fr.free.nrw.commons.settings.Prefs +import fr.free.nrw.commons.theme.BaseActivity import fr.free.nrw.commons.upload.UploadMediaDetail import fr.free.nrw.commons.upload.UploadMediaDetailAdapter import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog -import java.util.* import javax.inject.Inject -import javax.inject.Named /** * Activity for populating and editing existing description and caption */ -class DescriptionEditActivity : AppCompatActivity(), UploadMediaDetailAdapter.EventListener { +class DescriptionEditActivity : BaseActivity(), UploadMediaDetailAdapter.EventListener { /** * Adapter for showing UploadMediaDetail in the activity */ private lateinit var uploadMediaDetailAdapter: UploadMediaDetailAdapter - /** - * For getting default preference - */ - @JvmField - @Inject - @Named("default_preferences") - var defaultKvStore: JsonKvStore? = null - /** * Recyclerview for recycling data in views */ @@ -50,11 +40,19 @@ class DescriptionEditActivity : AppCompatActivity(), UploadMediaDetailAdapter.Ev */ var wikiText: String? = null + /** + * Saved language + */ + private lateinit var savedLanguageValue: String + /** * For showing progress dialog */ private var progressDialog: ProgressDialog? = null + @Inject + lateinit var recentLanguagesDao: RecentLanguagesDao + private lateinit var binding: ActivityDescriptionEditBinding override fun onCreate(savedInstanceState: Bundle?) { @@ -67,6 +65,7 @@ class DescriptionEditActivity : AppCompatActivity(), UploadMediaDetailAdapter.Ev val descriptionAndCaptions: ArrayList = bundle!!.getParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION)!! wikiText = bundle.getString(WIKITEXT) + savedLanguageValue = bundle.getString(Prefs.DESCRIPTION_LANGUAGE)!! initRecyclerView(descriptionAndCaptions) binding.btnAddDescription.setOnClickListener(::onButtonAddDescriptionClicked) @@ -80,8 +79,7 @@ class DescriptionEditActivity : AppCompatActivity(), UploadMediaDetailAdapter.Ev */ private fun initRecyclerView(descriptionAndCaptions: ArrayList?) { uploadMediaDetailAdapter = UploadMediaDetailAdapter( - defaultKvStore?.getString(Prefs.DESCRIPTION_LANGUAGE, ""), - descriptionAndCaptions) + savedLanguageValue, descriptionAndCaptions, recentLanguagesDao) uploadMediaDetailAdapter.setCallback { titleStringID: Int, messageStringId: Int -> showInfoAlert( titleStringID, diff --git a/app/src/main/java/fr/free/nrw/commons/di/ActivityBuilderModule.java b/app/src/main/java/fr/free/nrw/commons/di/ActivityBuilderModule.java index 7607ba049..31412236d 100644 --- a/app/src/main/java/fr/free/nrw/commons/di/ActivityBuilderModule.java +++ b/app/src/main/java/fr/free/nrw/commons/di/ActivityBuilderModule.java @@ -10,6 +10,7 @@ import fr.free.nrw.commons.auth.SignupActivity; import fr.free.nrw.commons.category.CategoryDetailsActivity; import fr.free.nrw.commons.contributions.MainActivity; import fr.free.nrw.commons.customselector.ui.selector.CustomSelectorActivity; +import fr.free.nrw.commons.description.DescriptionEditActivity; import fr.free.nrw.commons.explore.depictions.WikidataItemDetailsActivity; import fr.free.nrw.commons.explore.SearchActivity; import fr.free.nrw.commons.notification.NotificationActivity; @@ -71,4 +72,7 @@ public abstract class ActivityBuilderModule { @ContributesAndroidInjector abstract ReviewActivity bindReviewActivity(); + + @ContributesAndroidInjector + abstract DescriptionEditActivity bindDescriptionEditActivity(); } diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java index 67448cc45..cf64581ee 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java @@ -76,6 +76,7 @@ import fr.free.nrw.commons.explore.depictions.WikidataItemDetailsActivity; import fr.free.nrw.commons.kvstore.JsonKvStore; import fr.free.nrw.commons.location.LocationServiceManager; import fr.free.nrw.commons.profile.ProfileActivity; +import fr.free.nrw.commons.settings.Prefs; import fr.free.nrw.commons.ui.widget.HtmlTextView; import fr.free.nrw.commons.upload.categories.UploadCategoriesFragment; import fr.free.nrw.commons.upload.depicts.DepictsFragment; @@ -899,6 +900,7 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment implements final Bundle bundle = new Bundle(); bundle.putParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION, descriptionAndCaptions); bundle.putString(WIKITEXT, s); + bundle.putString(Prefs.DESCRIPTION_LANGUAGE, applicationKvStore.getString(Prefs.DESCRIPTION_LANGUAGE, "")); intent.putExtras(bundle); startActivityForResult(intent, REQUEST_CODE_EDIT_DESCRIPTION); } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java index d87bf0ba9..60c3d72d8 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java @@ -58,10 +58,11 @@ public class UploadMediaDetailAdapter extends RecyclerView.Adapter uploadMediaDetails) { + List uploadMediaDetails, RecentLanguagesDao recentLanguagesDao) { this.uploadMediaDetails = uploadMediaDetails; selectedLanguages = new HashMap<>(); this.savedLanguageValue = savedLanguageValue; + this.recentLanguagesDao = recentLanguagesDao; } public void setCallback(Callback callback) { diff --git a/app/src/test/kotlin/fr/free/nrw/commons/description/DescriptionEditActivityUnitTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/description/DescriptionEditActivityUnitTest.kt index eb414267e..c8d88cb19 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/description/DescriptionEditActivityUnitTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/description/DescriptionEditActivityUnitTest.kt @@ -15,6 +15,7 @@ import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.databinding.ActivityDescriptionEditBinding import fr.free.nrw.commons.description.EditDescriptionConstants.LIST_OF_DESCRIPTION_AND_CAPTION import fr.free.nrw.commons.description.EditDescriptionConstants.WIKITEXT +import fr.free.nrw.commons.settings.Prefs import fr.free.nrw.commons.upload.UploadMediaDetail import fr.free.nrw.commons.upload.UploadMediaDetailAdapter import junit.framework.Assert.assertEquals @@ -65,6 +66,7 @@ class DescriptionEditActivityUnitTest { val bundle = Bundle() bundle.putParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION, uploadMediaDetails) bundle.putString(WIKITEXT, "desc") + bundle.putString(Prefs.DESCRIPTION_LANGUAGE, "bn") intent.putExtras(bundle) activity = Robolectric.buildActivity(DescriptionEditActivity::class.java, intent).create().get() @@ -75,6 +77,7 @@ class DescriptionEditActivityUnitTest { Whitebox.setInternalState(activity, "uploadMediaDetailAdapter", uploadMediaDetailAdapter) Whitebox.setInternalState(activity, "rvDescriptions", rvDescriptions) Whitebox.setInternalState(activity, "binding", binding) + Whitebox.setInternalState(activity, "savedLanguageValue", "bn") `when`(uploadMediaDetailAdapter.items).thenReturn(uploadMediaDetails) }