Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e07c11bd authored by Chirayu Desai's avatar Chirayu Desai Committed by Mohammed Althaf T
Browse files

Add Quad9 DNS as a private DNS provider

* Handle this entirely in Settings, no need to touch anything
  else at all

Change-Id: I7e8a320d47e7c5ddbcb9acfaf23032ae92d5d70d
parent ebb5f538
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -37,6 +37,10 @@
                android:id="@+id/private_dns_mode_off"
                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_opportunistic"
                layout="@layout/preference_widget_dialog_radiobutton"/>
+5 −0
Original line number Diff line number Diff line
@@ -30,6 +30,11 @@
    <string name="use_ota_staging_popup_title">You are about to connect to /e/ OS test channel</string>
    <string name="use_ota_staging_popup_message">It will allow you to download and install test versions of /e/ OS. Those builds may be unstable, and should be used only for test purposes. Please accept only if you know what you are doing.</string>

    <!-- Private DNS -->
    <string name="private_dns_mode_quadnine" translatable="false">Quad9 DNS</string>
    <!-- Alternative: dns11.quad9.net or dns10.quad9.net -->
    <string name="private_dns_hostname_quadnine" translatable="false">dns.quad9.net</string>

    <!-- /e/ Telemetry -->
    <string name="enable_telemetry">Enable /e/OS Telemetry</string>
    <string name="telemetry_details">Enable automatic bug reporting</string>
+26 −2
Original line number Diff line number Diff line
@@ -72,9 +72,13 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat
    // DNS_MODE -> RadioButton id
    private static final Map<Integer, Integer> 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);
    }
@@ -137,6 +141,15 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat
    protected void onBindDialogView(View view) {
        final Context context = getContext();
        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;
            }
        }
        mRadioGroup = view.findViewById(R.id.private_dns_radio_group);
        mRadioGroup.check(PRIVATE_DNS_MAP.getOrDefault(mMode, R.id.private_dns_mode_opportunistic));
        mRadioGroup.setOnCheckedChangeListener(this);
@@ -144,6 +157,9 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat
        // Initial radio button text
        final RadioButton offRadioButton = view.findViewById(R.id.private_dns_mode_off);
        offRadioButton.setText(com.android.settingslib.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(
@@ -179,6 +195,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) {
@@ -250,6 +268,7 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat
    @VisibleForTesting
    void doSaveButton() {
        Context context = getContext();
        int modeToSet = mMode;
        if (mMode == PRIVATE_DNS_MODE_PROVIDER_HOSTNAME) {
            if (mHostnameLayout == null || mHostnameText == null) {
                Log.e(TAG, "Can't find hostname resources!");
@@ -268,12 +287,17 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreferenceCompat

            ConnectivitySettingsManager.setPrivateDnsHostname(context,
                    mHostnameText.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;
        }

        ConnectivitySettingsManager.setPrivateDnsMode(context, mMode);
        ConnectivitySettingsManager.setPrivateDnsMode(context, modeToSet);

        FeatureFactory.getFeatureFactory().getMetricsFeatureProvider()
                .action(context, SettingsEnums.ACTION_PRIVATE_DNS_MODE, mMode);
                .action(context, SettingsEnums.ACTION_PRIVATE_DNS_MODE, modeToSet);
        Dialog dialog = getDialog();
        if (dialog != null) {
            dialog.dismiss();
+16 −4
Original line number Diff line number Diff line
@@ -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,16 +132,25 @@ public class PrivateDnsPreferenceController extends BasePreferenceController
        switch (mode) {
            case PRIVATE_DNS_MODE_OFF:
                return res.getString(com.android.settingslib.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(
                                com.android.settingslib.R.string.private_dns_mode_opportunistic);
            case PRIVATE_DNS_MODE_PROVIDER_HOSTNAME:
                return dnsesResolved
                        ? ConnectivitySettingsManager.getPrivateDnsHostname(mContext)
                        : res.getString(
                if (!dnsesResolved) {
                    return res.getString(
                            com.android.settingslib.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 privateDnsHostname;
        }
        return "";
    }