diff --git a/res/layout/private_dns_mode_dialog.xml b/res/layout/private_dns_mode_dialog.xml
index 641905dc010521254fa5e6edeb5cf65321e6f06f..121d735b744d2d17f86b71dfbab9e651e3f7191c 100644
--- a/res/layout/private_dns_mode_dialog.xml
+++ b/res/layout/private_dns_mode_dialog.xml
@@ -38,6 +38,14 @@
android:layout_marginStart="8dp"
android:minHeight="48dp"/>
+
+
Advanced Privacy
Manage trackers, fake location, hide IP address
+
+
+ Quad9
+ dns.quad9.net
diff --git a/src/com/android/settings/network/PrivateDnsModeDialogPreference.java b/src/com/android/settings/network/PrivateDnsModeDialogPreference.java
index 1655c69cea48917361967c05dfc1deed4cdc7e68..ae6bd45672d1909562570193385b98f406b35c49 100644
--- a/src/com/android/settings/network/PrivateDnsModeDialogPreference.java
+++ b/src/com/android/settings/network/PrivateDnsModeDialogPreference.java
@@ -70,9 +70,13 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat
// DNS_MODE -> RadioButton id
private static final Map PRIVATE_DNS_MAP;
+ // Only used in Settings, update on additions to ConnectivitySettingsUtils
+ private static final String PRIVATE_DNS_MODE_QUADNINE = "quadnine";
+
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_QUADNINE, R.id.private_dns_mode_quadnine);
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);
}
@@ -167,6 +171,14 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat
final ContentResolver contentResolver = context.getContentResolver();
mMode = getModeFromSettings(context.getContentResolver());
+ if (mMode == PRIVATE_DNS_MODE_PROVIDER_HOSTNAME) {
+ final String privateDnsHostname = getHostnameFromSettings(contentResolver);
+ final String quadNineHostname =
+ context.getString(R.string.private_dns_hostname_quadnine);
+ if (privateDnsHostname.equals(quadNineHostname)) {
+ mMode = PRIVATE_DNS_MODE_QUADNINE;
+ }
+ }
mEditText = view.findViewById(R.id.private_dns_mode_provider_hostname);
mEditText.addTextChangedListener(this);
@@ -193,15 +205,22 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_POSITIVE) {
final Context context = getContext();
+ String modeToSet = mMode;
if (mMode.equals(PRIVATE_DNS_MODE_PROVIDER_HOSTNAME)) {
// Only clickable if hostname is valid, so we could save it safely
Settings.Global.putString(context.getContentResolver(), HOSTNAME_KEY,
mEditText.getText().toString());
+ } else if (mMode == PRIVATE_DNS_MODE_QUADNINE) {
+ final String quadNineHostname =
+ context.getString(R.string.private_dns_hostname_quadnine);
+ Settings.Global.putString(context.getContentResolver(), HOSTNAME_KEY,
+ quadNineHostname);
+ modeToSet = PRIVATE_DNS_MODE_PROVIDER_HOSTNAME;
}
FeatureFactory.getFactory(context).getMetricsFeatureProvider().action(context,
- SettingsEnums.ACTION_PRIVATE_DNS_MODE, mMode);
- Settings.Global.putString(context.getContentResolver(), MODE_KEY, mMode);
+ SettingsEnums.ACTION_PRIVATE_DNS_MODE, modeToSet);
+ Settings.Global.putString(context.getContentResolver(), MODE_KEY, modeToSet);
}
}
@@ -211,6 +230,9 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat
case R.id.private_dns_mode_off:
mMode = PRIVATE_DNS_MODE_OFF;
break;
+ case R.id.private_dns_mode_quadnine:
+ mMode = PRIVATE_DNS_MODE_QUADNINE;
+ break;
case R.id.private_dns_mode_opportunistic:
mMode = PRIVATE_DNS_MODE_OPPORTUNISTIC;
break;
diff --git a/src/com/android/settings/network/PrivateDnsPreferenceController.java b/src/com/android/settings/network/PrivateDnsPreferenceController.java
index b74345170c0f8bb489a1d1b5196ceaf78a64af0b..05205663d231521ee44603d460829dad74e1af10 100644
--- a/src/com/android/settings/network/PrivateDnsPreferenceController.java
+++ b/src/com/android/settings/network/PrivateDnsPreferenceController.java
@@ -64,6 +64,9 @@ public class PrivateDnsPreferenceController extends BasePreferenceController
Settings.Global.getUriFor(PRIVATE_DNS_SPECIFIER),
};
+ // Only used in Settings, update on additions to ConnectivitySettingsUtils
+ private static final String PRIVATE_DNS_MODE_QUADNINE = "quadnine";
+
private final Handler mHandler;
private final ContentObserver mSettingsObserver;
private final ConnectivityManager mConnectivityManager;
@@ -128,6 +131,7 @@ public class PrivateDnsPreferenceController extends BasePreferenceController
switch (mode) {
case PRIVATE_DNS_MODE_OFF:
return res.getString(R.string.private_dns_mode_off);
+ case PRIVATE_DNS_MODE_QUADNINE:
case PRIVATE_DNS_MODE_OPPORTUNISTIC:
// TODO (b/79122154) : create a string specifically for this, instead of
// hijacking a string from notifications. This is necessary at this time
@@ -136,9 +140,17 @@ public class PrivateDnsPreferenceController extends BasePreferenceController
return dnsesResolved ? res.getString(R.string.switch_on_text)
: res.getString(R.string.private_dns_mode_opportunistic);
case PRIVATE_DNS_MODE_PROVIDER_HOSTNAME:
- return dnsesResolved
- ? PrivateDnsModeDialogPreference.getHostnameFromSettings(cr)
- : res.getString(R.string.private_dns_mode_provider_failure);
+ if (!dnsesResolved) {
+ return res.getString(R.string.private_dns_mode_provider_failure);
+ }
+ final String privateDnsHostname =
+ PrivateDnsModeDialogPreference.getHostnameFromSettings(cr);
+ final String quadNineHostname =
+ res.getString(R.string.private_dns_hostname_quadnine);
+ if (privateDnsHostname.equals(quadNineHostname)) {
+ return res.getString(R.string.private_dns_mode_quadnine);
+ }
+ return privateDnsHostname;
}
return "";
}