summaryrefslogtreecommitdiffhomepage
path: root/android/app/src
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson@mullvad.net>2024-10-09 16:32:56 +0200
committerDavid Göransson <david.goransson@mullvad.net>2024-10-09 16:32:56 +0200
commit3b30a3f4f45c5ed36aae7186c9d6ac5300fa0aa4 (patch)
tree06b46a345d96b0aa3283faeffc9f3fc5f58e550f /android/app/src
parent0962150429d7fce47c33e6dafe3a195e890eab7f (diff)
parentcfe99ea983818b9462a9240c67ba7d2c28ba6c94 (diff)
downloadmullvadvpn-3b30a3f4f45c5ed36aae7186c9d6ac5300fa0aa4.tar.xz
mullvadvpn-3b30a3f4f45c5ed36aae7186c9d6ac5300fa0aa4.zip
Merge branch 'implement-multihop-daemon-communication-droid-823'
Diffstat (limited to 'android/app/src')
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/preview/ConnectUiStatePreviewParameterProvider.kt1
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/preview/TunnelStatePreviewData.kt1
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/di/UiModule.kt4
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/RelayListRepository.kt4
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/WireguardConstraintsRepository.kt11
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt13
-rw-r--r--android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/ConnectViewModelTest.kt1
-rw-r--r--android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelTest.kt16
8 files changed, 33 insertions, 18 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/preview/ConnectUiStatePreviewParameterProvider.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/preview/ConnectUiStatePreviewParameterProvider.kt
index 50fe6244f7..1c08feb6f1 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/preview/ConnectUiStatePreviewParameterProvider.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/preview/ConnectUiStatePreviewParameterProvider.kt
@@ -37,6 +37,7 @@ private fun generateOtherStates(): Sequence<ConnectUiState> =
latitude = 23.3,
longitude = 12.99,
hostname = "Hostname",
+ entryHostname = "EntryHostname",
),
selectedRelayItemTitle = "Relay Title",
tunnelState = state,
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/preview/TunnelStatePreviewData.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/preview/TunnelStatePreviewData.kt
index b6ca18c91a..ffb9117049 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/preview/TunnelStatePreviewData.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/preview/TunnelStatePreviewData.kt
@@ -61,6 +61,7 @@ private fun generateLocation(): GeoIpLocation =
country = "",
city = "",
hostname = "",
+ entryHostname = "",
latitude = 0.0,
longitude = 0.0,
)
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 89c4e1e68d..e00b3d9b98 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
@@ -27,6 +27,7 @@ import net.mullvad.mullvadvpn.repository.RelayOverridesRepository
import net.mullvad.mullvadvpn.repository.SettingsRepository
import net.mullvad.mullvadvpn.repository.SplashCompleteRepository
import net.mullvad.mullvadvpn.repository.SplitTunnelingRepository
+import net.mullvad.mullvadvpn.repository.WireguardConstraintsRepository
import net.mullvad.mullvadvpn.ui.MainActivity
import net.mullvad.mullvadvpn.ui.serviceconnection.AppVersionInfoRepository
import net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnectionManager
@@ -140,6 +141,7 @@ val uiModule = module {
get(named(BOOT_COMPLETED_RECEIVER_COMPONENT_NAME)),
)
}
+ single { WireguardConstraintsRepository(get()) }
single { AccountExpiryInAppNotificationUseCase(get()) }
single { TunnelStateNotificationUseCase(get()) }
@@ -208,7 +210,7 @@ val uiModule = module {
viewModel { SettingsViewModel(get(), get(), IS_PLAY_BUILD) }
viewModel { SplashViewModel(get(), get(), get(), get()) }
viewModel { VoucherDialogViewModel(get()) }
- viewModel { VpnSettingsViewModel(get(), get(), get(), get()) }
+ viewModel { VpnSettingsViewModel(get(), get(), get(), get(), get()) }
viewModel { WelcomeViewModel(get(), get(), get(), get(), isPlayBuild = IS_PLAY_BUILD) }
viewModel { ReportProblemViewModel(get(), get()) }
viewModel { ViewLogsViewModel(get()) }
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/RelayListRepository.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/RelayListRepository.kt
index 4bdde9fec5..ed78ecb537 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/RelayListRepository.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/RelayListRepository.kt
@@ -19,7 +19,6 @@ import net.mullvad.mullvadvpn.lib.model.GeoLocationId
import net.mullvad.mullvadvpn.lib.model.PortRange
import net.mullvad.mullvadvpn.lib.model.RelayItem
import net.mullvad.mullvadvpn.lib.model.RelayItemId
-import net.mullvad.mullvadvpn.lib.model.WireguardConstraints
import net.mullvad.mullvadvpn.lib.model.WireguardEndpointData
import net.mullvad.mullvadvpn.lib.model.cities
import net.mullvad.mullvadvpn.lib.model.name
@@ -82,9 +81,6 @@ class RelayListRepository(
suspend fun updateSelectedRelayLocation(value: RelayItemId) =
managementService.setRelayLocation(value)
- suspend fun updateSelectedWireguardConstraints(value: WireguardConstraints) =
- managementService.setWireguardConstraints(value)
-
fun find(geoLocationId: GeoLocationId) = relayList.value.findByGeoLocationId(geoLocationId)
private fun defaultWireguardEndpointData() = WireguardEndpointData(emptyList(), emptyList())
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/WireguardConstraintsRepository.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/WireguardConstraintsRepository.kt
new file mode 100644
index 0000000000..816b172ea5
--- /dev/null
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/WireguardConstraintsRepository.kt
@@ -0,0 +1,11 @@
+package net.mullvad.mullvadvpn.repository
+
+import net.mullvad.mullvadvpn.lib.daemon.grpc.ManagementService
+import net.mullvad.mullvadvpn.lib.model.Constraint
+import net.mullvad.mullvadvpn.lib.model.Port
+
+class WireguardConstraintsRepository(private val managementService: ManagementService) {
+ suspend fun setWireguardPort(port: Constraint<Port>) = managementService.setWireguardPort(port)
+
+ suspend fun setMultihop(enabled: Boolean) = managementService.setMultihop(enabled)
+}
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 5ca136341e..e160776ee0 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
@@ -27,10 +27,10 @@ import net.mullvad.mullvadvpn.lib.model.ObfuscationMode
import net.mullvad.mullvadvpn.lib.model.Port
import net.mullvad.mullvadvpn.lib.model.QuantumResistantState
import net.mullvad.mullvadvpn.lib.model.Settings
-import net.mullvad.mullvadvpn.lib.model.WireguardConstraints
import net.mullvad.mullvadvpn.repository.AutoStartAndConnectOnBootRepository
import net.mullvad.mullvadvpn.repository.RelayListRepository
import net.mullvad.mullvadvpn.repository.SettingsRepository
+import net.mullvad.mullvadvpn.repository.WireguardConstraintsRepository
import net.mullvad.mullvadvpn.usecase.SystemVpnSettingsAvailableUseCase
sealed interface VpnSettingsSideEffect {
@@ -49,6 +49,7 @@ class VpnSettingsViewModel(
private val relayListRepository: RelayListRepository,
private val systemVpnSettingsUseCase: SystemVpnSettingsAvailableUseCase,
private val autoStartAndConnectOnBootRepository: AutoStartAndConnectOnBootRepository,
+ private val wireguardConstraintsRepository: WireguardConstraintsRepository,
private val dispatcher: CoroutineDispatcher = Dispatchers.IO,
) : ViewModel() {
@@ -231,11 +232,7 @@ class VpnSettingsViewModel(
if (port is Constraint.Only && port.value !in WIREGUARD_PRESET_PORTS) {
customPort.update { port.value }
}
- viewModelScope.launch {
- relayListRepository.updateSelectedWireguardConstraints(
- WireguardConstraints(port = port)
- )
- }
+ viewModelScope.launch { wireguardConstraintsRepository.setWireguardPort(port = port) }
}
fun resetCustomPort() {
@@ -244,9 +241,7 @@ class VpnSettingsViewModel(
// If custom port was selected, update selection to be any.
if (isCustom) {
viewModelScope.launch {
- relayListRepository.updateSelectedWireguardConstraints(
- WireguardConstraints(port = Constraint.Any)
- )
+ wireguardConstraintsRepository.setWireguardPort(port = Constraint.Any)
}
}
}
diff --git a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/ConnectViewModelTest.kt b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/ConnectViewModelTest.kt
index 267813d62a..9696a30539 100644
--- a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/ConnectViewModelTest.kt
+++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/ConnectViewModelTest.kt
@@ -192,6 +192,7 @@ class ConnectViewModelTest {
country = "Sweden",
city = "Gothenburg",
hostname = "Host",
+ entryHostname = "EntryHost",
latitude = 57.7065,
longitude = 11.967,
)
diff --git a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelTest.kt b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelTest.kt
index d04cdc5d26..340809fbb3 100644
--- a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelTest.kt
+++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelTest.kt
@@ -33,6 +33,7 @@ import net.mullvad.mullvadvpn.lib.model.WireguardTunnelOptions
import net.mullvad.mullvadvpn.repository.AutoStartAndConnectOnBootRepository
import net.mullvad.mullvadvpn.repository.RelayListRepository
import net.mullvad.mullvadvpn.repository.SettingsRepository
+import net.mullvad.mullvadvpn.repository.WireguardConstraintsRepository
import net.mullvad.mullvadvpn.usecase.SystemVpnSettingsAvailableUseCase
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.BeforeEach
@@ -49,6 +50,7 @@ class VpnSettingsViewModelTest {
private val mockRelayListRepository: RelayListRepository = mockk()
private val mockAutoStartAndConnectOnBootRepository: AutoStartAndConnectOnBootRepository =
mockk()
+ private val mockWireguardConstraintsRepository: WireguardConstraintsRepository = mockk()
private val mockSettingsUpdate = MutableStateFlow<Settings?>(null)
private val portRangeFlow = MutableStateFlow(emptyList<PortRange>())
@@ -70,6 +72,7 @@ class VpnSettingsViewModelTest {
relayListRepository = mockRelayListRepository,
dispatcher = UnconfinedTestDispatcher(),
autoStartAndConnectOnBootRepository = mockAutoStartAndConnectOnBootRepository,
+ wireguardConstraintsRepository = mockWireguardConstraintsRepository,
)
}
@@ -179,12 +182,17 @@ class VpnSettingsViewModelTest {
}
@Test
- fun `onWireguardPortSelected should invoke updateSelectedWireguardConstraint with Constraint Only with same port`() =
+ fun `onWireguardPortSelected should invoke setWireguardPort with Constraint Only with same port`() =
runTest {
// Arrange
val wireguardPort: Constraint<Port> = Constraint.Only(Port(99))
- val wireguardConstraints = WireguardConstraints(port = wireguardPort)
- coEvery { mockRelayListRepository.updateSelectedWireguardConstraints(any()) } returns
+ val wireguardConstraints =
+ WireguardConstraints(
+ port = wireguardPort,
+ useMultihop = false,
+ entryLocation = Constraint.Any,
+ )
+ coEvery { mockWireguardConstraintsRepository.setWireguardPort(any()) } returns
Unit.right()
// Act
@@ -192,7 +200,7 @@ class VpnSettingsViewModelTest {
// Assert
coVerify(exactly = 1) {
- mockRelayListRepository.updateSelectedWireguardConstraints(wireguardConstraints)
+ mockWireguardConstraintsRepository.setWireguardPort(wireguardConstraints.port)
}
}