diff --git a/res/layout/private_dns_mode_dialog.xml b/res/layout/private_dns_mode_dialog.xml index 12e29e693b7a868171daa84401daaf1d8af9d66b..a0580cd2ae90bf4a0ddb37ac9423e05e1065cad8 100644 --- a/res/layout/private_dns_mode_dialog.xml +++ b/res/layout/private_dns_mode_dialog.xml @@ -35,6 +35,10 @@ android:id="@+id/private_dns_mode_off" layout="@layout/preference_widget_dialog_radiobutton"/> + + diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml index d249700671d744b8b02130fbbd9b47090fca96b5..c71b1604cf4b21da49b0f291384a6bec4c36fb18 100644 --- a/res/values/cm_strings.xml +++ b/res/values/cm_strings.xml @@ -237,4 +237,8 @@ /e/OS v%1$s - update available /e/OS v%1$s - update in progress /e/OS v%1$s - installed reboot required + + + Quad9 + dns.quad9.net diff --git a/src/com/android/settings/network/PrivateDnsModeDialogPreference.java b/src/com/android/settings/network/PrivateDnsModeDialogPreference.java index 1c3fc76dbae664a4f53b676d87a7d86c8539ec69..c157cef782899eb8c59fd26aa2157c718e5803ae 100644 --- a/src/com/android/settings/network/PrivateDnsModeDialogPreference.java +++ b/src/com/android/settings/network/PrivateDnsModeDialogPreference.java @@ -72,9 +72,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 int PRIVATE_DNS_MODE_QUADNINE = 4; + 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); } @@ -161,6 +165,15 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat final ContentResolver contentResolver = context.getContentResolver(); mMode = ConnectivitySettingsManager.getPrivateDnsMode(context); + if (mMode == PRIVATE_DNS_MODE_PROVIDER_HOSTNAME) { + final String privateDnsHostname = + ConnectivitySettingsManager.getPrivateDnsHostname(context); + 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); @@ -173,6 +186,9 @@ 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 quadNineRadioButton = + view.findViewById(R.id.private_dns_mode_quadnine); + quadNineRadioButton.setText(R.string.private_dns_mode_quadnine); final RadioButton opportunisticRadioButton = view.findViewById(R.id.private_dns_mode_opportunistic); opportunisticRadioButton.setText(R.string.private_dns_mode_opportunistic); @@ -196,15 +212,21 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat public void onClick(DialogInterface dialog, int which) { if (which == DialogInterface.BUTTON_POSITIVE) { final Context context = getContext(); + int modeToSet = mMode; if (mMode == PRIVATE_DNS_MODE_PROVIDER_HOSTNAME) { // Only clickable if hostname is valid, so we could save it safely ConnectivitySettingsManager.setPrivateDnsHostname(context, mEditText.getText().toString()); + } else if (mMode == PRIVATE_DNS_MODE_QUADNINE) { + final String quadNineHostname = + context.getString(R.string.private_dns_hostname_quadnine); + ConnectivitySettingsManager.setPrivateDnsHostname(context, quadNineHostname); + modeToSet = PRIVATE_DNS_MODE_PROVIDER_HOSTNAME; } FeatureFactory.getFactory(context).getMetricsFeatureProvider().action(context, - SettingsEnums.ACTION_PRIVATE_DNS_MODE, mMode); - ConnectivitySettingsManager.setPrivateDnsMode(context, mMode); + SettingsEnums.ACTION_PRIVATE_DNS_MODE, modeToSet); + ConnectivitySettingsManager.setPrivateDnsMode(context, modeToSet); } } @@ -212,6 +234,8 @@ 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_quadnine) { + mMode = PRIVATE_DNS_MODE_QUADNINE; } 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 ed6f9ed955d073a4d7b4e5679268862999a221a5..bed45b787bf72780bcd60a01b3dff1c6bc546a52 100644 --- a/src/com/android/settings/network/PrivateDnsPreferenceController.java +++ b/src/com/android/settings/network/PrivateDnsPreferenceController.java @@ -65,6 +65,9 @@ public class PrivateDnsPreferenceController extends BasePreferenceController Settings.Global.getUriFor(PRIVATE_DNS_SPECIFIER), }; + // Only used in Settings, update on additions to ConnectivitySettingsUtils + private static final int PRIVATE_DNS_MODE_QUADNINE = 4; + private final Handler mHandler; private final ContentObserver mSettingsObserver; private final ConnectivityManager mConnectivityManager; @@ -129,13 +132,22 @@ 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: return dnsesResolved ? res.getString(R.string.private_dns_mode_on) : 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 = + ConnectivitySettingsManager.getPrivateDnsHostname(mContext); + 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 PrivateDnsModeDialogPreference.getHostnameFromSettings(cr); } return ""; }