From 03e9aeedae7f02eb19eb45d5c6de85f37e024fd6 Mon Sep 17 00:00:00 2001 From: jonasgaudian <43753916+jonasgaudian@users.noreply.github.com> Date: Sat, 14 Feb 2026 23:55:16 +0100 Subject: [PATCH] update `LanguageRepository` to dynamically handle language count and improve synchronization of enabled language IDs --- .../model/repository/LanguageRepository.kt | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/eu/gaudian/translator/model/repository/LanguageRepository.kt b/app/src/main/java/eu/gaudian/translator/model/repository/LanguageRepository.kt index f4dfbb5..233f129 100644 --- a/app/src/main/java/eu/gaudian/translator/model/repository/LanguageRepository.kt +++ b/app/src/main/java/eu/gaudian/translator/model/repository/LanguageRepository.kt @@ -4,6 +4,7 @@ package eu.gaudian.translator.model.repository import android.content.Context import android.content.pm.PackageManager +import eu.gaudian.translator.R import eu.gaudian.translator.model.Language import eu.gaudian.translator.model.parseLanguagesFromResources import eu.gaudian.translator.model.repository.DataStoreKeys.LANGUAGE_INIT_METADATA_KEY @@ -88,13 +89,12 @@ class LanguageRepository(private val context: Context) { // Check if we already have default languages saved val savedDefaultLanguages = loadLanguages(LanguageListType.DEFAULT).firstOrNull() ?: emptyList() - // Check if we need to re-parse languages (first run, version change, or language change) + // Check if we need to reparse languages (first run, version change, or language change) val shouldReparse = shouldReparseLanguages(savedDefaultLanguages) if (shouldReparse) { Log.d("LanguageRepository", "Parsing languages from resources") val parsedLanguages = parseLanguagesFromResources(context) - wipeHistoryAndFavorites() saveLanguages(LanguageListType.DEFAULT, parsedLanguages) // Save the current app version and locale to detect changes next time saveLanguageInitializationMetadata() @@ -112,8 +112,11 @@ class LanguageRepository(private val context: Context) { return true } - // Check if the number of languages matches expected count (51) - if (savedLanguages.size != 51) { + // Get expected language count from resources dynamically + val expectedCount = context.resources.getStringArray(R.array.language_codes).size + + // Check if the number of languages matches expected count from resources + if (savedLanguages.size != expectedCount) { return true } @@ -167,15 +170,22 @@ class LanguageRepository(private val context: Context) { val customLanguages = loadLanguages(LanguageListType.CUSTOM).first() val master = (defaultLanguages + customLanguages).distinctBy { it.nameResId } - // Sanitize existing enabled IDs and initialize if empty + // Get existing enabled IDs val existingEnabled: List = try { context.dataStore.loadObjectList(DataStoreKeys.ALL_LANGUAGES_KEY).firstOrNull() ?: emptyList() } catch (_: Exception) { emptyList() } val masterIds = master.map { it.nameResId }.toSet() - val sanitized = existingEnabled.filter { it in masterIds } - val finalIds = sanitized.ifEmpty { master.filter { it.isSelected == true }.map { it.nameResId } } + + // Sanitize existing enabled IDs (remove any that are no longer valid) + val existingValidIds = existingEnabled.filter { it in masterIds }.toSet() + + // Add any new languages from master that aren't already enabled + val newLanguageIds = masterIds - existingValidIds + + // Combine: keep existing enabled + add new languages + val finalIds = (existingValidIds + newLanguageIds).toList() context.dataStore.saveObjectList(DataStoreKeys.ALL_LANGUAGES_KEY, finalIds)