Fix crash with locales sorting
This commit is contained in:
@@ -2,6 +2,7 @@ package org.koitharu.kotatsu.core.util.ext
|
|||||||
|
|
||||||
import androidx.collection.ArrayMap
|
import androidx.collection.ArrayMap
|
||||||
import androidx.collection.ArraySet
|
import androidx.collection.ArraySet
|
||||||
|
import org.koitharu.kotatsu.BuildConfig
|
||||||
import java.util.Collections
|
import java.util.Collections
|
||||||
import java.util.EnumSet
|
import java.util.EnumSet
|
||||||
|
|
||||||
@@ -57,3 +58,13 @@ inline fun <reified E : Enum<E>> Collection<E>.toEnumSet(): EnumSet<E> = if (isE
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun <E : Enum<E>> Collection<E>.sortedByOrdinal() = sortedBy { it.ordinal }
|
fun <E : Enum<E>> Collection<E>.sortedByOrdinal() = sortedBy { it.ordinal }
|
||||||
|
|
||||||
|
fun <T> Iterable<T>.sortedWithSafe(comparator: Comparator<in T>): List<T> = try {
|
||||||
|
sortedWith(comparator)
|
||||||
|
} catch (e: IllegalArgumentException) {
|
||||||
|
if (BuildConfig.DEBUG) {
|
||||||
|
throw e
|
||||||
|
} else {
|
||||||
|
toList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import org.koitharu.kotatsu.core.util.LocaleComparator
|
|||||||
import org.koitharu.kotatsu.core.util.ext.getLocalesConfig
|
import org.koitharu.kotatsu.core.util.ext.getLocalesConfig
|
||||||
import org.koitharu.kotatsu.core.util.ext.postDelayed
|
import org.koitharu.kotatsu.core.util.ext.postDelayed
|
||||||
import org.koitharu.kotatsu.core.util.ext.setDefaultValueCompat
|
import org.koitharu.kotatsu.core.util.ext.setDefaultValueCompat
|
||||||
|
import org.koitharu.kotatsu.core.util.ext.sortedWithSafe
|
||||||
import org.koitharu.kotatsu.core.util.ext.toList
|
import org.koitharu.kotatsu.core.util.ext.toList
|
||||||
import org.koitharu.kotatsu.parsers.util.names
|
import org.koitharu.kotatsu.parsers.util.names
|
||||||
import org.koitharu.kotatsu.parsers.util.toTitleCase
|
import org.koitharu.kotatsu.parsers.util.toTitleCase
|
||||||
@@ -107,7 +108,7 @@ class AppearanceSettingsFragment :
|
|||||||
private fun initLocalePicker(preference: ListPreference) {
|
private fun initLocalePicker(preference: ListPreference) {
|
||||||
val locales = preference.context.getLocalesConfig()
|
val locales = preference.context.getLocalesConfig()
|
||||||
.toList()
|
.toList()
|
||||||
.sortedWith(LocaleComparator())
|
.sortedWithSafe(LocaleComparator())
|
||||||
preference.entries = Array(locales.size + 1) { i ->
|
preference.entries = Array(locales.size + 1) { i ->
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
getString(R.string.automatic)
|
getString(R.string.automatic)
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import kotlinx.coroutines.flow.MutableStateFlow
|
|||||||
import org.koitharu.kotatsu.core.ui.BaseViewModel
|
import org.koitharu.kotatsu.core.ui.BaseViewModel
|
||||||
import org.koitharu.kotatsu.core.util.ext.map
|
import org.koitharu.kotatsu.core.util.ext.map
|
||||||
import org.koitharu.kotatsu.core.util.ext.mapToSet
|
import org.koitharu.kotatsu.core.util.ext.mapToSet
|
||||||
|
import org.koitharu.kotatsu.core.util.ext.sortedWithSafe
|
||||||
import org.koitharu.kotatsu.explore.data.MangaSourcesRepository
|
import org.koitharu.kotatsu.explore.data.MangaSourcesRepository
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||||
import org.koitharu.kotatsu.parsers.util.mapNotNullToSet
|
import org.koitharu.kotatsu.parsers.util.mapNotNullToSet
|
||||||
@@ -78,7 +79,7 @@ class OnboardViewModel @Inject constructor(
|
|||||||
summary = srcs.joinToString { it.title },
|
summary = srcs.joinToString { it.title },
|
||||||
isChecked = key in selectedLocales,
|
isChecked = key in selectedLocales,
|
||||||
)
|
)
|
||||||
}.sortedWith(SourceLocaleComparator())
|
}.sortedWithSafe(SourceLocaleComparator())
|
||||||
}
|
}
|
||||||
|
|
||||||
private class SourceLocaleComparator : Comparator<SourceLocale?> {
|
private class SourceLocaleComparator : Comparator<SourceLocale?> {
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import org.koitharu.kotatsu.core.ui.util.ReversibleAction
|
|||||||
import org.koitharu.kotatsu.core.util.LocaleComparator
|
import org.koitharu.kotatsu.core.util.LocaleComparator
|
||||||
import org.koitharu.kotatsu.core.util.ext.MutableEventFlow
|
import org.koitharu.kotatsu.core.util.ext.MutableEventFlow
|
||||||
import org.koitharu.kotatsu.core.util.ext.call
|
import org.koitharu.kotatsu.core.util.ext.call
|
||||||
|
import org.koitharu.kotatsu.core.util.ext.sortedWithSafe
|
||||||
import org.koitharu.kotatsu.explore.data.MangaSourcesRepository
|
import org.koitharu.kotatsu.explore.data.MangaSourcesRepository
|
||||||
import org.koitharu.kotatsu.parsers.model.ContentType
|
import org.koitharu.kotatsu.parsers.model.ContentType
|
||||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||||
@@ -82,6 +83,6 @@ class SourcesCatalogViewModel @Inject constructor(
|
|||||||
private fun getLocalesImpl(): List<Locale?> {
|
private fun getLocalesImpl(): List<Locale?> {
|
||||||
return repository.allMangaSources
|
return repository.allMangaSources
|
||||||
.mapToSet { it.locale?.let(::Locale) }
|
.mapToSet { it.locale?.let(::Locale) }
|
||||||
.sortedWith(LocaleComparator())
|
.sortedWithSafe(LocaleComparator())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user