From 68daaa4381fbad7e3c4a2df55d30ee4f0386e895 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20G=C3=B6ransson?= Date: Thu, 7 Mar 2024 16:25:30 +0100 Subject: [PATCH] Fix filter screen selection regression --- .../state/FilterConstrainExtensions.kt | 6 ++-- .../mullvadvpn/viewmodel/FilterViewModel.kt | 2 +- .../viewmodel/SelectLocationViewModel.kt | 28 ++++++++++--------- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/FilterConstrainExtensions.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/FilterConstrainExtensions.kt index da46938e8427..ad301877c4d0 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/FilterConstrainExtensions.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/FilterConstrainExtensions.kt @@ -17,11 +17,11 @@ fun Ownership?.toOwnershipConstraint(): Constraint = else -> Constraint.Only(this) } -fun Constraint.toSelectedProviders(allProviders: List): List? = +fun Constraint.toSelectedProviders(allProviders: List): List = when (this) { - is Constraint.Any -> null + is Constraint.Any -> allProviders is Constraint.Only -> - this.value.providers.toList().mapNotNull { providerName -> + value.providers.toList().mapNotNull { providerName -> allProviders.firstOrNull { it.name == providerName } } } diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/FilterViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/FilterViewModel.kt index 4a9fb709fde1..3f95d7919399 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/FilterViewModel.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/FilterViewModel.kt @@ -39,7 +39,7 @@ class FilterViewModel( ) { allProviders, selectedConstraintProviders -> selectedConstraintProviders.toSelectedProviders(allProviders) } - .first() ?: emptyList() + .first() val ownershipConstraint = relayListFilterUseCase.selectedOwnership().first() selectedOwnership.value = ownershipConstraint.toNullableOwnership() diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SelectLocationViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SelectLocationViewModel.kt index fc46441de18d..9b83423a350d 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SelectLocationViewModel.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/SelectLocationViewModel.kt @@ -48,11 +48,15 @@ class SelectLocationViewModel( selectedConstraintProviders -> val selectedOwnershipItem = selectedOwnership.toNullableOwnership() val selectedProvidersCount = - filterSelectedProvidersByOwnership( - selectedConstraintProviders.toSelectedProviders(allProviders), - selectedOwnershipItem - ) - ?.size + when (selectedConstraintProviders) { + is Constraint.Any -> null + is Constraint.Only -> + filterSelectedProvidersByOwnership( + selectedConstraintProviders.toSelectedProviders(allProviders), + selectedOwnershipItem + ) + .size + } val filteredRelayCountries = relayCountries.filterOnSearchTerm(searchTerm, selectedItem) @@ -97,15 +101,13 @@ class SelectLocationViewModel( } private fun filterSelectedProvidersByOwnership( - selectedProviders: List?, + selectedProviders: List, selectedOwnership: Ownership? - ): List? = - selectedProviders?.let { - when (selectedOwnership) { - Ownership.MullvadOwned -> selectedProviders.filter { it.mullvadOwned } - Ownership.Rented -> selectedProviders.filterNot { it.mullvadOwned } - else -> selectedProviders - } + ): List = + when (selectedOwnership) { + Ownership.MullvadOwned -> selectedProviders.filter { it.mullvadOwned } + Ownership.Rented -> selectedProviders.filterNot { it.mullvadOwned } + else -> selectedProviders } fun removeOwnerFilter() {