summaryrefslogtreecommitdiffhomepage
path: root/android/app
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson90@gmail.com>2023-10-19 16:04:23 +0200
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2023-10-25 14:03:20 +0200
commitbe9a8bc340de05f05b1cb100b0648c501240cff9 (patch)
treefcd4a1cb32dce06e0ffc6da09b68333b450b7e5a /android/app
parentc0cfd41987eac1ba5c8701c8e166dd13f9537406 (diff)
downloadmullvadvpn-be9a8bc340de05f05b1cb100b0648c501240cff9.tar.xz
mullvadvpn-be9a8bc340de05f05b1cb100b0648c501240cff9.zip
Simplify settings dialogs
Diffstat (limited to 'android/app')
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt36
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt205
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt30
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt198
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()