diff --git a/res/layout/private_dns_mode_dialog.xml b/res/layout/private_dns_mode_dialog.xml index 1774ec376ea..6bee5947447 100644 --- a/res/layout/private_dns_mode_dialog.xml +++ b/res/layout/private_dns_mode_dialog.xml @@ -41,6 +41,14 @@ android:id="@+id/private_dns_mode_cloudflare" layout="@layout/preference_widget_dialog_radiobutton"/> + + + + @@ -57,6 +65,18 @@ android:id="@+id/private_dns_mode_quad9" layout="@layout/preference_widget_dialog_radiobutton"/> + + + + + + @@ -91,4 +111,3 @@ - diff --git a/res/values/evolution_strings.xml b/res/values/evolution_strings.xml index e6d61246b0a..60374ba1bbb 100644 --- a/res/values/evolution_strings.xml +++ b/res/values/evolution_strings.xml @@ -28,6 +28,16 @@ Force LTE CA Force LTE carrier aggregation to work + + Cloudflare Block Malware DNS + + security.cloudflare-dns.com + + + Cloudflare Block Malware and Adult Content DNS + + family.cloudflare-dns.com + AdGuard DNS @@ -47,4 +57,19 @@ Quad9 DNS dns.quad9.net + + + Quad9 Unsecured DNS + + dns10.quad9.net + + + Quad9 with ECS DNS + + dns11.quad9.net + + + Quad9 Unsecured with ECS DNS + + dns12.quad9.net diff --git a/src/com/android/settings/network/PrivateDnsModeDialogPreference.java b/src/com/android/settings/network/PrivateDnsModeDialogPreference.java index 153fea2ebc8..594e1d0c553 100644 --- a/src/com/android/settings/network/PrivateDnsModeDialogPreference.java +++ b/src/com/android/settings/network/PrivateDnsModeDialogPreference.java @@ -73,19 +73,29 @@ 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; + private static final int PRIVATE_DNS_MODE_CLOUDFLARE_BLOCK_MALWARE = 5; + private static final int PRIVATE_DNS_MODE_CLOUDFLARE_BLOCK_MALWARE_AND_ADULT_CONTENT = 6; + private static final int PRIVATE_DNS_MODE_ADGUARD = 7; + private static final int PRIVATE_DNS_MODE_OPEN_DNS = 8; + private static final int PRIVATE_DNS_MODE_CLEANBROWSING = 9; + private static final int PRIVATE_DNS_MODE_QUAD9 = 10; + private static final int PRIVATE_DNS_MODE_QUAD9_UNSECURED = 11; + private static final int PRIVATE_DNS_MODE_QUAD9_ECS = 12; + private static final int PRIVATE_DNS_MODE_QUAD9_UNSECURED_ECS = 13; 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_CLOUDFLARE_BLOCK_MALWARE, R.id.private_dns_mode_cloudflare_block_malware); + PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_CLOUDFLARE_BLOCK_MALWARE_AND_ADULT_CONTENT, R.id.private_dns_mode_cloudflare_block_malware_and_adult_content); 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_QUAD9_UNSECURED, R.id.private_dns_mode_quad9_unsecured); + PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_QUAD9_ECS, R.id.private_dns_mode_quad9_ecs); + PRIVATE_DNS_MAP.put(PRIVATE_DNS_MODE_QUAD9_UNSECURED_ECS, R.id.private_dns_mode_quad9_unsecured_ecs); 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); } @@ -153,6 +163,10 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat ConnectivitySettingsManager.getPrivateDnsHostname(context); final String cloudflareHostname = context.getString(R.string.private_dns_hostname_cloudflare); + final String cloudflareblockmalwareHostname = + context.getString(R.string.private_dns_hostname_cloudflare_block_malware); + final String cloudflareblockmalwareandadultcontentHostname = + context.getString(R.string.private_dns_hostname_cloudflare_block_malware_and_adult_content); final String adguardHostname = context.getString(R.string.private_dns_hostname_adguard); final String opendnsHostname = @@ -161,8 +175,18 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat context.getString(R.string.private_dns_hostname_cleanbrowsing); final String quad9Hostname = context.getString(R.string.private_dns_hostname_quad9); + final String quad9unsecuredHostname = + context.getString(R.string.private_dns_hostname_quad9_unsecured); + final String quad9ecsHostname = + context.getString(R.string.private_dns_hostname_quad9_ecs); + final String quad9unsecuredecsHostname = + context.getString(R.string.private_dns_hostname_quad9_unsecured_ecs); if (privateDnsHostname.equals(cloudflareHostname)) { mMode = PRIVATE_DNS_MODE_CLOUDFLARE; + } else if (privateDnsHostname.equals(cloudflareblockmalwareHostname)) { + mMode = PRIVATE_DNS_MODE_CLOUDFLARE_BLOCK_MALWARE; + } else if (privateDnsHostname.equals(cloudflareblockmalwareandadultcontentHostname)) { + mMode = PRIVATE_DNS_MODE_CLOUDFLARE_BLOCK_MALWARE_AND_ADULT_CONTENT; } else if (privateDnsHostname.equals(adguardHostname)) { mMode = PRIVATE_DNS_MODE_ADGUARD; } else if (privateDnsHostname.equals(opendnsHostname)) { @@ -171,6 +195,12 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat mMode = PRIVATE_DNS_MODE_CLEANBROWSING; } else if (privateDnsHostname.equals(quad9Hostname)) { mMode = PRIVATE_DNS_MODE_QUAD9; + } else if (privateDnsHostname.equals(quad9unsecuredHostname)) { + mMode = PRIVATE_DNS_MODE_QUAD9_UNSECURED; + } else if (privateDnsHostname.equals(quad9ecsHostname)) { + mMode = PRIVATE_DNS_MODE_QUAD9_ECS; + } else if (privateDnsHostname.equals(quad9unsecuredecsHostname)) { + mMode = PRIVATE_DNS_MODE_QUAD9_UNSECURED_ECS; } } mRadioGroup = view.findViewById(R.id.private_dns_radio_group); @@ -183,6 +213,12 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat final RadioButton cloudflareRadioButton = view.findViewById(R.id.private_dns_mode_cloudflare); cloudflareRadioButton.setText(R.string.private_dns_mode_cloudflare); + final RadioButton cloudflareblockmalwareRadioButton = + view.findViewById(R.id.private_dns_mode_cloudflare_block_malware); + cloudflareblockmalwareRadioButton.setText(R.string.private_dns_mode_cloudflare_block_malware); + final RadioButton cloudflareblockmalwareandadultcontentRadioButton = + view.findViewById(R.id.private_dns_mode_cloudflare_block_malware_and_adult_content); + cloudflareblockmalwareandadultcontentRadioButton.setText(R.string.private_dns_mode_cloudflare_block_malware_and_adult_content); final RadioButton adguardRadioButton = view.findViewById(R.id.private_dns_mode_adguard); adguardRadioButton.setText(R.string.private_dns_mode_adguard); @@ -195,6 +231,15 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat final RadioButton quad9RadioButton = view.findViewById(R.id.private_dns_mode_quad9); quad9RadioButton.setText(R.string.private_dns_mode_quad9); + final RadioButton quad9unsecuredRadioButton = + view.findViewById(R.id.private_dns_mode_quad9_unsecured); + quad9unsecuredRadioButton.setText(R.string.private_dns_mode_quad9_unsecured); + final RadioButton quad9ecsRadioButton = + view.findViewById(R.id.private_dns_mode_quad9_ecs); + quad9ecsRadioButton.setText(R.string.private_dns_mode_quad9_ecs); + final RadioButton quad9unsecuredecsRadioButton = + view.findViewById(R.id.private_dns_mode_quad9_unsecured_ecs); + quad9unsecuredecsRadioButton.setText(R.string.private_dns_mode_quad9_unsecured_ecs); final RadioButton opportunisticRadioButton = view.findViewById(R.id.private_dns_mode_opportunistic); opportunisticRadioButton.setText( @@ -232,6 +277,10 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat mMode = PRIVATE_DNS_MODE_OFF; } else if (checkedId == R.id.private_dns_mode_cloudflare) { mMode = PRIVATE_DNS_MODE_CLOUDFLARE; + } else if (checkedId == R.id.private_dns_mode_cloudflare_block_malware) { + mMode = PRIVATE_DNS_MODE_CLOUDFLARE_BLOCK_MALWARE; + } else if (checkedId == R.id.private_dns_mode_cloudflare_block_malware_and_adult_content) { + mMode = PRIVATE_DNS_MODE_CLOUDFLARE_BLOCK_MALWARE_AND_ADULT_CONTENT; } else if (checkedId == R.id.private_dns_mode_adguard) { mMode = PRIVATE_DNS_MODE_ADGUARD; } else if (checkedId == R.id.private_dns_mode_open_dns) { @@ -240,6 +289,12 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat 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_quad9_unsecured) { + mMode = PRIVATE_DNS_MODE_QUAD9_UNSECURED; + } else if (checkedId == R.id.private_dns_mode_quad9_ecs) { + mMode = PRIVATE_DNS_MODE_QUAD9_ECS; + } else if (checkedId == R.id.private_dns_mode_quad9_unsecured_ecs) { + mMode = PRIVATE_DNS_MODE_QUAD9_UNSECURED_ECS; } else if (checkedId == R.id.private_dns_mode_opportunistic) { mMode = PRIVATE_DNS_MODE_OPPORTUNISTIC; } else if (checkedId == R.id.private_dns_mode_provider) { @@ -335,6 +390,16 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat context.getString(R.string.private_dns_hostname_cloudflare); ConnectivitySettingsManager.setPrivateDnsHostname(context, cloudflareHostname); modeToSet = PRIVATE_DNS_MODE_PROVIDER_HOSTNAME; + } else if (mMode == PRIVATE_DNS_MODE_CLOUDFLARE_BLOCK_MALWARE) { + final String cloudflareblockmalwareHostname = + context.getString(R.string.private_dns_hostname_cloudflare_block_malware); + ConnectivitySettingsManager.setPrivateDnsHostname(context, cloudflareblockmalwareHostname); + modeToSet = PRIVATE_DNS_MODE_PROVIDER_HOSTNAME; + } else if (mMode == PRIVATE_DNS_MODE_CLOUDFLARE_BLOCK_MALWARE_AND_ADULT_CONTENT) { + final String cloudflareblockmalwareandadultcontentHostname = + context.getString(R.string.private_dns_hostname_cloudflare_block_malware_and_adult_content); + ConnectivitySettingsManager.setPrivateDnsHostname(context, cloudflareblockmalwareandadultcontentHostname); + modeToSet = PRIVATE_DNS_MODE_PROVIDER_HOSTNAME; } else if (mMode == PRIVATE_DNS_MODE_ADGUARD) { final String adguardHostname = context.getString(R.string.private_dns_hostname_adguard); @@ -355,6 +420,21 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat context.getString(R.string.private_dns_hostname_quad9); ConnectivitySettingsManager.setPrivateDnsHostname(context, quad9Hostname); modeToSet = PRIVATE_DNS_MODE_PROVIDER_HOSTNAME; + } else if (mMode == PRIVATE_DNS_MODE_QUAD9_UNSECURED) { + final String quad9unsecuredHostname = + context.getString(R.string.private_dns_hostname_quad9_unsecured); + ConnectivitySettingsManager.setPrivateDnsHostname(context, quad9unsecuredHostname); + modeToSet = PRIVATE_DNS_MODE_PROVIDER_HOSTNAME; + } else if (mMode == PRIVATE_DNS_MODE_QUAD9_ECS) { + final String quad9ecsHostname = + context.getString(R.string.private_dns_hostname_quad9_ecs); + ConnectivitySettingsManager.setPrivateDnsHostname(context, quad9ecsHostname); + modeToSet = PRIVATE_DNS_MODE_PROVIDER_HOSTNAME; + } else if (mMode == PRIVATE_DNS_MODE_QUAD9_UNSECURED_ECS) { + final String quad9unsecuredecsHostname = + context.getString(R.string.private_dns_hostname_quad9_unsecured_ecs); + ConnectivitySettingsManager.setPrivateDnsHostname(context, quad9unsecuredecsHostname); + 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 179079dcc38..5ab0266a62e 100644 --- a/src/com/android/settings/network/PrivateDnsPreferenceController.java +++ b/src/com/android/settings/network/PrivateDnsPreferenceController.java @@ -67,10 +67,15 @@ 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 static final int PRIVATE_DNS_MODE_CLOUDFLARE_BLOCK_MALWARE = 5; + private static final int PRIVATE_DNS_MODE_CLOUDFLARE_BLOCK_MALWARE_AND_ADULT_CONTENT = 6; + private static final int PRIVATE_DNS_MODE_ADGUARD = 7; + private static final int PRIVATE_DNS_MODE_OPEN_DNS = 8; + private static final int PRIVATE_DNS_MODE_CLEANBROWSING = 9; + private static final int PRIVATE_DNS_MODE_QUAD9 = 10; + private static final int PRIVATE_DNS_MODE_QUAD9_UNSECURED = 11; + private static final int PRIVATE_DNS_MODE_QUAD9_ECS = 12; + private static final int PRIVATE_DNS_MODE_QUAD9_UNSECURED_ECS = 13; private final Handler mHandler; private final ContentObserver mSettingsObserver; @@ -137,10 +142,15 @@ public class PrivateDnsPreferenceController extends BasePreferenceController case PRIVATE_DNS_MODE_OFF: return res.getString(com.android.settingslib.R.string.private_dns_mode_off); case PRIVATE_DNS_MODE_CLOUDFLARE: + case PRIVATE_DNS_MODE_CLOUDFLARE_BLOCK_MALWARE: + case PRIVATE_DNS_MODE_CLOUDFLARE_BLOCK_MALWARE_AND_ADULT_CONTENT: 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_QUAD9_UNSECURED: + case PRIVATE_DNS_MODE_QUAD9_ECS: + case PRIVATE_DNS_MODE_QUAD9_UNSECURED_ECS: case PRIVATE_DNS_MODE_OPPORTUNISTIC: return dnsesResolved ? res.getString(R.string.private_dns_mode_on) : res.getString( @@ -154,6 +164,10 @@ public class PrivateDnsPreferenceController extends BasePreferenceController ConnectivitySettingsManager.getPrivateDnsHostname(mContext); final String cloudflareHostname = res.getString(R.string.private_dns_hostname_cloudflare); + final String cloudflareblockmalwareHostname = + res.getString(R.string.private_dns_hostname_cloudflare_block_malware); + final String cloudflareblockmalwaresndsdultcontentHostname = + res.getString(R.string.private_dns_hostname_cloudflare_block_malware_and_adult_content); final String adguardHostname = res.getString(R.string.private_dns_hostname_adguard); final String opendnsHostname = @@ -162,6 +176,12 @@ public class PrivateDnsPreferenceController extends BasePreferenceController res.getString(R.string.private_dns_hostname_cleanbrowsing); final String quad9Hostname = res.getString(R.string.private_dns_hostname_quad9); + final String quad9unsecuredHostname = + res.getString(R.string.private_dns_hostname_quad9_unsecured); + final String quad9ecsHostname = + res.getString(R.string.private_dns_hostname_quad9_ecs); + final String quad9unsecuredecsHostname = + res.getString(R.string.private_dns_hostname_quad9_unsecured_ecs); if (privateDnsHostname.equals(cloudflareHostname)) { return res.getString(R.string.private_dns_mode_cloudflare); } else if (privateDnsHostname.equals(adguardHostname)) {