diff options
9 files changed, 58 insertions, 57 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/CustomDnsOptions.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/CustomDnsOptions.kt new file mode 100644 index 0000000000..e9e8311c26 --- /dev/null +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/CustomDnsOptions.kt @@ -0,0 +1,10 @@ +package net.mullvad.mullvadvpn.model + +import android.os.Parcelable +import java.net.InetAddress +import kotlinx.parcelize.Parcelize + +@Parcelize +data class CustomDnsOptions( + val addresses: ArrayList<InetAddress> +) : Parcelable diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DefaultDnsOptions.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DefaultDnsOptions.kt new file mode 100644 index 0000000000..6b24f363cc --- /dev/null +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DefaultDnsOptions.kt @@ -0,0 +1,13 @@ +package net.mullvad.mullvadvpn.model + +import android.os.Parcelable +import kotlinx.parcelize.Parcelize + +@Parcelize +data class DefaultDnsOptions( + val blockAds: Boolean = false, + val blockTrackers: Boolean = false, + val blockMalware: Boolean = false, + val blockAdultContent: Boolean = false, + val blockGambling: Boolean = false, +) : Parcelable diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DnsOptions.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DnsOptions.kt index c94075cc8b..1ce3acc095 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DnsOptions.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DnsOptions.kt @@ -1,8 +1,11 @@ package net.mullvad.mullvadvpn.model import android.os.Parcelable -import java.net.InetAddress import kotlinx.parcelize.Parcelize @Parcelize -data class DnsOptions(val custom: Boolean, val addresses: ArrayList<InetAddress>) : Parcelable +data class DnsOptions( + val state: DnsState, + val defaultOptions: DefaultDnsOptions, + val customOptions: CustomDnsOptions +) : Parcelable diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DnsState.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DnsState.kt new file mode 100644 index 0000000000..9c8677ba7d --- /dev/null +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DnsState.kt @@ -0,0 +1,6 @@ +package net.mullvad.mullvadvpn.model + +enum class DnsState { + Default, + Custom +} diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/CustomDns.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/CustomDns.kt index b708e1b290..b2ae560450 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/CustomDns.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/CustomDns.kt @@ -8,7 +8,10 @@ import kotlinx.coroutines.channels.ClosedReceiveChannelException import kotlinx.coroutines.channels.actor import kotlinx.coroutines.channels.trySendBlocking import net.mullvad.mullvadvpn.ipc.Request +import net.mullvad.mullvadvpn.model.CustomDnsOptions +import net.mullvad.mullvadvpn.model.DefaultDnsOptions import net.mullvad.mullvadvpn.model.DnsOptions +import net.mullvad.mullvadvpn.model.DnsState class CustomDns(private val endpoint: ServiceEndpoint) { private sealed class Command { @@ -29,9 +32,9 @@ class CustomDns(private val endpoint: ServiceEndpoint) { init { endpoint.settingsListener.dnsOptionsNotifier.subscribe(this) { maybeDnsOptions -> maybeDnsOptions?.let { dnsOptions -> - enabled = dnsOptions.custom + enabled = dnsOptions.state == DnsState.Custom dnsServers.clear() - dnsServers.addAll(dnsOptions.addresses) + dnsServers.addAll(dnsOptions.customOptions.addresses) } } @@ -106,8 +109,11 @@ class CustomDns(private val endpoint: ServiceEndpoint) { } private suspend fun changeDnsOptions(enable: Boolean) { - val options = DnsOptions(enable, dnsServers) - + val options = DnsOptions( + state = if (enable) DnsState.Custom else DnsState.Default, + customOptions = CustomDnsOptions(dnsServers), + defaultOptions = DefaultDnsOptions() + ) daemon.await().setDnsOptions(options) } } diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/CustomDns.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/CustomDns.kt index 2675c1231a..8bfc53f226 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/CustomDns.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/CustomDns.kt @@ -3,6 +3,7 @@ package net.mullvad.mullvadvpn.ui.serviceconnection import android.os.Messenger import java.net.InetAddress import net.mullvad.mullvadvpn.ipc.Request +import net.mullvad.mullvadvpn.model.DnsState import net.mullvad.talpid.util.EventNotifier class CustomDns(private val connection: Messenger, private val settingsListener: SettingsListener) { @@ -13,8 +14,8 @@ class CustomDns(private val connection: Messenger, private val settingsListener: settingsListener.dnsOptionsNotifier.subscribe(this) { maybeDnsOptions -> maybeDnsOptions?.let { dnsOptions -> synchronized(this) { - onEnabledChanged.notifyIfChanged(dnsOptions.custom) - onDnsServersChanged.notifyIfChanged(dnsOptions.addresses) + onEnabledChanged.notifyIfChanged(dnsOptions.state == DnsState.Custom) + onDnsServersChanged.notifyIfChanged(dnsOptions.customOptions.addresses) } } } diff --git a/mullvad-jni/src/classes.rs b/mullvad-jni/src/classes.rs index 9a124f2a12..32123ebb07 100644 --- a/mullvad-jni/src/classes.rs +++ b/mullvad-jni/src/classes.rs @@ -8,7 +8,10 @@ pub const CLASSES: &[&str] = &[ "net/mullvad/mullvadvpn/model/AppVersionInfo", "net/mullvad/mullvadvpn/model/Constraint$Any", "net/mullvad/mullvadvpn/model/Constraint$Only", + "net/mullvad/mullvadvpn/model/DnsState", "net/mullvad/mullvadvpn/model/DnsOptions", + "net/mullvad/mullvadvpn/model/CustomDnsOptions", + "net/mullvad/mullvadvpn/model/DefaultDnsOptions", "net/mullvad/mullvadvpn/model/Device", "net/mullvad/mullvadvpn/model/DeviceEvent", "net/mullvad/mullvadvpn/model/DeviceEventCause", diff --git a/mullvad-types/src/settings/dns.rs b/mullvad-types/src/settings/dns.rs index 2fbde01cc2..5322fc3a8f 100644 --- a/mullvad-types/src/settings/dns.rs +++ b/mullvad-types/src/settings/dns.rs @@ -1,10 +1,12 @@ #[cfg(target_os = "android")] -use jnix::{jni::objects::JObject, FromJava, IntoJava, JnixEnv}; +use jnix::{FromJava, IntoJava}; use serde::{Deserialize, Serialize}; use std::net::IpAddr; #[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize, Hash)] #[serde(rename_all = "snake_case")] +#[cfg_attr(target_os = "android", derive(FromJava, IntoJava))] +#[cfg_attr(target_os = "android", jnix(package = "net.mullvad.mullvadvpn.model"))] pub enum DnsState { #[default] Default, @@ -14,61 +16,19 @@ pub enum DnsState { /// DNS config #[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize, Hash)] #[serde(default)] -#[cfg_attr(target_os = "android", derive(IntoJava))] +#[cfg_attr(target_os = "android", derive(FromJava, IntoJava))] #[cfg_attr(target_os = "android", jnix(package = "net.mullvad.mullvadvpn.model"))] pub struct DnsOptions { - #[cfg_attr(target_os = "android", jnix(map = "|state| state == DnsState::Custom"))] pub state: DnsState, - #[cfg_attr(target_os = "android", jnix(skip))] pub default_options: DefaultDnsOptions, - #[cfg_attr(target_os = "android", jnix(map = "|opts| opts.addresses"))] pub custom_options: CustomDnsOptions, } -#[cfg(target_os = "android")] -#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize, Hash)] -#[cfg_attr(target_os = "android", derive(FromJava))] -#[cfg_attr( - target_os = "android", - jnix(class_name = "net.mullvad.mullvadvpn.model.DnsOptions") -)] -pub struct AndroidDnsOptions { - pub custom: bool, - pub addresses: Vec<IpAddr>, -} - -#[cfg(target_os = "android")] -impl From<AndroidDnsOptions> for DnsOptions { - fn from(options: AndroidDnsOptions) -> Self { - Self { - state: if options.custom { - DnsState::Custom - } else { - DnsState::Default - }, - default_options: DefaultDnsOptions::default(), - custom_options: CustomDnsOptions { - addresses: options.addresses, - }, - } - } -} - -#[cfg(target_os = "android")] -impl<'env, 'sub_env> FromJava<'env, JObject<'sub_env>> for DnsOptions -where - 'env: 'sub_env, -{ - const JNI_SIGNATURE: &'static str = "Lnet/mullvad/mullvadvpn/model/DnsOptions"; - - fn from_java(env: &JnixEnv<'env>, object: JObject<'sub_env>) -> Self { - AndroidDnsOptions::from_java(env, object).into() - } -} - /// Default DNS config #[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize, Hash)] #[serde(default)] +#[cfg_attr(target_os = "android", derive(FromJava, IntoJava))] +#[cfg_attr(target_os = "android", jnix(package = "net.mullvad.mullvadvpn.model"))] pub struct DefaultDnsOptions { pub block_ads: bool, pub block_trackers: bool, @@ -79,6 +39,8 @@ pub struct DefaultDnsOptions { /// Custom DNS config #[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize, Hash)] +#[cfg_attr(target_os = "android", derive(FromJava, IntoJava))] +#[cfg_attr(target_os = "android", jnix(package = "net.mullvad.mullvadvpn.model"))] pub struct CustomDnsOptions { pub addresses: Vec<IpAddr>, } diff --git a/mullvad-types/src/settings/mod.rs b/mullvad-types/src/settings/mod.rs index 6704800ac5..68527b12c2 100644 --- a/mullvad-types/src/settings/mod.rs +++ b/mullvad-types/src/settings/mod.rs @@ -208,9 +208,6 @@ pub struct TunnelOptions { pub use dns::{CustomDnsOptions, DefaultDnsOptions, DnsOptions, DnsState}; -#[cfg(target_os = "android")] -pub use dns::AndroidDnsOptions; - impl Default for TunnelOptions { fn default() -> Self { TunnelOptions { |
