diff --git a/res/xml/wifi_settings.xml b/res/xml/wifi_settings.xml index 4ca92849788..516ac0a9e03 100644 --- a/res/xml/wifi_settings.xml +++ b/res/xml/wifi_settings.xml @@ -20,6 +20,9 @@ android:title="@string/wifi_settings" settings:keywords="@string/keywords_wifi"> + + @@ -28,17 +31,14 @@ android:key="access_points" android:layout="@layout/preference_category_no_label"/> - - + - - + diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index 4837a88d8e9..f097d5b810c 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -112,9 +112,9 @@ public class WifiSettings extends RestrictedSettingsFragment private static final String PREF_KEY_EMPTY_WIFI_LIST = "wifi_empty_list"; private static final String PREF_KEY_CONNECTED_ACCESS_POINTS = "connected_access_point"; private static final String PREF_KEY_ACCESS_POINTS = "access_points"; - private static final String PREF_KEY_ADDITIONAL_SETTINGS = "additional_settings"; private static final String PREF_KEY_CONFIGURE_WIFI_SETTINGS = "configure_settings"; private static final String PREF_KEY_SAVED_NETWORKS = "saved_networks"; + private static final String PREF_KEY_STATUS_MESSAGE = "wifi_status_message"; private static boolean isVerboseLoggingEnabled() { return WifiTracker.sVerboseLogging || Log.isLoggable(TAG, Log.VERBOSE); @@ -167,17 +167,19 @@ public class WifiSettings extends RestrictedSettingsFragment private Bundle mAccessPointSavedState; private Bundle mWifiNfcDialogSavedState; - private WifiTracker mWifiTracker; + @VisibleForTesting + WifiTracker mWifiTracker; private String mOpenSsid; private AccessPointPreference.UserBadgeCache mUserBadgeCache; private PreferenceCategory mConnectedAccessPointPreferenceCategory; private PreferenceCategory mAccessPointsPreferenceCategory; - private PreferenceCategory mAdditionalSettingsPreferenceCategory; private Preference mAddPreference; - private Preference mConfigureWifiSettingsPreference; - private Preference mSavedNetworksPreference; + @VisibleForTesting + Preference mConfigureWifiSettingsPreference; + @VisibleForTesting + Preference mSavedNetworksPreference; private LinkablePreference mStatusMessagePreference; // For Search @@ -229,8 +231,6 @@ public class WifiSettings extends RestrictedSettingsFragment (PreferenceCategory) findPreference(PREF_KEY_CONNECTED_ACCESS_POINTS); mAccessPointsPreferenceCategory = (PreferenceCategory) findPreference(PREF_KEY_ACCESS_POINTS); - mAdditionalSettingsPreferenceCategory = - (PreferenceCategory) findPreference(PREF_KEY_ADDITIONAL_SETTINGS); mConfigureWifiSettingsPreference = findPreference(PREF_KEY_CONFIGURE_WIFI_SETTINGS); mSavedNetworksPreference = findPreference(PREF_KEY_SAVED_NETWORKS); @@ -238,7 +238,7 @@ public class WifiSettings extends RestrictedSettingsFragment mAddPreference = new Preference(prefContext); mAddPreference.setIcon(R.drawable.ic_menu_add); mAddPreference.setTitle(R.string.wifi_add_network); - mStatusMessagePreference = new LinkablePreference(prefContext); + mStatusMessagePreference = (LinkablePreference) findPreference(PREF_KEY_STATUS_MESSAGE); mUserBadgeCache = new AccessPointPreference.UserBadgeCache(getPackageManager()); } @@ -692,14 +692,14 @@ public class WifiSettings extends RestrictedSettingsFragment case WifiManager.WIFI_STATE_ENABLING: removeConnectedAccessPointPreference(); - mAccessPointsPreferenceCategory.removeAll(); + removeAccessPointPreference(); addMessagePreference(R.string.wifi_starting); setProgressBarVisible(true); break; case WifiManager.WIFI_STATE_DISABLING: removeConnectedAccessPointPreference(); - mAccessPointsPreferenceCategory.removeAll(); + removeAccessPointPreference(); addMessagePreference(R.string.wifi_stopping); break; @@ -746,7 +746,10 @@ public class WifiSettings extends RestrictedSettingsFragment } boolean hasAvailableAccessPoints = false; - mAccessPointsPreferenceCategory.removePreference(mStatusMessagePreference); + mStatusMessagePreference.setVisible(false); + mConnectedAccessPointPreferenceCategory.setVisible(true); + mAccessPointsPreferenceCategory.setVisible(true); + cacheRemoveAllPrefs(mAccessPointsPreferenceCategory); int index = @@ -960,26 +963,28 @@ public class WifiSettings extends RestrictedSettingsFragment unregisterCaptivePortalNetworkCallback(); } - private void setAdditionalSettingsSummaries() { - mAdditionalSettingsPreferenceCategory.addPreference(mConfigureWifiSettingsPreference); + private void removeAccessPointPreference() { + mAccessPointsPreferenceCategory.removeAll(); + mAccessPointsPreferenceCategory.setVisible(false); + } + + @VisibleForTesting + void setAdditionalSettingsSummaries() { mConfigureWifiSettingsPreference.setSummary(getString( isWifiWakeupEnabled() ? R.string.wifi_configure_settings_preference_summary_wakeup_on : R.string.wifi_configure_settings_preference_summary_wakeup_off)); - int numSavedNetworks = mWifiTracker.getNumSavedNetworks(); - if (numSavedNetworks > 0) { - mAdditionalSettingsPreferenceCategory.addPreference(mSavedNetworksPreference); - mSavedNetworksPreference.setSummary( - getResources().getQuantityString(R.plurals.wifi_saved_access_points_summary, - numSavedNetworks, numSavedNetworks)); - } else { - mAdditionalSettingsPreferenceCategory.removePreference(mSavedNetworksPreference); - } + final int numSavedNetworks = mWifiTracker.getNumSavedNetworks(); + mSavedNetworksPreference.setVisible(numSavedNetworks > 0); + mSavedNetworksPreference.setSummary( + getResources().getQuantityString(R.plurals.wifi_saved_access_points_summary, + numSavedNetworks, numSavedNetworks)); } private boolean isWifiWakeupEnabled() { - PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); - ContentResolver contentResolver = getContentResolver(); + final Context context = getContext(); + final PowerManager powerManager = context.getSystemService(PowerManager.class); + final ContentResolver contentResolver = context.getContentResolver(); return Settings.Global.getInt(contentResolver, Settings.Global.WIFI_WAKEUP_ENABLED, 0) == 1 && Settings.Global.getInt(contentResolver, @@ -1006,15 +1011,14 @@ public class WifiSettings extends RestrictedSettingsFragment .launch(); mStatusMessagePreference.setText(title, description, clickListener); removeConnectedAccessPointPreference(); - mAccessPointsPreferenceCategory.removeAll(); - mAccessPointsPreferenceCategory.addPreference(mStatusMessagePreference); + removeAccessPointPreference(); + mStatusMessagePreference.setVisible(true); } private void addMessagePreference(int messageId) { mStatusMessagePreference.setTitle(messageId); - removeConnectedAccessPointPreference(); - mAccessPointsPreferenceCategory.removeAll(); - mAccessPointsPreferenceCategory.addPreference(mStatusMessagePreference); + mStatusMessagePreference.setVisible(true); + } protected void setProgressBarVisible(boolean visible) { diff --git a/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java index e9daec325d2..c9e6c1e1944 100644 --- a/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java +++ b/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java @@ -20,20 +20,31 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import android.app.Activity; +import android.content.ContentResolver; import android.content.Context; import android.content.Intent; +import android.os.PowerManager; +import android.provider.Settings; +import androidx.preference.Preference; + +import com.android.settings.R; import com.android.settings.search.SearchIndexableRaw; import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settingslib.wifi.WifiTracker; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.robolectric.Robolectric; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; @@ -42,18 +53,33 @@ import java.util.List; @RunWith(SettingsRobolectricTestRunner.class) public class WifiSettingsTest { + private static final int NUM_NETWORKS = 4; + + @Mock + private WifiTracker mWifiTracker; + @Mock + private PowerManager mPowerManager; private Context mContext; + private WifiSettings mWifiSettings; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); + + mWifiSettings = spy(new WifiSettings()); + doReturn(mContext).when(mWifiSettings).getContext(); + doReturn(mPowerManager).when(mContext).getSystemService(PowerManager.class); + mWifiSettings.mSavedNetworksPreference = new Preference(mContext); + mWifiSettings.mConfigureWifiSettingsPreference = new Preference(mContext); + mWifiSettings.mWifiTracker = mWifiTracker; } @Test public void testSearchIndexProvider_shouldIndexFragmentTitle() { final List indexRes = - WifiSettings.SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex(mContext, true /* enabled */); + WifiSettings.SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex(mContext, + true /* enabled */); assertThat(indexRes).isNotNull(); assertThat(indexRes.get(0).key).isEqualTo(WifiSettings.DATA_KEY_REFERENCE); @@ -63,7 +89,8 @@ public class WifiSettingsTest { @Config(qualifiers = "mcc999") public void testSearchIndexProvider_ifWifiSettingsNotVisible_shouldNotIndexFragmentTitle() { final List indexRes = - WifiSettings.SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex(mContext, true /* enabled */); + WifiSettings.SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex(mContext, + true /* enabled */); assertThat(indexRes).isEmpty(); } @@ -78,4 +105,51 @@ public class WifiSettingsTest { verify(wifiSettings).handleAddNetworkRequest(anyInt(), any(Intent.class)); } + + @Test + public void setAdditionalSettingsSummaries_hasSavedNetwork_preferenceVisible() { + when(mWifiTracker.getNumSavedNetworks()).thenReturn(NUM_NETWORKS); + + mWifiSettings.setAdditionalSettingsSummaries(); + + assertThat(mWifiSettings.mSavedNetworksPreference.isVisible()).isTrue(); + assertThat(mWifiSettings.mSavedNetworksPreference.getSummary()).isEqualTo( + mContext.getResources().getQuantityString( + R.plurals.wifi_saved_access_points_summary, + NUM_NETWORKS, NUM_NETWORKS)); + } + + @Test + public void setAdditionalSettingsSummaries_noSavedNetwork_preferenceInvisible() { + when(mWifiTracker.getNumSavedNetworks()).thenReturn(0); + + mWifiSettings.setAdditionalSettingsSummaries(); + + assertThat(mWifiSettings.mSavedNetworksPreference.isVisible()).isFalse(); + } + + @Test + public void setAdditionalSettingsSummaries_wifiWakeupEnabled_displayOn() { + final ContentResolver contentResolver = mContext.getContentResolver(); + Settings.Global.putInt(contentResolver, Settings.Global.WIFI_WAKEUP_ENABLED, 1); + Settings.Global.putInt(contentResolver, Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE, 1); + Settings.Global.putInt(contentResolver, Settings.Global.AIRPLANE_MODE_ON, 0); + when(mPowerManager.isPowerSaveMode()).thenReturn(false); + + mWifiSettings.setAdditionalSettingsSummaries(); + + assertThat(mWifiSettings.mConfigureWifiSettingsPreference.getSummary()).isEqualTo( + mContext.getString(R.string.wifi_configure_settings_preference_summary_wakeup_on)); + } + + @Test + public void setAdditionalSettingsSummaries_wifiWakeupDisabled_displayOff() { + final ContentResolver contentResolver = mContext.getContentResolver(); + Settings.Global.putInt(contentResolver, Settings.Global.WIFI_WAKEUP_ENABLED, 0); + + mWifiSettings.setAdditionalSettingsSummaries(); + + assertThat(mWifiSettings.mConfigureWifiSettingsPreference.getSummary()).isEqualTo( + mContext.getString(R.string.wifi_configure_settings_preference_summary_wakeup_off)); + } } \ No newline at end of file