Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3988c552 authored by Nagendra Prasad Nagarle Basavaraju's avatar Nagendra Prasad Nagarle Basavaraju Committed by Android (Google) Code Review
Browse files

Merge "[Satellite Transport] Honor soft disallowed reasons" into 24D1-dev

parents 388ab1fb 4ed86987
Loading
Loading
Loading
Loading
+23 −6
Original line number Diff line number Diff line
@@ -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));

        }
    }

    /**
+101 −0
Original line number Diff line number Diff line
@@ -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