summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson@mullvad.net>2024-07-29 16:57:35 +0200
committerDavid Göransson <david.goransson@mullvad.net>2024-07-29 16:58:22 +0200
commitbd2a625f7e7b6ca83aa637971214fb5c51aff6dc (patch)
treeceaac240f4928a3e64994d145903ab6e65320865 /android
parent514a5c9ec009a5bd00f979f719772beeb48b7ca6 (diff)
downloadmullvadvpn-bd2a625f7e7b6ca83aa637971214fb5c51aff6dc.tar.xz
mullvadvpn-bd2a625f7e7b6ca83aa637971214fb5c51aff6dc.zip
Allow error on getVersionInfo
Diffstat (limited to 'android')
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/AppVersionInfoRepository.kt28
-rw-r--r--android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt10
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/GetVersionInfoError.kt5
3 files changed, 34 insertions, 9 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/AppVersionInfoRepository.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/AppVersionInfoRepository.kt
index 63ce64cd06..edf5dba131 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/AppVersionInfoRepository.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/AppVersionInfoRepository.kt
@@ -1,17 +1,33 @@
package net.mullvad.mullvadvpn.ui.serviceconnection
-import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.flow.SharingStarted.Companion.WhileSubscribed
+import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.stateIn
import net.mullvad.mullvadvpn.lib.daemon.grpc.ManagementService
import net.mullvad.mullvadvpn.lib.model.BuildVersion
import net.mullvad.mullvadvpn.ui.VersionInfo
class AppVersionInfoRepository(
private val buildVersion: BuildVersion,
- private val managementService: ManagementService
+ private val managementService: ManagementService,
+ private val dispatcher: CoroutineDispatcher = Dispatchers.IO
) {
- fun versionInfo(): Flow<VersionInfo> =
- managementService.versionInfo.map { appVersionInfo ->
- VersionInfo(currentVersion = buildVersion.name, isSupported = appVersionInfo.supported)
- }
+ fun versionInfo(): StateFlow<VersionInfo> =
+ managementService.versionInfo
+ .map { appVersionInfo ->
+ VersionInfo(
+ currentVersion = buildVersion.name,
+ isSupported = appVersionInfo.supported
+ )
+ }
+ .stateIn(
+ CoroutineScope(dispatcher),
+ WhileSubscribed(),
+ // By default we assume we are supported
+ VersionInfo(currentVersion = buildVersion.name, isSupported = true)
+ )
}
diff --git a/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt
index 7c879bc9df..191b791421 100644
--- a/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt
+++ b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt
@@ -73,6 +73,7 @@ import net.mullvad.mullvadvpn.lib.model.GetAccountDataError
import net.mullvad.mullvadvpn.lib.model.GetAccountHistoryError
import net.mullvad.mullvadvpn.lib.model.GetDeviceListError
import net.mullvad.mullvadvpn.lib.model.GetDeviceStateError
+import net.mullvad.mullvadvpn.lib.model.GetVersionInfoError
import net.mullvad.mullvadvpn.lib.model.LoginAccountError
import net.mullvad.mullvadvpn.lib.model.NewAccessMethodSetting
import net.mullvad.mullvadvpn.lib.model.ObfuscationSettings
@@ -279,8 +280,11 @@ class ManagementService(
private suspend fun getRelayList(): ModelRelayList =
grpc.getRelayLocations(Empty.getDefaultInstance()).toDomain()
- private suspend fun getVersionInfo(): ModelAppVersionInfo =
- grpc.getVersionInfo(Empty.getDefaultInstance()).toDomain()
+ // On release build this will return error until services have published the new beta, daemon
+ // will get 404 until the api have been published, thus we need to ignore error downstream.
+ private suspend fun getVersionInfo(): Either<GetVersionInfoError, ModelAppVersionInfo> =
+ Either.catch { grpc.getVersionInfo(Empty.getDefaultInstance()).toDomain() }
+ .mapLeft { GetVersionInfoError.Unknown(it) }
suspend fun logoutAccount() {
grpc.logoutAccount(Empty.getDefaultInstance())
@@ -320,7 +324,7 @@ class ManagementService(
async { _mutableTunnelState.update { getTunnelState() } },
async { _mutableDeviceState.update { getDeviceState() } },
async { _mutableSettings.update { getSettings() } },
- async { _mutableVersionInfo.update { getVersionInfo() } },
+ async { _mutableVersionInfo.update { getVersionInfo().getOrNull() } },
async { _mutableRelayList.update { getRelayList() } },
async { _mutableCurrentAccessMethod.update { getCurrentApiAccessMethod() } }
)
diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/GetVersionInfoError.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/GetVersionInfoError.kt
new file mode 100644
index 0000000000..97dc589b72
--- /dev/null
+++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/GetVersionInfoError.kt
@@ -0,0 +1,5 @@
+package net.mullvad.mullvadvpn.lib.model
+
+sealed interface GetVersionInfoError {
+ data class Unknown(val error: Throwable) : GetVersionInfoError
+}