diff options
| author | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2024-12-10 22:57:56 +0100 |
|---|---|---|
| committer | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2024-12-13 09:50:40 +0100 |
| commit | b95e54a41dfa3e5932e9385adbfe1209eafb45bc (patch) | |
| tree | 9d4e473a61bb533df272290e30519777dafc8218 | |
| parent | 271ab4a7347e6d6319b4741cc827896d72462e4b (diff) | |
| download | mullvadvpn-b95e54a41dfa3e5932e9385adbfe1209eafb45bc.tar.xz mullvadvpn-b95e54a41dfa3e5932e9385adbfe1209eafb45bc.zip | |
Replace intentholder with api override intent holder
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", |
