Skip to content

Commit d42d6da

Browse files
committed
Store model and voice per API provider
Use provider-specific SharedPreferences keys (e.g. model_GOOGLE_GEMINI, voice_OPENAI_DIRECT) so each provider remembers its own model/voice selection across provider switches. Falls back to the legacy global key for backwards compatibility, then to the provider default. Made-with: Cursor
1 parent 3ee6975 commit d42d6da

2 files changed

Lines changed: 10 additions & 14 deletions

File tree

app/src/main/java/ch/fhnw/pepper_realtime/manager/SettingsRepository.kt

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,15 @@ class SettingsRepository @Inject constructor(
3636
get() {
3737
val defaultModel = when (apiProviderEnum) {
3838
RealtimeApiProvider.XAI -> "Grok Voice Agent"
39-
// Google Live API requires models/ prefix for BidiGenerateContent
4039
RealtimeApiProvider.GOOGLE_GEMINI -> "models/gemini-3.1-flash-live-preview"
4140
else -> context.getString(R.string.openai_default_model)
4241
}
43-
return settings.getString(KEY_MODEL, defaultModel) ?: defaultModel
42+
val key = "${KEY_MODEL}_${apiProvider}"
43+
return settings.getString(key, null)
44+
?: settings.getString(KEY_MODEL, defaultModel)
45+
?: defaultModel
4446
}
45-
set(value) = settings.edit().putString(KEY_MODEL, value).apply()
47+
set(value) = settings.edit().putString("${KEY_MODEL}_${apiProvider}", value).apply()
4648

4749
var voice: String
4850
get() {
@@ -51,9 +53,12 @@ class SettingsRepository @Inject constructor(
5153
RealtimeApiProvider.GOOGLE_GEMINI -> "Puck"
5254
else -> "ash"
5355
}
54-
return settings.getString(KEY_VOICE, defaultVoice) ?: defaultVoice
56+
val key = "${KEY_VOICE}_${apiProvider}"
57+
return settings.getString(key, null)
58+
?: settings.getString(KEY_VOICE, defaultVoice)
59+
?: defaultVoice
5560
}
56-
set(value) = settings.edit().putString(KEY_VOICE, value).apply()
61+
set(value) = settings.edit().putString("${KEY_VOICE}_${apiProvider}", value).apply()
5762

5863
val speed: Float
5964
get() {
@@ -245,14 +250,6 @@ class SettingsRepository @Inject constructor(
245250
get() = settings.getBoolean(KEY_XAI_X_SEARCH, true) // Default true for backwards compatibility
246251
set(value) = settings.edit().putBoolean(KEY_XAI_X_SEARCH, value).apply()
247252

248-
/**
249-
* Remove persisted model and voice so the getters return the
250-
* provider-specific defaults. Call after changing [apiProvider].
251-
*/
252-
fun clearModelAndVoice() {
253-
settings.edit().remove(KEY_MODEL).remove(KEY_VOICE).apply()
254-
}
255-
256253
/**
257254
* Clear all saved settings so every property falls back to its default value.
258255
* API keys are stored separately and are NOT affected.

app/src/main/java/ch/fhnw/pepper_realtime/ui/settings/SettingsViewModel.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,6 @@ class SettingsViewModel @Inject constructor(
143143
fun setApiProvider(provider: String) {
144144
if (provider != settingsRepository.apiProvider) {
145145
settingsRepository.apiProvider = provider
146-
settingsRepository.clearModelAndVoice()
147146
val newModel = settingsRepository.model
148147
val newVoice = settingsRepository.voice
149148
_settingsState.update { it.copy(apiProvider = provider, model = newModel, voice = newVoice) }

0 commit comments

Comments
 (0)