diff --git a/app/src/main/java/com/example/research/MainActivity.kt b/app/src/main/java/com/example/research/MainActivity.kt index 6941f54..4c51bee 100644 --- a/app/src/main/java/com/example/research/MainActivity.kt +++ b/app/src/main/java/com/example/research/MainActivity.kt @@ -83,6 +83,7 @@ class MainActivity : ComponentActivity() { val app = application as ReSearchApplication val initialTheme = loadInitialTheme(app) val initialLanguage = loadInitialLanguage(app) + val initialHadNoDictionaries = loadInitialHadNoDictionaries(app) handleIntent(intent) setContent { @@ -104,7 +105,8 @@ class MainActivity : ComponentActivity() { ) { AppNavigation( searchViewModel = searchViewModel, - settingsViewModel = settingsViewModel + settingsViewModel = settingsViewModel, + seedNoDictionaries = initialHadNoDictionaries ) } } @@ -165,6 +167,16 @@ class MainActivity : ComponentActivity() { } } + private fun loadInitialHadNoDictionaries(app: ReSearchApplication): Boolean { + return try { + runBlocking { + app.preferencesManager.hadNoDictionaries.first() + } + } catch (e: Exception) { + true + } + } + override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) handleIntent(intent) diff --git a/app/src/main/java/com/example/research/data/local/preferences/PreferencesManager.kt b/app/src/main/java/com/example/research/data/local/preferences/PreferencesManager.kt index 7896611..b7276ce 100644 --- a/app/src/main/java/com/example/research/data/local/preferences/PreferencesManager.kt +++ b/app/src/main/java/com/example/research/data/local/preferences/PreferencesManager.kt @@ -25,6 +25,7 @@ class PreferencesManager(private val context: Context) { val IS_LANGUAGE_EXPANDED = booleanPreferencesKey("is_language_expanded") val IS_DICTIONARIES_EXPANDED = booleanPreferencesKey("is_dictionaries_expanded") val DISABLED_DICTIONARY_PATHS = stringSetPreferencesKey("disabled_dictionary_paths") + val HAD_NO_DICTIONARIES = booleanPreferencesKey("had_no_dictionaries") } private val json = Json { ignoreUnknownKeys = true } @@ -67,6 +68,17 @@ class PreferencesManager(private val context: Context) { preferences[PreferencesKeys.DISABLED_DICTIONARY_PATHS] ?: emptySet() } + val hadNoDictionaries: Flow = context.dataStore.data + .map { preferences -> + preferences[PreferencesKeys.HAD_NO_DICTIONARIES] ?: true + } + + suspend fun setHadNoDictionaries(value: Boolean) { + context.dataStore.edit { preferences -> + preferences[PreferencesKeys.HAD_NO_DICTIONARIES] = value + } + } + suspend fun setDictionaryActive(path: String, isActive: Boolean) { context.dataStore.edit { preferences -> val disabledPaths = preferences[PreferencesKeys.DISABLED_DICTIONARY_PATHS] diff --git a/app/src/main/java/com/example/research/ui/navigation/AppNavigation.kt b/app/src/main/java/com/example/research/ui/navigation/AppNavigation.kt index a59f857..67ff337 100644 --- a/app/src/main/java/com/example/research/ui/navigation/AppNavigation.kt +++ b/app/src/main/java/com/example/research/ui/navigation/AppNavigation.kt @@ -33,7 +33,8 @@ enum class Screen { @Composable fun AppNavigation( searchViewModel: SearchViewModel, - settingsViewModel: SettingsViewModel + settingsViewModel: SettingsViewModel, + seedNoDictionaries: Boolean = false ) { val screenStack = rememberSaveable( saver = listSaver( @@ -84,8 +85,9 @@ fun AppNavigation( val isOperationActive = stickyPipelineActive val hasConfirmedNoDictionaries = settingsState.hasCompletedStartupScan && settingsState.dictionaries.isEmpty() + val hasSeededNoDictionaries = seedNoDictionaries && !settingsState.hasCompletedStartupScan NavigationState( - shouldShowSettings = hasConfirmedNoDictionaries || isOperationActive, + shouldShowSettings = hasConfirmedNoDictionaries || hasSeededNoDictionaries || isOperationActive, showBackButtonInSettings = settingsState.dictionaries.isNotEmpty() && !isOperationActive, isOperationActive = isOperationActive, ) diff --git a/app/src/main/java/com/example/research/ui/settings/SettingsViewModel.kt b/app/src/main/java/com/example/research/ui/settings/SettingsViewModel.kt index e90164d..8116e6c 100644 --- a/app/src/main/java/com/example/research/ui/settings/SettingsViewModel.kt +++ b/app/src/main/java/com/example/research/ui/settings/SettingsViewModel.kt @@ -89,9 +89,20 @@ class SettingsViewModel( init { setupStateObservation() + observeDictionariesForSeedFlag() initialize() } + private fun observeDictionariesForSeedFlag() { + viewModelScope.launch { + localDictionaryRepository.dictionaries.collect { dictionaries -> + if (hasCompletedStartupScan.value) { + preferencesManager.setHadNoDictionaries(dictionaries.isEmpty()) + } + } + } + } + private fun setupStateObservation() { viewModelScope.launch { var wasIndexing = false @@ -245,6 +256,9 @@ class SettingsViewModel( android.util.Log.w("SettingsViewModel", "Failed to load language preference: ${e.message}") } hasCompletedStartupScan.value = true + preferencesManager.setHadNoDictionaries( + localDictionaryRepository.dictionaries.value.isEmpty() + ) } } }