From e856dc5eb2052eff48212b94a6ebf86b2c1e67df Mon Sep 17 00:00:00 2001 From: Reactor Scram Date: Wed, 31 Jul 2024 11:52:21 -0500 Subject: [PATCH] refactor(client/kotlin): save settings the same way everything else gets saved (#6097) We can reuse `Config` instead of repeating the names of the three strings everywhere. --- .../firezone/android/core/data/Repository.kt | 12 ++---- .../android/core/data/model/Config.kt | 6 +-- .../settings/ui/AdvancedSettingsFragment.kt | 6 +-- .../features/settings/ui/SettingsViewModel.kt | 38 +++++++------------ 4 files changed, 23 insertions(+), 39 deletions(-) diff --git a/kotlin/android/app/src/main/java/dev/firezone/android/core/data/Repository.kt b/kotlin/android/app/src/main/java/dev/firezone/android/core/data/Repository.kt index 99ea8aafa..c32768929 100644 --- a/kotlin/android/app/src/main/java/dev/firezone/android/core/data/Repository.kt +++ b/kotlin/android/app/src/main/java/dev/firezone/android/core/data/Repository.kt @@ -47,18 +47,14 @@ internal class Repository emit(getDefaultConfigSync()) }.flowOn(coroutineDispatcher) - fun saveSettings( - authBaseUrl: String, - apiUrl: String, - logFilter: String, - ): Flow = + fun saveSettings(value: Config): Flow = flow { emit( sharedPreferences .edit() - .putString(AUTH_BASE_URL_KEY, authBaseUrl) - .putString(API_URL_KEY, apiUrl) - .putString(LOG_FILTER_KEY, logFilter) + .putString(AUTH_BASE_URL_KEY, value.authBaseUrl) + .putString(API_URL_KEY, value.apiUrl) + .putString(LOG_FILTER_KEY, value.logFilter) .apply(), ) }.flowOn(coroutineDispatcher) diff --git a/kotlin/android/app/src/main/java/dev/firezone/android/core/data/model/Config.kt b/kotlin/android/app/src/main/java/dev/firezone/android/core/data/model/Config.kt index 841f321e6..4781e1f63 100644 --- a/kotlin/android/app/src/main/java/dev/firezone/android/core/data/model/Config.kt +++ b/kotlin/android/app/src/main/java/dev/firezone/android/core/data/model/Config.kt @@ -2,7 +2,7 @@ package dev.firezone.android.core.data.model data class Config( - val authBaseUrl: String, - val apiUrl: String, - val logFilter: String, + var authBaseUrl: String, + var apiUrl: String, + var logFilter: String, ) diff --git a/kotlin/android/app/src/main/java/dev/firezone/android/features/settings/ui/AdvancedSettingsFragment.kt b/kotlin/android/app/src/main/java/dev/firezone/android/features/settings/ui/AdvancedSettingsFragment.kt index 0abb4beb4..eff0631a7 100644 --- a/kotlin/android/app/src/main/java/dev/firezone/android/features/settings/ui/AdvancedSettingsFragment.kt +++ b/kotlin/android/app/src/main/java/dev/firezone/android/features/settings/ui/AdvancedSettingsFragment.kt @@ -68,13 +68,13 @@ class AdvancedSettingsFragment : Fragment(R.layout.fragment_settings_advanced) { is SettingsViewModel.ViewAction.FillSettings -> { binding.etAuthBaseUrlInput.apply { - setText(action.authBaseUrl) + setText(action.config.authBaseUrl) } binding.etApiUrlInput.apply { - setText(action.apiUrl) + setText(action.config.apiUrl) } binding.etLogFilterInput.apply { - setText(action.logFilter) + setText(action.config.logFilter) } } } diff --git a/kotlin/android/app/src/main/java/dev/firezone/android/features/settings/ui/SettingsViewModel.kt b/kotlin/android/app/src/main/java/dev/firezone/android/features/settings/ui/SettingsViewModel.kt index 8791fb864..b7ef20007 100644 --- a/kotlin/android/app/src/main/java/dev/firezone/android/features/settings/ui/SettingsViewModel.kt +++ b/kotlin/android/app/src/main/java/dev/firezone/android/features/settings/ui/SettingsViewModel.kt @@ -11,6 +11,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import dev.firezone.android.core.data.Repository +import dev.firezone.android.core.data.model.Config import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -39,18 +40,14 @@ internal class SettingsViewModel private val actionMutableLiveData = MutableLiveData() val actionLiveData: LiveData = actionMutableLiveData - private var authBaseUrl = "" - private var apiUrl = "" - private var logFilter = "" + private var config = Config(authBaseUrl = "", apiUrl = "", logFilter = "") fun populateFieldsFromConfig() { viewModelScope.launch { repo.getConfig().collect { actionMutableLiveData.postValue( ViewAction.FillSettings( - it.authBaseUrl, - it.apiUrl, - it.logFilter, + it, ), ) } @@ -69,7 +66,7 @@ internal class SettingsViewModel fun onSaveSettingsCompleted() { viewModelScope.launch { - repo.saveSettings(authBaseUrl, apiUrl, logFilter).collect { + repo.saveSettings(config).collect { actionMutableLiveData.postValue(ViewAction.NavigateBack) } } @@ -80,17 +77,17 @@ internal class SettingsViewModel } fun onValidateAuthBaseUrl(authBaseUrl: String) { - this.authBaseUrl = authBaseUrl + this.config.authBaseUrl = authBaseUrl onFieldUpdated() } fun onValidateApiUrl(apiUrl: String) { - this.apiUrl = apiUrl + this.config.apiUrl = apiUrl onFieldUpdated() } fun onValidateLogFilter(logFilter: String) { - this.logFilter = logFilter + this.config.logFilter = logFilter onFieldUpdated() } @@ -146,17 +143,10 @@ internal class SettingsViewModel } fun resetSettingsToDefaults() { - val defaultConfig = repo.getDefaultConfigSync() - authBaseUrl = defaultConfig.authBaseUrl - apiUrl = defaultConfig.apiUrl - logFilter = defaultConfig.logFilter + config = repo.getDefaultConfigSync() onFieldUpdated() actionMutableLiveData.postValue( - ViewAction.FillSettings( - authBaseUrl, - apiUrl, - logFilter, - ), + ViewAction.FillSettings(config), ) } @@ -202,9 +192,9 @@ internal class SettingsViewModel private fun areFieldsValid(): Boolean { // This comes from the backend account slug validator at elixir/apps/domain/lib/domain/accounts/account/changeset.ex - return URLUtil.isValidUrl(authBaseUrl) && - isUriValid(apiUrl) && - logFilter.isNotBlank() + return URLUtil.isValidUrl(config.authBaseUrl) && + isUriValid(config.apiUrl) && + config.logFilter.isNotBlank() } private fun isUriValid(uri: String): Boolean { @@ -225,9 +215,7 @@ internal class SettingsViewModel data object NavigateBack : ViewAction() data class FillSettings( - val authBaseUrl: String, - val apiUrl: String, - val logFilter: String, + val config: Config, ) : ViewAction() } }