diff options
Diffstat (limited to 'android/app/src')
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() } } |
