Converted license name and url lookup to kotlin

This commit is contained in:
Paul Hawke 2025-07-02 17:08:42 -05:00
parent 78c27f9b48
commit 88203561e3
5 changed files with 45 additions and 64 deletions

View file

@ -20,8 +20,9 @@ import fr.free.nrw.commons.databinding.FragmentMediaLicenseBinding
import fr.free.nrw.commons.upload.UploadActivity import fr.free.nrw.commons.upload.UploadActivity
import fr.free.nrw.commons.upload.UploadBaseFragment import fr.free.nrw.commons.upload.UploadBaseFragment
import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog
import fr.free.nrw.commons.utils.Licenses
import fr.free.nrw.commons.utils.UrlUtils import fr.free.nrw.commons.utils.UrlUtils
import fr.free.nrw.commons.utils.toLicenseName
import fr.free.nrw.commons.utils.toLicenseUrl
import timber.log.Timber import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
@ -127,20 +128,20 @@ class MediaLicenseFragment : UploadBaseFragment(), MediaLicenseContract.View {
} }
override fun setSelectedLicense(license: String?) { override fun setSelectedLicense(license: String?) {
var position = licenses!!.indexOf(getString(Licenses.licenseNameFor(license))) var position = license?.let { licenses!!.indexOf(getString(it.toLicenseName())) } ?: -1
// Check if position is valid // Check if position is valid
if (position < 0) { if (position < 0) {
Timber.d("Invalid position: %d. Using default licenses", position) Timber.d("Invalid position: %d. Using default licenses", position)
position = licenses!!.size - 1 position = licenses!!.size - 1
} else {
Timber.d("Position: %d %s", position, getString(Licenses.licenseNameFor(license)))
} }
binding.spinnerLicenseList.setSelection(position) binding.spinnerLicenseList.setSelection(position)
} }
override fun updateLicenseSummary(selectedLicense: String?, numberOfItems: Int) { override fun updateLicenseSummary(selectedLicense: String?, numberOfItems: Int) {
val licenseHyperLink = "<a href='" + Licenses.licenseUrlFor(selectedLicense) + "'>" + if (selectedLicense == null) return
getString(Licenses.licenseNameFor(selectedLicense)) + "</a><br>"
val licenseHyperLink = "<a href='" + selectedLicense.toLicenseUrl() + "'>" +
getString(selectedLicense.toLicenseName()) + "</a><br>"
setTextViewHTML( setTextViewHTML(
binding.tvShareLicenseSummary, resources binding.tvShareLicenseSummary, resources

View file

@ -3,7 +3,7 @@ package fr.free.nrw.commons.upload.license
import fr.free.nrw.commons.kvstore.JsonKvStore import fr.free.nrw.commons.kvstore.JsonKvStore
import fr.free.nrw.commons.repository.UploadRepository import fr.free.nrw.commons.repository.UploadRepository
import fr.free.nrw.commons.settings.Prefs import fr.free.nrw.commons.settings.Prefs
import fr.free.nrw.commons.utils.Licenses import fr.free.nrw.commons.utils.toLicenseName
import timber.log.Timber import timber.log.Timber
import java.lang.reflect.Method import java.lang.reflect.Method
import java.lang.reflect.Proxy import java.lang.reflect.Proxy
@ -34,12 +34,14 @@ class MediaLicensePresenter @Inject constructor(
val licenses = repository.getLicenses() val licenses = repository.getLicenses()
view.setLicenses(licenses) view.setLicenses(licenses)
var selectedLicense = defaultKVStore.getString( //CC_BY_SA_4 is the default one used by the commons web app
var selectedLicense: String = defaultKVStore.getString(
Prefs.DEFAULT_LICENSE, Prefs.DEFAULT_LICENSE,
Prefs.Licenses.CC_BY_SA_4 Prefs.Licenses.CC_BY_SA_4
) //CC_BY_SA_4 is the default one used by the commons web app ) ?: Prefs.Licenses.CC_BY_SA_4
try { //I have to make sure that the stored default license was not one of the deprecated one's try { //I have to make sure that the stored default license was not one of the deprecated one's
Licenses.licenseNameFor(selectedLicense) selectedLicense.toLicenseName()
} catch (exception: IllegalStateException) { } catch (exception: IllegalStateException) {
Timber.e(exception) Timber.e(exception)
selectedLicense = Prefs.Licenses.CC_BY_SA_4 selectedLicense = Prefs.Licenses.CC_BY_SA_4

View file

@ -1,52 +0,0 @@
package fr.free.nrw.commons.utils;
import androidx.annotation.NonNull;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.settings.Prefs;
public final class Licenses {
/**
* Generates licence name with given ID
* @param license License ID
* @return Name of license
*/
public static int licenseNameFor(String license) {
switch (license) {
case Prefs.Licenses.CC_BY_3:
return R.string.license_name_cc_by;
case Prefs.Licenses.CC_BY_4:
return R.string.license_name_cc_by_four;
case Prefs.Licenses.CC_BY_SA_3:
return R.string.license_name_cc_by_sa;
case Prefs.Licenses.CC_BY_SA_4:
return R.string.license_name_cc_by_sa_four;
case Prefs.Licenses.CC0:
return R.string.license_name_cc0;
}
throw new IllegalStateException("Unrecognized license value: " + license);
}
/**
* Generates license url with given ID
* @param license License ID
* @return Url of license
*/
@NonNull
public static String licenseUrlFor(String license) {
switch (license) {
case Prefs.Licenses.CC_BY_3:
return "https://creativecommons.org/licenses/by/3.0/";
case Prefs.Licenses.CC_BY_4:
return "https://creativecommons.org/licenses/by/4.0/";
case Prefs.Licenses.CC_BY_SA_3:
return "https://creativecommons.org/licenses/by-sa/3.0/";
case Prefs.Licenses.CC_BY_SA_4:
return "https://creativecommons.org/licenses/by-sa/4.0/";
case Prefs.Licenses.CC0:
return "https://creativecommons.org/publicdomain/zero/1.0/";
default:
throw new IllegalStateException("Unrecognized license value: " + license);
}
}
}

View file

@ -0,0 +1,31 @@
package fr.free.nrw.commons.utils
import fr.free.nrw.commons.R
import fr.free.nrw.commons.settings.Prefs
/**
* Generates licence name with given ID
* @return Name of license
*/
fun String.toLicenseName(): Int = when (this) {
Prefs.Licenses.CC_BY_3 -> R.string.license_name_cc_by
Prefs.Licenses.CC_BY_4 -> R.string.license_name_cc_by_four
Prefs.Licenses.CC_BY_SA_3 -> R.string.license_name_cc_by_sa
Prefs.Licenses.CC_BY_SA_4 -> R.string.license_name_cc_by_sa_four
Prefs.Licenses.CC0 -> R.string.license_name_cc0
else -> throw IllegalStateException("Unrecognized license value: $this")
}
/**
* Generates license url with given ID
* @return Url of license
*/
fun String.toLicenseUrl(): String = when (this) {
Prefs.Licenses.CC_BY_3 -> "https://creativecommons.org/licenses/by/3.0/"
Prefs.Licenses.CC_BY_4 -> "https://creativecommons.org/licenses/by/4.0/"
Prefs.Licenses.CC_BY_SA_3 -> "https://creativecommons.org/licenses/by-sa/3.0/"
Prefs.Licenses.CC_BY_SA_4 -> "https://creativecommons.org/licenses/by-sa/4.0/"
Prefs.Licenses.CC0 -> "https://creativecommons.org/publicdomain/zero/1.0/"
else -> throw IllegalStateException("Unrecognized license value: $this")
}

View file

@ -6,7 +6,7 @@ import fr.free.nrw.commons.kvstore.JsonKvStore
import fr.free.nrw.commons.repository.UploadRepository import fr.free.nrw.commons.repository.UploadRepository
import fr.free.nrw.commons.upload.license.MediaLicenseContract import fr.free.nrw.commons.upload.license.MediaLicenseContract
import fr.free.nrw.commons.upload.license.MediaLicensePresenter import fr.free.nrw.commons.upload.license.MediaLicensePresenter
import fr.free.nrw.commons.utils.Licenses import fr.free.nrw.commons.utils.toLicenseName
import org.junit.After import org.junit.After
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
@ -51,7 +51,6 @@ class MediaLicensePresenterTest {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
mediaLicensePresenter.onAttachView(view) mediaLicensePresenter.onAttachView(view)
mockedUtil = Mockito.mockStatic(UnderlineUtils::class.java) mockedUtil = Mockito.mockStatic(UnderlineUtils::class.java)
`when`(Licenses.licenseNameFor(ArgumentMatchers.anyString())).thenReturn(1)
} }
@After @After