1
1
package fr.free.nrw.commons.description
2
2
3
- import android.app.Activity.RESULT_OK
4
3
import android.app.ProgressDialog
5
4
import android.content.Intent
6
5
import android.os.Bundle
@@ -9,17 +8,20 @@ import android.speech.RecognizerIntent
9
8
import android.view.View
10
9
import androidx.recyclerview.widget.LinearLayoutManager
11
10
import androidx.recyclerview.widget.RecyclerView
11
+ import fr.free.nrw.commons.Media
12
12
import fr.free.nrw.commons.R
13
13
import fr.free.nrw.commons.databinding.ActivityDescriptionEditBinding
14
14
import fr.free.nrw.commons.description.EditDescriptionConstants.LIST_OF_DESCRIPTION_AND_CAPTION
15
- import fr.free.nrw.commons.description.EditDescriptionConstants.UPDATED_WIKITEXT
16
15
import fr.free.nrw.commons.description.EditDescriptionConstants.WIKITEXT
17
16
import fr.free.nrw.commons.recentlanguages.RecentLanguagesDao
18
17
import fr.free.nrw.commons.settings.Prefs
19
18
import fr.free.nrw.commons.theme.BaseActivity
20
19
import fr.free.nrw.commons.upload.UploadMediaDetail
21
20
import fr.free.nrw.commons.upload.UploadMediaDetailAdapter
22
21
import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog
22
+ import io.reactivex.android.schedulers.AndroidSchedulers
23
+ import io.reactivex.functions.Consumer
24
+ import io.reactivex.schedulers.Schedulers
23
25
import timber.log.Timber
24
26
import javax.inject.Inject
25
27
@@ -43,6 +45,11 @@ class DescriptionEditActivity : BaseActivity(), UploadMediaDetailAdapter.EventLi
43
45
*/
44
46
var wikiText: String? = null
45
47
48
+ /* *
49
+ * Media object
50
+ */
51
+ var media: Media ? = null
52
+
46
53
/* *
47
54
* Saved language
48
55
*/
@@ -60,17 +67,30 @@ class DescriptionEditActivity : BaseActivity(), UploadMediaDetailAdapter.EventLi
60
67
61
68
private val REQUEST_CODE_FOR_VOICE_INPUT = 1213
62
69
70
+ private var descriptionAndCaptions: ArrayList <UploadMediaDetail >? = null
71
+
72
+ @Inject lateinit var descriptionEditHelper: DescriptionEditHelper
73
+
63
74
override fun onCreate (savedInstanceState : Bundle ? ) {
64
75
super .onCreate(savedInstanceState)
65
76
66
77
binding = ActivityDescriptionEditBinding .inflate(layoutInflater)
67
78
setContentView(binding.root)
68
79
69
80
val bundle = intent.extras
70
- val descriptionAndCaptions: ArrayList <UploadMediaDetail > =
71
- bundle!! .getParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION )!!
72
- wikiText = bundle.getString(WIKITEXT )
73
- savedLanguageValue = bundle.getString(Prefs .DESCRIPTION_LANGUAGE )!!
81
+
82
+ if (savedInstanceState != null ) {
83
+ descriptionAndCaptions = savedInstanceState.getParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION )
84
+ wikiText = savedInstanceState.getString(WIKITEXT )
85
+ savedLanguageValue = savedInstanceState.getString(Prefs .DESCRIPTION_LANGUAGE )!!
86
+ media = savedInstanceState.getParcelable(" media" )
87
+ } else {
88
+ descriptionAndCaptions =
89
+ bundle!! .getParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION )!!
90
+ wikiText = bundle.getString(WIKITEXT )
91
+ savedLanguageValue = bundle.getString(Prefs .DESCRIPTION_LANGUAGE )!!
92
+ media = bundle.getParcelable(" media" )
93
+ }
74
94
initRecyclerView(descriptionAndCaptions)
75
95
76
96
binding.btnEditSubmit.setOnClickListener(::onSubmitButtonClicked)
@@ -122,7 +142,7 @@ class DescriptionEditActivity : BaseActivity(), UploadMediaDetailAdapter.EventLi
122
142
}
123
143
124
144
private fun onBackButtonClicked (view : View ) {
125
- onBackPressed()
145
+ onBackPressedDispatcher. onBackPressed()
126
146
}
127
147
128
148
private fun onSubmitButtonClicked (view : View ) {
@@ -164,16 +184,47 @@ class DescriptionEditActivity : BaseActivity(), UploadMediaDetailAdapter.EventLi
164
184
buffer.replace(" , $" .toRegex(), " " )
165
185
buffer.append(descriptionEnd)
166
186
}
167
- val returningIntent = Intent ()
168
- returningIntent.putExtra(UPDATED_WIKITEXT , buffer.toString())
169
- returningIntent.putParcelableArrayListExtra(
170
- LIST_OF_DESCRIPTION_AND_CAPTION ,
171
- uploadMediaDetails as ArrayList <out Parcelable ?>
172
- )
173
- setResult(RESULT_OK , returningIntent)
187
+ editDescription(media!! , buffer.toString(), uploadMediaDetails as ArrayList <UploadMediaDetail >)
188
+
174
189
finish()
175
190
}
176
191
192
+ /* *
193
+ * Edits description and caption
194
+ * @param media media object
195
+ * @param updatedWikiText updated wiki text
196
+ * @param uploadMediaDetails descriptions and captions
197
+ */
198
+ private fun editDescription (media : Media , updatedWikiText : String , uploadMediaDetails : ArrayList <UploadMediaDetail >){
199
+ descriptionEditHelper?.addDescription(
200
+ applicationContext, media,
201
+ updatedWikiText
202
+ )
203
+ ?.subscribeOn(Schedulers .io())
204
+ ?.observeOn(AndroidSchedulers .mainThread())
205
+ ?.subscribe(Consumer <Boolean > { s: Boolean? -> Timber .d(" Descriptions are added." ) })?.let {
206
+ compositeDisposable.add(
207
+ it
208
+ )
209
+ }
210
+
211
+ val updatedCaptions = LinkedHashMap <String , String >()
212
+ for (mediaDetail in uploadMediaDetails) {
213
+ compositeDisposable.add(
214
+ descriptionEditHelper!! .addCaption(
215
+ applicationContext, media,
216
+ mediaDetail.languageCode, mediaDetail.captionText
217
+ )
218
+ .subscribeOn(Schedulers .io())
219
+ .observeOn(AndroidSchedulers .mainThread())
220
+ .subscribe { s: Boolean? ->
221
+ updatedCaptions[mediaDetail.languageCode!! ] = mediaDetail.captionText
222
+ media.captions = updatedCaptions
223
+ Timber .d(" Caption is added." )
224
+ })
225
+ }
226
+ }
227
+
177
228
private fun showLoggingProgressBar () {
178
229
progressDialog = ProgressDialog (this )
179
230
progressDialog!! .isIndeterminate = true
@@ -193,4 +244,13 @@ class DescriptionEditActivity : BaseActivity(), UploadMediaDetailAdapter.EventLi
193
244
else { Timber .e(" Error %s" , resultCode) }
194
245
}
195
246
}
196
- }
247
+ override fun onSaveInstanceState (outState : Bundle ) {
248
+ super .onSaveInstanceState(outState)
249
+
250
+ outState.putParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION , uploadMediaDetailAdapter.items as ArrayList <out Parcelable ?>)
251
+ outState.putString(WIKITEXT , wikiText)
252
+ outState.putString(Prefs .DESCRIPTION_LANGUAGE , savedLanguageValue)
253
+ // save Media
254
+ outState.putParcelable(" media" , media)
255
+ }
256
+ }
0 commit comments