diff options
| author | David Göransson <david.goransson90@gmail.com> | 2023-10-19 16:04:23 +0200 |
|---|---|---|
| committer | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2023-10-25 14:03:20 +0200 |
| commit | be9a8bc340de05f05b1cb100b0648c501240cff9 (patch) | |
| tree | fcd4a1cb32dce06e0ffc6da09b68333b450b7e5a /android/app | |
| parent | c0cfd41987eac1ba5c8701c8e166dd13f9537406 (diff) | |
| download | mullvadvpn-be9a8bc340de05f05b1cb100b0648c501240cff9.tar.xz mullvadvpn-be9a8bc340de05f05b1cb100b0648c501240cff9.zip | |
Simplify settings dialogs
Diffstat (limited to 'android/app')
4 files changed, 134 insertions, 335 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt index c65710f17b..4e08e06a1d 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt @@ -61,6 +61,7 @@ import net.mullvad.mullvadvpn.compose.dialog.ObfuscationInfoDialog import net.mullvad.mullvadvpn.compose.dialog.QuantumResistanceInfoDialog import net.mullvad.mullvadvpn.compose.dialog.WireguardPortInfoDialog import net.mullvad.mullvadvpn.compose.extensions.itemWithDivider +import net.mullvad.mullvadvpn.compose.state.VpnSettingsDialog import net.mullvad.mullvadvpn.compose.state.VpnSettingsUiState import net.mullvad.mullvadvpn.compose.test.LAZY_LIST_LAST_ITEM_TEST_TAG import net.mullvad.mullvadvpn.compose.test.LAZY_LIST_QUANTUM_ITEM_OFF_TEST_TAG @@ -87,7 +88,7 @@ private fun PreviewVpnSettings() { AppTheme { VpnSettingsScreen( uiState = - VpnSettingsUiState.DefaultUiState( + VpnSettingsUiState.createDefault( isAutoConnectEnabled = true, mtu = "1337", isCustomDnsEnabled = true, @@ -175,18 +176,18 @@ fun VpnSettingsScreen( ) { val savedCustomPort = rememberSaveable { mutableStateOf<Constraint<Port>>(Constraint.Any()) } - when (uiState) { - is VpnSettingsUiState.MtuDialogUiState -> { + when (val dialog = uiState.dialog) { + is VpnSettingsDialog.Mtu -> { MtuDialog( - mtuInitial = uiState.mtuEditValue.toIntOrNull(), + mtuInitial = dialog.mtuEditValue.toIntOrNull(), onSave = { onSaveMtuClick(it) }, onRestoreDefaultValue = { onRestoreMtuClick() }, onDismiss = { onCancelMtuDialogClick() } ) } - is VpnSettingsUiState.DnsDialogUiState -> { + is VpnSettingsDialog.Dns -> { DnsDialog( - stagedDns = uiState.stagedDns, + stagedDns = dialog.stagedDns, isAllowLanEnabled = uiState.isAllowLanEnabled, onIpAddressChanged = { onDnsInputChange(it) }, onAttemptToSave = { onSaveDnsClick() }, @@ -194,31 +195,31 @@ fun VpnSettingsScreen( onDismiss = { onCancelDnsDialogClick() } ) } - is VpnSettingsUiState.LocalNetworkSharingInfoDialogUiState -> { + is VpnSettingsDialog.LocalNetworkSharingInfo -> { LocalNetworkSharingInfoDialog(onDismissInfoClick) } - is VpnSettingsUiState.ContentBlockersInfoDialogUiState -> { + is VpnSettingsDialog.ContentBlockersInfo -> { ContentBlockersInfoDialog(onDismissInfoClick) } - is VpnSettingsUiState.CustomDnsInfoDialogUiState -> { + is VpnSettingsDialog.CustomDnsInfo -> { CustomDnsInfoDialog(onDismissInfoClick) } - is VpnSettingsUiState.MalwareInfoDialogUiState -> { + is VpnSettingsDialog.MalwareInfo -> { MalwareInfoDialog(onDismissInfoClick) } - is VpnSettingsUiState.ObfuscationInfoDialogUiState -> { + is VpnSettingsDialog.ObfuscationInfo -> { ObfuscationInfoDialog(onDismissInfoClick) } - is VpnSettingsUiState.QuantumResistanceInfoDialogUiState -> { + is VpnSettingsDialog.QuantumResistanceInfo -> { QuantumResistanceInfoDialog(onDismissInfoClick) } - is VpnSettingsUiState.WireguardPortInfoDialogUiState -> { - WireguardPortInfoDialog(uiState.availablePortRanges, onDismissInfoClick) + is VpnSettingsDialog.WireguardPortInfo -> { + WireguardPortInfoDialog(dialog.availablePortRanges, onDismissInfoClick) } - is VpnSettingsUiState.CustomPortDialogUiState -> { + is VpnSettingsDialog.CustomPort -> { CustomPortDialog( customPort = savedCustomPort.value.toDisplayCustomPort(), - allowedPortRanges = uiState.availablePortRanges, + allowedPortRanges = dialog.availablePortRanges, onSave = { customPortString -> onWireguardPortSelected(Constraint.Only(Port(customPortString.toInt()))) }, @@ -233,9 +234,6 @@ fun VpnSettingsScreen( onDismissRequest = { onCancelCustomPortDialogClick() } ) } - else -> { - // NOOP - } } var expandContentBlockersState by rememberSaveable { mutableStateOf(false) } diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt index d6c9625668..e78d2e9f43 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt @@ -9,162 +9,73 @@ import net.mullvad.mullvadvpn.model.SelectedObfuscation import net.mullvad.mullvadvpn.viewmodel.CustomDnsItem import net.mullvad.mullvadvpn.viewmodel.StagedDns -sealed interface VpnSettingsUiState { - val mtu: String - val isAutoConnectEnabled: Boolean - val isLocalNetworkSharingEnabled: Boolean - val isCustomDnsEnabled: Boolean - val customDnsItems: List<CustomDnsItem> - val contentBlockersOptions: DefaultDnsOptions - val isAllowLanEnabled: Boolean - val selectedObfuscation: SelectedObfuscation - val quantumResistant: QuantumResistantState - val selectedWireguardPort: Constraint<Port> +data class VpnSettingsUiState( + val mtu: String, + val isAutoConnectEnabled: Boolean, + val isLocalNetworkSharingEnabled: Boolean, + val isCustomDnsEnabled: Boolean, + val customDnsItems: List<CustomDnsItem>, + val contentBlockersOptions: DefaultDnsOptions, + val isAllowLanEnabled: Boolean, + val selectedObfuscation: SelectedObfuscation, + val quantumResistant: QuantumResistantState, + val selectedWireguardPort: Constraint<Port>, + val availablePortRanges: List<PortRange>, + val dialog: VpnSettingsDialog? +) { - data class DefaultUiState( - override val mtu: String = "", - override val isAutoConnectEnabled: Boolean = false, - override val isLocalNetworkSharingEnabled: Boolean = false, - override val isCustomDnsEnabled: Boolean = false, - override val isAllowLanEnabled: Boolean = false, - override val customDnsItems: List<CustomDnsItem> = listOf(), - override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(), - override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off, - override val quantumResistant: QuantumResistantState = QuantumResistantState.Off, - override val selectedWireguardPort: Constraint<Port> = Constraint.Any() - ) : VpnSettingsUiState + companion object { + fun createDefault( + mtu: String = "", + isAutoConnectEnabled: Boolean = false, + isLocalNetworkSharingEnabled: Boolean = false, + isCustomDnsEnabled: Boolean = false, + customDnsItems: List<CustomDnsItem> = emptyList(), + contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(), + isAllowLanEnabled: Boolean = false, + selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off, + quantumResistant: QuantumResistantState = QuantumResistantState.Off, + selectedWireguardPort: Constraint<Port> = Constraint.Any(), + availablePortRanges: List<PortRange> = emptyList(), + dialog: VpnSettingsDialog? = null + ) = + VpnSettingsUiState( + mtu, + isAutoConnectEnabled, + isLocalNetworkSharingEnabled, + isCustomDnsEnabled, + customDnsItems, + contentBlockersOptions, + isAllowLanEnabled, + selectedObfuscation, + quantumResistant, + selectedWireguardPort, + availablePortRanges, + dialog + ) + } +} - data class MtuDialogUiState( - override val mtu: String = "", - override val isAutoConnectEnabled: Boolean = false, - override val isLocalNetworkSharingEnabled: Boolean = false, - override val isCustomDnsEnabled: Boolean = false, - override val isAllowLanEnabled: Boolean = false, - override val customDnsItems: List<CustomDnsItem> = listOf(), - override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(), - val mtuEditValue: String, - override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off, - override val quantumResistant: QuantumResistantState = QuantumResistantState.Off, - override val selectedWireguardPort: Constraint<Port> = Constraint.Any() - ) : VpnSettingsUiState +interface VpnSettingsDialog { + data class Mtu(val mtuEditValue: String) : VpnSettingsDialog - data class DnsDialogUiState( - override val mtu: String = "", - override val isAutoConnectEnabled: Boolean = false, - override val isLocalNetworkSharingEnabled: Boolean = false, - override val isCustomDnsEnabled: Boolean = false, - override val isAllowLanEnabled: Boolean = false, - override val customDnsItems: List<CustomDnsItem> = listOf(), - override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(), - val stagedDns: StagedDns, - override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off, - override val quantumResistant: QuantumResistantState = QuantumResistantState.Off, - override val selectedWireguardPort: Constraint<Port> = Constraint.Any() - ) : VpnSettingsUiState + data class Dns(val stagedDns: StagedDns) : VpnSettingsDialog - data class LocalNetworkSharingInfoDialogUiState( - override val mtu: String = "", - override val isAutoConnectEnabled: Boolean = false, - override val isLocalNetworkSharingEnabled: Boolean = false, - override val isCustomDnsEnabled: Boolean = false, - override val isAllowLanEnabled: Boolean = false, - override val customDnsItems: List<CustomDnsItem> = listOf(), - override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(), - override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off, - override val quantumResistant: QuantumResistantState = QuantumResistantState.Off, - override val selectedWireguardPort: Constraint<Port> = Constraint.Any() - ) : VpnSettingsUiState + data object LocalNetworkSharingInfo : VpnSettingsDialog - data class ContentBlockersInfoDialogUiState( - override val mtu: String = "", - override val isAutoConnectEnabled: Boolean = false, - override val isLocalNetworkSharingEnabled: Boolean = false, - override val isCustomDnsEnabled: Boolean = false, - override val isAllowLanEnabled: Boolean = false, - override val customDnsItems: List<CustomDnsItem> = listOf(), - override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(), - override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off, - override val quantumResistant: QuantumResistantState = QuantumResistantState.Off, - override val selectedWireguardPort: Constraint<Port> = Constraint.Any() - ) : VpnSettingsUiState + data object ContentBlockersInfo : VpnSettingsDialog - data class CustomDnsInfoDialogUiState( - override val mtu: String = "", - override val isAutoConnectEnabled: Boolean = false, - override val isLocalNetworkSharingEnabled: Boolean = false, - override val isCustomDnsEnabled: Boolean = false, - override val isAllowLanEnabled: Boolean = false, - override val customDnsItems: List<CustomDnsItem> = listOf(), - override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(), - override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off, - override val quantumResistant: QuantumResistantState = QuantumResistantState.Off, - override val selectedWireguardPort: Constraint<Port> = Constraint.Any() - ) : VpnSettingsUiState + data object CustomDnsInfo : VpnSettingsDialog - data class MalwareInfoDialogUiState( - override val mtu: String = "", - override val isAutoConnectEnabled: Boolean = false, - override val isLocalNetworkSharingEnabled: Boolean = false, - override val isCustomDnsEnabled: Boolean = false, - override val isAllowLanEnabled: Boolean = false, - override val customDnsItems: List<CustomDnsItem> = listOf(), - override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(), - override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off, - override val quantumResistant: QuantumResistantState = QuantumResistantState.Off, - override val selectedWireguardPort: Constraint<Port> = Constraint.Any() - ) : VpnSettingsUiState + data object MalwareInfo : VpnSettingsDialog - data class ObfuscationInfoDialogUiState( - override val mtu: String = "", - override val isAutoConnectEnabled: Boolean = false, - override val isLocalNetworkSharingEnabled: Boolean = false, - override val isCustomDnsEnabled: Boolean = false, - override val isAllowLanEnabled: Boolean = false, - override val customDnsItems: List<CustomDnsItem> = listOf(), - override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(), - override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off, - override val quantumResistant: QuantumResistantState = QuantumResistantState.Off, - override val selectedWireguardPort: Constraint<Port> = Constraint.Any() - ) : VpnSettingsUiState + data object ObfuscationInfo : VpnSettingsDialog - data class QuantumResistanceInfoDialogUiState( - override val mtu: String = "", - override val isAutoConnectEnabled: Boolean = false, - override val isLocalNetworkSharingEnabled: Boolean = false, - override val isCustomDnsEnabled: Boolean = false, - override val isAllowLanEnabled: Boolean = false, - override val customDnsItems: List<CustomDnsItem> = listOf(), - override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(), - override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off, - override val quantumResistant: QuantumResistantState = QuantumResistantState.Off, - override val selectedWireguardPort: Constraint<Port> = Constraint.Any() - ) : VpnSettingsUiState + data object QuantumResistanceInfo : VpnSettingsDialog - data class WireguardPortInfoDialogUiState( - override val mtu: String = "", - override val isAutoConnectEnabled: Boolean = false, - override val isLocalNetworkSharingEnabled: Boolean = false, - override val isCustomDnsEnabled: Boolean = false, - override val isAllowLanEnabled: Boolean = false, - override val customDnsItems: List<CustomDnsItem> = listOf(), - override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(), - override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off, - override val quantumResistant: QuantumResistantState = QuantumResistantState.Off, - override val selectedWireguardPort: Constraint<Port> = Constraint.Any(), - val availablePortRanges: List<PortRange> = emptyList() - ) : VpnSettingsUiState + data class WireguardPortInfo(val availablePortRanges: List<PortRange> = emptyList()) : + VpnSettingsDialog - data class CustomPortDialogUiState( - override val mtu: String = "", - override val isAutoConnectEnabled: Boolean = false, - override val isLocalNetworkSharingEnabled: Boolean = false, - override val isCustomDnsEnabled: Boolean = false, - override val isAllowLanEnabled: Boolean = false, - override val customDnsItems: List<CustomDnsItem> = listOf(), - override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(), - override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off, - override val quantumResistant: QuantumResistantState = QuantumResistantState.Off, - override val selectedWireguardPort: Constraint<Port> = Constraint.Any(), - val availablePortRanges: List<PortRange> = emptyList() - ) : VpnSettingsUiState + data class CustomPort(val availablePortRanges: List<PortRange> = emptyList()) : + VpnSettingsDialog } diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt index 9c25fe824f..8a66818896 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt @@ -54,8 +54,7 @@ class VpnSettingsViewModel( @Suppress("konsist.ensure public properties use permitted names") val toastMessages = _toastMessages.asSharedFlow() - private val dialogState = - MutableStateFlow<VpnSettingsDialogState>(VpnSettingsDialogState.NoDialog) + private val dialogState = MutableStateFlow<VpnSettingsDialogState?>(null) private val vmState = serviceConnectionManager.connectionState @@ -78,14 +77,14 @@ class VpnSettingsViewModel( isLocalNetworkSharingEnabled = settings?.allowLan ?: false, isCustomDnsEnabled = settings?.isCustomDnsEnabled() ?: false, customDnsList = settings?.addresses()?.asStringAddressList() ?: listOf(), - contentBlockersOptions = settings?.contentBlockersSettings() - ?: DefaultDnsOptions(), + contentBlockersOptions = + settings?.contentBlockersSettings() ?: DefaultDnsOptions(), isAllowLanEnabled = settings?.allowLan ?: false, - selectedObfuscation = settings?.selectedObfuscationSettings() - ?: SelectedObfuscation.Off, + selectedObfuscation = + settings?.selectedObfuscationSettings() ?: SelectedObfuscation.Off, dialogState = dialogState, - quantumResistant = settings?.quantumResistant() - ?: QuantumResistantState.Off, + quantumResistant = + settings?.quantumResistant() ?: QuantumResistantState.Off, selectedWireguardPort = settings?.getWireguardPort() ?: Constraint.Any(), availablePortRanges = portRanges ) @@ -103,7 +102,7 @@ class VpnSettingsViewModel( .stateIn( viewModelScope, SharingStarted.WhileSubscribed(), - VpnSettingsUiState.DefaultUiState() + VpnSettingsUiState.createDefault() ) fun onMtuCellClick() { @@ -239,7 +238,7 @@ class VpnSettingsViewModel( contentBlockersOptions = vmState.value.contentBlockersOptions ) - hideDialog() + dialogState.update { null } } fun onToggleAutoConnect(isEnabled: Boolean) { @@ -252,6 +251,9 @@ class VpnSettingsViewModel( fun onToggleDnsClick(isEnabled: Boolean) { updateCustomDnsState(isEnabled) + if (isEnabled && vmState.value.customDnsList.isEmpty()) { + onDnsClick(null) + } showApplySettingChangesWarningToast() } @@ -374,7 +376,13 @@ class VpnSettingsViewModel( } private fun hideDialog() { - dialogState.update { VpnSettingsDialogState.NoDialog } + if ( + vmState.value.dialogState is VpnSettingsDialogState.DnsDialog && + vmState.value.customDnsList.isEmpty() + ) { + onToggleDnsClick(false) + } + dialogState.update { null } } private fun String.isDuplicateDns(stagedIndex: Int? = null): Boolean { diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt index aba6dd7e36..2ebc2b397c 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt @@ -1,5 +1,6 @@ package net.mullvad.mullvadvpn.viewmodel +import net.mullvad.mullvadvpn.compose.state.VpnSettingsDialog import net.mullvad.mullvadvpn.compose.state.VpnSettingsUiState import net.mullvad.mullvadvpn.model.Constraint import net.mullvad.mullvadvpn.model.DefaultDnsOptions @@ -17,165 +18,26 @@ data class VpnSettingsViewModelState( val customDnsList: List<CustomDnsItem>, val contentBlockersOptions: DefaultDnsOptions, val selectedObfuscation: SelectedObfuscation, - val dialogState: VpnSettingsDialogState, val quantumResistant: QuantumResistantState, val selectedWireguardPort: Constraint<Port>, - val availablePortRanges: List<PortRange> + val availablePortRanges: List<PortRange>, + val dialogState: VpnSettingsDialogState?, ) { - fun toUiState(): VpnSettingsUiState { - return when (dialogState) { - is VpnSettingsDialogState.MtuDialog -> - VpnSettingsUiState.MtuDialogUiState( - mtu = mtuValue, - isAutoConnectEnabled = isAutoConnectEnabled, - isLocalNetworkSharingEnabled = isLocalNetworkSharingEnabled, - isCustomDnsEnabled = isCustomDnsEnabled, - isAllowLanEnabled = isAllowLanEnabled, - customDnsItems = customDnsList, - contentBlockersOptions = contentBlockersOptions, - mtuEditValue = dialogState.mtuEditValue, - selectedObfuscation = selectedObfuscation, - quantumResistant = quantumResistant, - selectedWireguardPort = selectedWireguardPort - ) - is VpnSettingsDialogState.DnsDialog -> - VpnSettingsUiState.DnsDialogUiState( - mtu = mtuValue, - isAutoConnectEnabled = isAutoConnectEnabled, - isLocalNetworkSharingEnabled = isLocalNetworkSharingEnabled, - isCustomDnsEnabled = isCustomDnsEnabled, - isAllowLanEnabled = isAllowLanEnabled, - customDnsItems = customDnsList, - contentBlockersOptions = contentBlockersOptions, - stagedDns = dialogState.stagedDns, - selectedObfuscation = selectedObfuscation, - quantumResistant = quantumResistant, - selectedWireguardPort = selectedWireguardPort - ) - is VpnSettingsDialogState.LocalNetworkSharingInfoDialog -> - VpnSettingsUiState.LocalNetworkSharingInfoDialogUiState( - mtu = mtuValue, - isAutoConnectEnabled = isAutoConnectEnabled, - isLocalNetworkSharingEnabled = isLocalNetworkSharingEnabled, - isCustomDnsEnabled = isCustomDnsEnabled, - isAllowLanEnabled = isAllowLanEnabled, - customDnsItems = customDnsList, - contentBlockersOptions = contentBlockersOptions, - selectedObfuscation = selectedObfuscation, - quantumResistant = quantumResistant, - selectedWireguardPort = selectedWireguardPort - ) - is VpnSettingsDialogState.ContentBlockersInfoDialog -> - VpnSettingsUiState.ContentBlockersInfoDialogUiState( - mtu = mtuValue, - isAutoConnectEnabled = isAutoConnectEnabled, - isLocalNetworkSharingEnabled = isLocalNetworkSharingEnabled, - isCustomDnsEnabled = isCustomDnsEnabled, - isAllowLanEnabled = isAllowLanEnabled, - customDnsItems = customDnsList, - contentBlockersOptions = contentBlockersOptions, - selectedObfuscation = selectedObfuscation, - quantumResistant = quantumResistant, - selectedWireguardPort = selectedWireguardPort - ) - is VpnSettingsDialogState.CustomDnsInfoDialog -> - VpnSettingsUiState.CustomDnsInfoDialogUiState( - mtu = mtuValue, - isAutoConnectEnabled = isAutoConnectEnabled, - isLocalNetworkSharingEnabled = isLocalNetworkSharingEnabled, - isCustomDnsEnabled = isCustomDnsEnabled, - isAllowLanEnabled = isAllowLanEnabled, - customDnsItems = customDnsList, - contentBlockersOptions = contentBlockersOptions, - selectedObfuscation = selectedObfuscation, - quantumResistant = quantumResistant, - selectedWireguardPort = selectedWireguardPort - ) - is VpnSettingsDialogState.MalwareInfoDialog -> - VpnSettingsUiState.MalwareInfoDialogUiState( - mtu = mtuValue, - isAutoConnectEnabled = isAutoConnectEnabled, - isLocalNetworkSharingEnabled = isLocalNetworkSharingEnabled, - isCustomDnsEnabled = isCustomDnsEnabled, - isAllowLanEnabled = isAllowLanEnabled, - customDnsItems = customDnsList, - contentBlockersOptions = contentBlockersOptions, - selectedObfuscation = selectedObfuscation, - quantumResistant = quantumResistant, - selectedWireguardPort = selectedWireguardPort - ) - is VpnSettingsDialogState.ObfuscationInfoDialog -> - VpnSettingsUiState.ObfuscationInfoDialogUiState( - mtu = mtuValue, - isAutoConnectEnabled = isAutoConnectEnabled, - isLocalNetworkSharingEnabled = isLocalNetworkSharingEnabled, - isCustomDnsEnabled = isCustomDnsEnabled, - isAllowLanEnabled = isAllowLanEnabled, - customDnsItems = customDnsList, - contentBlockersOptions = contentBlockersOptions, - selectedObfuscation = selectedObfuscation, - quantumResistant = quantumResistant, - selectedWireguardPort = selectedWireguardPort - ) - is VpnSettingsDialogState.QuantumResistanceInfoDialog -> { - VpnSettingsUiState.QuantumResistanceInfoDialogUiState( - mtu = mtuValue, - isAutoConnectEnabled = isAutoConnectEnabled, - isLocalNetworkSharingEnabled = isLocalNetworkSharingEnabled, - isCustomDnsEnabled = isCustomDnsEnabled, - isAllowLanEnabled = isAllowLanEnabled, - customDnsItems = customDnsList, - contentBlockersOptions = contentBlockersOptions, - selectedObfuscation = selectedObfuscation, - quantumResistant = quantumResistant, - selectedWireguardPort = selectedWireguardPort - ) - } - is VpnSettingsDialogState.WireguardPortInfoDialog -> { - VpnSettingsUiState.WireguardPortInfoDialogUiState( - mtu = mtuValue, - isAutoConnectEnabled = isAutoConnectEnabled, - isLocalNetworkSharingEnabled = isLocalNetworkSharingEnabled, - isCustomDnsEnabled = isCustomDnsEnabled, - isAllowLanEnabled = isAllowLanEnabled, - customDnsItems = customDnsList, - contentBlockersOptions = contentBlockersOptions, - selectedObfuscation = selectedObfuscation, - quantumResistant = quantumResistant, - selectedWireguardPort = selectedWireguardPort, - availablePortRanges = availablePortRanges - ) - } - is VpnSettingsDialogState.CustomPortDialog -> { - VpnSettingsUiState.CustomPortDialogUiState( - mtu = mtuValue, - isAutoConnectEnabled = isAutoConnectEnabled, - isLocalNetworkSharingEnabled = isLocalNetworkSharingEnabled, - isCustomDnsEnabled = isCustomDnsEnabled, - isAllowLanEnabled = isAllowLanEnabled, - customDnsItems = customDnsList, - contentBlockersOptions = contentBlockersOptions, - selectedObfuscation = selectedObfuscation, - quantumResistant = quantumResistant, - selectedWireguardPort = selectedWireguardPort, - availablePortRanges = availablePortRanges - ) - } - else -> - VpnSettingsUiState.DefaultUiState( - mtu = mtuValue, - isAutoConnectEnabled = isAutoConnectEnabled, - isLocalNetworkSharingEnabled = isLocalNetworkSharingEnabled, - isCustomDnsEnabled = isCustomDnsEnabled, - isAllowLanEnabled = isAllowLanEnabled, - customDnsItems = customDnsList, - contentBlockersOptions = contentBlockersOptions, - selectedObfuscation = selectedObfuscation, - quantumResistant = quantumResistant, - selectedWireguardPort = selectedWireguardPort - ) - } - } + fun toUiState(): VpnSettingsUiState = + VpnSettingsUiState( + mtuValue, + isAutoConnectEnabled, + isLocalNetworkSharingEnabled, + isCustomDnsEnabled, + customDnsList, + contentBlockersOptions, + isAllowLanEnabled, + selectedObfuscation, + quantumResistant, + selectedWireguardPort, + availablePortRanges, + dialogState.toUi(this@VpnSettingsViewModelState) + ) companion object { private const val EMPTY_STRING = "" @@ -189,7 +51,7 @@ data class VpnSettingsViewModelState( customDnsList = listOf(), contentBlockersOptions = DefaultDnsOptions(), isAllowLanEnabled = false, - dialogState = VpnSettingsDialogState.NoDialog, + dialogState = null, selectedObfuscation = SelectedObfuscation.Auto, quantumResistant = QuantumResistantState.Off, selectedWireguardPort = Constraint.Any(), @@ -198,8 +60,28 @@ data class VpnSettingsViewModelState( } } +private fun VpnSettingsDialogState?.toUi( + vpnSettingsViewModelState: VpnSettingsViewModelState +): VpnSettingsDialog? = + when (this) { + VpnSettingsDialogState.ContentBlockersInfoDialog -> VpnSettingsDialog.ContentBlockersInfo + VpnSettingsDialogState.CustomDnsInfoDialog -> VpnSettingsDialog.CustomDnsInfo + VpnSettingsDialogState.CustomPortDialog -> + VpnSettingsDialog.CustomPort(vpnSettingsViewModelState.availablePortRanges) + is VpnSettingsDialogState.DnsDialog -> VpnSettingsDialog.Dns(stagedDns) + VpnSettingsDialogState.LocalNetworkSharingInfoDialog -> + VpnSettingsDialog.LocalNetworkSharingInfo + VpnSettingsDialogState.MalwareInfoDialog -> VpnSettingsDialog.MalwareInfo + is VpnSettingsDialogState.MtuDialog -> VpnSettingsDialog.Mtu(mtuEditValue) + VpnSettingsDialogState.ObfuscationInfoDialog -> VpnSettingsDialog.ObfuscationInfo + VpnSettingsDialogState.QuantumResistanceInfoDialog -> + VpnSettingsDialog.QuantumResistanceInfo + VpnSettingsDialogState.WireguardPortInfoDialog -> + VpnSettingsDialog.WireguardPortInfo(vpnSettingsViewModelState.availablePortRanges) + null -> null + } + sealed class VpnSettingsDialogState { - data object NoDialog : VpnSettingsDialogState() data class MtuDialog(val mtuEditValue: String) : VpnSettingsDialogState() |
