forked from MarcoBuster/Magisk
50 lines
1.5 KiB
Kotlin
50 lines
1.5 KiB
Kotlin
package com.topjohnwu.magisk.utils
|
|
|
|
import android.annotation.SuppressLint
|
|
import android.content.res.Configuration
|
|
import android.content.res.Resources
|
|
import com.topjohnwu.magisk.R
|
|
import com.topjohnwu.magisk.ResourceMgr
|
|
import com.topjohnwu.magisk.extensions.langTagToLocale
|
|
import io.reactivex.Single
|
|
import java.util.*
|
|
import kotlin.Comparator
|
|
|
|
var currentLocale: Locale = Locale.getDefault()
|
|
|
|
@SuppressLint("ConstantLocale")
|
|
val defaultLocale: Locale = Locale.getDefault()
|
|
|
|
@Suppress("DEPRECATION")
|
|
val availableLocales = Single.fromCallable {
|
|
val compareId = R.string.app_changelog
|
|
mutableListOf<Locale>().apply {
|
|
// Add default locale
|
|
add(Locale.ENGLISH)
|
|
|
|
// Add some special locales
|
|
add(Locale.TAIWAN)
|
|
add(Locale("pt", "BR"))
|
|
|
|
val config = Configuration()
|
|
val metrics = ResourceMgr.resource.displayMetrics
|
|
val res = Resources(ResourceMgr.resource.assets, metrics, config)
|
|
|
|
// Other locales
|
|
val otherLocales = ResourceMgr.resource.assets.locales
|
|
.map { it.langTagToLocale() }
|
|
.distinctBy {
|
|
config.setLocale(it)
|
|
res.updateConfiguration(config, metrics)
|
|
res.getString(compareId)
|
|
}
|
|
|
|
listOf("", "").toTypedArray()
|
|
|
|
addAll(otherLocales)
|
|
}.sortedWith(Comparator { a, b ->
|
|
a.getDisplayName(a).toLowerCase(a)
|
|
.compareTo(b.getDisplayName(b).toLowerCase(b))
|
|
})
|
|
}.cache()!!
|