summaryrefslogtreecommitdiffhomepage
path: root/android/app/src
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2023-10-29 23:16:52 +0100
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2023-11-08 08:55:59 +0100
commit5e9ea351730db33da12193d96363a3b79374d361 (patch)
tree977dfbac479d66ca328a153b7bd24d7f127d126d /android/app/src
parent37353fb8909445192d2cd07bd9868a0186f6cf08 (diff)
downloadmullvadvpn-5e9ea351730db33da12193d96363a3b79374d361.tar.xz
mullvadvpn-5e9ea351730db33da12193d96363a3b79374d361.zip
Add relay list filter use case
Diffstat (limited to 'android/app/src')
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/RelayListListener.kt11
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/RelayListFilterUseCase.kt46
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/RelayListUseCase.kt4
3 files changed, 57 insertions, 4 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/RelayListListener.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/RelayListListener.kt
index 7f316bacb8..386f7e3bf4 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/RelayListListener.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/RelayListListener.kt
@@ -9,7 +9,10 @@ import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn
import net.mullvad.mullvadvpn.lib.ipc.Event
import net.mullvad.mullvadvpn.lib.ipc.Request
+import net.mullvad.mullvadvpn.model.Constraint
import net.mullvad.mullvadvpn.model.GeographicLocationConstraint
+import net.mullvad.mullvadvpn.model.Ownership
+import net.mullvad.mullvadvpn.model.Providers
import net.mullvad.mullvadvpn.model.RelayList
import net.mullvad.mullvadvpn.model.WireguardConstraints
import net.mullvad.mullvadvpn.model.WireguardEndpointData
@@ -32,5 +35,13 @@ class RelayListListener(
messageHandler.trySendRequest(Request.SetWireguardConstraints(value))
}
+ fun updateSelectedOwnershipFilter(value: Constraint<Ownership>) {
+ messageHandler.trySendRequest(Request.SetOwnership(value))
+ }
+
+ fun updateSelectedProvidersFilter(value: Constraint<Providers>) {
+ messageHandler.trySendRequest(Request.SetProviders(value))
+ }
+
private fun defaultRelayList() = RelayList(ArrayList(), WireguardEndpointData(ArrayList()))
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/RelayListFilterUseCase.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/RelayListFilterUseCase.kt
new file mode 100644
index 0000000000..f15b2535cb
--- /dev/null
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/RelayListFilterUseCase.kt
@@ -0,0 +1,46 @@
+package net.mullvad.mullvadvpn.usecase
+
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.map
+import net.mullvad.mullvadvpn.model.Constraint
+import net.mullvad.mullvadvpn.model.Ownership
+import net.mullvad.mullvadvpn.model.Providers
+import net.mullvad.mullvadvpn.model.RelayListCity
+import net.mullvad.mullvadvpn.model.RelayListCountry
+import net.mullvad.mullvadvpn.repository.SettingsRepository
+import net.mullvad.mullvadvpn.ui.serviceconnection.RelayListListener
+
+class RelayListFilterUseCase(
+ private val relayListListener: RelayListListener,
+ private val settingsRepository: SettingsRepository
+) {
+ fun updateOwnershipFilter(ownership: Constraint<Ownership>) {
+ relayListListener.updateSelectedOwnershipFilter(ownership)
+ }
+
+ fun updateProviderFilter(providers: Constraint<Providers>) {
+ relayListListener.updateSelectedProvidersFilter(providers)
+ }
+
+ fun selectedOwnership(): Flow<Constraint<Ownership>> =
+ settingsRepository.settingsUpdates.map { settings ->
+ settings?.relaySettings?.relayConstraints()?.ownership ?: Constraint.Any()
+ }
+
+ fun selectedProviders(): Flow<Constraint<Providers>> =
+ settingsRepository.settingsUpdates.map { settings ->
+ settings?.relaySettings?.relayConstraints()?.providers ?: Constraint.Any()
+ }
+
+ fun availableProviders(): Flow<List<Pair<String, Boolean>>> =
+ relayListListener.relayListEvents.map { relayList ->
+ relayList
+ ?.countries
+ ?.flatMap(RelayListCountry::cities)
+ ?.flatMap(RelayListCity::relays)
+ ?.filter { relay -> relay.isWireguardRelay }
+ ?.map { relay -> relay.provider to relay.owned }
+ ?.distinct()
+ ?: emptyList()
+ }
+}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/RelayListUseCase.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/RelayListUseCase.kt
index 37dce1dda5..0bfe1d038c 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/RelayListUseCase.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/RelayListUseCase.kt
@@ -6,7 +6,6 @@ import kotlinx.coroutines.flow.map
import net.mullvad.mullvadvpn.lib.common.util.toGeographicLocationConstraint
import net.mullvad.mullvadvpn.model.Constraint
import net.mullvad.mullvadvpn.model.GeographicLocationConstraint
-import net.mullvad.mullvadvpn.model.RelayConstraints
import net.mullvad.mullvadvpn.model.RelaySettings
import net.mullvad.mullvadvpn.model.WireguardConstraints
import net.mullvad.mullvadvpn.relaylist.RelayCountry
@@ -55,7 +54,4 @@ class RelayListUseCase(
val location = relaySettings?.relayConstraints()?.location
return location?.let { this.findItemForLocation(location.toGeographicLocationConstraint()) }
}
-
- private fun RelaySettings.relayConstraints(): RelayConstraints? =
- (this as? RelaySettings.Normal)?.relayConstraints
}