Loading src/java/com/android/internal/telephony/data/DataNetworkController.java +23 −6 Original line number Diff line number Diff line Loading @@ -2156,15 +2156,32 @@ public class DataNetworkController extends Handler { } /** * tethering and enterprise capabilities are not respected as restricted requests. For a request * with these capabilities, any soft disallowed reasons are honored. * Check if a network request should be treated as a valid restricted network request that * can bypass soft disallowed reasons, for example, mobile data off. * * @param networkRequest The network request to evaluate. * @return {@code true} if the request doesn't contain any exceptional capabilities, its * restricted capability, if any, is respected. * @return {@code true} if the request can be considered as a valid restricted network request * that can bypass any soft disallowed reasons, otherwise {@code false}. */ private boolean isValidRestrictedRequest(@NonNull TelephonyNetworkRequest networkRequest) { if (!mFeatureFlags.satelliteInternet()) { return !(networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_DUN) || networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE)); } else { // tethering, enterprise and mms with restricted capabilities always honor soft // disallowed reasons and not respected as restricted request if (networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_DUN) || networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE) || networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_MMS)) { return false; } // When the device is on satellite, internet with restricted capabilities always honor // soft disallowed reasons and not respected as restricted request return !(mServiceState.isUsingNonTerrestrialNetwork() && networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)); } } /** Loading tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java +101 −0 Original line number Diff line number Diff line Loading @@ -1744,6 +1744,107 @@ public class DataNetworkControllerTest extends TelephonyTest { mIsNonTerrestrialNetwork = false; } @Test public void testMobileDataDisabledIsValidRestrictedRequestWithSatelliteInternetRequest() { mIsNonTerrestrialNetwork = true; //Mobile Data Disabled mDataNetworkControllerUT.getDataSettingsManager().setDataEnabled( TelephonyManager.DATA_ENABLED_REASON_USER, false, mContext.getOpPackageName()); processAllMessages(); // Data is not supported for cellular transport network request while using satellite // network serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, NetworkRegistrationInfo.REGISTRATION_STATE_HOME); // Set network request transport as Satellite with restricted capability + internet NetworkCapabilities netCaps = new NetworkCapabilities(); netCaps.addTransportType(NetworkCapabilities.TRANSPORT_SATELLITE); netCaps.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); netCaps.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED); mDataNetworkControllerUT.addNetworkRequest(new TelephonyNetworkRequest( new NetworkRequest(netCaps, ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, NetworkRequest.Type.REQUEST), mPhone, mFeatureFlags)); processAllMessages(); // Verify data is not connected since Network request cannot satisfy by transport verify(mMockedDataNetworkControllerCallback, never()) .onConnectedInternetDataNetworksChanged(any()); mIsNonTerrestrialNetwork = false; } @Test public void testMobileDataDisabledIsValidRestrictedRequestWithTransportSatelliteMMSRequest() throws Exception { mIsNonTerrestrialNetwork = true; // Data disabled mDataNetworkControllerUT.getDataSettingsManager().setDataEnabled( TelephonyManager.DATA_ENABLED_REASON_USER, false, mContext.getOpPackageName()); // Always allow MMS off mDataNetworkControllerUT.getDataSettingsManager().setMobileDataPolicy(TelephonyManager .MOBILE_DATA_POLICY_MMS_ALWAYS_ALLOWED, false); processAllMessages(); // Data is not supported for cellular transport network request while using satellite // network serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, NetworkRegistrationInfo.REGISTRATION_STATE_HOME); // Set network request transport as Cellular+Satellite with restricted capability + mms NetworkCapabilities netCaps = new NetworkCapabilities(); netCaps.addTransportType(NetworkCapabilities.TRANSPORT_SATELLITE); netCaps.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); netCaps.addCapability(NetworkCapabilities.NET_CAPABILITY_MMS); netCaps.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED); mDataNetworkControllerUT.addNetworkRequest(new TelephonyNetworkRequest( new NetworkRequest(netCaps, ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, NetworkRequest.Type.REQUEST), mPhone, mFeatureFlags)); processAllMessages(); // Verify mms is not connected verifyNoConnectedNetworkHasCapability(NetworkCapabilities.NET_CAPABILITY_MMS); mIsNonTerrestrialNetwork = false; } @Test public void testOnMmsAlwaysALlowedIsValidRestrictedRequestWithTransportSatelliteMMSRequest() throws Exception { mIsNonTerrestrialNetwork = true; // Data disabled mDataNetworkControllerUT.getDataSettingsManager().setDataEnabled( TelephonyManager.DATA_ENABLED_REASON_USER, false, mContext.getOpPackageName()); // Always allow MMS On mDataNetworkControllerUT.getDataSettingsManager().setMobileDataPolicy(TelephonyManager .MOBILE_DATA_POLICY_MMS_ALWAYS_ALLOWED, true); processAllMessages(); // Data is not supported for cellular transport network request while using satellite // network serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, NetworkRegistrationInfo.REGISTRATION_STATE_HOME); // Set network request transport as Cellular+Satellite with restricted capability + mms NetworkCapabilities netCaps = new NetworkCapabilities(); netCaps.addTransportType(NetworkCapabilities.TRANSPORT_SATELLITE); netCaps.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); netCaps.addCapability(NetworkCapabilities.NET_CAPABILITY_MMS); netCaps.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED); mDataNetworkControllerUT.addNetworkRequest(new TelephonyNetworkRequest( new NetworkRequest(netCaps, ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, NetworkRequest.Type.REQUEST), mPhone, mFeatureFlags)); processAllMessages(); // Verify mms is connected if mms always allowed is on verifyConnectedNetworkHasCapabilities(NetworkCapabilities.NET_CAPABILITY_MMS); mIsNonTerrestrialNetwork = false; } @Test public void testIsNetworkRequestSatisfiedByTransportSatelliteTransportRequest_Terrestrial() { // Set network request transport as satellite in satellite network Loading Loading
src/java/com/android/internal/telephony/data/DataNetworkController.java +23 −6 Original line number Diff line number Diff line Loading @@ -2156,15 +2156,32 @@ public class DataNetworkController extends Handler { } /** * tethering and enterprise capabilities are not respected as restricted requests. For a request * with these capabilities, any soft disallowed reasons are honored. * Check if a network request should be treated as a valid restricted network request that * can bypass soft disallowed reasons, for example, mobile data off. * * @param networkRequest The network request to evaluate. * @return {@code true} if the request doesn't contain any exceptional capabilities, its * restricted capability, if any, is respected. * @return {@code true} if the request can be considered as a valid restricted network request * that can bypass any soft disallowed reasons, otherwise {@code false}. */ private boolean isValidRestrictedRequest(@NonNull TelephonyNetworkRequest networkRequest) { if (!mFeatureFlags.satelliteInternet()) { return !(networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_DUN) || networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE)); } else { // tethering, enterprise and mms with restricted capabilities always honor soft // disallowed reasons and not respected as restricted request if (networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_DUN) || networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE) || networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_MMS)) { return false; } // When the device is on satellite, internet with restricted capabilities always honor // soft disallowed reasons and not respected as restricted request return !(mServiceState.isUsingNonTerrestrialNetwork() && networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)); } } /** Loading
tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java +101 −0 Original line number Diff line number Diff line Loading @@ -1744,6 +1744,107 @@ public class DataNetworkControllerTest extends TelephonyTest { mIsNonTerrestrialNetwork = false; } @Test public void testMobileDataDisabledIsValidRestrictedRequestWithSatelliteInternetRequest() { mIsNonTerrestrialNetwork = true; //Mobile Data Disabled mDataNetworkControllerUT.getDataSettingsManager().setDataEnabled( TelephonyManager.DATA_ENABLED_REASON_USER, false, mContext.getOpPackageName()); processAllMessages(); // Data is not supported for cellular transport network request while using satellite // network serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, NetworkRegistrationInfo.REGISTRATION_STATE_HOME); // Set network request transport as Satellite with restricted capability + internet NetworkCapabilities netCaps = new NetworkCapabilities(); netCaps.addTransportType(NetworkCapabilities.TRANSPORT_SATELLITE); netCaps.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); netCaps.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED); mDataNetworkControllerUT.addNetworkRequest(new TelephonyNetworkRequest( new NetworkRequest(netCaps, ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, NetworkRequest.Type.REQUEST), mPhone, mFeatureFlags)); processAllMessages(); // Verify data is not connected since Network request cannot satisfy by transport verify(mMockedDataNetworkControllerCallback, never()) .onConnectedInternetDataNetworksChanged(any()); mIsNonTerrestrialNetwork = false; } @Test public void testMobileDataDisabledIsValidRestrictedRequestWithTransportSatelliteMMSRequest() throws Exception { mIsNonTerrestrialNetwork = true; // Data disabled mDataNetworkControllerUT.getDataSettingsManager().setDataEnabled( TelephonyManager.DATA_ENABLED_REASON_USER, false, mContext.getOpPackageName()); // Always allow MMS off mDataNetworkControllerUT.getDataSettingsManager().setMobileDataPolicy(TelephonyManager .MOBILE_DATA_POLICY_MMS_ALWAYS_ALLOWED, false); processAllMessages(); // Data is not supported for cellular transport network request while using satellite // network serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, NetworkRegistrationInfo.REGISTRATION_STATE_HOME); // Set network request transport as Cellular+Satellite with restricted capability + mms NetworkCapabilities netCaps = new NetworkCapabilities(); netCaps.addTransportType(NetworkCapabilities.TRANSPORT_SATELLITE); netCaps.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); netCaps.addCapability(NetworkCapabilities.NET_CAPABILITY_MMS); netCaps.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED); mDataNetworkControllerUT.addNetworkRequest(new TelephonyNetworkRequest( new NetworkRequest(netCaps, ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, NetworkRequest.Type.REQUEST), mPhone, mFeatureFlags)); processAllMessages(); // Verify mms is not connected verifyNoConnectedNetworkHasCapability(NetworkCapabilities.NET_CAPABILITY_MMS); mIsNonTerrestrialNetwork = false; } @Test public void testOnMmsAlwaysALlowedIsValidRestrictedRequestWithTransportSatelliteMMSRequest() throws Exception { mIsNonTerrestrialNetwork = true; // Data disabled mDataNetworkControllerUT.getDataSettingsManager().setDataEnabled( TelephonyManager.DATA_ENABLED_REASON_USER, false, mContext.getOpPackageName()); // Always allow MMS On mDataNetworkControllerUT.getDataSettingsManager().setMobileDataPolicy(TelephonyManager .MOBILE_DATA_POLICY_MMS_ALWAYS_ALLOWED, true); processAllMessages(); // Data is not supported for cellular transport network request while using satellite // network serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, NetworkRegistrationInfo.REGISTRATION_STATE_HOME); // Set network request transport as Cellular+Satellite with restricted capability + mms NetworkCapabilities netCaps = new NetworkCapabilities(); netCaps.addTransportType(NetworkCapabilities.TRANSPORT_SATELLITE); netCaps.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); netCaps.addCapability(NetworkCapabilities.NET_CAPABILITY_MMS); netCaps.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED); mDataNetworkControllerUT.addNetworkRequest(new TelephonyNetworkRequest( new NetworkRequest(netCaps, ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, NetworkRequest.Type.REQUEST), mPhone, mFeatureFlags)); processAllMessages(); // Verify mms is connected if mms always allowed is on verifyConnectedNetworkHasCapabilities(NetworkCapabilities.NET_CAPABILITY_MMS); mIsNonTerrestrialNetwork = false; } @Test public void testIsNetworkRequestSatisfiedByTransportSatelliteTransportRequest_Terrestrial() { // Set network request transport as satellite in satellite network Loading