diff options
author | Jack Yu <jackyu@google.com> | 2016-08-11 16:01:16 -0700 |
---|---|---|
committer | Jack Yu <jackyu@google.com> | 2016-08-12 11:05:23 -0700 |
commit | a8201a7b8ce12cfada51784ebe06534e35c2ae04 (patch) | |
tree | 83523d3765d94079ba17fbb064b3d8e198531ebb | |
parent | 443425174529c240c9a5675a7ef63f0b4ae806fd (diff) | |
download | telephony-a8201a7b8ce12cfada51784ebe06534e35c2ae04.tar.gz |
Set NetworkInfo's meter flag when capability changes.
bug: 30812533
Change-Id: Ib25eebc5f439895317c4011384b1b10a330911b3
-rw-r--r-- | src/java/com/android/internal/telephony/dataconnection/DataConnection.java | 7 | ||||
-rw-r--r-- | tests/telephonytests/src/com/android/internal/telephony/dataconnection/DataConnectionTest.java | 51 |
2 files changed, 58 insertions, 0 deletions
diff --git a/src/java/com/android/internal/telephony/dataconnection/DataConnection.java b/src/java/com/android/internal/telephony/dataconnection/DataConnection.java index 0919af1d86..834548b526 100644 --- a/src/java/com/android/internal/telephony/dataconnection/DataConnection.java +++ b/src/java/com/android/internal/telephony/dataconnection/DataConnection.java @@ -409,6 +409,9 @@ public class DataConnection extends StateMachine { networkType, NETWORK_TYPE, TelephonyManager.getNetworkTypeName(networkType)); mNetworkInfo.setRoaming(ss.getDataRoaming()); mNetworkInfo.setIsAvailable(true); + // The network should be by default metered until we find it has NET_CAPABILITY_NOT_METERED + // capability. + mNetworkInfo.setMetered(true); addState(mDefaultState); addState(mInactiveState, mDefaultState); @@ -947,6 +950,10 @@ public class DataConnection extends StateMachine { if (!mApnSetting.isMetered(mPhone.getContext(), mPhone.getSubId(), mPhone.getServiceState().getDataRoaming())) { result.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED); + mNetworkInfo.setMetered(false); + } else { + result.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED); + mNetworkInfo.setMetered(true); } result.maybeMarkCapabilitiesRestricted(); diff --git a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DataConnectionTest.java b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DataConnectionTest.java index 4bccdd9e37..0f2192b126 100644 --- a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DataConnectionTest.java +++ b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DataConnectionTest.java @@ -16,10 +16,13 @@ package com.android.internal.telephony.dataconnection; +import android.net.NetworkCapabilities; +import android.net.NetworkInfo; import android.os.AsyncResult; import android.os.Handler; import android.os.HandlerThread; import android.os.Message; +import android.telephony.CarrierConfigManager; import android.telephony.ServiceState; import android.test.suitebuilder.annotation.SmallTest; @@ -32,15 +35,20 @@ import com.android.internal.telephony.dataconnection.DataConnection.DisconnectPa import com.android.internal.util.IState; import com.android.internal.util.StateMachine; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; + import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; +import java.lang.reflect.Field; import java.lang.reflect.Method; import static com.android.internal.telephony.TelephonyTestUtils.waitForMs; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doReturn; @@ -246,4 +254,47 @@ public class DataConnectionTest extends TelephonyTest { AsyncResult ar = new AsyncResult(null, response, null); assertEquals(RetryManager.NO_RETRY, getSuggestedRetryDelay(ar)); } + + private NetworkInfo getNetworkInfo() throws Exception { + Field f = DataConnection.class.getDeclaredField("mNetworkInfo"); + f.setAccessible(true); + return (NetworkInfo) f.get(mDc); + } + + private NetworkCapabilities getCopyNetworkCapabilities() throws Exception { + Method method = DataConnection.class.getDeclaredMethod("getCopyNetworkCapabilities"); + method.setAccessible(true); + return (NetworkCapabilities) method.invoke(mDc); + } + + @Test + @SmallTest + public void testMeteredCapability() throws Exception { + + mContextFixture.getCarrierConfigBundle(). + putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, + new String[] {"default"}); + + testConnectEvent(); + + assertTrue(getNetworkInfo().isMetered()); + assertFalse(getCopyNetworkCapabilities(). + hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)); + } + + @Test + @SmallTest + public void testNonMeteredCapability() throws Exception { + + doReturn(1).when(mPhone).getSubId(); + mContextFixture.getCarrierConfigBundle(). + putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, + new String[] {"mms"}); + + testConnectEvent(); + + assertFalse(getNetworkInfo().isMetered()); + assertTrue(getCopyNetworkCapabilities(). + hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)); + } }
\ No newline at end of file |