diff options
| author | saber safavi <saber.safavi@codic.se> | 2023-05-26 10:13:43 +0200 |
|---|---|---|
| committer | saber safavi <saber.safavi@codic.se> | 2023-07-13 14:49:50 +0200 |
| commit | 9dc4ac6e340474524cb7bc88164cdae951ee9c05 (patch) | |
| tree | eec07ce8775903989eb39bdde5d9126708569de0 | |
| parent | dcb9fb5dd324fe4f538efd74445eda71066c794a (diff) | |
| download | mullvadvpn-9dc4ac6e340474524cb7bc88164cdae951ee9c05.tar.xz mullvadvpn-9dc4ac6e340474524cb7bc88164cdae951ee9c05.zip | |
Add ViewModel and related MVVM parts
3 files changed, 52 insertions, 0 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/SettingsUiState.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/SettingsUiState.kt new file mode 100644 index 0000000000..06bd0749eb --- /dev/null +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/SettingsUiState.kt @@ -0,0 +1,7 @@ +package net.mullvad.mullvadvpn.compose.state + +data class SettingsUiState( + val appVersion: String, + val isLoggedIn: Boolean, + val isUpdateAvailable: Boolean +) diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/di/UiModule.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/di/UiModule.kt index 2244438ef0..0e10278ac3 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/di/UiModule.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/di/UiModule.kt @@ -28,6 +28,7 @@ import net.mullvad.mullvadvpn.viewmodel.DeviceRevokedViewModel import net.mullvad.mullvadvpn.viewmodel.LoginViewModel import net.mullvad.mullvadvpn.viewmodel.PrivacyDisclaimerViewModel import net.mullvad.mullvadvpn.viewmodel.SelectLocationViewModel +import net.mullvad.mullvadvpn.viewmodel.SettingsViewModel import net.mullvad.mullvadvpn.viewmodel.SplitTunnelingViewModel import net.mullvad.mullvadvpn.viewmodel.VpnSettingsViewModel import org.apache.commons.validator.routines.InetAddressValidator @@ -87,6 +88,7 @@ val uiModule = module { viewModel { PrivacyDisclaimerViewModel(get()) } viewModel { VpnSettingsViewModel(get(), get(), get(), get()) } viewModel { SelectLocationViewModel(get()) } + viewModel { SettingsViewModel(get(), get()) } } const val SELF_PACKAGE_NAME = "SELF_PACKAGE_NAME" diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SettingsViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SettingsViewModel.kt new file mode 100644 index 0000000000..8ef85cfca8 --- /dev/null +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SettingsViewModel.kt @@ -0,0 +1,43 @@ +package net.mullvad.mullvadvpn.viewmodel + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.stateIn +import net.mullvad.mullvadvpn.compose.state.SettingsUiState +import net.mullvad.mullvadvpn.model.DeviceState +import net.mullvad.mullvadvpn.repository.DeviceRepository +import net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnectionManager + +class SettingsViewModel( + deviceRepository: DeviceRepository, + serviceConnectionManager: ServiceConnectionManager +) : ViewModel() { + + private val vmState: StateFlow<SettingsUiState> = + combine(deviceRepository.deviceState, serviceConnectionManager.connectionState) { + deviceState, + versionInfo -> + val cachedVersionInfo = versionInfo.readyContainer()?.appVersionInfoCache + SettingsUiState( + isLoggedIn = deviceState is DeviceState.LoggedIn, + appVersion = cachedVersionInfo?.version ?: "", + isUpdateAvailable = + cachedVersionInfo?.let { it.isSupported.not() || it.isOutdated } ?: false + ) + } + .stateIn( + viewModelScope, + SharingStarted.WhileSubscribed(), + SettingsUiState(appVersion = "", isLoggedIn = false, isUpdateAvailable = false) + ) + + val uiState = + vmState.stateIn( + viewModelScope, + SharingStarted.WhileSubscribed(), + SettingsUiState(appVersion = "", isLoggedIn = false, isUpdateAvailable = false) + ) +} |
