Skip to content

Commit 0e73551

Browse files
authored
Convert upload to kotlin (part 3) (commons-app#6104)
* Convert UploadCategoriesFragment to kotlin * Convert UploadBaseFragment to kotlin * Convert UploadItem to kotlin * Convert UploadModel to kotlin * Convert UploadMediaDetailAdapter to kotlin * Convert UploadActivity to kotlin * Convert UploadMediaPresenter to kotlin * Convert UploadMediaDetailFragment to kotlin * Fix NPE that broke uploads
1 parent 6d64357 commit 0e73551

37 files changed

+3236
-3564
lines changed

app/src/main/java/fr/free/nrw/commons/contributions/Contribution.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ data class Contribution constructor(
101101
*/
102102
fun formatCaptions(uploadMediaDetails: List<UploadMediaDetail>) =
103103
uploadMediaDetails
104-
.associate { it.languageCode!! to it.captionText }
104+
.associate { it.languageCode!! to it.captionText!! }
105105
.filter { it.value.isNotBlank() }
106106

107107
/**
@@ -112,7 +112,7 @@ data class Contribution constructor(
112112
*/
113113
fun formatDescriptions(descriptions: List<UploadMediaDetail>) =
114114
descriptions
115-
.filter { it.descriptionText.isNotEmpty() }
115+
.filter { !it.descriptionText.isNullOrEmpty() }
116116
.joinToString(separator = "") { "{{${it.languageCode}|1=${it.descriptionText}}}" }
117117
}
118118

app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt

+8-13
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package fr.free.nrw.commons.description
22

33
import android.app.ProgressDialog
4-
import android.content.Intent
54
import android.os.Bundle
65
import android.os.Parcelable
76
import android.speech.RecognizerIntent
@@ -72,7 +71,7 @@ class DescriptionEditActivity :
7271

7372
private lateinit var binding: ActivityDescriptionEditBinding
7473

75-
private var descriptionAndCaptions: ArrayList<UploadMediaDetail>? = null
74+
private var descriptionAndCaptions: MutableList<UploadMediaDetail>? = null
7675

7776
private val voiceInputResultLauncher = registerForActivityResult(
7877
ActivityResultContracts.StartActivityForResult()
@@ -114,22 +113,18 @@ class DescriptionEditActivity :
114113
* Initializes the RecyclerView
115114
* @param descriptionAndCaptions list of description and caption
116115
*/
117-
private fun initRecyclerView(descriptionAndCaptions: ArrayList<UploadMediaDetail>?) {
116+
private fun initRecyclerView(descriptionAndCaptions: MutableList<UploadMediaDetail>?) {
118117
uploadMediaDetailAdapter =
119118
UploadMediaDetailAdapter(
120119
this,
121120
savedLanguageValue,
122-
descriptionAndCaptions,
121+
descriptionAndCaptions ?: mutableListOf(),
123122
recentLanguagesDao,
124123
voiceInputResultLauncher
125124
)
126-
uploadMediaDetailAdapter.setCallback { titleStringID: Int, messageStringId: Int ->
127-
showInfoAlert(
128-
titleStringID,
129-
messageStringId,
130-
)
131-
}
132-
uploadMediaDetailAdapter.setEventListener(this)
125+
126+
uploadMediaDetailAdapter.callback = UploadMediaDetailAdapter.Callback(::showInfoAlert)
127+
uploadMediaDetailAdapter.eventListener = this
133128
rvDescriptions = binding.rvDescriptionsCaptions
134129
rvDescriptions!!.layoutManager = LinearLayoutManager(this)
135130
rvDescriptions!!.adapter = uploadMediaDetailAdapter
@@ -272,11 +267,11 @@ class DescriptionEditActivity :
272267
applicationContext,
273268
media,
274269
mediaDetail.languageCode!!,
275-
mediaDetail.captionText,
270+
mediaDetail.captionText!!,
276271
).subscribeOn(Schedulers.io())
277272
.observeOn(AndroidSchedulers.mainThread())
278273
.subscribe { s: Boolean? ->
279-
updatedCaptions[mediaDetail.languageCode!!] = mediaDetail.captionText
274+
updatedCaptions[mediaDetail.languageCode!!] = mediaDetail.captionText!!
280275
media.captions = updatedCaptions
281276
Timber.d("Caption is added.")
282277
},

app/src/main/java/fr/free/nrw/commons/locationpicker/LocationPickerActivity.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ import fr.free.nrw.commons.location.LocationPermissionsHelper
4141
import fr.free.nrw.commons.location.LocationPermissionsHelper.LocationPermissionCallback
4242
import fr.free.nrw.commons.location.LocationServiceManager
4343
import fr.free.nrw.commons.theme.BaseActivity
44-
import fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailFragment.LAST_LOCATION
45-
import fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailFragment.LAST_ZOOM
44+
import fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailFragment.Companion.LAST_LOCATION
45+
import fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailFragment.Companion.LAST_ZOOM
4646
import fr.free.nrw.commons.utils.DialogUtil
4747
import fr.free.nrw.commons.utils.MapUtils.ZOOM_LEVEL
4848
import io.reactivex.android.schedulers.AndroidSchedulers

app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1569,7 +1569,7 @@ class MediaDetailFragment : CommonsDaggerSupportFragment(), CategoryEditHelper.C
15691569
mediaDetail: UploadMediaDetail,
15701570
updatedCaptions: MutableMap<String, String>
15711571
) {
1572-
updatedCaptions[mediaDetail.languageCode!!] = mediaDetail.captionText
1572+
updatedCaptions[mediaDetail.languageCode!!] = mediaDetail.captionText!!
15731573
media!!.captions = updatedCaptions
15741574
}
15751575

app/src/main/java/fr/free/nrw/commons/recentlanguages/RecentLanguagesAdapter.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import java.util.HashMap
1717
class RecentLanguagesAdapter constructor(
1818
context: Context,
1919
var recentLanguages: List<Language>,
20-
private val selectedLanguages: HashMap<*, String>,
20+
private val selectedLanguages: MutableMap<Int, String>,
2121
) : ArrayAdapter<String?>(context, R.layout.row_item_languages_spinner) {
2222
/**
2323
* Selected language code in UploadMediaDetailAdapter

app/src/main/java/fr/free/nrw/commons/repository/UploadRepository.kt

+6-6
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class UploadRepository @Inject constructor(
4646
*
4747
* @return
4848
*/
49-
fun buildContributions(): Observable<Contribution>? {
49+
fun buildContributions(): Observable<Contribution> {
5050
return uploadModel.buildContributions()
5151
}
5252

@@ -69,7 +69,7 @@ class UploadRepository @Inject constructor(
6969
* @return
7070
*/
7171
fun getUploads(): List<UploadItem> {
72-
return uploadModel.getUploads()
72+
return uploadModel.uploads
7373
}
7474

7575
/**
@@ -177,7 +177,7 @@ class UploadRepository @Inject constructor(
177177
place: Place?,
178178
similarImageInterface: SimilarImageInterface?,
179179
inAppPictureLocation: LatLng?
180-
): Observable<UploadItem>? {
180+
): Observable<UploadItem> {
181181
return uploadModel.preProcessImage(
182182
uploadableFile,
183183
place,
@@ -193,7 +193,7 @@ class UploadRepository @Inject constructor(
193193
* @param location Location of the image
194194
* @return Quality of UploadItem
195195
*/
196-
fun getImageQuality(uploadItem: UploadItem, location: LatLng?): Single<Int>? {
196+
fun getImageQuality(uploadItem: UploadItem, location: LatLng?): Single<Int> {
197197
return uploadModel.getImageQuality(uploadItem, location)
198198
}
199199

@@ -213,7 +213,7 @@ class UploadRepository @Inject constructor(
213213
* @param uploadItem UploadItem whose caption is to be checked
214214
* @return Quality of caption of the UploadItem
215215
*/
216-
fun getCaptionQuality(uploadItem: UploadItem): Single<Int>? {
216+
fun getCaptionQuality(uploadItem: UploadItem): Single<Int> {
217217
return uploadModel.getCaptionQuality(uploadItem)
218218
}
219219

@@ -275,7 +275,7 @@ class UploadRepository @Inject constructor(
275275
* @param selectedExistingDepictions existing depicts
276276
*/
277277
fun setSelectedExistingDepictions(selectedExistingDepictions: List<String>) {
278-
uploadModel.selectedExistingDepictions = selectedExistingDepictions
278+
uploadModel.selectedExistingDepictions = selectedExistingDepictions.toMutableList()
279279
}
280280

281281
/**

app/src/main/java/fr/free/nrw/commons/upload/FileProcessor.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class FileProcessor
5252
* Processes filePath coordinates, either from EXIF data or user location
5353
*/
5454
fun processFileCoordinates(
55-
similarImageInterface: SimilarImageInterface,
55+
similarImageInterface: SimilarImageInterface?,
5656
filePath: String?,
5757
inAppPictureLocation: LatLng?,
5858
): ImageCoordinates {
@@ -146,7 +146,7 @@ class FileProcessor
146146
*/
147147
private fun findOtherImages(
148148
fileBeingProcessed: File,
149-
similarImageInterface: SimilarImageInterface,
149+
similarImageInterface: SimilarImageInterface?,
150150
) {
151151
val oneHundredAndTwentySeconds = 120 * 1000L
152152
// Time when the original image was created
@@ -161,7 +161,7 @@ class FileProcessor
161161
.map { Pair(it, readImageCoordinates(it)) }
162162
.firstOrNull { it.second?.decimalCoords != null }
163163
?.let { fileCoordinatesPair ->
164-
similarImageInterface.showSimilarImageFragment(
164+
similarImageInterface?.showSimilarImageFragment(
165165
fileBeingProcessed.path,
166166
fileCoordinatesPair.first.absolutePath,
167167
fileCoordinatesPair.second,

app/src/main/java/fr/free/nrw/commons/upload/LanguagesAdapter.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import java.util.Locale
2323
*/
2424
class LanguagesAdapter constructor(
2525
context: Context,
26-
private val selectedLanguages: HashMap<*, String>,
26+
private val selectedLanguages: MutableMap<Int, String>,
2727
) : ArrayAdapter<String?>(context, R.layout.row_item_languages_spinner) {
2828
companion object {
2929
/**

0 commit comments

Comments
 (0)