Skip to content

Commit

Permalink
ref: use enum for supported language codes (#3917)
Browse files Browse the repository at this point in the history
  • Loading branch information
naivekook committed Apr 3, 2021
1 parent c69f14d commit 029ccfd
Show file tree
Hide file tree
Showing 6 changed files with 125 additions and 224 deletions.
Expand Up @@ -213,8 +213,8 @@ class ImagesManageActivity : BaseActivity() {
addedLanguages.add(currentLanguage)
languageForImage.add(getLanguageData(currentLanguage, false))
}
val localeValues = resources.getStringArray(R.array.languages_array)
val otherNotSupportedCode = localeValues.filter { it !in addedLanguages }

val otherNotSupportedCode = SupportedLanguages.codes().filter { it !in addedLanguages }

languageForImage.addAll(getLanguageData(otherNotSupportedCode, false))
val adapter = LanguageDataAdapter(this, R.layout.simple_spinner_item_white, languageForImage)
Expand Down
Expand Up @@ -57,10 +57,8 @@ import openfoodfacts.github.scrachx.openfood.BuildConfig
import openfoodfacts.github.scrachx.openfood.R
import openfoodfacts.github.scrachx.openfood.analytics.AnalyticsEvent
import openfoodfacts.github.scrachx.openfood.analytics.MatomoAnalytics
import openfoodfacts.github.scrachx.openfood.app.OFFApplication
import openfoodfacts.github.scrachx.openfood.customtabs.CustomTabActivityHelper
import openfoodfacts.github.scrachx.openfood.customtabs.WebViewFallback
import openfoodfacts.github.scrachx.openfood.features.scan.ContinuousScanActivity
import openfoodfacts.github.scrachx.openfood.jobs.LoadTaxonomiesWorker
import openfoodfacts.github.scrachx.openfood.jobs.OfflineProductWorker.Companion.scheduleSync
import openfoodfacts.github.scrachx.openfood.models.DaoSession
Expand All @@ -69,13 +67,9 @@ import openfoodfacts.github.scrachx.openfood.models.entities.analysistagconfig.A
import openfoodfacts.github.scrachx.openfood.models.entities.analysistagconfig.AnalysisTagConfigDao
import openfoodfacts.github.scrachx.openfood.models.entities.country.CountryName
import openfoodfacts.github.scrachx.openfood.models.entities.country.CountryNameDao
import openfoodfacts.github.scrachx.openfood.utils.INavigationItem
import openfoodfacts.github.scrachx.openfood.utils.*
import openfoodfacts.github.scrachx.openfood.utils.LocaleHelper.getLanguage
import openfoodfacts.github.scrachx.openfood.utils.LocaleHelper.getLocale
import openfoodfacts.github.scrachx.openfood.utils.NavigationDrawerListener
import openfoodfacts.github.scrachx.openfood.utils.NavigationDrawerListener.NavigationDrawerType
import openfoodfacts.github.scrachx.openfood.utils.SearchSuggestionProvider
import openfoodfacts.github.scrachx.openfood.utils.requirePreference
import org.greenrobot.greendao.async.AsyncOperation
import org.greenrobot.greendao.async.AsyncOperationListener
import org.greenrobot.greendao.query.WhereCondition.StringCondition
Expand Down Expand Up @@ -107,33 +101,7 @@ class PreferencesFragment : PreferenceFragmentCompat(), INavigationItem, OnShare

val settings = requireActivity().getSharedPreferences("prefs", 0)

val finalLocalLangs = mutableListOf<String>()
val finalLocalLabels = mutableListOf<String?>()

val languages = requireActivity().resources.getStringArray(R.array.languages_array)
val localeLabels = arrayOfNulls<String>(languages.size)

languages.withIndex().forEach { (i, lang) ->
val current = getLocale(lang)
localeLabels[i] = current.getDisplayName(current).capitalize(Locale.getDefault())
finalLocalLabels += localeLabels[i]
finalLocalLangs += lang
}

requirePreference<ListPreference>(getString(R.string.pref_language_key)).let {
it.entries = finalLocalLabels.toTypedArray()
it.entryValues = finalLocalLangs.toTypedArray()
it.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _: Preference?, locale: Any? ->
val configuration = requireActivity().resources.configuration
Toast.makeText(context, getString(R.string.changes_saved), Toast.LENGTH_SHORT).show()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
configuration.setLocale(getLocale(locale as String?))
requireActivity().recreate()
}
true
}
}

initLanguageCell()

requirePreference<ListPreference>(getString(R.string.pref_app_theme_key)).let {
it.setEntries(R.array.application_theme_entries)
Expand Down Expand Up @@ -434,6 +402,28 @@ class PreferencesFragment : PreferenceFragmentCompat(), INavigationItem, OnShare
.addTo(disp)
}

private fun initLanguageCell() {
val localesWithNames = SupportedLanguages.codes()
.map {
val locale = LocaleHelper.getLocale(it)
it to locale.getDisplayName(locale).capitalize(locale)
}

requirePreference<ListPreference>(getString(R.string.pref_language_key)).let { preference ->
preference.entries = localesWithNames.map { it.second }.toTypedArray()
preference.entryValues = localesWithNames.map { it.first }.toTypedArray()
preference.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _: Preference?, locale: Any? ->
val configuration = requireActivity().resources.configuration
Toast.makeText(context, getString(R.string.changes_saved), Toast.LENGTH_SHORT).show()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
configuration.setLocale(LocaleHelper.getLocale(locale as String?))
requireActivity().recreate()
}
true
}
}
}

companion object {
const val LOGIN_PREF = "login"
fun newInstance() = PreferencesFragment().apply { arguments = Bundle() }
Expand Down
Expand Up @@ -852,7 +852,7 @@ class ProductEditOverviewFragment : ProductEditFragment() {
}

private fun selectProductLanguage() {
val localeValues = requireActivity().resources.getStringArray(R.array.languages_array)
val localeValues = SupportedLanguages.codes()
val localeLabels = arrayOfNulls<String>(localeValues.size)
val finalLocalValues = ArrayList<String>()
val finalLocalLabels = ArrayList<String?>()
Expand Down
@@ -0,0 +1,98 @@
package openfoodfacts.github.scrachx.openfood.utils

@Suppress("unused")
enum class SupportedLanguages(val code: String) {
AA("aa"),
ACH("ach"),
AF("af"),
AK("ak"),
AM("am"),
AR("ar"),
AS("as"),
AST("ast"),
AZ("az"),
B_SR_CYRL("b+sr+Cyrl"),
B_SR_LATN("b+sr+Latn"),
BE("be"),
BN("bn"),
BG("bg"),
CA("ca"),
CS("cs"),
DA("da"),
DE("de"),
EL("el"),
EN("en"),
EO("eo"),
ES("es"),
ET("et"),
EU("eu"),
FA("fa"),
FI("fi"),
FIL("fil"),
FR("fr"),
GA("ga"),
GL("gl"),
GU("gu"),
HE("he"),
HI("hi"),
HU("hu"),
HR("hr"),
HY("hy"),
ID("id"),
IT("it"),
IS("is"),
JA("ja"),
KAB("kab"),
KK("kk"),
KM("km"),
KO("ko"),
KU("ku"),
LO("lo"),
LT("lt"),
LV("lv"),
MG("mg"),
ML("ml"),
MN("mn"),
MS("ms"),
MT("mt"),
MY("my"),
NE("ne"),
NO("no"),
NB("nb"),
NL_BE("nl-BE"),
NL("nl"),
PL("pl"),
PT_BR("pt-BR"),
PT("pt"),
RO("ro"),
RU("ru"),
SI("si"),
SL("sl"),
SK("sk"),
SV("sv"),
TA("ta"),
TE("te"),
TG("tg"),
TH("th"),
TI("ti"),
TL("tl"),
TR("tr"),
UG("ug"),
UK("uk"),
UZ("uz"),
VI("vi"),
WA("wa"),
WO("wo"),
XH("xh"),
YI("yi"),
YO("yo"),
ZH_CN("zh-CN"),
ZH_HK("zh-HK"),
ZH_TW("zh-TW"),
ZH("zh"),
ZU("zu");

companion object {
fun codes() = values().map { it.code }
}
}
93 changes: 0 additions & 93 deletions app/src/main/res/values-en/strings.xml
Expand Up @@ -209,99 +209,6 @@
<item>Zinc</item>
</string-array>

<!-- Text units -->
<string-array name="languages_array" translatable="false">
<item>aa</item>
<item>ach</item>
<item>af</item>
<item>ak</item>
<item>am</item>
<item>ar</item>
<item>as</item>
<item>ast</item>
<item>az</item>
<item>b+sr+Cyrl</item>
<item>b+sr+Latn</item>
<item>be</item>
<item>bn</item>
<item>bg</item>
<item>ca</item>
<item>cs</item>
<item>da</item>
<item>de</item>
<item>el</item>
<item>en</item>
<item>eo</item>
<item>es</item>
<item>et</item>
<item>eu</item>
<item>fa</item>
<item>fi</item>
<item>fil</item>
<item>fr</item>
<item>ga</item>
<item>gl</item>
<item>gu</item>
<item>he</item>
<item>hi</item>
<item>hu</item>
<item>hr</item>
<item>hy</item>
<item>id</item>
<item>it</item>
<item>is</item>
<item>ja</item>
<item>kab</item>
<item>kk</item>
<item>km</item>
<item>ko</item>
<item>ku</item>
<item>lo</item>
<item>lt</item>
<item>lv</item>
<item>mg</item>
<item>ml</item>
<item>mn</item>
<item>ms</item>
<item>mt</item>
<item>my</item>
<item>ne</item>
<item>no</item>
<item>nb</item>
<item>nl-BE</item>
<item>nl</item>
<item>pl</item>
<item>pt-BR</item>
<item>pt</item>
<item>ro</item>
<item>ru</item>
<item>si</item>
<item>sl</item>
<item>sk</item>
<item>sv</item>
<item>ta</item>
<item>te</item>
<item>tg</item>
<item>th</item>
<item>ti</item>
<item>tl</item>
<item>tr</item>
<item>ug</item>
<item>uk</item>
<item>uz</item>
<item>vi</item>
<item>wa</item>
<item>wo</item>
<item>xh</item>
<item>yi</item>
<item>yo</item>
<item>zh-CN</item>
<item>zh-HK</item>
<item>zh-TW</item>
<item>zh</item>
<item>zu</item>
</string-array>

<string name="help_translate_ingredients_link" translatable="false">https://world-%1$s.openfoodfacts.org/ingredients?translate=1</string>

<!-- Content Description -->
Expand Down

0 comments on commit 029ccfd

Please sign in to comment.