mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 20:33:53 +01:00
Fix Crash EditDescriptionActivity when switched dark/light mode (#5503)
* Fix Crash EditDescriptionActivity when switched dark/light mode * tests added * fix * code cleanup * code cleanup * Fix * Fix
This commit is contained in:
parent
5a508ae417
commit
82b97fc49f
4 changed files with 90 additions and 18 deletions
|
|
@ -34,7 +34,7 @@ public final class OkHttpConnectionFactory {
|
|||
private static OkHttpClient createClient(final CommonsCookieJar cookieJar) {
|
||||
return new OkHttpClient.Builder()
|
||||
.cookieJar(cookieJar)
|
||||
.cache(new Cache(new File(CommonsApplication.getInstance().getCacheDir(), CACHE_DIR_NAME), NET_CACHE_SIZE))
|
||||
.cache((CommonsApplication.getInstance()!=null) ? new Cache(new File(CommonsApplication.getInstance().getCacheDir(), CACHE_DIR_NAME), NET_CACHE_SIZE) : null)
|
||||
.connectTimeout(120, TimeUnit.SECONDS)
|
||||
.writeTimeout(120, TimeUnit.SECONDS)
|
||||
.readTimeout(120, TimeUnit.SECONDS)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
package fr.free.nrw.commons.description
|
||||
|
||||
import android.app.Activity.RESULT_OK
|
||||
import android.app.ProgressDialog
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
|
|
@ -9,10 +8,10 @@ import android.speech.RecognizerIntent
|
|||
import android.view.View
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import fr.free.nrw.commons.Media
|
||||
import fr.free.nrw.commons.R
|
||||
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.recentlanguages.RecentLanguagesDao
|
||||
import fr.free.nrw.commons.settings.Prefs
|
||||
|
|
@ -20,6 +19,9 @@ 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 io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.functions.Consumer
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import timber.log.Timber
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
@ -43,6 +45,11 @@ class DescriptionEditActivity : BaseActivity(), UploadMediaDetailAdapter.EventLi
|
|||
*/
|
||||
var wikiText: String? = null
|
||||
|
||||
/**
|
||||
* Media object
|
||||
*/
|
||||
var media: Media? = null
|
||||
|
||||
/**
|
||||
* Saved language
|
||||
*/
|
||||
|
|
@ -60,6 +67,10 @@ class DescriptionEditActivity : BaseActivity(), UploadMediaDetailAdapter.EventLi
|
|||
|
||||
private val REQUEST_CODE_FOR_VOICE_INPUT = 1213
|
||||
|
||||
private var descriptionAndCaptions: ArrayList<UploadMediaDetail>? = null
|
||||
|
||||
@Inject lateinit var descriptionEditHelper: DescriptionEditHelper
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
|
|
@ -67,10 +78,19 @@ class DescriptionEditActivity : BaseActivity(), UploadMediaDetailAdapter.EventLi
|
|||
setContentView(binding.root)
|
||||
|
||||
val bundle = intent.extras
|
||||
val descriptionAndCaptions: ArrayList<UploadMediaDetail> =
|
||||
bundle!!.getParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION)!!
|
||||
wikiText = bundle.getString(WIKITEXT)
|
||||
savedLanguageValue = bundle.getString(Prefs.DESCRIPTION_LANGUAGE)!!
|
||||
|
||||
if (savedInstanceState != null) {
|
||||
descriptionAndCaptions = savedInstanceState.getParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION)
|
||||
wikiText = savedInstanceState.getString(WIKITEXT)
|
||||
savedLanguageValue = savedInstanceState.getString(Prefs.DESCRIPTION_LANGUAGE)!!
|
||||
media = savedInstanceState.getParcelable("media")
|
||||
} else {
|
||||
descriptionAndCaptions =
|
||||
bundle!!.getParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION)!!
|
||||
wikiText = bundle.getString(WIKITEXT)
|
||||
savedLanguageValue = bundle.getString(Prefs.DESCRIPTION_LANGUAGE)!!
|
||||
media = bundle.getParcelable("media")
|
||||
}
|
||||
initRecyclerView(descriptionAndCaptions)
|
||||
|
||||
binding.btnEditSubmit.setOnClickListener(::onSubmitButtonClicked)
|
||||
|
|
@ -122,7 +142,7 @@ class DescriptionEditActivity : BaseActivity(), UploadMediaDetailAdapter.EventLi
|
|||
}
|
||||
|
||||
private fun onBackButtonClicked(view: View) {
|
||||
onBackPressed()
|
||||
onBackPressedDispatcher.onBackPressed()
|
||||
}
|
||||
|
||||
private fun onSubmitButtonClicked(view: View) {
|
||||
|
|
@ -164,16 +184,47 @@ class DescriptionEditActivity : BaseActivity(), UploadMediaDetailAdapter.EventLi
|
|||
buffer.replace(", $".toRegex(), "")
|
||||
buffer.append(descriptionEnd)
|
||||
}
|
||||
val returningIntent = Intent()
|
||||
returningIntent.putExtra(UPDATED_WIKITEXT, buffer.toString())
|
||||
returningIntent.putParcelableArrayListExtra(
|
||||
LIST_OF_DESCRIPTION_AND_CAPTION,
|
||||
uploadMediaDetails as ArrayList<out Parcelable?>
|
||||
)
|
||||
setResult(RESULT_OK, returningIntent)
|
||||
editDescription(media!!, buffer.toString(), uploadMediaDetails as ArrayList<UploadMediaDetail>)
|
||||
|
||||
finish()
|
||||
}
|
||||
|
||||
/**
|
||||
* Edits description and caption
|
||||
* @param media media object
|
||||
* @param updatedWikiText updated wiki text
|
||||
* @param uploadMediaDetails descriptions and captions
|
||||
*/
|
||||
private fun editDescription(media : Media, updatedWikiText : String, uploadMediaDetails : ArrayList<UploadMediaDetail>){
|
||||
descriptionEditHelper?.addDescription(
|
||||
applicationContext, media,
|
||||
updatedWikiText
|
||||
)
|
||||
?.subscribeOn(Schedulers.io())
|
||||
?.observeOn(AndroidSchedulers.mainThread())
|
||||
?.subscribe(Consumer<Boolean> { s: Boolean? -> Timber.d("Descriptions are added.") })?.let {
|
||||
compositeDisposable.add(
|
||||
it
|
||||
)
|
||||
}
|
||||
|
||||
val updatedCaptions = LinkedHashMap<String, String>()
|
||||
for (mediaDetail in uploadMediaDetails) {
|
||||
compositeDisposable.add(
|
||||
descriptionEditHelper!!.addCaption(
|
||||
applicationContext, media,
|
||||
mediaDetail.languageCode, mediaDetail.captionText
|
||||
)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe { s: Boolean? ->
|
||||
updatedCaptions[mediaDetail.languageCode!!] = mediaDetail.captionText
|
||||
media.captions = updatedCaptions
|
||||
Timber.d("Caption is added.")
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
private fun showLoggingProgressBar() {
|
||||
progressDialog = ProgressDialog(this)
|
||||
progressDialog!!.isIndeterminate = true
|
||||
|
|
@ -193,4 +244,13 @@ class DescriptionEditActivity : BaseActivity(), UploadMediaDetailAdapter.EventLi
|
|||
else { Timber.e("Error %s", resultCode) }
|
||||
}
|
||||
}
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
super.onSaveInstanceState(outState)
|
||||
|
||||
outState.putParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION, uploadMediaDetailAdapter.items as ArrayList<out Parcelable?>)
|
||||
outState.putString(WIKITEXT, wikiText)
|
||||
outState.putString(Prefs.DESCRIPTION_LANGUAGE, savedLanguageValue)
|
||||
//save Media
|
||||
outState.putParcelable("media", media)
|
||||
}
|
||||
}
|
||||
|
|
@ -402,6 +402,8 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment implements
|
|||
}
|
||||
}
|
||||
);
|
||||
binding.progressBarEdit.setVisibility(GONE);
|
||||
binding.descriptionEdit.setVisibility(VISIBLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -967,8 +969,9 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment implements
|
|||
bundle.putParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION, descriptionAndCaptions);
|
||||
bundle.putString(WIKITEXT, s);
|
||||
bundle.putString(Prefs.DESCRIPTION_LANGUAGE, applicationKvStore.getString(Prefs.DESCRIPTION_LANGUAGE, ""));
|
||||
bundle.putParcelable("media", media);
|
||||
intent.putExtras(bundle);
|
||||
startActivityForResult(intent, REQUEST_CODE_EDIT_DESCRIPTION);
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import android.view.LayoutInflater
|
|||
import android.view.View
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.test.core.app.ApplicationProvider
|
||||
import fr.free.nrw.commons.Media
|
||||
import fr.free.nrw.commons.R
|
||||
import fr.free.nrw.commons.TestCommonsApplication
|
||||
import fr.free.nrw.commons.databinding.ActivityDescriptionEditBinding
|
||||
|
|
@ -55,6 +56,8 @@ class DescriptionEditActivityUnitTest {
|
|||
@Mock
|
||||
private lateinit var rvDescriptions: RecyclerView
|
||||
|
||||
private lateinit var media: Media
|
||||
|
||||
@Before
|
||||
@Throws(Exception::class)
|
||||
fun setUp() {
|
||||
|
|
@ -62,11 +65,15 @@ class DescriptionEditActivityUnitTest {
|
|||
context = ApplicationProvider.getApplicationContext()
|
||||
uploadMediaDetails = mutableListOf(UploadMediaDetail("en", "desc"))
|
||||
as ArrayList<UploadMediaDetail>
|
||||
media = Media("filename", "creator", "url", "thumburl",
|
||||
"localpath", Date(197000), "extmetadata")
|
||||
|
||||
val intent = Intent().putExtra("title", "read")
|
||||
val bundle = Bundle()
|
||||
bundle.putParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION, uploadMediaDetails)
|
||||
bundle.putString(WIKITEXT, "desc")
|
||||
bundle.putString(Prefs.DESCRIPTION_LANGUAGE, "bn")
|
||||
bundle.putParcelable("media", media)
|
||||
intent.putExtras(bundle)
|
||||
activity =
|
||||
Robolectric.buildActivity(DescriptionEditActivity::class.java, intent).create().get()
|
||||
|
|
@ -78,6 +85,8 @@ class DescriptionEditActivityUnitTest {
|
|||
Whitebox.setInternalState(activity, "rvDescriptions", rvDescriptions)
|
||||
Whitebox.setInternalState(activity, "binding", binding)
|
||||
Whitebox.setInternalState(activity, "savedLanguageValue", "bn")
|
||||
Whitebox.setInternalState(activity, "media", media)
|
||||
Whitebox.setInternalState(activity,"descriptionAndCaptions",uploadMediaDetails)
|
||||
`when`(uploadMediaDetailAdapter.items).thenReturn(uploadMediaDetails)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue