@ -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 ] .
*