diff --git a/res/xml/network_and_internet.xml b/res/xml/network_and_internet.xml index 064d625681b..69d8fcac784 100644 --- a/res/xml/network_and_internet.xml +++ b/res/xml/network_and_internet.xml @@ -97,6 +97,7 @@ android:order="15" android:dialogTitle="@string/select_private_dns_configuration_dialog_title" android:dialogLayout="@layout/private_dns_mode_dialog" - android:positiveButtonText="@string/save" /> + android:positiveButtonText="@string/save" + android:negativeButtonText="@android:string/cancel" /> diff --git a/src/com/android/settings/network/PrivateDnsModeDialogPreference.java b/src/com/android/settings/network/PrivateDnsModeDialogPreference.java index 178aa27c188..969cb11920e 100644 --- a/src/com/android/settings/network/PrivateDnsModeDialogPreference.java +++ b/src/com/android/settings/network/PrivateDnsModeDialogPreference.java @@ -156,16 +156,18 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreference imple @Override public void onClick(DialogInterface dialog, int which) { - final Context context = getContext(); - 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()); - } + if (which == DialogInterface.BUTTON_POSITIVE) { + final Context context = getContext(); + 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()); + } - FeatureFactory.getFactory(context).getMetricsFeatureProvider().action(context, - MetricsProto.MetricsEvent.ACTION_PRIVATE_DNS_MODE, mMode); - Settings.Global.putString(context.getContentResolver(), MODE_KEY, mMode); + FeatureFactory.getFactory(context).getMetricsFeatureProvider().action(context, + MetricsProto.MetricsEvent.ACTION_PRIVATE_DNS_MODE, mMode); + Settings.Global.putString(context.getContentResolver(), MODE_KEY, mMode); + } } @Override diff --git a/tests/robotests/src/com/android/settings/network/PrivateDnsModeDialogPreferenceTest.java b/tests/robotests/src/com/android/settings/network/PrivateDnsModeDialogPreferenceTest.java index e9ffa8ac4c6..dfea6fba515 100644 --- a/tests/robotests/src/com/android/settings/network/PrivateDnsModeDialogPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/network/PrivateDnsModeDialogPreferenceTest.java @@ -28,7 +28,10 @@ import static org.mockito.Mockito.when; import android.app.AlertDialog; import android.app.Fragment; +import android.content.ContentResolver; import android.content.Context; +import android.content.DialogInterface; +import android.net.ConnectivityManager; import android.provider.Settings; import android.view.LayoutInflater; import android.view.View; @@ -150,4 +153,36 @@ public class PrivateDnsModeDialogPreferenceTest { assertThat(mSaveButton.isEnabled()).named("provider: " + invalid).isFalse(); } } + + @Test + public void testOnClick_positiveButtonClicked_saveData() { + // Set the default settings to OFF + final ContentResolver contentResolver = mContext.getContentResolver(); + Settings.Global.putString(contentResolver, Settings.Global.PRIVATE_DNS_MODE, + ConnectivityManager.PRIVATE_DNS_MODE_OFF); + + mPreference.mMode = ConnectivityManager.PRIVATE_DNS_MODE_OPPORTUNISTIC; + mPreference.onClick(null, DialogInterface.BUTTON_POSITIVE); + + // Change to OPPORTUNISTIC + assertThat(Settings.Global.getString(contentResolver, + Settings.Global.PRIVATE_DNS_MODE)).isEqualTo( + ConnectivityManager.PRIVATE_DNS_MODE_OPPORTUNISTIC); + } + + @Test + public void testOnClick_negativeButtonClicked_doNothing() { + // Set the default settings to OFF + final ContentResolver contentResolver = mContext.getContentResolver(); + Settings.Global.putString(contentResolver, Settings.Global.PRIVATE_DNS_MODE, + ConnectivityManager.PRIVATE_DNS_MODE_OFF); + + mPreference.mMode = ConnectivityManager.PRIVATE_DNS_MODE_OPPORTUNISTIC; + mPreference.onClick(null, DialogInterface.BUTTON_NEGATIVE); + + // Still equal to OFF + assertThat(Settings.Global.getString(contentResolver, + Settings.Global.PRIVATE_DNS_MODE)).isEqualTo( + ConnectivityManager.PRIVATE_DNS_MODE_OFF); + } }