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 26aae0b45..3ec9a9723 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 @@ -1,5 +1,6 @@ package fr.free.nrw.commons.description + import android.app.ProgressDialog import android.content.Intent import android.os.Bundle @@ -8,8 +9,11 @@ import android.speech.RecognizerIntent import android.view.View import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import fr.free.nrw.commons.CommonsApplication import fr.free.nrw.commons.Media import fr.free.nrw.commons.R +import fr.free.nrw.commons.auth.SessionManager +import fr.free.nrw.commons.auth.csrf.InvalidLoginTokenException 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 @@ -25,6 +29,7 @@ import io.reactivex.schedulers.Schedulers import timber.log.Timber import javax.inject.Inject + /** * Activity for populating and editing existing description and caption */ @@ -71,6 +76,9 @@ class DescriptionEditActivity : BaseActivity(), UploadMediaDetailAdapter.EventLi @Inject lateinit var descriptionEditHelper: DescriptionEditHelper + @Inject lateinit var sessionManager: SessionManager + + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -196,32 +204,64 @@ class DescriptionEditActivity : BaseActivity(), UploadMediaDetailAdapter.EventLi * @param uploadMediaDetails descriptions and captions */ private fun editDescription(media : Media, updatedWikiText : String, uploadMediaDetails : ArrayList){ - descriptionEditHelper?.addDescription( - applicationContext, media, - updatedWikiText - ) - ?.subscribeOn(Schedulers.io()) - ?.observeOn(AndroidSchedulers.mainThread()) - ?.subscribe(Consumer { s: Boolean? -> Timber.d("Descriptions are added.") })?.let { - compositeDisposable.add( - it + + try { + descriptionEditHelper?.addDescription( + applicationContext, media, + updatedWikiText ) + ?.subscribeOn(Schedulers.io()) + ?.observeOn(AndroidSchedulers.mainThread()) + ?.subscribe(Consumer { s: Boolean? -> Timber.d("Descriptions are added.") })?.let { + compositeDisposable.add( + it + ) + } + } catch (e : InvalidLoginTokenException) { + val username: String? = sessionManager?.userName + val logoutListener = CommonsApplication.BaseLogoutListener( + this, + getString(R.string.invalid_login_message), + username + ) + + val commonsApplication = CommonsApplication.getInstance() + if (commonsApplication != null ){ + commonsApplication.clearApplicationData(this,logoutListener) } + } + val updatedCaptions = LinkedHashMap() for (mediaDetail in uploadMediaDetails) { - compositeDisposable.add( - descriptionEditHelper!!.addCaption( - applicationContext, media, - mediaDetail.languageCode, mediaDetail.captionText + try { + 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.") + }) + } + catch (e : InvalidLoginTokenException) { + val username = sessionManager.userName + val logoutListener = CommonsApplication.BaseLogoutListener( + this, + getString(R.string.invalid_login_message), + username ) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { s: Boolean? -> - updatedCaptions[mediaDetail.languageCode!!] = mediaDetail.captionText - media.captions = updatedCaptions - Timber.d("Caption is added.") - }) + + val commonsApplication = CommonsApplication.getInstance() + if (commonsApplication != null ){ + commonsApplication.clearApplicationData(this,logoutListener) + } + } + } } diff --git a/app/src/main/res/values-yue-hant/error.xml b/app/src/main/res/values-yue-hant/error.xml deleted file mode 100644 index 68579e4a0..000000000 --- a/app/src/main/res/values-yue-hant/error.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - 同享壞咗 - 哎呀。出咗錯! - 多謝你! - 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 f7b203cfa..19cc945cd 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 @@ -32,6 +32,7 @@ import org.mockito.MockitoAnnotations import org.powermock.reflect.Whitebox import org.robolectric.Robolectric import org.robolectric.RobolectricTestRunner +import org.robolectric.RuntimeEnvironment import org.robolectric.Shadows import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode @@ -62,7 +63,7 @@ class DescriptionEditActivityUnitTest { @Throws(Exception::class) fun setUp() { MockitoAnnotations.initMocks(this) - context = ApplicationProvider.getApplicationContext() + context = RuntimeEnvironment.getApplication().applicationContext uploadMediaDetails = mutableListOf(UploadMediaDetail("en", "desc")) as ArrayList media = Media("filename", "creator", "url", "thumburl",