summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2023-11-13 13:09:03 +0100
committerAlbin <albin@mullvad.net>2023-11-17 16:37:07 +0100
commitb441a66572238dee87a8fcf7698524a8d75b416d (patch)
tree127033a92e871ced25f06c7683f1ccf8c07811ed /android
parentd5fe71a19e58d340c01a713d99393a1389724c4a (diff)
downloadmullvadvpn-b441a66572238dee87a8fcf7698524a8d75b416d.tar.xz
mullvadvpn-b441a66572238dee87a8fcf7698524a8d75b416d.zip
Fix race condition when updating provider and ownership at the same time
Diffstat (limited to 'android')
-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.kt11
-rw-r--r--android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/Request.kt10
-rw-r--r--android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/RelayListListener.kt25
4 files changed, 26 insertions, 31 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 30b8540bf9..d04e7394f9 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
@@ -42,12 +42,11 @@ 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))
+ fun updateSelectedOwnershipAndProviderFilter(
+ ownership: Constraint<Ownership>,
+ providers: Constraint<Providers>
+ ) {
+ messageHandler.trySendRequest(Request.SetOwnershipAndProviders(ownership, providers))
}
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
index a26f302f9c..f480e6a23a 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
@@ -15,12 +15,11 @@ 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 updateOwnershipAndProviderFilter(
+ ownership: Constraint<Ownership>,
+ providers: Constraint<Providers>
+ ) {
+ relayListListener.updateSelectedOwnershipAndProviderFilter(ownership, providers)
}
fun selectedOwnership(): Flow<Constraint<Ownership>> =
diff --git a/android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/Request.kt b/android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/Request.kt
index b73010785a..267f1f2619 100644
--- a/android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/Request.kt
+++ b/android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/Request.kt
@@ -103,12 +103,14 @@ sealed class Request : Message.RequestMessage() {
data class SetWireGuardQuantumResistant(val quantumResistant: QuantumResistantState) :
Request()
- @Parcelize data class SetOwnership(val ownership: Constraint<Ownership>) : Request()
-
- @Parcelize data class SetProviders(val providers: Constraint<Providers>) : Request()
-
@Parcelize data object FetchRelayList : Request()
+ @Parcelize
+ data class SetOwnershipAndProviders(
+ val ownership: Constraint<Ownership>,
+ val providers: Constraint<Providers>
+ ) : Request()
+
companion object {
private const val MESSAGE_KEY = "request"
diff --git a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/RelayListListener.kt b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/RelayListListener.kt
index 186ac21092..2f18c09064 100644
--- a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/RelayListListener.kt
+++ b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/RelayListListener.kt
@@ -67,25 +67,20 @@ class RelayListListener(
}
scope.launch {
- endpoint.dispatcher.parsedMessages.filterIsInstance<Request.SetOwnership>().collect {
- request ->
- val update = getCurrentRelayConstraints().copy(ownership = request.ownership)
- daemon.await().setRelaySettings(RelaySettings.Normal(update))
- }
- }
-
- scope.launch {
- endpoint.dispatcher.parsedMessages.filterIsInstance<Request.SetProviders>().collect {
- request ->
- val update = getCurrentRelayConstraints().copy(providers = request.providers)
- daemon.await().setRelaySettings(RelaySettings.Normal(update))
+ endpoint.dispatcher.parsedMessages.filterIsInstance<Request.FetchRelayList>().collect {
+ relayList = daemon.await().getRelayLocations()
}
}
scope.launch {
- endpoint.dispatcher.parsedMessages.filterIsInstance<Request.FetchRelayList>().collect {
- relayList = daemon.await().getRelayLocations()
- }
+ endpoint.dispatcher.parsedMessages
+ .filterIsInstance<Request.SetOwnershipAndProviders>()
+ .collect { request ->
+ val update =
+ getCurrentRelayConstraints()
+ .copy(ownership = request.ownership, providers = request.providers)
+ daemon.await().setRelaySettings(RelaySettings.Normal(update))
+ }
}
}