diff --git a/res/layout/private_dns_mode_dialog.xml b/res/layout/private_dns_mode_dialog.xml
index 315bb63ffd2..1774ec376ea 100644
--- a/res/layout/private_dns_mode_dialog.xml
+++ b/res/layout/private_dns_mode_dialog.xml
@@ -45,6 +45,18 @@
android:id="@+id/private_dns_mode_adguard"
layout="@layout/preference_widget_dialog_radiobutton"/>
+
+
+
+
+
+
diff --git a/res/values/evolution_strings.xml b/res/values/evolution_strings.xml
index 202a96310cf..e6d61246b0a 100644
--- a/res/values/evolution_strings.xml
+++ b/res/values/evolution_strings.xml
@@ -32,4 +32,19 @@
AdGuard DNS
dns.adguard.com
+
+
+ Open DNS
+
+ dns.opendns.com
+
+
+ Cleanbrowsing DNS
+
+ security-filter-dns.cleanbrowsing.org
+
+
+ Quad9 DNS
+
+ dns.quad9.net
diff --git a/src/com/android/settings/network/PrivateDnsModeDialogPreference.java b/src/com/android/settings/network/PrivateDnsModeDialogPreference.java
index 1caeb7de8ba..1dc814e0ccb 100644
--- a/src/com/android/settings/network/PrivateDnsModeDialogPreference.java
+++ b/src/com/android/settings/network/PrivateDnsModeDialogPreference.java
@@ -74,12 +74,18 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat
// Only used in Settings, update on additions to ConnectivitySettingsUtils
private static final int PRIVATE_DNS_MODE_CLOUDFLARE = 4;
private static final int PRIVATE_DNS_MODE_ADGUARD = 5;
+ private static final int PRIVATE_DNS_MODE_OPEN_DNS = 6;
+ private static final int PRIVATE_DNS_MODE_CLEANBROWSING = 7;
+ private static final int PRIVATE_DNS_MODE_QUAD9 = 8;
static {
PRIVATE_DNS_MAP = new HashMap<>();
PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_OFF, R.id.private_dns_mode_off);
PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_CLOUDFLARE, R.id.private_dns_mode_cloudflare);
PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_ADGUARD, R.id.private_dns_mode_adguard);
+ PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_OPEN_DNS, R.id.private_dns_mode_open_dns);
+ PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_CLEANBROWSING, R.id.private_dns_mode_cleanbrowsing);
+ PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_QUAD9, R.id.private_dns_mode_quad9);
PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_OPPORTUNISTIC, R.id.private_dns_mode_opportunistic);
PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_PROVIDER_HOSTNAME, R.id.private_dns_mode_provider);
}
@@ -149,10 +155,22 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat
context.getString(R.string.private_dns_hostname_cloudflare);
final String adguardHostname =
context.getString(R.string.private_dns_hostname_adguard);
+ final String opendnsHostname =
+ context.getString(R.string.private_dns_hostname_open_dns);
+ final String cleanbrowsingHostname =
+ context.getString(R.string.private_dns_hostname_cleanbrowsing);
+ final String quad9Hostname =
+ context.getString(R.string.private_dns_hostname_quad9);
if (privateDnsHostname.equals(cloudflareHostname)) {
mMode = PRIVATE_DNS_MODE_CLOUDFLARE;
} else if (privateDnsHostname.equals(adguardHostname)) {
mMode = PRIVATE_DNS_MODE_ADGUARD;
+ } else if (privateDnsHostname.equals(opendnsHostname)) {
+ mMode = PRIVATE_DNS_MODE_OPEN_DNS;
+ } else if (privateDnsHostname.equals(cleanbrowsingHostname)) {
+ mMode = PRIVATE_DNS_MODE_CLEANBROWSING;
+ } else if (privateDnsHostname.equals(quad9Hostname)) {
+ mMode = PRIVATE_DNS_MODE_QUAD9;
}
}
mRadioGroup = view.findViewById(R.id.private_dns_radio_group);
@@ -168,6 +186,15 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat
final RadioButton adguardRadioButton =
view.findViewById(R.id.private_dns_mode_adguard);
adguardRadioButton.setText(R.string.private_dns_mode_adguard);
+ final RadioButton opendnsRadioButton =
+ view.findViewById(R.id.private_dns_mode_open_dns);
+ opendnsRadioButton.setText(R.string.private_dns_mode_open_dns);
+ final RadioButton cleanbrowsingRadioButton =
+ view.findViewById(R.id.private_dns_mode_cleanbrowsing);
+ cleanbrowsingRadioButton.setText(R.string.private_dns_mode_cleanbrowsing);
+ final RadioButton quad9RadioButton =
+ view.findViewById(R.id.private_dns_mode_quad9);
+ quad9RadioButton.setText(R.string.private_dns_mode_quad9);
final RadioButton opportunisticRadioButton =
view.findViewById(R.id.private_dns_mode_opportunistic);
opportunisticRadioButton.setText(
@@ -207,6 +234,12 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat
mMode = PRIVATE_DNS_MODE_CLOUDFLARE;
} else if (checkedId == R.id.private_dns_mode_adguard) {
mMode = PRIVATE_DNS_MODE_ADGUARD;
+ } else if (checkedId == R.id.private_dns_mode_open_dns) {
+ mMode = PRIVATE_DNS_MODE_OPEN_DNS;
+ } else if (checkedId == R.id.private_dns_mode_cleanbrowsing) {
+ mMode = PRIVATE_DNS_MODE_CLEANBROWSING;
+ } else if (checkedId == R.id.private_dns_mode_quad9) {
+ mMode = PRIVATE_DNS_MODE_QUAD9;
} else if (checkedId == R.id.private_dns_mode_opportunistic) {
mMode = PRIVATE_DNS_MODE_OPPORTUNISTIC;
} else if (checkedId == R.id.private_dns_mode_provider) {
@@ -307,6 +340,21 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat
context.getString(R.string.private_dns_hostname_adguard);
ConnectivitySettingsManager.setPrivateDnsHostname(context, adguardHostname);
modeToSet = PRIVATE_DNS_MODE_PROVIDER_HOSTNAME;
+ } else if (mMode == PRIVATE_DNS_MODE_OPEN_DNS) {
+ final String opendnsHostname =
+ context.getString(R.string.private_dns_hostname_open_dns);
+ ConnectivitySettingsManager.setPrivateDnsHostname(context, opendnsHostname);
+ modeToSet = PRIVATE_DNS_MODE_PROVIDER_HOSTNAME;
+ } else if (mMode == PRIVATE_DNS_MODE_CLEANBROWSING) {
+ final String cleanbrowsingHostname =
+ context.getString(R.string.private_dns_hostname_cleanbrowsing);
+ ConnectivitySettingsManager.setPrivateDnsHostname(context, cleanbrowsingHostname);
+ modeToSet = PRIVATE_DNS_MODE_PROVIDER_HOSTNAME;
+ } else if (mMode == PRIVATE_DNS_MODE_QUAD9) {
+ final String quad9Hostname =
+ context.getString(R.string.private_dns_hostname_quad9);
+ ConnectivitySettingsManager.setPrivateDnsHostname(context, quad9Hostname);
+ modeToSet = PRIVATE_DNS_MODE_PROVIDER_HOSTNAME;
}
ConnectivitySettingsManager.setPrivateDnsMode(context, modeToSet);
diff --git a/src/com/android/settings/network/PrivateDnsPreferenceController.java b/src/com/android/settings/network/PrivateDnsPreferenceController.java
index 9c0b9bdf00a..179079dcc38 100644
--- a/src/com/android/settings/network/PrivateDnsPreferenceController.java
+++ b/src/com/android/settings/network/PrivateDnsPreferenceController.java
@@ -68,6 +68,9 @@ public class PrivateDnsPreferenceController extends BasePreferenceController
// Only used in Settings, update on additions to ConnectivitySettingsUtils
private static final int PRIVATE_DNS_MODE_CLOUDFLARE = 4;
private static final int PRIVATE_DNS_MODE_ADGUARD = 5;
+ private static final int PRIVATE_DNS_MODE_OPEN_DNS = 6;
+ private static final int PRIVATE_DNS_MODE_CLEANBROWSING = 7;
+ private static final int PRIVATE_DNS_MODE_QUAD9 = 8;
private final Handler mHandler;
private final ContentObserver mSettingsObserver;
@@ -135,6 +138,9 @@ public class PrivateDnsPreferenceController extends BasePreferenceController
return res.getString(com.android.settingslib.R.string.private_dns_mode_off);
case PRIVATE_DNS_MODE_CLOUDFLARE:
case PRIVATE_DNS_MODE_ADGUARD:
+ case PRIVATE_DNS_MODE_OPEN_DNS:
+ case PRIVATE_DNS_MODE_CLEANBROWSING:
+ case PRIVATE_DNS_MODE_QUAD9:
case PRIVATE_DNS_MODE_OPPORTUNISTIC:
return dnsesResolved ? res.getString(R.string.private_dns_mode_on)
: res.getString(
@@ -150,10 +156,22 @@ public class PrivateDnsPreferenceController extends BasePreferenceController
res.getString(R.string.private_dns_hostname_cloudflare);
final String adguardHostname =
res.getString(R.string.private_dns_hostname_adguard);
+ final String opendnsHostname =
+ res.getString(R.string.private_dns_hostname_open_dns);
+ final String cleanbrowsingHostname =
+ res.getString(R.string.private_dns_hostname_cleanbrowsing);
+ final String quad9Hostname =
+ res.getString(R.string.private_dns_hostname_quad9);
if (privateDnsHostname.equals(cloudflareHostname)) {
return res.getString(R.string.private_dns_mode_cloudflare);
} else if (privateDnsHostname.equals(adguardHostname)) {
return res.getString(R.string.private_dns_mode_adguard);
+ } else if (privateDnsHostname.equals(opendnsHostname)) {
+ return res.getString(R.string.private_dns_mode_open_dns);
+ } else if (privateDnsHostname.equals(cleanbrowsingHostname)) {
+ return res.getString(R.string.private_dns_mode_cleanbrowsing);
+ } else if (privateDnsHostname.equals(quad9Hostname)) {
+ return res.getString(R.string.private_dns_mode_quad9);
}
return privateDnsHostname;
}