From aee4396874f61dd2600dc4e3b09adde3d3a688e2 Mon Sep 17 00:00:00 2001 From: Erik Kline Date: Thu, 17 May 2018 14:43:20 +0900 Subject: [PATCH] Factor in PRIVATE_DNS_MODE_DEFAULTSETTING value This setting can be used to change the in-code default. Test: as follows - built, flashed, booted - make -j50 RunSettingsRoboTests ROBOTEST_FILTER=PrivateDnsModeDialogPreferenceTest passes - make -j50 RunSettingsRoboTests ROBOTEST_FILTER=PrivateDnsPreferenceControllerTest passes Bug: 79719289 Change-Id: I27e5fb9cc66dde1df72395c22179bca3f62ef782 --- .../PrivateDnsModeDialogPreference.java | 8 +++-- .../PrivateDnsPreferenceController.java | 8 +++-- .../PrivateDnsModeDialogPreferenceTest.java | 12 ++++---- .../PrivateDnsPreferenceControllerTest.java | 29 +++++++++++++++++++ 4 files changed, 46 insertions(+), 11 deletions(-) diff --git a/src/com/android/settings/network/PrivateDnsModeDialogPreference.java b/src/com/android/settings/network/PrivateDnsModeDialogPreference.java index 969cb11920e..290ffd599e5 100644 --- a/src/com/android/settings/network/PrivateDnsModeDialogPreference.java +++ b/src/com/android/settings/network/PrivateDnsModeDialogPreference.java @@ -15,6 +15,7 @@ */ 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_OPPORTUNISTIC; import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME; @@ -79,8 +80,11 @@ public class PrivateDnsModeDialogPreference extends CustomDialogPreference imple static final String HOSTNAME_KEY = Settings.Global.PRIVATE_DNS_SPECIFIER; public static String getModeFromSettings(ContentResolver cr) { - final String mode = Settings.Global.getString(cr, MODE_KEY); - return PRIVATE_DNS_MAP.containsKey(mode) ? mode : PRIVATE_DNS_MODE_OPPORTUNISTIC; + String mode = Settings.Global.getString(cr, MODE_KEY); + if (!PRIVATE_DNS_MAP.containsKey(mode)) { + mode = Settings.Global.getString(cr, Settings.Global.PRIVATE_DNS_DEFAULT_MODE); + } + return PRIVATE_DNS_MAP.containsKey(mode) ? mode : PRIVATE_DNS_DEFAULT_MODE_FALLBACK; } public static String getHostnameFromSettings(ContentResolver cr) { diff --git a/src/com/android/settings/network/PrivateDnsPreferenceController.java b/src/com/android/settings/network/PrivateDnsPreferenceController.java index 47aa4dcffe4..6f385696733 100644 --- a/src/com/android/settings/network/PrivateDnsPreferenceController.java +++ b/src/com/android/settings/network/PrivateDnsPreferenceController.java @@ -19,6 +19,9 @@ package com.android.settings.network; import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OFF; 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; +import static android.provider.Settings.Global.PRIVATE_DNS_MODE; +import static android.provider.Settings.Global.PRIVATE_DNS_SPECIFIER; import android.content.Context; import android.content.ContentResolver; @@ -51,8 +54,9 @@ public class PrivateDnsPreferenceController extends BasePreferenceController private static final String KEY_PRIVATE_DNS_SETTINGS = "private_dns_settings"; private static final Uri[] SETTINGS_URIS = new Uri[]{ - Settings.Global.getUriFor(Settings.Global.PRIVATE_DNS_MODE), - Settings.Global.getUriFor(Settings.Global.PRIVATE_DNS_SPECIFIER), + Settings.Global.getUriFor(PRIVATE_DNS_MODE), + Settings.Global.getUriFor(PRIVATE_DNS_DEFAULT_MODE), + Settings.Global.getUriFor(PRIVATE_DNS_SPECIFIER), }; private final Handler mHandler; diff --git a/tests/robotests/src/com/android/settings/network/PrivateDnsModeDialogPreferenceTest.java b/tests/robotests/src/com/android/settings/network/PrivateDnsModeDialogPreferenceTest.java index dfea6fba515..72f36c66989 100644 --- a/tests/robotests/src/com/android/settings/network/PrivateDnsModeDialogPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/network/PrivateDnsModeDialogPreferenceTest.java @@ -19,6 +19,7 @@ package com.android.settings.network; import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OFF; 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_MODE; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.doReturn; @@ -158,24 +159,21 @@ public class PrivateDnsModeDialogPreferenceTest { 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); + Settings.Global.putString(contentResolver, PRIVATE_DNS_MODE, 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); + assertThat(Settings.Global.getString(contentResolver, PRIVATE_DNS_MODE)).isEqualTo( + 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); + Settings.Global.putString(contentResolver, PRIVATE_DNS_MODE, PRIVATE_DNS_MODE_OFF); mPreference.mMode = ConnectivityManager.PRIVATE_DNS_MODE_OPPORTUNISTIC; mPreference.onClick(null, DialogInterface.BUTTON_NEGATIVE); diff --git a/tests/robotests/src/com/android/settings/network/PrivateDnsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/PrivateDnsPreferenceControllerTest.java index ce40ab69364..a63645ba059 100644 --- a/tests/robotests/src/com/android/settings/network/PrivateDnsPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/network/PrivateDnsPreferenceControllerTest.java @@ -21,6 +21,7 @@ import static android.arch.lifecycle.Lifecycle.Event.ON_STOP; import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OFF; 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; import static android.provider.Settings.Global.PRIVATE_DNS_MODE; import static android.provider.Settings.Global.PRIVATE_DNS_SPECIFIER; import static com.google.common.truth.Truth.assertThat; @@ -220,6 +221,34 @@ public class PrivateDnsPreferenceControllerTest { getResourceString(R.string.private_dns_mode_provider_failure)); } + @Test + public void getSummary_PrivateDnsDefaultMode() { + // Default mode is opportunistic, unless overridden by a Settings push. + setPrivateDnsMode(""); + setPrivateDnsProviderHostname(""); + mController.updateState(mPreference); + verify(mController, atLeastOnce()).getSummary(); + verify(mPreference).setSummary(getResourceString(R.string.private_dns_mode_opportunistic)); + + reset(mController); + reset(mPreference); + // Pretend an emergency gservices setting has disabled default-opportunistic. + Settings.Global.putString(mContentResolver, PRIVATE_DNS_DEFAULT_MODE, PRIVATE_DNS_MODE_OFF); + mController.updateState(mPreference); + verify(mController, atLeastOnce()).getSummary(); + verify(mPreference).setSummary(getResourceString(R.string.private_dns_mode_off)); + + reset(mController); + reset(mPreference); + // The user interacting with the Private DNS menu, explicitly choosing + // opportunistic mode, will be able to use despite the change to the + // default setting above. + setPrivateDnsMode(PRIVATE_DNS_MODE_OPPORTUNISTIC); + mController.updateState(mPreference); + verify(mController, atLeastOnce()).getSummary(); + verify(mPreference).setSummary(getResourceString(R.string.private_dns_mode_opportunistic)); + } + private void setPrivateDnsMode(String mode) { Settings.Global.putString(mContentResolver, PRIVATE_DNS_MODE, mode); }