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