mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 14:27:57 +01:00 
			
		
		
		
	Enable sub-languages on app first run (#7127)
* Enable sub-languages on app first run. * Fix wrong language code string parsing. * Fix some build issues due to rebase. * Use PreferenceHelper and remove an extra preference. * Remove a constant.
This commit is contained in:
		| @@ -17,6 +17,7 @@ import eu.kanade.tachiyomi.ui.library.setting.LibrarySort | ||||
| import eu.kanade.tachiyomi.ui.reader.setting.OrientationType | ||||
| import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType | ||||
| import eu.kanade.tachiyomi.util.system.DeviceUtil | ||||
| import eu.kanade.tachiyomi.util.system.LocaleHelper | ||||
| import eu.kanade.tachiyomi.util.system.isDevFlavor | ||||
| import eu.kanade.tachiyomi.widget.ExtendedNavigationView | ||||
| import java.io.File | ||||
| @@ -170,7 +171,7 @@ class PreferencesHelper(val context: Context) { | ||||
|  | ||||
|     fun sourceDisplayMode() = flowPrefs.getObject("pref_display_mode_catalogue", LibraryDisplayMode.Serializer, LibraryDisplayMode.default) | ||||
|  | ||||
|     fun enabledLanguages() = flowPrefs.getStringSet("source_languages", setOf("all", "en", Locale.getDefault().language)) | ||||
|     fun enabledLanguages() = flowPrefs.getStringSet("source_languages", LocaleHelper.getDefaultEnabledLanguages()) | ||||
|  | ||||
|     fun trackUsername(sync: TrackService) = prefs.getString(Keys.trackUsername(sync.id), "") | ||||
|  | ||||
|   | ||||
| @@ -7,6 +7,7 @@ import eu.kanade.domain.source.model.SourceData | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.preference.PreferencesHelper | ||||
| import eu.kanade.tachiyomi.extension.api.ExtensionGithubApi | ||||
| import eu.kanade.tachiyomi.extension.model.AvailableSources | ||||
| import eu.kanade.tachiyomi.extension.model.Extension | ||||
| import eu.kanade.tachiyomi.extension.model.InstallStep | ||||
| import eu.kanade.tachiyomi.extension.model.LoadResult | ||||
| @@ -27,6 +28,7 @@ import logcat.LogPriority | ||||
| import rx.Observable | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
| import java.util.Locale | ||||
|  | ||||
| /** | ||||
|  * The manager of extensions installed as another apk which extend the available sources. It handles | ||||
| @@ -72,6 +74,8 @@ class ExtensionManager( | ||||
|  | ||||
|     private val installedExtensionsFlow = MutableStateFlow(installedExtensions) | ||||
|  | ||||
|     private var subLanguagesEnabledOnFirstRun = preferences.enabledLanguages().isSet() | ||||
|  | ||||
|     fun getInstalledExtensionsFlow(): StateFlow<List<Extension.Installed>> { | ||||
|         return installedExtensionsFlow.asStateFlow() | ||||
|     } | ||||
| @@ -163,9 +167,41 @@ class ExtensionManager( | ||||
|             emptyList() | ||||
|         } | ||||
|  | ||||
|         enableAdditionalSubLanguages(extensions) | ||||
|  | ||||
|         availableExtensions = extensions | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Enables the additional sub-languages in the app first run. This addresses | ||||
|      * the issue where users still need to enable some specific languages even when | ||||
|      * the device language is inside that major group. As an example, if a user | ||||
|      * has a zh device language, the app will also enable zh-Hans and zh-Hant. | ||||
|      * | ||||
|      * If the user have already changed the enabledLanguages preference value once, | ||||
|      * the new languages will not be added to respect the user enabled choices. | ||||
|      */ | ||||
|     private fun enableAdditionalSubLanguages(extensions: List<Extension.Available>) { | ||||
|         if (subLanguagesEnabledOnFirstRun || extensions.isEmpty()) { | ||||
|             return | ||||
|         } | ||||
|  | ||||
|         // Use the source lang as some aren't present on the extension level. | ||||
|         val availableLanguages = extensions | ||||
|             .flatMap(Extension.Available::sources) | ||||
|             .distinctBy(AvailableSources::lang) | ||||
|             .map(AvailableSources::lang) | ||||
|  | ||||
|         val deviceLanguage = Locale.getDefault().language | ||||
|         val defaultLanguages = preferences.enabledLanguages().defaultValue | ||||
|         val languagesToEnable = availableLanguages.filter { | ||||
|             it != deviceLanguage && it.startsWith(deviceLanguage) | ||||
|         } | ||||
|  | ||||
|         preferences.enabledLanguages().set(defaultLanguages + languagesToEnable) | ||||
|         subLanguagesEnabledOnFirstRun = true | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Sets the update field of the installed extensions with the given [availableExtensions]. | ||||
|      * | ||||
|   | ||||
| @@ -37,20 +37,15 @@ object LocaleHelper { | ||||
|         val locale = if (lang.isEmpty()) { | ||||
|             LocaleListCompat.getAdjustedDefault()[0] | ||||
|         } else { | ||||
|             getLocale(lang) | ||||
|             Locale.forLanguageTag(lang) | ||||
|         } | ||||
|         return locale!!.getDisplayName(locale).replaceFirstChar { it.uppercase(locale) } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Return Locale from string language code | ||||
|      * Return the default languages enabled for the sources. | ||||
|      */ | ||||
|     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) | ||||
|         } | ||||
|     fun getDefaultEnabledLanguages(): Set<String> { | ||||
|         return setOf("all", "en", Locale.getDefault().language) | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user