Browse Source

Use Kotlin lowercase and uppercase functions

merge-requests/1454/head
Robert Stone 4 years ago
committed by Nicolas Pomepuy
parent
commit
da62f7ab49
  1. 5
      application/moviepedia/src/main/java/org/videolan/moviepedia/Helpers.kt
  2. 3
      application/television/src/main/java/org/videolan/television/util/TVSearchProvider.kt
  3. 4
      application/tools/src/main/java/org/videolan/tools/Strings.kt
  4. 9
      application/vlc-android/src/org/videolan/vlc/gui/dialogs/NetworkServerDialog.kt
  5. 6
      application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesExtensionFragment.kt
  6. 3
      application/vlc-android/src/org/videolan/vlc/gui/preferences/search/PreferenceItemAdapter.kt
  7. 2
      application/vlc-android/src/org/videolan/vlc/gui/preferences/search/PreferenceSearchActivity.kt
  8. 3
      application/vlc-android/src/org/videolan/vlc/util/FeatureFlagManager.kt
  9. 15
      application/vlc-android/src/org/videolan/vlc/util/FilterDelegate.kt
  10. 2
      application/vlc-android/src/org/videolan/vlc/util/Kextensions.kt
  11. 22
      application/vlc-android/src/org/videolan/vlc/util/ModelsHelper.kt
  12. 12
      application/vlc-android/src/org/videolan/vlc/viewmodels/PreferenceSearchModel.kt

5
application/moviepedia/src/main/java/org/videolan/moviepedia/Helpers.kt

@ -4,16 +4,17 @@ import android.content.Context
import org.videolan.medialibrary.interfaces.Medialibrary
import org.videolan.moviepedia.database.models.MediaMetadata
import org.videolan.moviepedia.database.models.getYear
import java.util.*
fun getHeaderMoviepedia(context: Context?, sort: Int, item: MediaMetadata?, aboveItem: MediaMetadata?) = if (context !== null && item != null) when (sort) {
Medialibrary.SORT_DEFAULT,
Medialibrary.SORT_FILENAME,
Medialibrary.SORT_ALPHA -> {
val letter = if (item.title.isEmpty() || !Character.isLetter(item.title[0])) "#" else item.title.substring(0, 1).toUpperCase()
val letter = if (item.title.isEmpty() || !Character.isLetter(item.title[0])) "#" else item.title.substring(0, 1).uppercase(Locale.getDefault())
if (aboveItem == null) letter
else {
val previous = if (aboveItem.title.isEmpty() || !Character.isLetter(aboveItem.title[0])) "#" else aboveItem.title.substring(0, 1).toUpperCase()
val previous = if (aboveItem.title.isEmpty() || !Character.isLetter(aboveItem.title[0])) "#" else aboveItem.title.substring(0, 1).uppercase(Locale.getDefault())
letter.takeIf { it != previous }
}
}

3
application/television/src/main/java/org/videolan/television/util/TVSearchProvider.kt

@ -47,6 +47,7 @@ import org.videolan.vlc.BuildConfig
import org.videolan.vlc.R
import org.videolan.vlc.getFileUri
import org.videolan.vlc.util.ThumbnailsProvider
import java.util.*
class TVSearchProvider : ContentProvider() {
override fun insert(uri: Uri, values: ContentValues?): Uri? =
@ -61,7 +62,7 @@ class TVSearchProvider : ContentProvider() {
val matrixCursor = MatrixCursor(columns)
val sanitizedQuery = query.replace(Regex("[^A-Za-z0-9 ]"), "").toLowerCase()
val sanitizedQuery = query.replace(Regex("[^A-Za-z0-9 ]"), "").lowercase(Locale.getDefault())
val mlIds = ArrayList<Long>()
//Moviepedia

4
application/tools/src/main/java/org/videolan/tools/Strings.kt

@ -92,8 +92,8 @@ fun String.firstLetterUppercase(): String {
return ""
}
return if (length == 1) {
toUpperCase(Locale.getDefault())
} else Character.toUpperCase(this[0]) + substring(1).toLowerCase(Locale.getDefault())
lowercase(Locale.getDefault())
} else Character.toUpperCase(this[0]) + substring(1).lowercase(Locale.getDefault())
}
fun String.abbreviate(maxLen: Int): String {

9
application/vlc-android/src/org/videolan/vlc/gui/dialogs/NetworkServerDialog.kt

@ -1,6 +1,5 @@
package org.videolan.vlc.gui.dialogs
import android.app.Dialog
import android.content.DialogInterface
import android.net.Uri
import android.os.Bundle
@ -9,11 +8,8 @@ import android.text.TextWatcher
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import android.widget.*
import androidx.appcompat.app.AppCompatDialog
import androidx.core.net.toUri
import androidx.fragment.app.DialogFragment
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.textfield.TextInputLayout
import kotlinx.coroutines.launch
@ -23,6 +19,7 @@ import org.videolan.vlc.R
import org.videolan.vlc.gui.DialogActivity
import org.videolan.vlc.gui.MainActivity
import org.videolan.vlc.repository.BrowserFavRepository
import java.util.*
class NetworkServerDialog : VLCBottomSheetDialogFragment(), AdapterView.OnItemSelectedListener, TextWatcher, View.OnClickListener {
@ -95,7 +92,7 @@ class NetworkServerDialog : VLCBottomSheetDialogFragment(), AdapterView.OnItemSe
if (!networkName.isEmpty())
editServername.setText(networkName)
networkUri.scheme?.toUpperCase()?.let {
networkUri.scheme?.uppercase(Locale.getDefault())?.let {
val position = getProtocolSpinnerPosition(it)
spinnerProtocol.setSelection(position)
val port = networkUri.port
@ -129,7 +126,7 @@ class NetworkServerDialog : VLCBottomSheetDialogFragment(), AdapterView.OnItemSe
private fun updateUrl() {
val sb = StringBuilder()
sb.append(spinnerProtocol.selectedItem.toString().toLowerCase())
sb.append(spinnerProtocol.selectedItem.toString().lowercase(Locale.getDefault()))
.append("://")
if (editUsername.isEnabled && !editUsername.editText!!.text.isNullOrEmpty()) {
sb.append(editUsername.editText!!.text).append('@')

6
application/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesExtensionFragment.kt

@ -9,11 +9,11 @@ import androidx.preference.Preference
import androidx.preference.SwitchPreferenceCompat
import androidx.preference.TwoStatePreference
import com.google.android.material.appbar.AppBarLayout
import org.videolan.tools.Settings
import org.videolan.tools.putSingle
import org.videolan.vlc.R
import org.videolan.vlc.extensions.ExtensionListing
import org.videolan.vlc.extensions.ExtensionsManager
import org.videolan.tools.Settings
import org.videolan.tools.putSingle
import java.util.*
class PreferencesExtensionFragment : BasePreferenceFragment() {
@ -77,7 +77,7 @@ class PreferencesExtensionFragment : BasePreferenceFragment() {
//Main switch
val switchPreference = SwitchPreferenceCompat(preferenceScreen!!.context)
switchPreference.title = preferenceScreen!!.context.getString(R.string.extension_prefs_activation_title).toUpperCase()
switchPreference.title = preferenceScreen!!.context.getString(R.string.extension_prefs_activation_title).uppercase(Locale.getDefault())
switchPreference.key = extensionKey
switchPreference.isChecked = settings.getBoolean(extensionKey, false)
switchPreference.onPreferenceChangeListener = null

3
application/vlc-android/src/org/videolan/vlc/gui/preferences/search/PreferenceItemAdapter.kt

@ -37,6 +37,7 @@ import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import org.videolan.vlc.databinding.PreferenceItemBinding
import java.util.*
private val cb = object : DiffUtil.ItemCallback<PreferenceItem>() {
override fun areItemsTheSame(oldItem: PreferenceItem, newItem: PreferenceItem) = oldItem == newItem
@ -97,7 +98,7 @@ class PreferenceItemAdapter(val handler: ClickHandler) : ListAdapter<PreferenceI
@BindingAdapter("searchText", "searchQueryString")
fun searchText(view: TextView, text: String, query: String) {
val spannableStringBuilder = SpannableStringBuilder(text)
val indexOf = text.toLowerCase().indexOf(query.toLowerCase())
val indexOf = text.lowercase(Locale.getDefault()).indexOf(query.lowercase(Locale.getDefault()))
if (indexOf != -1) spannableStringBuilder.setSpan(StyleSpan(Typeface.BOLD), indexOf, indexOf + query.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
if (indexOf != -1) spannableStringBuilder.setSpan(UnderlineSpan(), indexOf, indexOf + query.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
view.text = spannableStringBuilder

2
application/vlc-android/src/org/videolan/vlc/gui/preferences/search/PreferenceSearchActivity.kt

@ -87,7 +87,7 @@ class PreferenceSearchActivity : BaseActivity(), TextWatcher, PreferenceItemAdap
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
s?.toString()?.toLowerCase()?.let {
s?.toString()?.lowercase(Locale.getDefault())?.let {
viewmodel.filter(it)
adapter.query = it
}

3
application/vlc-android/src/org/videolan/vlc/util/FeatureFlagManager.kt

@ -29,6 +29,7 @@ import android.content.Context
import androidx.annotation.StringRes
import org.videolan.tools.Settings
import org.videolan.tools.putSingle
import java.util.*
/**
* This manager allows the user to enable / disable experimental features
@ -52,5 +53,5 @@ enum class FeatureFlag(var dependsOn:FeatureFlag?, @StringRes var title:Int, @St
;
@SuppressLint("DefaultLocale")
fun getKey() = "ff_${name.toLowerCase()}"
fun getKey() = "ff_${name.lowercase(Locale.getDefault())}"
}

15
application/vlc-android/src/org/videolan/vlc/util/FilterDelegate.kt

@ -7,6 +7,7 @@ import org.videolan.medialibrary.interfaces.media.MediaWrapper
import org.videolan.medialibrary.media.MediaLibraryItem
import org.videolan.resources.AppContextProvider
import org.videolan.vlc.media.MediaUtils
import java.util.*
open class FilterDelegate<T : MediaLibraryItem>(protected val dataset: MutableLiveData<out List<T>>) {
private var sourceSet: List<T>? = null
@ -50,14 +51,14 @@ class PlaylistFilterDelegate(dataset: MutableLiveData<out List<MediaWrapper>>) :
override suspend fun filteringJob(charSequence: CharSequence?): MutableList<MediaWrapper>? {
if (charSequence !== null) initSource()?.let { list ->
return withContext(Dispatchers.Default) { mutableListOf<MediaWrapper>().apply {
val queryStrings = charSequence.trim().toString().split(" ").asSequence().filter { it.isNotEmpty() }.map { it.toLowerCase() }.toList()
val queryStrings = charSequence.trim().toString().split(" ").asSequence().filter { it.isNotEmpty() }.map { it.lowercase(Locale.getDefault()) }.toList()
for (media in list) {
val title = MediaUtils.getMediaTitle(media).toLowerCase()
val location = media.location.toLowerCase()
val artist = MediaUtils.getMediaArtist(AppContextProvider.appContext, media).toLowerCase()
val albumArtist = MediaUtils.getMediaAlbumArtist(AppContextProvider.appContext, media).toLowerCase()
val album = MediaUtils.getMediaAlbum(AppContextProvider.appContext, media).toLowerCase()
val genre = MediaUtils.getMediaGenre(AppContextProvider.appContext, media).toLowerCase()
val title = MediaUtils.getMediaTitle(media).lowercase(Locale.getDefault())
val location = media.location.lowercase(Locale.getDefault())
val artist = MediaUtils.getMediaArtist(AppContextProvider.appContext, media).lowercase(Locale.getDefault())
val albumArtist = MediaUtils.getMediaAlbumArtist(AppContextProvider.appContext, media).lowercase(Locale.getDefault())
val album = MediaUtils.getMediaAlbum(AppContextProvider.appContext, media).lowercase(Locale.getDefault())
val genre = MediaUtils.getMediaGenre(AppContextProvider.appContext, media).lowercase(Locale.getDefault())
for (queryString in queryStrings) {
if (title.contains(queryString) ||
location.contains(queryString) ||

2
application/vlc-android/src/org/videolan/vlc/util/Kextensions.kt

@ -60,7 +60,7 @@ fun String.validateLocation(): Boolean {
var location = this
/* Check if the MRL contains a scheme */
if (!location.matches("\\w+://.+".toRegex())) location = "file://$location"
if (location.toLowerCase(Locale.ENGLISH).startsWith("file://")) {
if (location.lowercase(Locale.ENGLISH).startsWith("file://")) {
/* Ensure the file exists */
val f: File
try {

22
application/vlc-android/src/org/videolan/vlc/util/ModelsHelper.kt

@ -8,11 +8,11 @@ import org.videolan.libvlc.interfaces.IMedia
import org.videolan.medialibrary.interfaces.Medialibrary.*
import org.videolan.medialibrary.interfaces.media.Album
import org.videolan.medialibrary.interfaces.media.MediaWrapper
import org.videolan.medialibrary.interfaces.media.VideoGroup
import org.videolan.medialibrary.media.DummyItem
import org.videolan.medialibrary.media.MediaLibraryItem
import org.videolan.resources.util.*
import org.videolan.vlc.PlaybackService
import java.util.*
import kotlin.math.floor
object ModelsHelper {
@ -37,7 +37,7 @@ object ModelsHelper {
for (item in items) {
if (item.itemType == MediaLibraryItem.TYPE_DUMMY) continue
val title = item.title
val letter = if (title.isEmpty() || !Character.isLetter(title[0]) || item.isSpecialItem()) "#" else title.substring(0, 1).toUpperCase()
val letter = if (title.isEmpty() || !Character.isLetter(title[0]) || item.isSpecialItem()) "#" else title.substring(0, 1).uppercase(Locale.getDefault())
if (currentLetter === null || currentLetter != letter) {
currentLetter = letter
if (array[letter].isNullOrEmpty()) array[letter] = mutableListOf()
@ -100,7 +100,7 @@ object ModelsHelper {
}
fun MediaLibraryItem.getFirstLetter(): String {
return if (title.isEmpty() || !Character.isLetter(title[0]) || isSpecialItem()) "#" else title.substring(0, 1).toUpperCase()
return if (title.isEmpty() || !Character.isLetter(title[0]) || isSpecialItem()) "#" else title.substring(0, 1).uppercase(Locale.getDefault())
}
fun MediaLibraryItem.getDiscNumberString(): String? = if (this is MediaWrapper && this.discNumber != 0) "Disc ${this.discNumber}" else null
@ -108,10 +108,10 @@ object ModelsHelper {
fun getHeader(context: Context?, sort: Int, item: MediaLibraryItem?, aboveItem: MediaLibraryItem?) = if (context !== null && item != null) when (sort) {
SORT_DEFAULT,
SORT_ALPHA -> {
val letter = if (item.title.isEmpty() || !Character.isLetter(item.title[0]) || item.isSpecialItem()) "#" else item.title.substring(0, 1).toUpperCase()
val letter = if (item.title.isEmpty() || !Character.isLetter(item.title[0]) || item.isSpecialItem()) "#" else item.title.substring(0, 1).uppercase(Locale.getDefault())
if (aboveItem == null) letter
else {
val previous = if (aboveItem.title.isEmpty() || !Character.isLetter(aboveItem.title[0]) || aboveItem.isSpecialItem()) "#" else aboveItem.title.substring(0, 1).toUpperCase()
val previous = if (aboveItem.title.isEmpty() || !Character.isLetter(aboveItem.title[0]) || aboveItem.isSpecialItem()) "#" else aboveItem.title.substring(0, 1).uppercase(Locale.getDefault())
letter.takeIf { it != previous }
}
}
@ -170,10 +170,10 @@ object ModelsHelper {
SORT_FILENAME -> {
val title = FileUtils.getFileNameFromPath((item as? MediaWrapper)?.uri.toString())
val aboveTitle = FileUtils.getFileNameFromPath((aboveItem as? MediaWrapper)?.uri.toString())
val letter = if (title.isEmpty() || !Character.isLetter(title[0]) || item.isSpecialItem()) "#" else title.substring(0, 1).toUpperCase()
val letter = if (title.isEmpty() || !Character.isLetter(title[0]) || item.isSpecialItem()) "#" else title.substring(0, 1).uppercase(Locale.getDefault())
if (aboveItem == null) letter
else {
val previous = if (aboveTitle.isEmpty() || !Character.isLetter(aboveTitle[0]) || aboveItem.isSpecialItem()) "#" else aboveTitle.substring(0, 1).toUpperCase()
val previous = if (aboveTitle.isEmpty() || !Character.isLetter(aboveTitle[0]) || aboveItem.isSpecialItem()) "#" else aboveTitle.substring(0, 1).uppercase(Locale.getDefault())
letter.takeIf { it != previous }
}
}
@ -248,7 +248,7 @@ val ascComp by lazy {
if (type1 == MediaWrapper.TYPE_DIR && type2 != MediaWrapper.TYPE_DIR) return@Comparator -1
else if (type1 != MediaWrapper.TYPE_DIR && type2 == MediaWrapper.TYPE_DIR) return@Comparator 1
}
item1?.title?.toLowerCase()?.compareTo(item2?.title?.toLowerCase() ?: "") ?: -1
item1?.title?.lowercase(Locale.getDefault())?.compareTo(item2?.title?.lowercase(Locale.getDefault()) ?: "") ?: -1
}
}
val descComp by lazy {
@ -259,7 +259,7 @@ val descComp by lazy {
if (type1 == MediaWrapper.TYPE_DIR && type2 != MediaWrapper.TYPE_DIR) return@Comparator -1
else if (type1 != MediaWrapper.TYPE_DIR && type2 == MediaWrapper.TYPE_DIR) return@Comparator 1
}
item2?.title?.toLowerCase()?.compareTo(item1?.title?.toLowerCase() ?: "") ?: -1
item2?.title?.lowercase(Locale.getDefault())?.compareTo(item1?.title?.lowercase(Locale.getDefault()) ?: "") ?: -1
}
}
@ -269,7 +269,7 @@ val tvAscComp by lazy {
val type2 = (item2 as? MediaWrapper)?.type
if (type1 == MediaWrapper.TYPE_DIR && type2 != MediaWrapper.TYPE_DIR) return@Comparator -1
else if (type1 != MediaWrapper.TYPE_DIR && type2 == MediaWrapper.TYPE_DIR) return@Comparator 1
item1?.title?.toLowerCase()?.compareTo(item2?.title?.toLowerCase() ?: "") ?: -1
item1?.title?.lowercase(Locale.getDefault())?.compareTo(item2?.title?.lowercase(Locale.getDefault()) ?: "") ?: -1
}
}
val tvDescComp by lazy {
@ -278,6 +278,6 @@ val tvDescComp by lazy {
val type2 = (item2 as? MediaWrapper)?.type
if (type1 == MediaWrapper.TYPE_DIR && type2 != MediaWrapper.TYPE_DIR) return@Comparator -1
else if (type1 != MediaWrapper.TYPE_DIR && type2 == MediaWrapper.TYPE_DIR) return@Comparator 1
item2?.title?.toLowerCase()?.compareTo(item1?.title?.toLowerCase() ?: "") ?: -1
item2?.title?.lowercase(Locale.getDefault())?.compareTo(item1?.title?.lowercase(Locale.getDefault()) ?: "") ?: -1
}
}

12
application/vlc-android/src/org/videolan/vlc/viewmodels/PreferenceSearchModel.kt

@ -67,8 +67,8 @@ class PreferenceSearchModel(context: Context) : ViewModel() {
filtered.value = arrayListOf()
else
filtered.value = dataset.getList().filter {
getTitle(it).toLowerCase(Locale.getDefault()).contains(query)
|| getSummary(it).toLowerCase(Locale.getDefault()).contains(query)
getTitle(it).lowercase(Locale.getDefault()).contains(query)
|| getSummary(it).lowercase(Locale.getDefault()).contains(query)
}.sortedWith { i0, i1 ->
score(i1, query) - score(i0, query)
}.toMutableList()
@ -90,10 +90,10 @@ class PreferenceSearchModel(context: Context) : ViewModel() {
*/
private fun score(item: PreferenceItem, query: String): Int {
var score = 0
if (getSummary(item).toLowerCase(Locale.getDefault()).contains(query)) score += 1
if (getTitle(item).toLowerCase(Locale.getDefault()).contains(query)) score += 10
if (getSummary(item).toLowerCase(Locale.getDefault()).split(" ").any { it.startsWith(query) }) score += 100
if (getTitle(item).toLowerCase(Locale.getDefault()).split(" ").any { it.startsWith(query) }) score += 1000
if (getSummary(item).lowercase(Locale.getDefault()).contains(query)) score += 1
if (getTitle(item).lowercase(Locale.getDefault()).contains(query)) score += 10
if (getSummary(item).lowercase(Locale.getDefault()).split(" ").any { it.startsWith(query) }) score += 100
if (getTitle(item).lowercase(Locale.getDefault()).split(" ").any { it.startsWith(query) }) score += 1000
return score
}

Loading…
Cancel
Save