From d095dfe8cea5e75e002d24202f8f70979abbdbe7 Mon Sep 17 00:00:00 2001 From: Chirayu Desai Date: Mon, 24 Jun 2019 21:27:26 +0530 Subject: [PATCH] Settings: Add Quad9 DNS as a private DNS provider Change-Id: I7e8a320d47e7c5ddbcb9acfaf23032ae92d5d70d Signed-off-by: althafvly --- res/layout/private_dns_mode_dialog.xml | 8 ++++++ res/values/cm_strings.xml | 4 +++ .../PrivateDnsModeDialogPreference.java | 26 +++++++++++++++++-- .../PrivateDnsPreferenceController.java | 18 ++++++++++--- 4 files changed, 51 insertions(+), 5 deletions(-) diff --git a/res/layout/private_dns_mode_dialog.xml b/res/layout/private_dns_mode_dialog.xml index 641905dc010..121d735b744 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 1655c69cea4..ae6bd45672d 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 b74345170c0..05205663d23 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 ""; } -- GitLab