Add more 'Private DNS' options
This adds thirteen DNS providers as available presets.
Credit: CalyxOS
- Chirayu Desai <chirayudesai1@gmail.com>
https://review.calyxos.org/c/CalyxOS/platform_frameworks_libs_net/+/9676
Signed-off-by: Tad <tad@spotco.us>
Change-Id: Ide577115925a2a4991332524f670899f4d33f2a3
Signed-off-by: Dmitrii <bankersenator@gmail.com>
Signed-off-by: Jis G Jacob <studiokeys@blissroms.org>
diff --git a/framework/src/android/net/ConnectivitySettingsManager.java b/framework/src/android/net/ConnectivitySettingsManager.java
index ba7df7f..01e0726 100644
--- a/framework/src/android/net/ConnectivitySettingsManager.java
+++ b/framework/src/android/net/ConnectivitySettingsManager.java
@@ -357,6 +357,84 @@
public static final int PRIVATE_DNS_MODE_OFF = ConnectivitySettingsUtils.PRIVATE_DNS_MODE_OFF;
/**
+ * @hide
+ */
+ public static final int PRIVATE_DNS_MODE_ADGUARD =
+ ConnectivitySettingsUtils.PRIVATE_DNS_MODE_ADGUARD;
+
+ /**
+ * @hide
+ */
+ public static final int PRIVATE_DNS_MODE_APPLIEDPRIVACY =
+ ConnectivitySettingsUtils.PRIVATE_DNS_MODE_APPLIEDPRIVACY;
+
+ /**
+ * @hide
+ */
+ public static final int PRIVATE_DNS_MODE_CLEANBROWSING =
+ ConnectivitySettingsUtils.PRIVATE_DNS_MODE_CLEANBROWSING;
+
+ /**
+ * @hide
+ */
+ public static final int PRIVATE_DNS_MODE_CIRA =
+ ConnectivitySettingsUtils.PRIVATE_DNS_MODE_CIRA;
+
+ /**
+ * @hide
+ */
+ public static final int PRIVATE_DNS_MODE_CZNIC =
+ ConnectivitySettingsUtils.PRIVATE_DNS_MODE_CZNIC;
+
+ /**
+ * @hide
+ */
+ public static final int PRIVATE_DNS_MODE_CLOUDFLARE =
+ ConnectivitySettingsUtils.PRIVATE_DNS_MODE_CLOUDFLARE;
+
+ /**
+ * @hide
+ */
+ public static final int PRIVATE_DNS_MODE_GOOGLE =
+ ConnectivitySettingsUtils.PRIVATE_DNS_MODE_GOOGLE;
+
+ /**
+ * @hide
+ */
+ public static final int PRIVATE_DNS_MODE_MULLVAD =
+ ConnectivitySettingsUtils.PRIVATE_DNS_MODE_MULLVAD;
+
+ /**
+ * @hide
+ */
+ public static final int PRIVATE_DNS_MODE_QUADNINE =
+ ConnectivitySettingsUtils.PRIVATE_DNS_MODE_QUADNINE;
+
+ /**
+ * @hide
+ */
+ public static final int PRIVATE_DNS_MODE_RESTENA =
+ ConnectivitySettingsUtils.PRIVATE_DNS_MODE_RESTENA;
+
+ /**
+ * @hide
+ */
+ public static final int PRIVATE_DNS_MODE_SWITCH =
+ ConnectivitySettingsUtils.PRIVATE_DNS_MODE_SWITCH;
+
+ /**
+ * @hide
+ */
+ public static final int PRIVATE_DNS_MODE_TWNIC =
+ ConnectivitySettingsUtils.PRIVATE_DNS_MODE_TWNIC;
+
+ /**
+ * @hide
+ */
+ public static final int PRIVATE_DNS_MODE_UNCENSOREDDNS =
+ ConnectivitySettingsUtils.PRIVATE_DNS_MODE_UNCENSOREDDNS;
+
+ /**
* One of the private DNS modes that indicates the private DNS mode is automatic, which
* will try to use the current DNS as private DNS.
*/
@@ -371,10 +449,89 @@
public static final int PRIVATE_DNS_MODE_PROVIDER_HOSTNAME =
ConnectivitySettingsUtils.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME;
+ /**
+ * @hide
+ */
+ public static final String PRIVATE_DNS_SPECIFIER_ADGUARD = "dns.adguard.com";
+
+ /**
+ * @hide
+ */
+ public static final String PRIVATE_DNS_SPECIFIER_APPLIEDPRIVACY = "dot1.applied-privacy.net";
+
+ /**
+ * @hide
+ */
+ public static final String PRIVATE_DNS_SPECIFIER_CIRA = "protected.canadianshield.cira.ca";
+
+ /**
+ * @hide
+ */
+ public static final String PRIVATE_DNS_SPECIFIER_CZNIC = "odvr.nic.cz";
+
+ /**
+ * @hide
+ */
+ public static final String PRIVATE_DNS_SPECIFIER_CLEANBROWSING = "security-filter-dns.cleanbrowsing.org";
+
+ /**
+ * @hide
+ */
+ public static final String PRIVATE_DNS_SPECIFIER_CLOUDFLARE = "security.cloudflare-dns.com";
+
+ /**
+ * @hide
+ */
+ public static final String PRIVATE_DNS_SPECIFIER_GOOGLE = "dns.google";
+
+ /**
+ * @hide
+ */
+ public static final String PRIVATE_DNS_SPECIFIER_MULLVAD = "adblock.doh.mullvad.net";
+
+ /**
+ * @hide
+ */
+ public static final String PRIVATE_DNS_SPECIFIER_QUADNINE = "dns.quad9.net";
+
+ /**
+ * @hide
+ */
+ public static final String PRIVATE_DNS_SPECIFIER_RESTENA = "kaitain.restena.lu";
+
+ /**
+ * @hide
+ */
+ public static final String PRIVATE_DNS_SPECIFIER_SWITCH = "dns.switch.ch";
+
+ /**
+ * @hide
+ */
+ public static final String PRIVATE_DNS_SPECIFIER_TWNIC = "101.101.101.101";
+
+ /**
+ * @hide
+ */
+ public static final String PRIVATE_DNS_SPECIFIER_UNCENSOREDDNS = "unicast.censurfridns.dk";
+
+
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef(value = {
PRIVATE_DNS_MODE_OFF,
+ PRIVATE_DNS_MODE_ADGUARD,
+ PRIVATE_DNS_MODE_APPLIEDPRIVACY,
+ PRIVATE_DNS_MODE_CLEANBROWSING,
+ PRIVATE_DNS_MODE_CIRA,
+ PRIVATE_DNS_MODE_CZNIC,
+ PRIVATE_DNS_MODE_CLOUDFLARE,
+ PRIVATE_DNS_MODE_GOOGLE,
+ PRIVATE_DNS_MODE_MULLVAD,
+ PRIVATE_DNS_MODE_QUADNINE,
+ PRIVATE_DNS_MODE_RESTENA,
+ PRIVATE_DNS_MODE_SWITCH,
+ PRIVATE_DNS_MODE_TWNIC,
+ PRIVATE_DNS_MODE_UNCENSOREDDNS,
PRIVATE_DNS_MODE_OPPORTUNISTIC,
PRIVATE_DNS_MODE_PROVIDER_HOSTNAME,
})
@@ -829,6 +986,19 @@
public static void setPrivateDnsDefaultMode(@NonNull Context context,
@NonNull @PrivateDnsMode int mode) {
if (!(mode == PRIVATE_DNS_MODE_OFF
+ || mode == PRIVATE_DNS_MODE_ADGUARD
+ || mode == PRIVATE_DNS_MODE_APPLIEDPRIVACY
+ || mode == PRIVATE_DNS_MODE_CLEANBROWSING
+ || mode == PRIVATE_DNS_MODE_CIRA
+ || mode == PRIVATE_DNS_MODE_CZNIC
+ || mode == PRIVATE_DNS_MODE_CLOUDFLARE
+ || mode == PRIVATE_DNS_MODE_GOOGLE
+ || mode == PRIVATE_DNS_MODE_MULLVAD
+ || mode == PRIVATE_DNS_MODE_QUADNINE
+ || mode == PRIVATE_DNS_MODE_RESTENA
+ || mode == PRIVATE_DNS_MODE_SWITCH
+ || mode == PRIVATE_DNS_MODE_TWNIC
+ || mode == PRIVATE_DNS_MODE_UNCENSOREDDNS
|| mode == PRIVATE_DNS_MODE_OPPORTUNISTIC
|| mode == PRIVATE_DNS_MODE_PROVIDER_HOSTNAME)) {
throw new IllegalArgumentException("Invalid private dns mode");
diff --git a/service/src/com/android/server/connectivity/DnsManager.java b/service/src/com/android/server/connectivity/DnsManager.java
index 8e6854a..7c65a59 100644
--- a/service/src/com/android/server/connectivity/DnsManager.java
+++ b/service/src/com/android/server/connectivity/DnsManager.java
@@ -23,8 +23,34 @@
import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_DEFAULT_MODE;
import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE;
import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE_OFF;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE_ADGUARD;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE_APPLIEDPRIVACY;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE_CLEANBROWSING;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE_CIRA;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE_CZNIC;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE_CLOUDFLARE;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE_GOOGLE;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE_MULLVAD;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE_QUADNINE;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE_RESTENA;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE_SWITCH;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE_TWNIC;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE_UNCENSOREDDNS;
import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME;
import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_SPECIFIER;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_SPECIFIER_ADGUARD;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_SPECIFIER_APPLIEDPRIVACY;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_SPECIFIER_CLEANBROWSING;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_SPECIFIER_CIRA;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_SPECIFIER_CZNIC;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_SPECIFIER_CLOUDFLARE;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_SPECIFIER_GOOGLE;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_SPECIFIER_MULLVAD;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_SPECIFIER_QUADNINE;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_SPECIFIER_RESTENA;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_SPECIFIER_SWITCH;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_SPECIFIER_TWNIC;
+import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_SPECIFIER_UNCENSOREDDNS;
import static android.net.resolv.aidl.IDnsResolverUnsolicitedEventListener.VALIDATION_RESULT_FAILURE;
import static android.net.resolv.aidl.IDnsResolverUnsolicitedEventListener.VALIDATION_RESULT_SUCCESS;
@@ -142,6 +168,58 @@
return new PrivateDnsConfig(specifier, null);
}
+ if (PRIVATE_DNS_MODE_ADGUARD == mode) {
+ return new PrivateDnsConfig(PRIVATE_DNS_SPECIFIER_ADGUARD, null);
+ }
+
+ if (PRIVATE_DNS_MODE_APPLIEDPRIVACY == mode) {
+ return new PrivateDnsConfig(PRIVATE_DNS_SPECIFIER_APPLIEDPRIVACY, null);
+ }
+
+ if (PRIVATE_DNS_MODE_CLEANBROWSING == mode) {
+ return new PrivateDnsConfig(PRIVATE_DNS_SPECIFIER_CLEANBROWSING, null);
+ }
+
+ if (PRIVATE_DNS_MODE_CIRA == mode) {
+ return new PrivateDnsConfig(PRIVATE_DNS_SPECIFIER_CIRA, null);
+ }
+
+ if (PRIVATE_DNS_MODE_CZNIC == mode) {
+ return new PrivateDnsConfig(PRIVATE_DNS_SPECIFIER_CZNIC, null);
+ }
+
+ if (PRIVATE_DNS_MODE_CLOUDFLARE == mode) {
+ return new PrivateDnsConfig(PRIVATE_DNS_SPECIFIER_CLOUDFLARE, null);
+ }
+
+ if (PRIVATE_DNS_MODE_GOOGLE == mode) {
+ return new PrivateDnsConfig(PRIVATE_DNS_SPECIFIER_GOOGLE, null);
+ }
+
+ if (PRIVATE_DNS_MODE_MULLVAD == mode) {
+ return new PrivateDnsConfig(PRIVATE_DNS_SPECIFIER_MULLVAD, null);
+ }
+
+ if (PRIVATE_DNS_MODE_QUADNINE == mode) {
+ return new PrivateDnsConfig(PRIVATE_DNS_SPECIFIER_QUADNINE, null);
+ }
+
+ if (PRIVATE_DNS_MODE_RESTENA == mode) {
+ return new PrivateDnsConfig(PRIVATE_DNS_SPECIFIER_RESTENA, null);
+ }
+
+ if (PRIVATE_DNS_MODE_SWITCH == mode) {
+ return new PrivateDnsConfig(PRIVATE_DNS_SPECIFIER_SWITCH, null);
+ }
+
+ if (PRIVATE_DNS_MODE_TWNIC == mode) {
+ return new PrivateDnsConfig(PRIVATE_DNS_SPECIFIER_TWNIC, null);
+ }
+
+ if (PRIVATE_DNS_MODE_UNCENSOREDDNS == mode) {
+ return new PrivateDnsConfig(PRIVATE_DNS_SPECIFIER_UNCENSOREDDNS, null);
+ }
+
return new PrivateDnsConfig(useTls);
}
diff --git a/staticlibs/framework/com/android/net/module/util/ConnectivitySettingsUtils.java b/staticlibs/framework/com/android/net/module/util/ConnectivitySettingsUtils.java
index f4856b3..cfdfb33 100644
--- a/staticlibs/framework/com/android/net/module/util/ConnectivitySettingsUtils.java
+++ b/staticlibs/framework/com/android/net/module/util/ConnectivitySettingsUtils.java
@@ -32,10 +32,36 @@
public static final int PRIVATE_DNS_MODE_OFF = 1;
public static final int PRIVATE_DNS_MODE_OPPORTUNISTIC = 2;
public static final int PRIVATE_DNS_MODE_PROVIDER_HOSTNAME = 3;
+ public static final int PRIVATE_DNS_MODE_ADGUARD = 4;
+ public static final int PRIVATE_DNS_MODE_APPLIEDPRIVACY = 5;
+ public static final int PRIVATE_DNS_MODE_CLEANBROWSING = 6;
+ public static final int PRIVATE_DNS_MODE_CIRA = 7;
+ public static final int PRIVATE_DNS_MODE_CZNIC = 8;
+ public static final int PRIVATE_DNS_MODE_CLOUDFLARE = 9;
+ public static final int PRIVATE_DNS_MODE_GOOGLE = 10;
+ public static final int PRIVATE_DNS_MODE_MULLVAD = 11;
+ public static final int PRIVATE_DNS_MODE_QUADNINE = 12;
+ public static final int PRIVATE_DNS_MODE_RESTENA = 13;
+ public static final int PRIVATE_DNS_MODE_SWITCH = 14;
+ public static final int PRIVATE_DNS_MODE_TWNIC = 15;
+ public static final int PRIVATE_DNS_MODE_UNCENSOREDDNS = 16;
public static final String PRIVATE_DNS_DEFAULT_MODE = "private_dns_default_mode";
public static final String PRIVATE_DNS_MODE = "private_dns_mode";
public static final String PRIVATE_DNS_MODE_OFF_STRING = "off";
+ public static final String PRIVATE_DNS_MODE_ADGUARD_STRING = "adguard";
+ public static final String PRIVATE_DNS_MODE_APPLIEDPRIVACY_STRING = "appliedprivacy";
+ public static final String PRIVATE_DNS_MODE_CLEANBROWSING_STRING = "cleanbrowsing";
+ public static final String PRIVATE_DNS_MODE_CIRA_STRING = "cira";
+ public static final String PRIVATE_DNS_MODE_CZNIC_STRING = "cznic";
+ public static final String PRIVATE_DNS_MODE_CLOUDFLARE_STRING = "cloudflare";
+ public static final String PRIVATE_DNS_MODE_GOOGLE_STRING = "google";
+ public static final String PRIVATE_DNS_MODE_MULLVAD_STRING = "mullvad";
+ public static final String PRIVATE_DNS_MODE_QUADNINE_STRING = "quadnine";
+ public static final String PRIVATE_DNS_MODE_RESTENA_STRING = "restena";
+ public static final String PRIVATE_DNS_MODE_SWITCH_STRING = "switch";
+ public static final String PRIVATE_DNS_MODE_TWNIC_STRING = "twnic";
+ public static final String PRIVATE_DNS_MODE_UNCENSOREDDNS_STRING = "uncensoreddns";
public static final String PRIVATE_DNS_MODE_OPPORTUNISTIC_STRING = "opportunistic";
public static final String PRIVATE_DNS_MODE_PROVIDER_HOSTNAME_STRING = "hostname";
public static final String PRIVATE_DNS_SPECIFIER = "private_dns_specifier";
@@ -50,6 +76,32 @@
switch (mode) {
case PRIVATE_DNS_MODE_OFF:
return PRIVATE_DNS_MODE_OFF_STRING;
+ case PRIVATE_DNS_MODE_ADGUARD:
+ return PRIVATE_DNS_MODE_ADGUARD_STRING;
+ case PRIVATE_DNS_MODE_APPLIEDPRIVACY:
+ return PRIVATE_DNS_MODE_APPLIEDPRIVACY_STRING;
+ case PRIVATE_DNS_MODE_CLEANBROWSING:
+ return PRIVATE_DNS_MODE_CLEANBROWSING_STRING;
+ case PRIVATE_DNS_MODE_CIRA:
+ return PRIVATE_DNS_MODE_CIRA_STRING;
+ case PRIVATE_DNS_MODE_CZNIC:
+ return PRIVATE_DNS_MODE_CZNIC_STRING;
+ case PRIVATE_DNS_MODE_CLOUDFLARE:
+ return PRIVATE_DNS_MODE_CLOUDFLARE_STRING;
+ case PRIVATE_DNS_MODE_GOOGLE:
+ return PRIVATE_DNS_MODE_GOOGLE_STRING;
+ case PRIVATE_DNS_MODE_MULLVAD:
+ return PRIVATE_DNS_MODE_MULLVAD_STRING;
+ case PRIVATE_DNS_MODE_QUADNINE:
+ return PRIVATE_DNS_MODE_QUADNINE_STRING;
+ case PRIVATE_DNS_MODE_RESTENA:
+ return PRIVATE_DNS_MODE_RESTENA_STRING;
+ case PRIVATE_DNS_MODE_SWITCH:
+ return PRIVATE_DNS_MODE_SWITCH_STRING;
+ case PRIVATE_DNS_MODE_TWNIC:
+ return PRIVATE_DNS_MODE_TWNIC_STRING;
+ case PRIVATE_DNS_MODE_UNCENSOREDDNS:
+ return PRIVATE_DNS_MODE_UNCENSOREDDNS_STRING;
case PRIVATE_DNS_MODE_OPPORTUNISTIC:
return PRIVATE_DNS_MODE_OPPORTUNISTIC_STRING;
case PRIVATE_DNS_MODE_PROVIDER_HOSTNAME:
@@ -67,6 +119,32 @@
switch (mode) {
case "off":
return PRIVATE_DNS_MODE_OFF;
+ case "adguard":
+ return PRIVATE_DNS_MODE_ADGUARD;
+ case "appliedprivacy":
+ return PRIVATE_DNS_MODE_APPLIEDPRIVACY;
+ case "cleanbrowsing":
+ return PRIVATE_DNS_MODE_CLEANBROWSING;
+ case "cira":
+ return PRIVATE_DNS_MODE_CIRA;
+ case "cznic":
+ return PRIVATE_DNS_MODE_CZNIC;
+ case "cloudflare":
+ return PRIVATE_DNS_MODE_CLOUDFLARE;
+ case "google":
+ return PRIVATE_DNS_MODE_GOOGLE;
+ case "mullvad":
+ return PRIVATE_DNS_MODE_MULLVAD;
+ case "quadnine":
+ return PRIVATE_DNS_MODE_QUADNINE;
+ case "restena":
+ return PRIVATE_DNS_MODE_RESTENA;
+ case "switch":
+ return PRIVATE_DNS_MODE_SWITCH;
+ case "twnic":
+ return PRIVATE_DNS_MODE_TWNIC;
+ case "uncensoreddns":
+ return PRIVATE_DNS_MODE_UNCENSOREDDNS;
case "hostname":
return PRIVATE_DNS_MODE_PROVIDER_HOSTNAME;
case "opportunistic":
@@ -100,6 +178,19 @@
*/
public static void setPrivateDnsMode(@NonNull Context context, int mode) {
if (!(mode == PRIVATE_DNS_MODE_OFF
+ || mode == PRIVATE_DNS_MODE_ADGUARD
+ || mode == PRIVATE_DNS_MODE_APPLIEDPRIVACY
+ || mode == PRIVATE_DNS_MODE_CLEANBROWSING
+ || mode == PRIVATE_DNS_MODE_CIRA
+ || mode == PRIVATE_DNS_MODE_CZNIC
+ || mode == PRIVATE_DNS_MODE_CLOUDFLARE
+ || mode == PRIVATE_DNS_MODE_GOOGLE
+ || mode == PRIVATE_DNS_MODE_MULLVAD
+ || mode == PRIVATE_DNS_MODE_QUADNINE
+ || mode == PRIVATE_DNS_MODE_RESTENA
+ || mode == PRIVATE_DNS_MODE_SWITCH
+ || mode == PRIVATE_DNS_MODE_TWNIC
+ || mode == PRIVATE_DNS_MODE_UNCENSOREDDNS
|| mode == PRIVATE_DNS_MODE_OPPORTUNISTIC
|| mode == PRIVATE_DNS_MODE_PROVIDER_HOSTNAME)) {
throw new IllegalArgumentException("Invalid private dns mode: " + mode);