Loading src/java/com/android/internal/telephony/data/DataNetwork.java +21 −3 Original line number Diff line number Diff line Loading @@ -643,6 +643,11 @@ public class DataNetwork extends StateMachine { */ private @TransportType int mTransport; /** * The last known data network type. */ private @NetworkType int mLastKnownDataNetworkType; /** The reason that why setting up this data network is allowed. */ private @NonNull DataAllowedReason mDataAllowedReason; Loading Loading @@ -887,6 +892,7 @@ public class DataNetwork extends StateMachine { mTrafficDescriptors.add(dataProfile.getTrafficDescriptor()); } mTransport = transport; mLastKnownDataNetworkType = getDataNetworkType(); mDataAllowedReason = dataAllowedReason; dataProfile.setLastSetupTimestamp(SystemClock.elapsedRealtime()); mAttachedNetworkRequestList.addAll(networkRequestList); Loading Loading @@ -1077,7 +1083,11 @@ public class DataNetwork extends StateMachine { onCarrierConfigUpdated(); break; case EVENT_SERVICE_STATE_CHANGED: { mDataCallSessionStats.onDrsOrRatChanged(getDataNetworkType()); int networkType = getDataNetworkType(); mDataCallSessionStats.onDrsOrRatChanged(networkType); if (networkType != TelephonyManager.NETWORK_TYPE_UNKNOWN) { mLastKnownDataNetworkType = networkType; } updateSuspendState(); updateNetworkCapabilities(); break; Loading Loading @@ -3263,8 +3273,14 @@ public class DataNetwork extends StateMachine { } /** * @return The PCO data map of the network. The key is the PCO id, the value is the PCO data. * An empty map if PCO data is not available (or when the network is on IWLAN). * @return The last known data network type of the data network. */ public @NetworkType int getLastKnownDataNetworkType() { return mLastKnownDataNetworkType; } /** * @return The PCO data received from the network. */ public @NonNull Map<Integer, PcoData> getPcoData() { if (mTransport == AccessNetworkConstants.TRANSPORT_TYPE_WLAN Loading Loading @@ -3513,6 +3529,8 @@ public class DataNetwork extends StateMachine { pw.increaseIndent(); pw.println("mSubId=" + mSubId); pw.println("mTransport=" + AccessNetworkConstants.transportTypeToString(mTransport)); pw.println("mLastKnownDataNetworkType=" + TelephonyManager .getNetworkTypeName(mLastKnownDataNetworkType)); pw.println("WWAN cid=" + mCid.get(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)); pw.println("WLAN cid=" + mCid.get(AccessNetworkConstants.TRANSPORT_TYPE_WLAN)); pw.println("mNetworkScore=" + mNetworkScore); Loading src/java/com/android/internal/telephony/data/DataNetworkController.java +11 −1 Original line number Diff line number Diff line Loading @@ -1885,8 +1885,18 @@ public class DataNetworkController extends Handler { if (mDataConfigManager.isIwlanHandoverPolicyEnabled()) { List<HandoverRule> handoverRules = mDataConfigManager.getHandoverRules(); int sourceNetworkType = getDataNetworkType(dataNetwork.getTransport()); if (sourceNetworkType == TelephonyManager.NETWORK_TYPE_UNKNOWN) { // Using the data network type stored in the data network. We // cache the last known network type in data network controller // because data network has much shorter life cycle. It can prevent // the obsolete last known network type cached in data network // type controller. sourceNetworkType = dataNetwork.getLastKnownDataNetworkType(); } int sourceAccessNetwork = DataUtils.networkTypeToAccessNetworkType( getDataNetworkType(dataNetwork.getTransport())); sourceNetworkType); int targetAccessNetwork = DataUtils.networkTypeToAccessNetworkType( getDataNetworkType(DataUtils.getTargetTransport(dataNetwork.getTransport()))); NetworkCapabilities capabilities = dataNetwork.getNetworkCapabilities(); Loading tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java +32 −0 Original line number Diff line number Diff line Loading @@ -3143,6 +3143,38 @@ public class DataNetworkControllerTest extends TelephonyTest { AccessNetworkConstants.TRANSPORT_TYPE_WLAN); } @Test public void testHandoverDataNetworkSourceOosNoUnknownRule() throws Exception { testSetupImsDataNetwork(); // Configured handover is allowed from OOS to 4G/5G/IWLAN. mCarrierConfig.putStringArray( CarrierConfigManager.KEY_IWLAN_HANDOVER_POLICY_STRING_ARRAY, new String[]{ "source=EUTRAN|NGRAN|IWLAN, target=EUTRAN|NGRAN|IWLAN, " + "type=disallowed, capabilities=IMS|EIMS|MMS|XCAP|CBS" }); carrierConfigChanged(); serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, NetworkRegistrationInfo.REGISTRATION_STATE_NOT_REGISTERED_OR_SEARCHING); updateTransport(NetworkCapabilities.NET_CAPABILITY_IMS, AccessNetworkConstants.TRANSPORT_TYPE_WLAN); // Verify IMS network was torn down on source first. verify(mMockedWwanDataServiceManager).deactivateDataCall(anyInt(), eq(DataService.REQUEST_REASON_NORMAL), any(Message.class)); // Verify that IWLAN is brought up again on IWLAN. verify(mMockedWlanDataServiceManager).setupDataCall(anyInt(), any(DataProfile.class), anyBoolean(), anyBoolean(), eq(DataService.REQUEST_REASON_NORMAL), any(), anyInt(), any(), any(), anyBoolean(), any(Message.class)); DataNetwork dataNetwork = getDataNetworks().get(0); assertThat(dataNetwork.getTransport()).isEqualTo( AccessNetworkConstants.TRANSPORT_TYPE_WLAN); } @Test public void testHandoverDataNetworkNonVops() throws Exception { ServiceState ss = new ServiceState(); Loading Loading
src/java/com/android/internal/telephony/data/DataNetwork.java +21 −3 Original line number Diff line number Diff line Loading @@ -643,6 +643,11 @@ public class DataNetwork extends StateMachine { */ private @TransportType int mTransport; /** * The last known data network type. */ private @NetworkType int mLastKnownDataNetworkType; /** The reason that why setting up this data network is allowed. */ private @NonNull DataAllowedReason mDataAllowedReason; Loading Loading @@ -887,6 +892,7 @@ public class DataNetwork extends StateMachine { mTrafficDescriptors.add(dataProfile.getTrafficDescriptor()); } mTransport = transport; mLastKnownDataNetworkType = getDataNetworkType(); mDataAllowedReason = dataAllowedReason; dataProfile.setLastSetupTimestamp(SystemClock.elapsedRealtime()); mAttachedNetworkRequestList.addAll(networkRequestList); Loading Loading @@ -1077,7 +1083,11 @@ public class DataNetwork extends StateMachine { onCarrierConfigUpdated(); break; case EVENT_SERVICE_STATE_CHANGED: { mDataCallSessionStats.onDrsOrRatChanged(getDataNetworkType()); int networkType = getDataNetworkType(); mDataCallSessionStats.onDrsOrRatChanged(networkType); if (networkType != TelephonyManager.NETWORK_TYPE_UNKNOWN) { mLastKnownDataNetworkType = networkType; } updateSuspendState(); updateNetworkCapabilities(); break; Loading Loading @@ -3263,8 +3273,14 @@ public class DataNetwork extends StateMachine { } /** * @return The PCO data map of the network. The key is the PCO id, the value is the PCO data. * An empty map if PCO data is not available (or when the network is on IWLAN). * @return The last known data network type of the data network. */ public @NetworkType int getLastKnownDataNetworkType() { return mLastKnownDataNetworkType; } /** * @return The PCO data received from the network. */ public @NonNull Map<Integer, PcoData> getPcoData() { if (mTransport == AccessNetworkConstants.TRANSPORT_TYPE_WLAN Loading Loading @@ -3513,6 +3529,8 @@ public class DataNetwork extends StateMachine { pw.increaseIndent(); pw.println("mSubId=" + mSubId); pw.println("mTransport=" + AccessNetworkConstants.transportTypeToString(mTransport)); pw.println("mLastKnownDataNetworkType=" + TelephonyManager .getNetworkTypeName(mLastKnownDataNetworkType)); pw.println("WWAN cid=" + mCid.get(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)); pw.println("WLAN cid=" + mCid.get(AccessNetworkConstants.TRANSPORT_TYPE_WLAN)); pw.println("mNetworkScore=" + mNetworkScore); Loading
src/java/com/android/internal/telephony/data/DataNetworkController.java +11 −1 Original line number Diff line number Diff line Loading @@ -1885,8 +1885,18 @@ public class DataNetworkController extends Handler { if (mDataConfigManager.isIwlanHandoverPolicyEnabled()) { List<HandoverRule> handoverRules = mDataConfigManager.getHandoverRules(); int sourceNetworkType = getDataNetworkType(dataNetwork.getTransport()); if (sourceNetworkType == TelephonyManager.NETWORK_TYPE_UNKNOWN) { // Using the data network type stored in the data network. We // cache the last known network type in data network controller // because data network has much shorter life cycle. It can prevent // the obsolete last known network type cached in data network // type controller. sourceNetworkType = dataNetwork.getLastKnownDataNetworkType(); } int sourceAccessNetwork = DataUtils.networkTypeToAccessNetworkType( getDataNetworkType(dataNetwork.getTransport())); sourceNetworkType); int targetAccessNetwork = DataUtils.networkTypeToAccessNetworkType( getDataNetworkType(DataUtils.getTargetTransport(dataNetwork.getTransport()))); NetworkCapabilities capabilities = dataNetwork.getNetworkCapabilities(); Loading
tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java +32 −0 Original line number Diff line number Diff line Loading @@ -3143,6 +3143,38 @@ public class DataNetworkControllerTest extends TelephonyTest { AccessNetworkConstants.TRANSPORT_TYPE_WLAN); } @Test public void testHandoverDataNetworkSourceOosNoUnknownRule() throws Exception { testSetupImsDataNetwork(); // Configured handover is allowed from OOS to 4G/5G/IWLAN. mCarrierConfig.putStringArray( CarrierConfigManager.KEY_IWLAN_HANDOVER_POLICY_STRING_ARRAY, new String[]{ "source=EUTRAN|NGRAN|IWLAN, target=EUTRAN|NGRAN|IWLAN, " + "type=disallowed, capabilities=IMS|EIMS|MMS|XCAP|CBS" }); carrierConfigChanged(); serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, NetworkRegistrationInfo.REGISTRATION_STATE_NOT_REGISTERED_OR_SEARCHING); updateTransport(NetworkCapabilities.NET_CAPABILITY_IMS, AccessNetworkConstants.TRANSPORT_TYPE_WLAN); // Verify IMS network was torn down on source first. verify(mMockedWwanDataServiceManager).deactivateDataCall(anyInt(), eq(DataService.REQUEST_REASON_NORMAL), any(Message.class)); // Verify that IWLAN is brought up again on IWLAN. verify(mMockedWlanDataServiceManager).setupDataCall(anyInt(), any(DataProfile.class), anyBoolean(), anyBoolean(), eq(DataService.REQUEST_REASON_NORMAL), any(), anyInt(), any(), any(), anyBoolean(), any(Message.class)); DataNetwork dataNetwork = getDataNetworks().get(0); assertThat(dataNetwork.getTransport()).isEqualTo( AccessNetworkConstants.TRANSPORT_TYPE_WLAN); } @Test public void testHandoverDataNetworkNonVops() throws Exception { ServiceState ss = new ServiceState(); Loading