summaryrefslogtreecommitdiffhomepage
path: root/android/lib/shared
diff options
context:
space:
mode:
Diffstat (limited to 'android/lib/shared')
-rw-r--r--android/lib/shared/src/main/kotlin/net/mullvad/mullvadvpn/lib/shared/ConnectionProxy.kt5
-rw-r--r--android/lib/shared/src/main/kotlin/net/mullvad/mullvadvpn/lib/shared/VpnPermissionRepository.kt11
-rw-r--r--android/lib/shared/src/main/kotlin/net/mullvad/mullvadvpn/lib/shared/VpnProfileUseCase.kt11
-rw-r--r--android/lib/shared/src/test/kotlin/net/mullvad/mullvadvpn/lib/shared/ConnectionProxyTest.kt14
4 files changed, 23 insertions, 18 deletions
diff --git a/android/lib/shared/src/main/kotlin/net/mullvad/mullvadvpn/lib/shared/ConnectionProxy.kt b/android/lib/shared/src/main/kotlin/net/mullvad/mullvadvpn/lib/shared/ConnectionProxy.kt
index 2dbd15ec03..08a0a517f0 100644
--- a/android/lib/shared/src/main/kotlin/net/mullvad/mullvadvpn/lib/shared/ConnectionProxy.kt
+++ b/android/lib/shared/src/main/kotlin/net/mullvad/mullvadvpn/lib/shared/ConnectionProxy.kt
@@ -2,7 +2,6 @@ package net.mullvad.mullvadvpn.lib.shared
import arrow.core.Either
import arrow.core.raise.either
-import arrow.core.raise.ensure
import kotlinx.coroutines.flow.combine
import net.mullvad.mullvadvpn.lib.daemon.grpc.ManagementService
import net.mullvad.mullvadvpn.lib.model.ConnectError
@@ -12,7 +11,7 @@ import net.mullvad.mullvadvpn.lib.model.TunnelState
class ConnectionProxy(
private val managementService: ManagementService,
translationRepository: RelayLocationTranslationRepository,
- private val vpnPermissionRepository: VpnPermissionRepository,
+ private val vpnProfileUseCase: VpnProfileUseCase,
) {
val tunnelState =
combine(managementService.tunnelState, translationRepository.translations) {
@@ -35,7 +34,7 @@ class ConnectionProxy(
copy(city = translations[city] ?: city, country = translations[country] ?: country)
suspend fun connect(): Either<ConnectError, Boolean> = either {
- ensure(vpnPermissionRepository.hasVpnPermission()) { ConnectError.NoVpnPermission }
+ vpnProfileUseCase.prepareVpn().mapLeft(ConnectError::NotPrepared).bind()
managementService.connect().bind()
}
diff --git a/android/lib/shared/src/main/kotlin/net/mullvad/mullvadvpn/lib/shared/VpnPermissionRepository.kt b/android/lib/shared/src/main/kotlin/net/mullvad/mullvadvpn/lib/shared/VpnPermissionRepository.kt
deleted file mode 100644
index b97c60316c..0000000000
--- a/android/lib/shared/src/main/kotlin/net/mullvad/mullvadvpn/lib/shared/VpnPermissionRepository.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package net.mullvad.mullvadvpn.lib.shared
-
-import android.content.Context
-import android.net.VpnService
-import net.mullvad.mullvadvpn.lib.common.util.getAlwaysOnVpnAppName
-
-class VpnPermissionRepository(private val applicationContext: Context) {
- fun hasVpnPermission(): Boolean = VpnService.prepare(applicationContext) == null
-
- fun getAlwaysOnVpnAppName() = applicationContext.getAlwaysOnVpnAppName()
-}
diff --git a/android/lib/shared/src/main/kotlin/net/mullvad/mullvadvpn/lib/shared/VpnProfileUseCase.kt b/android/lib/shared/src/main/kotlin/net/mullvad/mullvadvpn/lib/shared/VpnProfileUseCase.kt
new file mode 100644
index 0000000000..cebac0be04
--- /dev/null
+++ b/android/lib/shared/src/main/kotlin/net/mullvad/mullvadvpn/lib/shared/VpnProfileUseCase.kt
@@ -0,0 +1,11 @@
+package net.mullvad.mullvadvpn.lib.shared
+
+import android.content.Context
+import arrow.core.Either
+import net.mullvad.mullvadvpn.lib.common.util.prepareVpnSafe
+import net.mullvad.mullvadvpn.lib.model.PrepareError
+import net.mullvad.mullvadvpn.lib.model.Prepared
+
+class VpnProfileUseCase(private val applicationContext: Context) {
+ fun prepareVpn(): Either<PrepareError, Prepared> = applicationContext.prepareVpnSafe()
+}
diff --git a/android/lib/shared/src/test/kotlin/net/mullvad/mullvadvpn/lib/shared/ConnectionProxyTest.kt b/android/lib/shared/src/test/kotlin/net/mullvad/mullvadvpn/lib/shared/ConnectionProxyTest.kt
index 0652867105..24a14ce782 100644
--- a/android/lib/shared/src/test/kotlin/net/mullvad/mullvadvpn/lib/shared/ConnectionProxyTest.kt
+++ b/android/lib/shared/src/test/kotlin/net/mullvad/mullvadvpn/lib/shared/ConnectionProxyTest.kt
@@ -1,31 +1,36 @@
package net.mullvad.mullvadvpn.lib.shared
+import android.content.Intent
+import arrow.core.left
+import arrow.core.right
import io.mockk.coVerify
import io.mockk.every
import io.mockk.mockk
import io.mockk.unmockkAll
import kotlinx.coroutines.test.runTest
import net.mullvad.mullvadvpn.lib.daemon.grpc.ManagementService
+import net.mullvad.mullvadvpn.lib.model.PrepareError
+import net.mullvad.mullvadvpn.lib.model.Prepared
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.Test
class ConnectionProxyTest {
private val mockManagementService: ManagementService = mockk(relaxed = true)
- private val mockVpnPermissionRepository: VpnPermissionRepository = mockk()
+ private val mockVpnPermissionRepository: VpnProfileUseCase = mockk()
private val mockTranslationRepository: RelayLocationTranslationRepository =
mockk(relaxed = true)
private val connectionProxy: ConnectionProxy =
ConnectionProxy(
managementService = mockManagementService,
- vpnPermissionRepository = mockVpnPermissionRepository,
+ vpnProfileUseCase = mockVpnPermissionRepository,
translationRepository = mockTranslationRepository,
)
@Test
fun `connect with vpn permission allowed should call managementService connect`() = runTest {
- every { mockVpnPermissionRepository.hasVpnPermission() } returns true
+ every { mockVpnPermissionRepository.prepareVpn() } returns Prepared.right()
connectionProxy.connect()
coVerify(exactly = 1) { mockManagementService.connect() }
}
@@ -33,7 +38,8 @@ class ConnectionProxyTest {
@Test
fun `connect with vpn permission not allowed should not call managementService connect`() =
runTest {
- every { mockVpnPermissionRepository.hasVpnPermission() } returns false
+ every { mockVpnPermissionRepository.prepareVpn() } returns
+ PrepareError.NotPrepared(Intent()).left()
connectionProxy.connect()
coVerify(exactly = 0) { mockManagementService.connect() }
}