Fixes 4922 : Crash when trying to edit description (in Media details) (#4929)

* DescriptionEditActivity handled

* Minor change

* Minor changes
This commit is contained in:
Ayan Sarkar 2022-04-11 17:44:26 +05:30 committed by GitHub
parent 644cd473f8
commit 7655562272
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 24 additions and 16 deletions

View file

@ -5,7 +5,6 @@ import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.os.Parcelable import android.os.Parcelable
import android.view.View import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import fr.free.nrw.commons.R 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.LIST_OF_DESCRIPTION_AND_CAPTION
import fr.free.nrw.commons.description.EditDescriptionConstants.UPDATED_WIKITEXT import fr.free.nrw.commons.description.EditDescriptionConstants.UPDATED_WIKITEXT
import fr.free.nrw.commons.description.EditDescriptionConstants.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.settings.Prefs
import fr.free.nrw.commons.theme.BaseActivity
import fr.free.nrw.commons.upload.UploadMediaDetail import fr.free.nrw.commons.upload.UploadMediaDetail
import fr.free.nrw.commons.upload.UploadMediaDetailAdapter import fr.free.nrw.commons.upload.UploadMediaDetailAdapter
import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog
import java.util.*
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Named
/** /**
* Activity for populating and editing existing description and caption * 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 * Adapter for showing UploadMediaDetail in the activity
*/ */
private lateinit var uploadMediaDetailAdapter: UploadMediaDetailAdapter private lateinit var uploadMediaDetailAdapter: UploadMediaDetailAdapter
/**
* For getting default preference
*/
@JvmField
@Inject
@Named("default_preferences")
var defaultKvStore: JsonKvStore? = null
/** /**
* Recyclerview for recycling data in views * Recyclerview for recycling data in views
*/ */
@ -50,11 +40,19 @@ class DescriptionEditActivity : AppCompatActivity(), UploadMediaDetailAdapter.Ev
*/ */
var wikiText: String? = null var wikiText: String? = null
/**
* Saved language
*/
private lateinit var savedLanguageValue: String
/** /**
* For showing progress dialog * For showing progress dialog
*/ */
private var progressDialog: ProgressDialog? = null private var progressDialog: ProgressDialog? = null
@Inject
lateinit var recentLanguagesDao: RecentLanguagesDao
private lateinit var binding: ActivityDescriptionEditBinding private lateinit var binding: ActivityDescriptionEditBinding
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -67,6 +65,7 @@ class DescriptionEditActivity : AppCompatActivity(), UploadMediaDetailAdapter.Ev
val descriptionAndCaptions: ArrayList<UploadMediaDetail> = val descriptionAndCaptions: ArrayList<UploadMediaDetail> =
bundle!!.getParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION)!! bundle!!.getParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION)!!
wikiText = bundle.getString(WIKITEXT) wikiText = bundle.getString(WIKITEXT)
savedLanguageValue = bundle.getString(Prefs.DESCRIPTION_LANGUAGE)!!
initRecyclerView(descriptionAndCaptions) initRecyclerView(descriptionAndCaptions)
binding.btnAddDescription.setOnClickListener(::onButtonAddDescriptionClicked) binding.btnAddDescription.setOnClickListener(::onButtonAddDescriptionClicked)
@ -80,8 +79,7 @@ class DescriptionEditActivity : AppCompatActivity(), UploadMediaDetailAdapter.Ev
*/ */
private fun initRecyclerView(descriptionAndCaptions: ArrayList<UploadMediaDetail>?) { private fun initRecyclerView(descriptionAndCaptions: ArrayList<UploadMediaDetail>?) {
uploadMediaDetailAdapter = UploadMediaDetailAdapter( uploadMediaDetailAdapter = UploadMediaDetailAdapter(
defaultKvStore?.getString(Prefs.DESCRIPTION_LANGUAGE, ""), savedLanguageValue, descriptionAndCaptions, recentLanguagesDao)
descriptionAndCaptions)
uploadMediaDetailAdapter.setCallback { titleStringID: Int, messageStringId: Int -> uploadMediaDetailAdapter.setCallback { titleStringID: Int, messageStringId: Int ->
showInfoAlert( showInfoAlert(
titleStringID, titleStringID,

View file

@ -10,6 +10,7 @@ import fr.free.nrw.commons.auth.SignupActivity;
import fr.free.nrw.commons.category.CategoryDetailsActivity; import fr.free.nrw.commons.category.CategoryDetailsActivity;
import fr.free.nrw.commons.contributions.MainActivity; import fr.free.nrw.commons.contributions.MainActivity;
import fr.free.nrw.commons.customselector.ui.selector.CustomSelectorActivity; 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.depictions.WikidataItemDetailsActivity;
import fr.free.nrw.commons.explore.SearchActivity; import fr.free.nrw.commons.explore.SearchActivity;
import fr.free.nrw.commons.notification.NotificationActivity; import fr.free.nrw.commons.notification.NotificationActivity;
@ -71,4 +72,7 @@ public abstract class ActivityBuilderModule {
@ContributesAndroidInjector @ContributesAndroidInjector
abstract ReviewActivity bindReviewActivity(); abstract ReviewActivity bindReviewActivity();
@ContributesAndroidInjector
abstract DescriptionEditActivity bindDescriptionEditActivity();
} }

View file

@ -76,6 +76,7 @@ import fr.free.nrw.commons.explore.depictions.WikidataItemDetailsActivity;
import fr.free.nrw.commons.kvstore.JsonKvStore; import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.location.LocationServiceManager; import fr.free.nrw.commons.location.LocationServiceManager;
import fr.free.nrw.commons.profile.ProfileActivity; 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.ui.widget.HtmlTextView;
import fr.free.nrw.commons.upload.categories.UploadCategoriesFragment; import fr.free.nrw.commons.upload.categories.UploadCategoriesFragment;
import fr.free.nrw.commons.upload.depicts.DepictsFragment; import fr.free.nrw.commons.upload.depicts.DepictsFragment;
@ -899,6 +900,7 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment implements
final Bundle bundle = new Bundle(); final Bundle bundle = new Bundle();
bundle.putParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION, descriptionAndCaptions); bundle.putParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION, descriptionAndCaptions);
bundle.putString(WIKITEXT, s); bundle.putString(WIKITEXT, s);
bundle.putString(Prefs.DESCRIPTION_LANGUAGE, applicationKvStore.getString(Prefs.DESCRIPTION_LANGUAGE, ""));
intent.putExtras(bundle); intent.putExtras(bundle);
startActivityForResult(intent, REQUEST_CODE_EDIT_DESCRIPTION); startActivityForResult(intent, REQUEST_CODE_EDIT_DESCRIPTION);
} }

View file

@ -58,10 +58,11 @@ public class UploadMediaDetailAdapter extends RecyclerView.Adapter<UploadMediaDe
} }
public UploadMediaDetailAdapter(final String savedLanguageValue, public UploadMediaDetailAdapter(final String savedLanguageValue,
List<UploadMediaDetail> uploadMediaDetails) { List<UploadMediaDetail> uploadMediaDetails, RecentLanguagesDao recentLanguagesDao) {
this.uploadMediaDetails = uploadMediaDetails; this.uploadMediaDetails = uploadMediaDetails;
selectedLanguages = new HashMap<>(); selectedLanguages = new HashMap<>();
this.savedLanguageValue = savedLanguageValue; this.savedLanguageValue = savedLanguageValue;
this.recentLanguagesDao = recentLanguagesDao;
} }
public void setCallback(Callback callback) { public void setCallback(Callback callback) {

View file

@ -15,6 +15,7 @@ import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.databinding.ActivityDescriptionEditBinding 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.LIST_OF_DESCRIPTION_AND_CAPTION
import fr.free.nrw.commons.description.EditDescriptionConstants.WIKITEXT 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.UploadMediaDetail
import fr.free.nrw.commons.upload.UploadMediaDetailAdapter import fr.free.nrw.commons.upload.UploadMediaDetailAdapter
import junit.framework.Assert.assertEquals import junit.framework.Assert.assertEquals
@ -65,6 +66,7 @@ class DescriptionEditActivityUnitTest {
val bundle = Bundle() val bundle = Bundle()
bundle.putParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION, uploadMediaDetails) bundle.putParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION, uploadMediaDetails)
bundle.putString(WIKITEXT, "desc") bundle.putString(WIKITEXT, "desc")
bundle.putString(Prefs.DESCRIPTION_LANGUAGE, "bn")
intent.putExtras(bundle) intent.putExtras(bundle)
activity = activity =
Robolectric.buildActivity(DescriptionEditActivity::class.java, intent).create().get() Robolectric.buildActivity(DescriptionEditActivity::class.java, intent).create().get()
@ -75,6 +77,7 @@ class DescriptionEditActivityUnitTest {
Whitebox.setInternalState(activity, "uploadMediaDetailAdapter", uploadMediaDetailAdapter) Whitebox.setInternalState(activity, "uploadMediaDetailAdapter", uploadMediaDetailAdapter)
Whitebox.setInternalState(activity, "rvDescriptions", rvDescriptions) Whitebox.setInternalState(activity, "rvDescriptions", rvDescriptions)
Whitebox.setInternalState(activity, "binding", binding) Whitebox.setInternalState(activity, "binding", binding)
Whitebox.setInternalState(activity, "savedLanguageValue", "bn")
`when`(uploadMediaDetailAdapter.items).thenReturn(uploadMediaDetails) `when`(uploadMediaDetailAdapter.items).thenReturn(uploadMediaDetails)
} }