aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Yu <jackyu@google.com>2016-08-11 16:01:16 -0700
committerJack Yu <jackyu@google.com>2016-08-12 11:05:23 -0700
commita8201a7b8ce12cfada51784ebe06534e35c2ae04 (patch)
tree83523d3765d94079ba17fbb064b3d8e198531ebb
parent443425174529c240c9a5675a7ef63f0b4ae806fd (diff)
downloadtelephony-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.java7
-rw-r--r--tests/telephonytests/src/com/android/internal/telephony/dataconnection/DataConnectionTest.java51
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