summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--android/app/build.gradle.kts1
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/di/AppModule.kt4
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt25
-rw-r--r--android/lib/endpoint/src/debug/kotlin/net/mullvad/mullvadvpn/lib/endpoint/ApiEndpointFromIntentHolder.kt10
-rw-r--r--android/lib/endpoint/src/release/kotlin/net/mullvad/mullvadvpn/lib/endpoint/ApiEndpointFromIntentHolder.kt11
-rw-r--r--android/lib/intent-provider/build.gradle.kts35
-rw-r--r--android/lib/intent-provider/src/main/AndroidManifest.xml1
-rw-r--r--android/lib/intent-provider/src/main/kotlin/net/mullvad/mullvadvpn/lib/intent/IntentProvider.kt14
-rw-r--r--android/service/build.gradle.kts1
-rw-r--r--android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt10
-rw-r--r--android/settings.gradle.kts1
11 files changed, 40 insertions, 73 deletions
diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts
index d62df34645..8e252e1fc6 100644
--- a/android/app/build.gradle.kts
+++ b/android/app/build.gradle.kts
@@ -328,7 +328,6 @@ dependencies {
implementation(projects.lib.common)
implementation(projects.lib.daemonGrpc)
implementation(projects.lib.endpoint)
- implementation(projects.lib.intentProvider)
implementation(projects.lib.map)
implementation(projects.lib.model)
implementation(projects.lib.payment)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/di/AppModule.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/di/AppModule.kt
index 9c52677dce..d7a1bfc8cb 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/di/AppModule.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/di/AppModule.kt
@@ -6,7 +6,7 @@ import net.mullvad.mullvadvpn.BuildConfig
import net.mullvad.mullvadvpn.lib.common.constant.GRPC_SOCKET_FILE_NAME
import net.mullvad.mullvadvpn.lib.common.constant.GRPC_SOCKET_FILE_NAMED_ARGUMENT
import net.mullvad.mullvadvpn.lib.daemon.grpc.ManagementService
-import net.mullvad.mullvadvpn.lib.intent.IntentProvider
+import net.mullvad.mullvadvpn.lib.endpoint.ApiEndpointFromIntentHolder
import net.mullvad.mullvadvpn.lib.model.BuildVersion
import net.mullvad.mullvadvpn.lib.shared.AccountRepository
import net.mullvad.mullvadvpn.lib.shared.ConnectionProxy
@@ -33,7 +33,7 @@ val appModule = module {
single { PrepareVpnUseCase(androidContext()) }
single { BuildVersion(BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE) }
- single { IntentProvider() }
+ single { ApiEndpointFromIntentHolder() }
single { AccountRepository(get(), get(), MainScope()) }
single { DeviceRepository(get()) }
single { ConnectionProxy(get(), get(), get()) }
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
index 134816417f..4007b09ecd 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
@@ -13,6 +13,7 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import arrow.core.merge
+import co.touchlab.kermit.Logger
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.filter
@@ -27,7 +28,8 @@ import net.mullvad.mullvadvpn.lib.common.util.SdkUtils.requestNotificationPermis
import net.mullvad.mullvadvpn.lib.common.util.prepareVpnSafe
import net.mullvad.mullvadvpn.lib.daemon.grpc.GrpcConnectivityState
import net.mullvad.mullvadvpn.lib.daemon.grpc.ManagementService
-import net.mullvad.mullvadvpn.lib.intent.IntentProvider
+import net.mullvad.mullvadvpn.lib.endpoint.ApiEndpointFromIntentHolder
+import net.mullvad.mullvadvpn.lib.endpoint.getApiEndpointConfigurationExtras
import net.mullvad.mullvadvpn.lib.model.PrepareError
import net.mullvad.mullvadvpn.lib.model.Prepared
import net.mullvad.mullvadvpn.lib.theme.AppTheme
@@ -51,7 +53,7 @@ class MainActivity : ComponentActivity(), AndroidScopeComponent {
private val launchVpnPermission =
registerForActivityResult(CreateVpnProfile()) { _ -> mullvadAppViewModel.connect() }
- private val intentProvider by inject<IntentProvider>()
+ private val apiEndpointFromIntentHolder by inject<ApiEndpointFromIntentHolder>()
private val mullvadAppViewModel by inject<MullvadAppViewModel>()
private val privacyDisclaimerRepository by inject<PrivacyDisclaimerRepository>()
private val serviceConnectionManager by inject<ServiceConnectionManager>()
@@ -84,7 +86,7 @@ class MainActivity : ComponentActivity(), AndroidScopeComponent {
window.decorView.filterTouchesWhenObscured = true
// Needs to be before we start the service, since we need to access the intent there
- setUpIntentListener()
+ lifecycleScope.launch { intents().collect(::handleIntent) }
// We use lifecycleScope here to get less start service in background exceptions
// Se this article for more information:
@@ -129,15 +131,14 @@ class MainActivity : ComponentActivity(), AndroidScopeComponent {
super.onDestroy()
}
- private fun setUpIntentListener() {
- lifecycleScope.launch {
- intents().collect {
- if (it.action == KEY_REQUEST_VPN_PROFILE) {
- handleRequestVpnProfileIntent()
- } else {
- intentProvider.setStartIntent(it)
- }
- }
+ private fun handleIntent(intent: Intent) {
+ when (val action = intent.action) {
+ Intent.ACTION_MAIN ->
+ apiEndpointFromIntentHolder.setApiEndpointOverride(
+ intent.getApiEndpointConfigurationExtras()
+ )
+ KEY_REQUEST_VPN_PROFILE -> handleRequestVpnProfileIntent()
+ else -> Logger.w("Unhandled intent action: $action")
}
}
diff --git a/android/lib/endpoint/src/debug/kotlin/net/mullvad/mullvadvpn/lib/endpoint/ApiEndpointFromIntentHolder.kt b/android/lib/endpoint/src/debug/kotlin/net/mullvad/mullvadvpn/lib/endpoint/ApiEndpointFromIntentHolder.kt
new file mode 100644
index 0000000000..2de7e829dd
--- /dev/null
+++ b/android/lib/endpoint/src/debug/kotlin/net/mullvad/mullvadvpn/lib/endpoint/ApiEndpointFromIntentHolder.kt
@@ -0,0 +1,10 @@
+package net.mullvad.mullvadvpn.lib.endpoint
+
+class ApiEndpointFromIntentHolder {
+ var apiEndpointOverride: ApiEndpointOverride? = null
+ private set
+
+ fun setApiEndpointOverride(apiEndpointOverride: ApiEndpointOverride?) {
+ this.apiEndpointOverride = apiEndpointOverride
+ }
+}
diff --git a/android/lib/endpoint/src/release/kotlin/net/mullvad/mullvadvpn/lib/endpoint/ApiEndpointFromIntentHolder.kt b/android/lib/endpoint/src/release/kotlin/net/mullvad/mullvadvpn/lib/endpoint/ApiEndpointFromIntentHolder.kt
new file mode 100644
index 0000000000..9fa617276b
--- /dev/null
+++ b/android/lib/endpoint/src/release/kotlin/net/mullvad/mullvadvpn/lib/endpoint/ApiEndpointFromIntentHolder.kt
@@ -0,0 +1,11 @@
+package net.mullvad.mullvadvpn.lib.endpoint
+
+// Overridding the API endpoint is not supported in release builds
+class ApiEndpointFromIntentHolder {
+ val apiEndpointOverride: ApiEndpointOverride? = null
+
+ @Suppress("UnusedParameter")
+ fun setApiEndpointOverride(apiEndpointOverride: ApiEndpointOverride?) {
+ // No-op
+ }
+}
diff --git a/android/lib/intent-provider/build.gradle.kts b/android/lib/intent-provider/build.gradle.kts
deleted file mode 100644
index 66c9b6ff74..0000000000
--- a/android/lib/intent-provider/build.gradle.kts
+++ /dev/null
@@ -1,35 +0,0 @@
-plugins {
- alias(libs.plugins.android.library)
- alias(libs.plugins.kotlin.android)
- alias(libs.plugins.kotlin.parcelize)
-}
-
-android {
- namespace = "net.mullvad.mullvadvpn.lib.intent"
- compileSdk = Versions.compileSdkVersion
- buildToolsVersion = Versions.buildToolsVersion
-
- defaultConfig { minSdk = Versions.minSdkVersion }
-
- compileOptions {
- sourceCompatibility = JavaVersion.VERSION_17
- targetCompatibility = JavaVersion.VERSION_17
- }
-
- kotlinOptions {
- jvmTarget = Versions.jvmTarget
- allWarningsAsErrors = true
- }
-
- lint {
- lintConfig = file("${rootProject.projectDir}/config/lint.xml")
- abortOnError = true
- warningsAsErrors = true
- }
- buildFeatures { buildConfig = true }
-}
-
-dependencies {
- implementation(libs.kotlin.stdlib)
- implementation(libs.kotlinx.coroutines.android)
-}
diff --git a/android/lib/intent-provider/src/main/AndroidManifest.xml b/android/lib/intent-provider/src/main/AndroidManifest.xml
deleted file mode 100644
index cc947c5679..0000000000
--- a/android/lib/intent-provider/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1 +0,0 @@
-<manifest />
diff --git a/android/lib/intent-provider/src/main/kotlin/net/mullvad/mullvadvpn/lib/intent/IntentProvider.kt b/android/lib/intent-provider/src/main/kotlin/net/mullvad/mullvadvpn/lib/intent/IntentProvider.kt
deleted file mode 100644
index bd6e716d8d..0000000000
--- a/android/lib/intent-provider/src/main/kotlin/net/mullvad/mullvadvpn/lib/intent/IntentProvider.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-package net.mullvad.mullvadvpn.lib.intent
-
-import android.content.Intent
-import kotlinx.coroutines.flow.MutableStateFlow
-
-class IntentProvider {
- private val _intents = MutableStateFlow<Intent?>(null)
-
- fun setStartIntent(intent: Intent?) {
- _intents.tryEmit(intent)
- }
-
- fun getLatestIntent(): Intent? = _intents.value
-}
diff --git a/android/service/build.gradle.kts b/android/service/build.gradle.kts
index 8d8ffd2219..717e2c6ef7 100644
--- a/android/service/build.gradle.kts
+++ b/android/service/build.gradle.kts
@@ -56,7 +56,6 @@ dependencies {
implementation(projects.lib.common)
implementation(projects.lib.daemonGrpc)
implementation(projects.lib.endpoint)
- implementation(projects.lib.intentProvider)
implementation(projects.lib.model)
implementation(projects.lib.shared)
implementation(projects.lib.talpid)
diff --git a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
index 458f592f1b..e4c8eba3c6 100644
--- a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
+++ b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
@@ -17,8 +17,7 @@ import kotlinx.coroutines.runBlocking
import net.mullvad.mullvadvpn.lib.common.constant.KEY_CONNECT_ACTION
import net.mullvad.mullvadvpn.lib.common.constant.KEY_DISCONNECT_ACTION
import net.mullvad.mullvadvpn.lib.daemon.grpc.ManagementService
-import net.mullvad.mullvadvpn.lib.endpoint.getApiEndpointConfigurationExtras
-import net.mullvad.mullvadvpn.lib.intent.IntentProvider
+import net.mullvad.mullvadvpn.lib.endpoint.ApiEndpointFromIntentHolder
import net.mullvad.mullvadvpn.lib.model.TunnelState
import net.mullvad.mullvadvpn.lib.shared.ConnectionProxy
import net.mullvad.mullvadvpn.service.di.vpnServiceModule
@@ -39,7 +38,7 @@ class MullvadVpnService : TalpidVpnService() {
private lateinit var managementService: ManagementService
private lateinit var migrateSplitTunneling: MigrateSplitTunneling
- private lateinit var intentProvider: IntentProvider
+ private lateinit var apiEndpointFromIntentHolder: ApiEndpointFromIntentHolder
private lateinit var connectionProxy: ConnectionProxy
private lateinit var daemonConfig: DaemonConfig
@@ -66,7 +65,7 @@ class MullvadVpnService : TalpidVpnService() {
daemonConfig = get()
migrateSplitTunneling = get()
- intentProvider = get()
+ apiEndpointFromIntentHolder = get()
connectionProxy = get()
}
@@ -77,8 +76,7 @@ class MullvadVpnService : TalpidVpnService() {
// If it is a debug build and we have an api override in the intent, use it
// This is for injecting hostname and port for our mock api tests
- val intentApiOverride =
- intentProvider.getLatestIntent()?.getApiEndpointConfigurationExtras()
+ val intentApiOverride = apiEndpointFromIntentHolder.apiEndpointOverride
val updatedConfig =
if (BuildConfig.DEBUG && intentApiOverride != null) {
daemonConfig.copy(apiEndpointOverride = intentApiOverride)
diff --git a/android/settings.gradle.kts b/android/settings.gradle.kts
index 7aa90a373f..7e49d4cb92 100644
--- a/android/settings.gradle.kts
+++ b/android/settings.gradle.kts
@@ -21,7 +21,6 @@ include(
":lib:common-test",
":lib:daemon-grpc",
":lib:endpoint",
- ":lib:intent-provider",
":lib:map",
":lib:model",
":lib:payment",