summaryrefslogtreecommitdiffhomepage
path: root/android/app/src
diff options
context:
space:
mode:
Diffstat (limited to 'android/app/src')
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/Provider.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/RelayListListener.kt5
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/RelayListFilterUseCase.kt17
3 files changed, 16 insertions, 9 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/Provider.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/Provider.kt
new file mode 100644
index 0000000000..c103976700
--- /dev/null
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/Provider.kt
@@ -0,0 +1,3 @@
+package net.mullvad.mullvadvpn.relaylist
+
+data class Provider(val name: String, val mullvadOwned: Boolean)
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 386f7e3bf4..0a1767624c 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
@@ -6,6 +6,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.flow.stateIn
import net.mullvad.mullvadvpn.lib.ipc.Event
import net.mullvad.mullvadvpn.lib.ipc.Request
@@ -25,6 +26,10 @@ class RelayListListener(
messageHandler
.events<Event.NewRelayList>()
.map { it.relayList ?: defaultRelayList() }
+ // This is added so that we always have a relay list. Otherwise sometimes there would
+ // not be a relay list since the fetching of a relay list would be done before the
+ // event stream is available.
+ .onStart { messageHandler.trySendRequest(Request.FetchRelayList) }
.stateIn(CoroutineScope(dispatcher), SharingStarted.Eagerly, defaultRelayList())
fun updateSelectedRelayLocation(value: GeographicLocationConstraint) {
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
index f15b2535cb..a26f302f9c 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/RelayListFilterUseCase.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/RelayListFilterUseCase.kt
@@ -7,6 +7,7 @@ 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.relaylist.Provider
import net.mullvad.mullvadvpn.repository.SettingsRepository
import net.mullvad.mullvadvpn.ui.serviceconnection.RelayListListener
@@ -32,15 +33,13 @@ class RelayListFilterUseCase(
settings?.relaySettings?.relayConstraints()?.providers ?: Constraint.Any()
}
- fun availableProviders(): Flow<List<Pair<String, Boolean>>> =
+ fun availableProviders(): Flow<List<Provider>> =
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()
+ relayList.countries
+ .flatMap(RelayListCountry::cities)
+ .flatMap(RelayListCity::relays)
+ .filter { relay -> relay.isWireguardRelay }
+ .map { relay -> Provider(relay.provider, relay.owned) }
+ .distinct()
}
}