summaryrefslogtreecommitdiffhomepage
path: root/android/lib
diff options
context:
space:
mode:
authorKalle Lindström <karl.lindstrom@mullvad.net>2025-07-08 09:43:09 +0200
committerKalle Lindström <karl.lindstrom@mullvad.net>2025-07-10 14:20:34 +0200
commitd645ba1732d952c4edb80e92f6b04552b3b4710d (patch)
treeee7b5e880e26017700597d5341f18141b57b8f12 /android/lib
parentd8aa781b2058e1b89ebb367b09b82327ddfcd15f (diff)
downloadmullvadvpn-d645ba1732d952c4edb80e92f6b04552b3b4710d.tar.xz
mullvadvpn-d645ba1732d952c4edb80e92f6b04552b3b4710d.zip
Implement recents support in daemon
Diffstat (limited to 'android/lib')
-rw-r--r--android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/mapper/ToDomain.kt30
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Recents.kt13
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Settings.kt1
3 files changed, 41 insertions, 3 deletions
diff --git a/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/mapper/ToDomain.kt b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/mapper/ToDomain.kt
index f3037a8c1a..6c8544950f 100644
--- a/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/mapper/ToDomain.kt
+++ b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/mapper/ToDomain.kt
@@ -9,6 +9,7 @@ import java.time.Instant
import java.time.ZoneId
import java.util.UUID
import mullvad_daemon.management_interface.ManagementInterface
+import mullvad_daemon.management_interface.recentsOrNull
import net.mullvad.mullvadvpn.lib.daemon.grpc.GrpcConnectivityState
import net.mullvad.mullvadvpn.lib.daemon.grpc.RelayNameComparator
import net.mullvad.mullvadvpn.lib.model.AccountData
@@ -56,6 +57,8 @@ import net.mullvad.mullvadvpn.lib.model.PortRange
import net.mullvad.mullvadvpn.lib.model.ProviderId
import net.mullvad.mullvadvpn.lib.model.Providers
import net.mullvad.mullvadvpn.lib.model.QuantumResistantState
+import net.mullvad.mullvadvpn.lib.model.Recent
+import net.mullvad.mullvadvpn.lib.model.Recents
import net.mullvad.mullvadvpn.lib.model.RedeemVoucherSuccess
import net.mullvad.mullvadvpn.lib.model.RelayConstraints
import net.mullvad.mullvadvpn.lib.model.RelayItem
@@ -324,6 +327,7 @@ internal fun ManagementInterface.Settings.toDomain(): Settings =
showBetaReleases = showBetaReleases,
splitTunnelSettings = splitTunnel.toDomain(),
apiAccessMethodSettings = apiAccessMethods.toDomain(),
+ recents = recentsOrNull.toDomain(),
)
internal fun ManagementInterface.RelayOverride.toDomain(): RelayOverride =
@@ -351,14 +355,13 @@ internal fun ManagementInterface.NormalRelaySettings.toDomain(): RelayConstraint
wireguardConstraints = wireguardConstraints.toDomain(),
)
-internal fun ManagementInterface.LocationConstraint.toDomain(): Constraint<RelayItemId> =
+internal fun ManagementInterface.LocationConstraint.toDomain(): Constraint.Only<RelayItemId> =
when (typeCase) {
ManagementInterface.LocationConstraint.TypeCase.CUSTOM_LIST ->
Constraint.Only(CustomListId(customList))
ManagementInterface.LocationConstraint.TypeCase.LOCATION ->
Constraint.Only(location.toDomain())
- ManagementInterface.LocationConstraint.TypeCase.TYPE_NOT_SET -> Constraint.Any
- else -> throw IllegalArgumentException("Location constraint type is null")
+ else -> throw IllegalArgumentException("Invalid location constraint")
}
@Suppress("ReturnCount")
@@ -727,3 +730,24 @@ internal fun ManagementInterface.IpVersion.toDomain() =
ManagementInterface.IpVersion.V6 -> IpVersion.IPV6
ManagementInterface.IpVersion.UNRECOGNIZED -> error("Not supported ${this.name}")
}
+
+internal fun ManagementInterface.Recents?.toDomain(): Recents =
+ if (this != null) {
+ Recents.Enabled(recentsList.map { it.toDomain() })
+ } else {
+ Recents.Disabled
+ }
+
+internal fun ManagementInterface.Recent.toDomain(): Recent =
+ when (typeCase) {
+ ManagementInterface.Recent.TypeCase.MULTIHOP ->
+ Recent.Multihop(
+ entry = multihop.entry.toDomain().value,
+ exit = multihop.exit.toDomain().value,
+ )
+
+ ManagementInterface.Recent.TypeCase.SINGLEHOP ->
+ Recent.Singlehop(singlehop.toDomain().value)
+
+ ManagementInterface.Recent.TypeCase.TYPE_NOT_SET -> error("Recent type must be set")
+ }
diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Recents.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Recents.kt
new file mode 100644
index 0000000000..3ed1a97077
--- /dev/null
+++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Recents.kt
@@ -0,0 +1,13 @@
+package net.mullvad.mullvadvpn.lib.model
+
+sealed interface Recents {
+ data object Disabled : Recents
+
+ data class Enabled(val recents: List<Recent>) : Recents
+}
+
+sealed interface Recent {
+ data class Singlehop(val location: RelayItemId) : Recent
+
+ data class Multihop(val entry: RelayItemId, val exit: RelayItemId) : Recent
+}
diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Settings.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Settings.kt
index 99e8a2b8dc..253b4d3a74 100644
--- a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Settings.kt
+++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Settings.kt
@@ -13,6 +13,7 @@ data class Settings(
val showBetaReleases: Boolean,
val splitTunnelSettings: SplitTunnelSettings,
val apiAccessMethodSettings: List<ApiAccessMethodSetting>,
+ val recents: Recents,
) {
companion object
}