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

Commit c0ceeb4b authored by Willy Hu's avatar Willy Hu Committed by Jack Yu
Browse files

Add flag in isInternetDataAllowed() function

- Skip existed networks check when data out of service.
Doc: go/dsrm-improve
Bug: 284420611
Test: Test passed by reporter. (b/284420611#comment28)

Change-Id: Ic9880a9b24b869b82b9b6fbfd476d74cc5788d39
parent 55841a7e
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -90,3 +90,10 @@ flag {
  description: "Collect vonr status in voice call metric"
  bug:"288449751"
}

flag {
  name: "ignore_existing_networks_for_internet_allowed_checking"
  namespace: "telephony"
  description: "Ignore existing networks when checking if internet is allowed"
  bug: "284420611"
}
+1 −1
Original line number Diff line number Diff line
@@ -3749,7 +3749,7 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
     * @return {@code true} if internet data is allowed to be established.
     */
    public boolean isDataAllowed() {
        return getDataNetworkController().isInternetDataAllowed();
        return getDataNetworkController().isInternetDataAllowed(false/* ignoreExistingNetworks */);
    }

    /**
+9 −5
Original line number Diff line number Diff line
@@ -1408,21 +1408,25 @@ public class DataNetworkController extends Handler {
    /**
     * Evaluate if telephony frameworks would allow data setup for internet in current environment.
     *
     * @param ignoreExistingNetworks {@code true} to skip the existing network check.
     * @return {@code true} if the environment is allowed for internet data. {@code false} if not
     * allowed. For example, if SIM is absent, or airplane mode is on, then data is NOT allowed.
     * This API does not reflect the currently internet data network status. It's possible there is
     * no internet data due to weak cellular signal or network side issue, but internet data is
     * still allowed in this case.
     */
    public boolean isInternetDataAllowed() {
    public boolean isInternetDataAllowed(boolean ignoreExistingNetworks) {
        TelephonyNetworkRequest internetRequest = new TelephonyNetworkRequest(
                new NetworkRequest.Builder()
                        .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                        .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
                        .build(), mPhone);
        // If one of the existing networks can satisfy the internet request, then internet is
        // allowed.
        if (mDataNetworkList.stream().anyMatch(dataNetwork -> internetRequest.canBeSatisfiedBy(
        // If we don't skip checking existing network, then we should check If one of the
        // existing networks can satisfy the internet request, then internet is allowed.
        if ((!mFeatureFlags.ignoreExistingNetworksForInternetAllowedChecking()
                || !ignoreExistingNetworks)
                && mDataNetworkList.stream().anyMatch(
                        dataNetwork -> internetRequest.canBeSatisfiedBy(
                                dataNetwork.getNetworkCapabilities()))) {
            return true;
        }
+1 −1
Original line number Diff line number Diff line
@@ -781,7 +781,7 @@ public class DataStallRecoveryManager extends Handler {
            return false;
        }

        if (!mDataNetworkController.isInternetDataAllowed()) {
        if (!mDataNetworkController.isInternetDataAllowed(true/* ignoreExistingNetworks */)) {
            logl("skip data stall recovery as data not allowed.");
            return false;
        }
+2 −2
Original line number Diff line number Diff line
@@ -107,7 +107,7 @@ public class DataStallRecoveryManagerTest extends TelephonyTest {
        doReturn(dataStallRecoveryStepsArray)
                .when(mDataConfigManager)
                .getDataStallRecoveryShouldSkipArray();
        doReturn(true).when(mDataNetworkController).isInternetDataAllowed();
        doReturn(true).when(mDataNetworkController).isInternetDataAllowed(true);

        doAnswer(invocation -> {
            ((Runnable) invocation.getArguments()[0]).run();
@@ -347,7 +347,7 @@ public class DataStallRecoveryManagerTest extends TelephonyTest {
        mDataStallRecoveryManager.setRecoveryAction(1);
        doReturn(mSignalStrength).when(mPhone).getSignalStrength();
        doReturn(PhoneConstants.State.IDLE).when(mPhone).getState();
        doReturn(false).when(mDataNetworkController).isInternetDataAllowed();
        doReturn(false).when(mDataNetworkController).isInternetDataAllowed(true);

        logd("Sending validation failed callback");
        sendValidationStatusCallback(NetworkAgent.VALIDATION_STATUS_NOT_VALID);