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

Commit 4ed86987 authored by Nagendra Prasad Nagarle Basavaraju's avatar Nagendra Prasad Nagarle Basavaraju Committed by Cherrypicker Worker
Browse files

[Satellite Transport] Honor soft disallowed reasons

- MMS with restricted capabilities at all network and internet
  with restricted at satellite network not respected as restricted
  request that can bypass soft disallowed reasons, for example, mobile
  data off.

Bug: 331748506
Test: atest FrameworksTelphonyTests
Test: Manual test at b/332467225#comment7
Test: Basic sanity test @ b/332467225#comment10
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:6d98f1bdad4ea0821ece041b051d4479be1ca6b4)
Merged-In: Ia78f822b6b23581bc145162df3f12e9a937ac57d
Change-Id: Ia78f822b6b23581bc145162df3f12e9a937ac57d
parent bac19195
Loading
Loading
Loading
Loading
+23 −6
Original line number Original line 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
     * Check if a network request should be treated as a valid restricted network request that
     * with these capabilities, any soft disallowed reasons are honored.
     * can bypass soft disallowed reasons, for example, mobile data off.
     *
     * @param networkRequest The network request to evaluate.
     * @param networkRequest The network request to evaluate.
     * @return {@code true} if the request doesn't contain any exceptional capabilities, its
     * @return {@code true} if the request can be considered as a valid restricted network request
     * restricted capability, if any, is respected.
     * that can bypass any soft disallowed reasons, otherwise {@code false}.
     */
     */
    private boolean isValidRestrictedRequest(@NonNull TelephonyNetworkRequest networkRequest) {
    private boolean isValidRestrictedRequest(@NonNull TelephonyNetworkRequest networkRequest) {

        if (!mFeatureFlags.satelliteInternet()) {
            return !(networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_DUN)
            return !(networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_DUN)
                    || networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE));
                    || 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 Original line Diff line number Diff line
@@ -1744,6 +1744,107 @@ public class DataNetworkControllerTest extends TelephonyTest {
        mIsNonTerrestrialNetwork = false;
        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
    @Test
    public void testIsNetworkRequestSatisfiedByTransportSatelliteTransportRequest_Terrestrial() {
    public void testIsNetworkRequestSatisfiedByTransportSatelliteTransportRequest_Terrestrial() {
        // Set network request transport as satellite in satellite network
        // Set network request transport as satellite in satellite network