Added country/region support for locale when displayed for sources (#1240)

* Added country support for locale when displayed for sources

* code review changes/comments fix
This commit is contained in:
Carlos 2018-03-05 13:46:18 -05:00 committed by inorichi
parent 50e0cb65d9
commit 1b7a0de745
6 changed files with 40 additions and 32 deletions

View File

@ -2,21 +2,14 @@ package eu.kanade.tachiyomi.ui.catalogue
import android.view.View import android.view.View
import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
import eu.kanade.tachiyomi.util.LocaleHelper
import kotlinx.android.synthetic.main.catalogue_main_controller_card.* import kotlinx.android.synthetic.main.catalogue_main_controller_card.*
import java.util.*
class LangHolder(view: View, adapter: FlexibleAdapter<*>) : class LangHolder(view: View, adapter: FlexibleAdapter<*>) :
BaseFlexibleViewHolder(view, adapter, true) { BaseFlexibleViewHolder(view, adapter, true) {
fun bind(item: LangItem) { fun bind(item: LangItem) {
title.text = when { title.text = LocaleHelper.getDisplayName(item.code, itemView.context)
item.code == "" -> itemView.context.getString(R.string.other_source)
else -> {
val locale = Locale(item.code)
locale.getDisplayName(locale).capitalize()
}
}
} }
} }

View File

@ -22,6 +22,7 @@ import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.online.LoginSource import eu.kanade.tachiyomi.source.online.LoginSource
import eu.kanade.tachiyomi.ui.base.controller.NucleusController import eu.kanade.tachiyomi.ui.base.controller.NucleusController
import eu.kanade.tachiyomi.ui.setting.preferenceCategory import eu.kanade.tachiyomi.ui.setting.preferenceCategory
import eu.kanade.tachiyomi.util.LocaleHelper
import eu.kanade.tachiyomi.widget.preference.LoginPreference import eu.kanade.tachiyomi.widget.preference.LoginPreference
import eu.kanade.tachiyomi.widget.preference.SourceLoginDialog import eu.kanade.tachiyomi.widget.preference.SourceLoginDialog
import kotlinx.android.synthetic.main.extension_detail_controller.* import kotlinx.android.synthetic.main.extension_detail_controller.*
@ -62,7 +63,7 @@ class ExtensionDetailsController(bundle: Bundle? = null) :
extension_title.text = extension.name extension_title.text = extension.name
extension_version.text = context.getString(R.string.ext_version_info, extension.versionName) extension_version.text = context.getString(R.string.ext_version_info, extension.versionName)
extension_lang.text = context.getString(R.string.ext_language_info, extension.getLocalizedLang(context)) extension_lang.text = context.getString(R.string.ext_language_info, LocaleHelper.getDisplayName(extension.lang, context))
extension_pkg.text = extension.pkgName extension_pkg.text = extension.pkgName
extension.getApplicationIcon(context)?.let { extension_icon.setImageDrawable(it) } extension.getApplicationIcon(context)?.let { extension_icon.setImageDrawable(it) }
extension_uninstall_button.clicks().subscribeUntilDestroy { extension_uninstall_button.clicks().subscribeUntilDestroy {
@ -122,8 +123,8 @@ class ExtensionDetailsController(bundle: Bundle? = null) :
val dataStore = SharedPreferencesDataStore(/*if (source is HttpSource) { val dataStore = SharedPreferencesDataStore(/*if (source is HttpSource) {
source.preferences source.preferences
} else {*/ } else {*/
context.getSharedPreferences("source_${source.id}", Context.MODE_PRIVATE) context.getSharedPreferences("source_${source.id}", Context.MODE_PRIVATE)
/*}*/) /*}*/)
if (source is ConfigurableSource) { if (source is ConfigurableSource) {
if (multiSource) { if (multiSource) {

View File

@ -7,6 +7,7 @@ import eu.kanade.tachiyomi.extension.model.Extension
import eu.kanade.tachiyomi.extension.model.InstallStep import eu.kanade.tachiyomi.extension.model.InstallStep
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
import eu.kanade.tachiyomi.ui.base.holder.SlicedHolder import eu.kanade.tachiyomi.ui.base.holder.SlicedHolder
import eu.kanade.tachiyomi.util.LocaleHelper
import io.github.mthli.slice.Slice import io.github.mthli.slice.Slice
import kotlinx.android.synthetic.main.extension_card_item.* import kotlinx.android.synthetic.main.extension_card_item.*
@ -35,7 +36,7 @@ class ExtensionHolder(view: View, override val adapter: ExtensionAdapter) :
ext_title.text = extension.name ext_title.text = extension.name
version.text = extension.versionName version.text = extension.versionName
lang.text = if (extension !is Extension.Untrusted) { lang.text = if (extension !is Extension.Untrusted) {
extension.getLocalizedLang(itemView.context) LocaleHelper.getDisplayName(extension.lang, itemView.context)
} else { } else {
itemView.context.getString(R.string.ext_untrusted).toUpperCase() itemView.context.getString(R.string.ext_untrusted).toUpperCase()
} }

View File

@ -3,21 +3,7 @@ package eu.kanade.tachiyomi.ui.extension
import android.content.Context import android.content.Context
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.extension.model.Extension
import java.util.*
fun Extension.getLocalizedLang(context: Context): String {
return when (lang) {
null -> ""
"" -> context.getString(R.string.other_source)
"all" -> context.getString(R.string.all_lang)
else -> {
val locale = Locale(lang)
locale.getDisplayName(locale).capitalize()
}
}
}
fun Extension.getApplicationIcon(context: Context): Drawable? { fun Extension.getApplicationIcon(context: Context): Drawable? {
return try { return try {

View File

@ -8,6 +8,7 @@ import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.source.online.HttpSource
import eu.kanade.tachiyomi.source.online.LoginSource import eu.kanade.tachiyomi.source.online.LoginSource
import eu.kanade.tachiyomi.util.LocaleHelper
import eu.kanade.tachiyomi.widget.preference.LoginCheckBoxPreference import eu.kanade.tachiyomi.widget.preference.LoginCheckBoxPreference
import eu.kanade.tachiyomi.widget.preference.SourceLoginDialog import eu.kanade.tachiyomi.widget.preference.SourceLoginDialog
import eu.kanade.tachiyomi.widget.preference.SwitchPreferenceCategory import eu.kanade.tachiyomi.widget.preference.SwitchPreferenceCategory
@ -39,7 +40,7 @@ class SettingsSourcesController : SettingsController(),
// Create a preference group and set initial state and change listener // Create a preference group and set initial state and change listener
SwitchPreferenceCategory(context).apply { SwitchPreferenceCategory(context).apply {
preferenceScreen.addPreference(this) preferenceScreen.addPreference(this)
title = Locale(lang).let { it.getDisplayLanguage(it).capitalize() } title = LocaleHelper.getDisplayName(lang, context)
isPersistent = false isPersistent = false
if (lang in activeLangsCodes) { if (lang in activeLangsCodes) {
setChecked(true) setChecked(true)

View File

@ -1,10 +1,12 @@
package eu.kanade.tachiyomi.util package eu.kanade.tachiyomi.util
import android.app.Application import android.app.Application
import android.content.Context
import android.content.res.Configuration import android.content.res.Configuration
import android.os.Build import android.os.Build
import android.os.LocaleList import android.os.LocaleList
import android.view.ContextThemeWrapper import android.view.ContextThemeWrapper
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
import java.util.* import java.util.*
@ -45,10 +47,34 @@ object LocaleHelper {
if (pref.isNullOrEmpty()) { if (pref.isNullOrEmpty()) {
return null return null
} }
val parts = pref.split("_", "-") return getLocale(pref)
val lang = parts[0] }
val country = parts.getOrNull(1) ?: ""
return Locale(lang, country) /**
* Returns Display name of a string language code
*/
fun getDisplayName(lang: String?, context: Context): String {
return when (lang) {
null -> ""
"" -> context.getString(R.string.other_source)
"all" -> context.getString(R.string.all_lang)
else -> {
val locale = getLocale(lang)
locale.getDisplayName(locale).capitalize()
}
}
}
/*Return Locale from string language code
*/
private fun getLocale(lang: String): Locale {
val sp = lang.split("_", "-")
return when (sp.size) {
2 -> Locale(sp[0], sp[1])
3 -> Locale(sp[0], sp[1], sp[2])
else -> Locale(lang)
}
} }
/** /**