From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Tad <tad@spotco.us> Date: Thu, 21 Oct 2021 21:09:38 -0400 Subject: [PATCH] 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_packages_apps_Settings/+/458 - Pavel Shirshov <pshirshov@eml.cc> https://review.calyxos.org/c/CalyxOS/platform_packages_apps_Settings/+/5357 Signed-off-by: Tad <tad@spotco.us> Change-Id: I423ad5a3c360a687a226e61df3f75b5550f851c0 --- res/layout/private_dns_mode_dialog.xml | 52 +++++++++++ res/values/cm_strings.xml | 15 +++ .../PrivateDnsModeDialogPreference.java | 92 +++++++++++++++++++ .../PrivateDnsPreferenceController.java | 65 +++++++++++++ 4 files changed, 224 insertions(+) diff --git a/res/layout/private_dns_mode_dialog.xml b/res/layout/private_dns_mode_dialog.xml index 0b4f4db6c4b..ca6a2cf62dd 100644 --- a/res/layout/private_dns_mode_dialog.xml +++ b/res/layout/private_dns_mode_dialog.xml @@ -35,6 +35,58 @@ android:id="@+id/private_dns_mode_off" layout="@layout/preference_widget_dialog_radiobutton"/> + <include + android:id="@+id/private_dns_mode_adguard" + layout="@layout/preference_widget_dialog_radiobutton"/> + + <include + android:id="@+id/private_dns_mode_appliedprivacy" + layout="@layout/preference_widget_dialog_radiobutton"/> + + <include + android:id="@+id/private_dns_mode_cira" + layout="@layout/preference_widget_dialog_radiobutton"/> + + <include + android:id="@+id/private_dns_mode_cleanbrowsing" + layout="@layout/preference_widget_dialog_radiobutton"/> + + <include + android:id="@+id/private_dns_mode_cloudflare" + layout="@layout/preference_widget_dialog_radiobutton"/> + + <include + android:id="@+id/private_dns_mode_cznic" + layout="@layout/preference_widget_dialog_radiobutton"/> + + <include + android:id="@+id/private_dns_mode_google" + layout="@layout/preference_widget_dialog_radiobutton"/> + + <include + android:id="@+id/private_dns_mode_mullvad" + layout="@layout/preference_widget_dialog_radiobutton"/> + + <include + android:id="@+id/private_dns_mode_quadnine" + layout="@layout/preference_widget_dialog_radiobutton"/> + + <include + android:id="@+id/private_dns_mode_restena" + layout="@layout/preference_widget_dialog_radiobutton"/> + + <include + android:id="@+id/private_dns_mode_switch" + layout="@layout/preference_widget_dialog_radiobutton"/> + + <include + android:id="@+id/private_dns_mode_twnic" + layout="@layout/preference_widget_dialog_radiobutton"/> + + <include + android:id="@+id/private_dns_mode_uncensoreddns" + layout="@layout/preference_widget_dialog_radiobutton"/> + <include android:id="@+id/private_dns_mode_opportunistic" layout="@layout/preference_widget_dialog_radiobutton"/> diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml index d13d4d4fe85..90f88290271 100644 --- a/res/values/cm_strings.xml +++ b/res/values/cm_strings.xml @@ -137,6 +137,21 @@ <string name="unlock_scramble_pin_layout_title">Scramble layout</string> <string name="unlock_scramble_pin_layout_summary">Scramble PIN layout when unlocking device</string> + <!-- Private DNS --> + <string name="private_dns_mode_adguard" translatable="false">AdGuard (CY)</string> + <string name="private_dns_mode_appliedprivacy" translatable="false">AppliedPrivacy (AT)</string> + <string name="private_dns_mode_cira" translatable="false">CIRA (CA)</string> + <string name="private_dns_mode_cleanbrowsing" translatable="false">CleanBrowsing (US)</string> + <string name="private_dns_mode_cloudflare" translatable="false">Cloudflare (US)</string> + <string name="private_dns_mode_cznic" translatable="false">CZ.NIC (CZ)</string> + <string name="private_dns_mode_google" translatable="false">Google (US)</string> + <string name="private_dns_mode_mullvad" translatable="false">Mullvad (SE)</string> + <string name="private_dns_mode_quadnine" translatable="false">Quad9 (CH)</string> + <string name="private_dns_mode_restena" translatable="false">Restena (LU)</string> + <string name="private_dns_mode_switch" translatable="false">SWITCH (CH)</string> + <string name="private_dns_mode_twnic" translatable="false">TW.NIC (TW)</string> + <string name="private_dns_mode_uncensoreddns" translatable="false">UncensoredDNS (DK)</string> + <!-- Proximity wake --> <string name="proximity_wake_title">Prevent accidental wake-up</string> <string name="proximity_wake_summary">Check the proximity sensor prior to waking up screen</string> diff --git a/src/com/android/settings/network/PrivateDnsModeDialogPreference.java b/src/com/android/settings/network/PrivateDnsModeDialogPreference.java index 3fc5086cd68..abfb5b4470d 100644 --- a/src/com/android/settings/network/PrivateDnsModeDialogPreference.java +++ b/src/com/android/settings/network/PrivateDnsModeDialogPreference.java @@ -17,6 +17,19 @@ package com.android.settings.network; import static android.net.ConnectivityManager.PRIVATE_DNS_DEFAULT_MODE_FALLBACK; import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OFF; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_ADGUARD; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_APPLIEDPRIVACY; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_CIRA; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_CLEANBROWSING; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_CLOUDFLARE; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_CZNIC; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_GOOGLE; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_MULLVAD; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_QUADNINE; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_RESTENA; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_SWITCH; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_TWNIC; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_UNCENSOREDDNS; import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OPPORTUNISTIC; import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME; @@ -74,6 +87,19 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat 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_ADGUARD, R.id.private_dns_mode_adguard); + PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_APPLIEDPRIVACY, R.id.private_dns_mode_appliedprivacy); + PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_CIRA, R.id.private_dns_mode_cira); + PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_CLEANBROWSING, R.id.private_dns_mode_cleanbrowsing); + PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_CLOUDFLARE, R.id.private_dns_mode_cloudflare); + PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_CZNIC, R.id.private_dns_mode_cznic); + PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_GOOGLE, R.id.private_dns_mode_google); + PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_MULLVAD, R.id.private_dns_mode_mullvad); + PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_QUADNINE, R.id.private_dns_mode_quadnine); + PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_RESTENA, R.id.private_dns_mode_restena); + PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_SWITCH, R.id.private_dns_mode_switch); + PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_TWNIC, R.id.private_dns_mode_twnic); + PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_UNCENSOREDDNS, R.id.private_dns_mode_uncensoreddns); 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); } @@ -180,6 +206,46 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat // Initial radio button text final RadioButton offRadioButton = view.findViewById(R.id.private_dns_mode_off); offRadioButton.setText(R.string.private_dns_mode_off); + final RadioButton adguardRadioButton = + view.findViewById(R.id.private_dns_mode_adguard); + adguardRadioButton.setText(R.string.private_dns_mode_adguard); + final RadioButton appliedprivacyRadioButton = + view.findViewById(R.id.private_dns_mode_appliedprivacy); + appliedprivacyRadioButton.setText(R.string.private_dns_mode_appliedprivacy); + final RadioButton ciraRadioButton = + view.findViewById(R.id.private_dns_mode_cira); + ciraRadioButton.setText(R.string.private_dns_mode_cira); + final RadioButton cleanbrowsingRadioButton = + view.findViewById(R.id.private_dns_mode_cleanbrowsing); + cleanbrowsingRadioButton.setText(R.string.private_dns_mode_cleanbrowsing); + final RadioButton cloudflareRadioButton = + view.findViewById(R.id.private_dns_mode_cloudflare); + cloudflareRadioButton.setText(R.string.private_dns_mode_cloudflare); + final RadioButton cznicRadioButton = + view.findViewById(R.id.private_dns_mode_cznic); + cznicRadioButton.setText(R.string.private_dns_mode_cznic); + final RadioButton googleRadioButton = + view.findViewById(R.id.private_dns_mode_google); + googleRadioButton.setText(R.string.private_dns_mode_google); + final RadioButton mullvadRadioButton = + view.findViewById(R.id.private_dns_mode_mullvad); + mullvadRadioButton.setText(R.string.private_dns_mode_mullvad); + final RadioButton quadnineRadioButton = + view.findViewById(R.id.private_dns_mode_quadnine); + quadnineRadioButton.setText(R.string.private_dns_mode_quadnine); + final RadioButton restenaRadioButton = + view.findViewById(R.id.private_dns_mode_restena); + restenaRadioButton.setText(R.string.private_dns_mode_restena); + final RadioButton switchRadioButton = + view.findViewById(R.id.private_dns_mode_switch); + switchRadioButton.setText(R.string.private_dns_mode_switch); + final RadioButton twnicRadioButton = + view.findViewById(R.id.private_dns_mode_twnic); + twnicRadioButton.setText(R.string.private_dns_mode_twnic); + final RadioButton uncensoreddnsRadioButton = + view.findViewById(R.id.private_dns_mode_uncensoreddns); + uncensoreddnsRadioButton.setText(R.string.private_dns_mode_uncensoreddns); + final RadioButton opportunisticRadioButton = view.findViewById(R.id.private_dns_mode_opportunistic); opportunisticRadioButton.setText(R.string.private_dns_mode_opportunistic); @@ -221,6 +287,32 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat public void onCheckedChanged(RadioGroup group, int checkedId) { if (checkedId == R.id.private_dns_mode_off) { mMode = PRIVATE_DNS_MODE_OFF; + } else if (checkedId == R.id.private_dns_mode_adguard) { + mMode = PRIVATE_DNS_MODE_ADGUARD; + } else if (checkedId == R.id.private_dns_mode_appliedprivacy) { + mMode = PRIVATE_DNS_MODE_APPLIEDPRIVACY; + } else if (checkedId == R.id.private_dns_mode_cira) { + mMode = PRIVATE_DNS_MODE_CIRA; + } else if (checkedId == R.id.private_dns_mode_cleanbrowsing) { + mMode = PRIVATE_DNS_MODE_CLEANBROWSING; + } else if (checkedId == R.id.private_dns_mode_cloudflare) { + mMode = PRIVATE_DNS_MODE_CLOUDFLARE; + } else if (checkedId == R.id.private_dns_mode_cznic) { + mMode = PRIVATE_DNS_MODE_CZNIC; + } else if (checkedId == R.id.private_dns_mode_google) { + mMode = PRIVATE_DNS_MODE_GOOGLE; + } else if (checkedId == R.id.private_dns_mode_mullvad) { + mMode = PRIVATE_DNS_MODE_MULLVAD; + } else if (checkedId == R.id.private_dns_mode_quadnine) { + mMode = PRIVATE_DNS_MODE_QUADNINE; + } else if (checkedId == R.id.private_dns_mode_restena) { + mMode = PRIVATE_DNS_MODE_RESTENA; + } else if (checkedId == R.id.private_dns_mode_switch) { + mMode = PRIVATE_DNS_MODE_SWITCH; + } else if (checkedId == R.id.private_dns_mode_twnic) { + mMode = PRIVATE_DNS_MODE_TWNIC; + } else if (checkedId == R.id.private_dns_mode_uncensoreddns) { + mMode = PRIVATE_DNS_MODE_UNCENSOREDDNS; } else if (checkedId == R.id.private_dns_mode_opportunistic) { mMode = PRIVATE_DNS_MODE_OPPORTUNISTIC; } else if (checkedId == R.id.private_dns_mode_provider) { diff --git a/src/com/android/settings/network/PrivateDnsPreferenceController.java b/src/com/android/settings/network/PrivateDnsPreferenceController.java index 22633e0081a..4a55ac5c2be 100644 --- a/src/com/android/settings/network/PrivateDnsPreferenceController.java +++ b/src/com/android/settings/network/PrivateDnsPreferenceController.java @@ -17,6 +17,19 @@ package com.android.settings.network; import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OFF; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_ADGUARD; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_APPLIEDPRIVACY; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_CIRA; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_CLEANBROWSING; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_CLOUDFLARE; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_CZNIC; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_GOOGLE; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_MULLVAD; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_QUADNINE; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_RESTENA; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_SWITCH; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_TWNIC; +import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_UNCENSOREDDNS; import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OPPORTUNISTIC; import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME; import static android.provider.Settings.Global.PRIVATE_DNS_DEFAULT_MODE; @@ -128,6 +141,58 @@ 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_ADGUARD: + return dnsesResolved + ? res.getString(R.string.private_dns_mode_adguard) + : res.getString(R.string.private_dns_mode_provider_failure); + case PRIVATE_DNS_MODE_APPLIEDPRIVACY: + return dnsesResolved + ? res.getString(R.string.private_dns_mode_appliedprivacy) + : res.getString(R.string.private_dns_mode_provider_failure); + case PRIVATE_DNS_MODE_CIRA: + return dnsesResolved + ? res.getString(R.string.private_dns_mode_cira) + : res.getString(R.string.private_dns_mode_provider_failure); + case PRIVATE_DNS_MODE_CLEANBROWSING: + return dnsesResolved + ? res.getString(R.string.private_dns_mode_cleanbrowsing) + : res.getString(R.string.private_dns_mode_provider_failure); + case PRIVATE_DNS_MODE_CLOUDFLARE: + return dnsesResolved + ? res.getString(R.string.private_dns_mode_cloudflare) + : res.getString(R.string.private_dns_mode_provider_failure); + case PRIVATE_DNS_MODE_CZNIC: + return dnsesResolved + ? res.getString(R.string.private_dns_mode_cznic) + : res.getString(R.string.private_dns_mode_provider_failure); + case PRIVATE_DNS_MODE_GOOGLE: + return dnsesResolved + ? res.getString(R.string.private_dns_mode_google) + : res.getString(R.string.private_dns_mode_provider_failure); + case PRIVATE_DNS_MODE_MULLVAD: + return dnsesResolved + ? res.getString(R.string.private_dns_mode_mullvad) + : res.getString(R.string.private_dns_mode_provider_failure); + case PRIVATE_DNS_MODE_QUADNINE: + return dnsesResolved + ? res.getString(R.string.private_dns_mode_quadnine) + : res.getString(R.string.private_dns_mode_provider_failure); + case PRIVATE_DNS_MODE_RESTENA: + return dnsesResolved + ? res.getString(R.string.private_dns_mode_restena) + : res.getString(R.string.private_dns_mode_provider_failure); + case PRIVATE_DNS_MODE_SWITCH: + return dnsesResolved + ? res.getString(R.string.private_dns_mode_switch) + : res.getString(R.string.private_dns_mode_provider_failure); + case PRIVATE_DNS_MODE_TWNIC: + return dnsesResolved + ? res.getString(R.string.private_dns_mode_twnic) + : res.getString(R.string.private_dns_mode_provider_failure); + case PRIVATE_DNS_MODE_UNCENSOREDDNS: + return dnsesResolved + ? res.getString(R.string.private_dns_mode_uncensoreddns) + : res.getString(R.string.private_dns_mode_provider_failure); case PRIVATE_DNS_MODE_OPPORTUNISTIC: return dnsesResolved ? res.getString(R.string.private_dns_mode_on) : res.getString(R.string.private_dns_mode_opportunistic);