From b5bcb8d4d60a4cc667b11448577b0c82e518008a Mon Sep 17 00:00:00 2001 From: Stephen Chen Date: Fri, 19 May 2017 15:55:02 -0700 Subject: [PATCH] Check network info for metering state on AccessPoint. This resolves bug where networks manually marked as metered by Settings UI were not tagged with a metered friction icon in the Wi-Fi picker. Bug: 38460378 Test: runtest --path frameworks/base/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java Change-Id: I2ffe25e898ac001549e7d7492a2aa335ee415a4e --- .../android/settingslib/wifi/AccessPoint.java | 3 +- .../settingslib/wifi/AccessPointTest.java | 50 +++++++++++++++---- 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java index eb513e1702862..b3565eab79c91 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java @@ -521,7 +521,8 @@ public class AccessPoint implements Comparable { public boolean isMetered() { return mIsScoredNetworkMetered || (mConfig != null && mConfig.meteredHint) - || (mInfo != null && mInfo.getMeteredHint()); + || (mInfo != null && mInfo.getMeteredHint() + || (mNetworkInfo != null && mNetworkInfo.isMetered())); } public NetworkInfo getNetworkInfo() { diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java index 56cb0a3f682d6..801844be87cde 100644 --- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java +++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/AccessPointTest.java @@ -18,7 +18,6 @@ package com.android.settingslib.wifi; import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; -import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.any; import static org.mockito.Mockito.when; @@ -237,7 +236,7 @@ public class AccessPointTest { homeSp.setFriendlyName("Test Provider"); config.setHomeSp(homeSp); AccessPoint ap = new AccessPoint(mContext, config); - assertTrue(ap.isPasspointConfig()); + assertThat(ap.isPasspointConfig()).isTrue(); } @Test @@ -254,8 +253,8 @@ public class AccessPointTest { wifiInfo.setNetworkId(configuration.networkId); accessPoint.update(configuration, wifiInfo, networkInfo); - assertTrue(accessPoint.isMetered()); - }; + assertThat(accessPoint.isMetered()).isTrue(); + } @Test public void testIsMetered_returnTrueWhenWifiInfoIsMetered() { @@ -271,8 +270,25 @@ public class AccessPointTest { wifiInfo.setMeteredHint(true); accessPoint.update(configuration, wifiInfo, networkInfo); - assertTrue(accessPoint.isMetered()); - }; + assertThat(accessPoint.isMetered()).isTrue(); + } + + @Test + public void testIsMetered_returnTrueWhenNetworkInfoIsMetered() { + WifiConfiguration configuration = createWifiConfiguration(); + + NetworkInfo networkInfo = + new NetworkInfo(ConnectivityManager.TYPE_WIFI, 2, "WIFI", "WIFI_SUBTYPE"); + networkInfo.setMetered(true); + AccessPoint accessPoint = new AccessPoint(mContext, configuration); + WifiInfo wifiInfo = new WifiInfo(); + wifiInfo.setSSID(WifiSsid.createFromAsciiEncoded(configuration.SSID)); + wifiInfo.setBSSID(configuration.BSSID); + wifiInfo.setNetworkId(configuration.networkId); + accessPoint.update(configuration, wifiInfo, networkInfo); + + assertThat(accessPoint.isMetered()).isTrue(); + } @Test public void testIsMetered_returnTrueWhenScoredNetworkIsMetered() { @@ -286,8 +302,24 @@ public class AccessPointTest { true /* metered */)); ap.update(mWifiNetworkScoreCache, false /* scoringUiEnabled */); - assertTrue(ap.isMetered()); - }; + assertThat(ap.isMetered()).isTrue(); + } + + @Test + public void testIsMetered_returnFalseByDefault() { + WifiConfiguration configuration = createWifiConfiguration(); + + NetworkInfo networkInfo = + new NetworkInfo(ConnectivityManager.TYPE_WIFI, 2, "WIFI", "WIFI_SUBTYPE"); + AccessPoint accessPoint = new AccessPoint(mContext, configuration); + WifiInfo wifiInfo = new WifiInfo(); + wifiInfo.setSSID(WifiSsid.createFromAsciiEncoded(configuration.SSID)); + wifiInfo.setBSSID(configuration.BSSID); + wifiInfo.setNetworkId(configuration.networkId); + accessPoint.update(configuration, wifiInfo, networkInfo); + + assertThat(accessPoint.isMetered()).isFalse(); + } private AccessPoint createAccessPointWithScanResultCache() { Bundle bundle = new Bundle(); @@ -400,7 +432,7 @@ public class AccessPointTest { String providerFriendlyName = "Test Provider"; AccessPoint ap = new TestAccessPointBuilder(mContext).setFqdn(fqdn) .setProviderFriendlyName(providerFriendlyName).build(); - assertTrue(ap.isPasspointConfig()); + assertThat(ap.isPasspointConfig()).isTrue(); assertThat(ap.getPasspointFqdn()).isEqualTo(fqdn); assertThat(ap.getConfigName()).isEqualTo(providerFriendlyName); }