mirror of
https://github.com/ReVanced/revanced-manager.git
synced 2026-01-18 08:43:56 +00:00
fix(locales): use buildconfig instead of generating kt file
This commit is contained in:
@@ -143,6 +143,19 @@ android {
|
|||||||
(preRelease?.substringAfterLast('.')?.toInt() ?: 99)
|
(preRelease?.substringAfterLast('.')?.toInt() ?: 99)
|
||||||
}
|
}
|
||||||
vectorDrawables.useSupportLibrary = true
|
vectorDrawables.useSupportLibrary = true
|
||||||
|
|
||||||
|
val resDir = file("src/main/res")
|
||||||
|
val locales = resDir.listFiles()
|
||||||
|
.orEmpty()
|
||||||
|
//noinspection WrongGradleMethod
|
||||||
|
.filter { it.isDirectory && it.name.matches(Regex("values-[a-z]{2}(-r[A-Z]{2})?")) }
|
||||||
|
//noinspection WrongGradleMethod
|
||||||
|
.map { it.name.removePrefix("values-").replace("-r", "-") }
|
||||||
|
.sorted()
|
||||||
|
//noinspection WrongGradleMethod
|
||||||
|
.joinToString(prefix = "{", separator = ",", postfix = "}") { "\"$it\"" }
|
||||||
|
|
||||||
|
buildConfigField("String[]", "SUPPORTED_LOCALES", locales)
|
||||||
}
|
}
|
||||||
|
|
||||||
buildTypes {
|
buildTypes {
|
||||||
@@ -230,10 +243,8 @@ android {
|
|||||||
buildConfig = true
|
buildConfig = true
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
androidResources {
|
||||||
androidResources {
|
generateLocaleConfig = true
|
||||||
generateLocaleConfig = true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
externalNativeBuild {
|
externalNativeBuild {
|
||||||
@@ -242,8 +253,6 @@ android {
|
|||||||
version = "3.22.1"
|
version = "3.22.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceSets["main"].kotlin.srcDir(layout.buildDirectory.dir("generated/source/locales"))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
@@ -251,46 +260,6 @@ kotlin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tasks {
|
tasks {
|
||||||
val generateSupportedLocales by registering {
|
|
||||||
description = "Generate list of supported locales from resource directories"
|
|
||||||
|
|
||||||
val resDir = file("src/main/res")
|
|
||||||
val outputDir = layout.buildDirectory.dir("generated/source/locales")
|
|
||||||
|
|
||||||
inputs.dir(resDir)
|
|
||||||
outputs.dir(outputDir)
|
|
||||||
|
|
||||||
doLast {
|
|
||||||
val locales = resDir.listFiles()
|
|
||||||
.orEmpty()
|
|
||||||
.filter { it.isDirectory && it.name.matches(Regex("values-[a-z]{2}(-r[A-Z]{2})?")) }
|
|
||||||
.map { it.name.removePrefix("values-").replace("-r", "-") }
|
|
||||||
.sorted()
|
|
||||||
.joinToString("\n ") { "Locale.forLanguageTag(\"$it\")," }
|
|
||||||
|
|
||||||
val output = outputDir.get().asFile.resolve("app/revanced/manager/util/GeneratedLocales.kt")
|
|
||||||
output.parentFile.mkdirs()
|
|
||||||
output.writeText(
|
|
||||||
"""
|
|
||||||
|package app.revanced.manager.util
|
|
||||||
|
|
|
||||||
|import java.util.Locale
|
|
||||||
|
|
|
||||||
|object GeneratedLocales {
|
|
||||||
| val SUPPORTED_LOCALES = listOf(
|
|
||||||
| Locale.ENGLISH,$locales
|
|
||||||
| )
|
|
||||||
|}
|
|
||||||
""".trimMargin()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
preBuild {
|
|
||||||
dependsOn(generateSupportedLocales)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Needed by gradle-semantic-release-plugin.
|
// Needed by gradle-semantic-release-plugin.
|
||||||
// Tracking: https://github.com/KengoTODA/gradle-semantic-release-plugin/issues/435.
|
// Tracking: https://github.com/KengoTODA/gradle-semantic-release-plugin/issues/435.
|
||||||
val publish by registering {
|
val publish by registering {
|
||||||
|
|||||||
@@ -1,21 +1,22 @@
|
|||||||
package app.revanced.manager.util
|
package app.revanced.manager.util
|
||||||
|
|
||||||
|
import android.app.LocaleConfig
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.LocaleList
|
import android.os.LocaleList
|
||||||
import androidx.appcompat.app.AppCompatDelegate
|
import androidx.appcompat.app.AppCompatDelegate
|
||||||
import androidx.core.os.LocaleListCompat
|
import androidx.core.os.LocaleListCompat
|
||||||
|
import app.revanced.manager.BuildConfig
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
object SupportedLocales {
|
object SupportedLocales {
|
||||||
fun getSupportedLocales(context: Context): List<Locale> {
|
fun getSupportedLocales(context: Context): List<Locale> {
|
||||||
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
var result: List<Locale>? = null
|
||||||
runCatching {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) result = runCatching {
|
||||||
android.app.LocaleConfig(context).supportedLocales?.toList()
|
LocaleConfig(context).supportedLocales?.toList()
|
||||||
}.getOrNull() ?: GeneratedLocales.SUPPORTED_LOCALES
|
}.getOrNull()
|
||||||
} else {
|
|
||||||
GeneratedLocales.SUPPORTED_LOCALES
|
return result ?: generated
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getCurrentLocale(): Locale? =
|
fun getCurrentLocale(): Locale? =
|
||||||
@@ -29,4 +30,11 @@ object SupportedLocales {
|
|||||||
locale.getDisplayName(locale).replaceFirstChar { it.uppercase(locale) }
|
locale.getDisplayName(locale).replaceFirstChar { it.uppercase(locale) }
|
||||||
|
|
||||||
private fun LocaleList.toList() = (0 until size()).map { get(it) }
|
private fun LocaleList.toList() = (0 until size()).map { get(it) }
|
||||||
|
|
||||||
|
private val generated by lazy {
|
||||||
|
listOf(
|
||||||
|
Locale.ENGLISH,
|
||||||
|
*BuildConfig.SUPPORTED_LOCALES.map(Locale::forLanguageTag).toTypedArray()
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user