summaryrefslogtreecommitdiffhomepage
path: root/android/app
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2023-05-29 16:39:41 +0200
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2023-06-07 17:51:06 +0200
commit07f1ecbeb787ce59812b59c0b7974cfc40e73071 (patch)
tree98c846b2c943a1459a36fdbc37ea1b6e156990ac /android/app
parent32812d48d4a72417642f1d487f9b2f8571ce7eea (diff)
downloadmullvadvpn-07f1ecbeb787ce59812b59c0b7974cfc40e73071.tar.xz
mullvadvpn-07f1ecbeb787ce59812b59c0b7974cfc40e73071.zip
Add android support for quantum tunneling in the daemon
Diffstat (limited to 'android/app')
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt2
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt21
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ipc/Request.kt5
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/QuantumResistantState.kt11
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/WireguardTunnelOptions.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/SettingsRepository.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt10
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/SettingsListener.kt9
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/SettingsListener.kt7
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt5
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt5
11 files changed, 58 insertions, 23 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 9ac2a761ff..805801946d 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
@@ -156,7 +156,7 @@ fun VpnSettingsScreen(
toastMessagesSharedFlow: SharedFlow<String>,
onSelectObfuscationSetting: (selectedObfuscation: SelectedObfuscation) -> Unit = {},
onObfuscationInfoClick: () -> Unit = {},
- onSelectQuantumResistanceSetting: (quantumResistant: Boolean?) -> Unit = {},
+ onSelectQuantumResistanceSetting: (quantumResistant: QuantumResistantState) -> Unit = {},
onQuantumResistanceInfoClicked: () -> Unit = {}
) {
val cellVerticalSpacing = dimensionResource(id = R.dimen.cell_label_vertical_padding)
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 c2c7d074fd..1515b2d19a 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
@@ -1,6 +1,7 @@
package net.mullvad.mullvadvpn.compose.state
import net.mullvad.mullvadvpn.model.DefaultDnsOptions
+import net.mullvad.mullvadvpn.model.QuantumResistantState
import net.mullvad.mullvadvpn.model.SelectedObfuscation
import net.mullvad.mullvadvpn.viewmodel.CustomDnsItem
import net.mullvad.mullvadvpn.viewmodel.StagedDns
@@ -14,7 +15,7 @@ sealed interface VpnSettingsUiState {
val contentBlockersOptions: DefaultDnsOptions
val isAllowLanEnabled: Boolean
val selectedObfuscation: SelectedObfuscation
- val quantumResistant: Boolean?
+ val quantumResistant: QuantumResistantState
data class DefaultUiState(
override val mtu: String = "",
@@ -25,7 +26,7 @@ sealed interface VpnSettingsUiState {
override val customDnsItems: List<CustomDnsItem> = listOf(),
override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(),
override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off,
- override val quantumResistant: Boolean? = null
+ override val quantumResistant: QuantumResistantState = QuantumResistantState.Off
) : VpnSettingsUiState
data class MtuDialogUiState(
@@ -38,7 +39,7 @@ sealed interface VpnSettingsUiState {
override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(),
val mtuEditValue: String,
override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off,
- override val quantumResistant: Boolean? = null
+ override val quantumResistant: QuantumResistantState = QuantumResistantState.Off
) : VpnSettingsUiState
data class DnsDialogUiState(
@@ -51,7 +52,7 @@ sealed interface VpnSettingsUiState {
override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(),
val stagedDns: StagedDns,
override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off,
- override val quantumResistant: Boolean? = null
+ override val quantumResistant: QuantumResistantState = QuantumResistantState.Off
) : VpnSettingsUiState
data class LocalNetworkSharingInfoDialogUiState(
@@ -63,7 +64,7 @@ sealed interface VpnSettingsUiState {
override val customDnsItems: List<CustomDnsItem> = listOf(),
override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(),
override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off,
- override val quantumResistant: Boolean? = null
+ override val quantumResistant: QuantumResistantState = QuantumResistantState.Off
) : VpnSettingsUiState
data class ContentBlockersInfoDialogUiState(
@@ -75,7 +76,7 @@ sealed interface VpnSettingsUiState {
override val customDnsItems: List<CustomDnsItem> = listOf(),
override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(),
override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off,
- override val quantumResistant: Boolean? = null
+ override val quantumResistant: QuantumResistantState = QuantumResistantState.Off
) : VpnSettingsUiState
data class CustomDnsInfoDialogUiState(
@@ -87,7 +88,7 @@ sealed interface VpnSettingsUiState {
override val customDnsItems: List<CustomDnsItem> = listOf(),
override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(),
override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off,
- override val quantumResistant: Boolean? = null
+ override val quantumResistant: QuantumResistantState = QuantumResistantState.Off
) : VpnSettingsUiState
data class MalwareInfoDialogUiState(
@@ -99,7 +100,7 @@ sealed interface VpnSettingsUiState {
override val customDnsItems: List<CustomDnsItem> = listOf(),
override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(),
override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off,
- override val quantumResistant: Boolean? = null
+ override val quantumResistant: QuantumResistantState = QuantumResistantState.Off
) : VpnSettingsUiState
data class ObfuscationInfoDialogUiState(
@@ -111,7 +112,7 @@ sealed interface VpnSettingsUiState {
override val customDnsItems: List<CustomDnsItem> = listOf(),
override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(),
override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off,
- override val quantumResistant: Boolean? = null
+ override val quantumResistant: QuantumResistantState = QuantumResistantState.Off
) : VpnSettingsUiState
data class QuantumResistanceInfoDialogUiState(
@@ -123,6 +124,6 @@ sealed interface VpnSettingsUiState {
override val customDnsItems: List<CustomDnsItem> = listOf(),
override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(),
override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off,
- override val quantumResistant: Boolean? = null
+ override val quantumResistant: QuantumResistantState = QuantumResistantState.Off
) : VpnSettingsUiState
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ipc/Request.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ipc/Request.kt
index c9bd699c12..7ff4a63ff4 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ipc/Request.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ipc/Request.kt
@@ -7,6 +7,7 @@ import kotlinx.parcelize.Parcelize
import net.mullvad.mullvadvpn.model.DnsOptions
import net.mullvad.mullvadvpn.model.LocationConstraint
import net.mullvad.mullvadvpn.model.ObfuscationSettings
+import net.mullvad.mullvadvpn.model.QuantumResistantState
// Requests that the service can handle
sealed class Request : Message.RequestMessage() {
@@ -85,7 +86,9 @@ sealed class Request : Message.RequestMessage() {
@Parcelize data class SetObfuscationSettings(val settings: ObfuscationSettings?) : Request()
- @Parcelize data class SetWireGuardQuantumResistant(val quantumResistant: Boolean?) : Request()
+ @Parcelize
+ data class SetWireGuardQuantumResistant(val quantumResistant: QuantumResistantState) :
+ Request()
companion object {
private const val MESSAGE_KEY = "request"
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/QuantumResistantState.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/QuantumResistantState.kt
new file mode 100644
index 0000000000..a19267388a
--- /dev/null
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/QuantumResistantState.kt
@@ -0,0 +1,11 @@
+package net.mullvad.mullvadvpn.model
+
+import android.os.Parcelable
+import kotlinx.parcelize.Parcelize
+
+@Parcelize
+enum class QuantumResistantState : Parcelable {
+ Auto,
+ On,
+ Off
+}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/WireguardTunnelOptions.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/WireguardTunnelOptions.kt
index 47c8c54a57..f4a869a4ea 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/WireguardTunnelOptions.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/WireguardTunnelOptions.kt
@@ -4,4 +4,5 @@ import android.os.Parcelable
import kotlinx.parcelize.Parcelize
@Parcelize
-data class WireguardTunnelOptions(val mtu: Int?, val quantumResistant: Boolean?) : Parcelable
+data class WireguardTunnelOptions(val mtu: Int?, val quantumResistant: QuantumResistantState) :
+ Parcelable
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/SettingsRepository.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/SettingsRepository.kt
index cde1c698ca..ac9637c683 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/SettingsRepository.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/SettingsRepository.kt
@@ -14,6 +14,7 @@ import net.mullvad.mullvadvpn.model.DefaultDnsOptions
import net.mullvad.mullvadvpn.model.DnsOptions
import net.mullvad.mullvadvpn.model.DnsState
import net.mullvad.mullvadvpn.model.ObfuscationSettings
+import net.mullvad.mullvadvpn.model.QuantumResistantState
import net.mullvad.mullvadvpn.model.Settings
import net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnectionManager
import net.mullvad.mullvadvpn.ui.serviceconnection.customDns
@@ -54,7 +55,7 @@ class SettingsRepository(
serviceConnectionManager.settingsListener()?.wireguardMtu = value
}
- fun setWireguardQuantumResistant(value: Boolean?) {
+ fun setWireguardQuantumResistant(value: QuantumResistantState) {
serviceConnectionManager.settingsListener()?.wireguardQuantumResistant = value
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt
index d46a71d805..089e13ef31 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt
@@ -14,6 +14,7 @@ import net.mullvad.mullvadvpn.model.GeoIpLocation
import net.mullvad.mullvadvpn.model.GetAccountDataResult
import net.mullvad.mullvadvpn.model.LoginResult
import net.mullvad.mullvadvpn.model.ObfuscationSettings
+import net.mullvad.mullvadvpn.model.QuantumResistantState
import net.mullvad.mullvadvpn.model.RelayList
import net.mullvad.mullvadvpn.model.RelaySettingsUpdate
import net.mullvad.mullvadvpn.model.RemoveDeviceEvent
@@ -178,6 +179,10 @@ class MullvadDaemon(
setObfuscationSettings(daemonInterfaceAddress, settings)
}
+ fun setQuantumResistant(quantumResistant: QuantumResistantState) {
+ setQuantumResistantTunnel(daemonInterfaceAddress, quantumResistant)
+ }
+
fun onDestroy() {
onSettingsChange.unsubscribeAll()
onTunnelStateChange.unsubscribeAll()
@@ -255,6 +260,11 @@ class MullvadDaemon(
settings: ObfuscationSettings?
)
+ private external fun setQuantumResistantTunnel(
+ daemonInterfaceAddress: Long,
+ quantumResistant: QuantumResistantState
+ )
+
private fun notifyAppVersionInfoEvent(appVersionInfo: AppVersionInfo) {
onAppVersionInfoChange?.invoke(appVersionInfo)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/SettingsListener.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/SettingsListener.kt
index cd0da7a3fc..fec7578a05 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/SettingsListener.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/SettingsListener.kt
@@ -1,6 +1,5 @@
package net.mullvad.mullvadvpn.service.endpoint
-import android.util.Log
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.channels.Channel
@@ -19,6 +18,7 @@ class SettingsListener(endpoint: ServiceEndpoint) {
class SetAutoConnect(val autoConnect: Boolean) : Command()
class SetWireGuardMtu(val mtu: Int?) : Command()
class SetObfuscationSettings(val settings: ObfuscationSettings?) : Command()
+ class SetQuantumResistant(val quantumResistant: QuantumResistantState) : Command()
}
private val commandChannel = spawnActor()
@@ -62,8 +62,9 @@ class SettingsListener(endpoint: ServiceEndpoint) {
}
registerHandler(Request.SetWireGuardQuantumResistant::class) { request ->
- // TODO
- Log.d("Remove this", "Set quantum resistant ${request.quantumResistant}")
+ commandChannel.trySendBlocking(
+ Command.SetQuantumResistant(request.quantumResistant)
+ )
}
}
}
@@ -127,6 +128,8 @@ class SettingsListener(endpoint: ServiceEndpoint) {
is Command.SetWireGuardMtu -> daemon.await().setWireguardMtu(command.mtu)
is Command.SetObfuscationSettings ->
daemon.await().setObfuscationSettings(command.settings)
+ is Command.SetQuantumResistant ->
+ daemon.await().setQuantumResistant(command.quantumResistant)
}
}
} catch (exception: ClosedReceiveChannelException) {
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/SettingsListener.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/SettingsListener.kt
index 5cfb4f1f0b..4146c66ce8 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/SettingsListener.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/SettingsListener.kt
@@ -6,6 +6,7 @@ import net.mullvad.mullvadvpn.ipc.EventDispatcher
import net.mullvad.mullvadvpn.ipc.Request
import net.mullvad.mullvadvpn.model.DnsOptions
import net.mullvad.mullvadvpn.model.ObfuscationSettings
+import net.mullvad.mullvadvpn.model.QuantumResistantState
import net.mullvad.mullvadvpn.model.RelaySettings
import net.mullvad.mullvadvpn.model.Settings
import net.mullvad.talpid.util.EventNotifier
@@ -35,8 +36,10 @@ class SettingsListener(private val connection: Messenger, eventDispatcher: Event
connection.send(Request.SetWireGuardMtu(value).message)
}
- var wireguardQuantumResistant: Boolean?
- get() = settingsNotifier.latestEvent?.tunnelOptions?.wireguard?.quantumResistant
+ var wireguardQuantumResistant: QuantumResistantState
+ get() =
+ settingsNotifier.latestEvent?.tunnelOptions?.wireguard?.quantumResistant
+ ?: QuantumResistantState.Off
set(value) {
connection.send(Request.SetWireGuardQuantumResistant(value).message)
}
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 b8ff734287..81811722c7 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
@@ -22,6 +22,7 @@ import net.mullvad.mullvadvpn.model.Constraint
import net.mullvad.mullvadvpn.model.DefaultDnsOptions
import net.mullvad.mullvadvpn.model.DnsState
import net.mullvad.mullvadvpn.model.ObfuscationSettings
+import net.mullvad.mullvadvpn.model.QuantumResistantState
import net.mullvad.mullvadvpn.model.SelectedObfuscation
import net.mullvad.mullvadvpn.model.Settings
import net.mullvad.mullvadvpn.model.Udp2TcpObfuscationSettings
@@ -56,7 +57,7 @@ class VpnSettingsViewModel(
selectedObfuscation = settings?.selectedObfuscationSettings()
?: SelectedObfuscation.Off,
dialogState = dialogState,
- quantumResistant = settings?.quantumResistant()
+ quantumResistant = settings?.quantumResistant() ?: QuantumResistantState.Off
)
}
.stateIn(
@@ -306,7 +307,7 @@ class VpnSettingsViewModel(
dialogState.update { VpnSettingsDialogState.ObfuscationInfoDialog }
}
- fun onSelectQuantumResistanceSetting(quantumResistant: Boolean?) {
+ fun onSelectQuantumResistanceSetting(quantumResistant: QuantumResistantState) {
viewModelScope.launch(dispatcher) {
repository.setWireguardQuantumResistant(quantumResistant)
}
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 86f0c980eb..520296784a 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
@@ -2,6 +2,7 @@ package net.mullvad.mullvadvpn.viewmodel
import net.mullvad.mullvadvpn.compose.state.VpnSettingsUiState
import net.mullvad.mullvadvpn.model.DefaultDnsOptions
+import net.mullvad.mullvadvpn.model.QuantumResistantState
import net.mullvad.mullvadvpn.model.SelectedObfuscation
data class VpnSettingsViewModelState(
@@ -14,7 +15,7 @@ data class VpnSettingsViewModelState(
val contentBlockersOptions: DefaultDnsOptions,
val selectedObfuscation: SelectedObfuscation,
val dialogState: VpnSettingsDialogState,
- val quantumResistant: Boolean?
+ val quantumResistant: QuantumResistantState
) {
fun toUiState(): VpnSettingsUiState {
return when (dialogState) {
@@ -140,7 +141,7 @@ data class VpnSettingsViewModelState(
isAllowLanEnabled = false,
dialogState = VpnSettingsDialogState.NoDialog,
selectedObfuscation = SelectedObfuscation.Auto,
- quantumResistant = null
+ quantumResistant = QuantumResistantState.Off
)
}
}