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

Commit 5975b8bf authored by Jack Yu's avatar Jack Yu
Browse files

Replaced NetworkRequest with TelephonyNetworkRequest

Also put temporary solution before old telephony data
is removed.

Bug: 196597630
Test: atest FrameworksTelephonyTests
Merged-In: I97b391e6eaadf99ef380299f5bcc6d61a8c58cba
Change-Id: I97b391e6eaadf99ef380299f5bcc6d61a8c58cba
parent 8c496024
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1215,7 +1215,7 @@ public class DataNetwork extends StateMachine {
        TelephonyNetworkRequest networkRequest = mAttachedNetworkRequestList.get(0);

        mPreferredTransport = mAccessNetworksManager.getPreferredTransportByNetworkCapability(
                networkRequest.getHighestPriorityNetworkCapability());
                networkRequest.getApnTypeNetworkCapability());
        if (mTransport == AccessNetworkConstants.TRANSPORT_TYPE_INVALID) {
            mTransport = mPreferredTransport;
        }
+11 −28
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.net.NetworkAgent;
import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
import android.net.Uri;
import android.os.AsyncResult;
import android.os.Handler;
@@ -803,7 +802,7 @@ public class DataNetworkController extends Handler {
                onReevaluateExistingDataNetworks(reason);
                break;
            case EVENT_REMOVE_NETWORK_REQUEST:
                onRemoveNetworkRequest((NetworkRequest) msg.obj);
                onRemoveNetworkRequest((TelephonyNetworkRequest) msg.obj);
                break;
            case EVENT_VOICE_CALL_ENDED:
                sendMessage(obtainMessage(EVENT_REEVALUATE_UNSATISFIED_NETWORK_REQUESTS,
@@ -869,16 +868,13 @@ public class DataNetworkController extends Handler {

    /**
     * Add a network request, which is originated from the apps. Note that add a network request
     * is not necessarily setting up a net {@link DataNetwork}.
     * is not necessarily setting up a {@link DataNetwork}.
     *
     * @param networkRequest Network request
     *
     */
    public void addNetworkRequest(@NonNull NetworkRequest networkRequest) {
        // TODO: TelephonyNetworkRequest should be created in TelephonyNetworkFactory after
        //       DcTracker and other legacy data stacks are removed.
        sendMessage(obtainMessage(EVENT_ADD_NETWORK_REQUEST,
                new TelephonyNetworkRequest(networkRequest, mPhone)));
    public void addNetworkRequest(@NonNull TelephonyNetworkRequest networkRequest) {
        sendMessage(obtainMessage(EVENT_ADD_NETWORK_REQUEST, networkRequest));
    }

    /**
@@ -1013,7 +1009,7 @@ public class DataNetworkController extends Handler {
            @NonNull TelephonyNetworkRequest networkRequest, DataEvaluationReason reason) {
        DataEvaluation evaluation = new DataEvaluation(reason);
        int transport = mAccessNetworksManager.getPreferredTransportByNetworkCapability(
                networkRequest.getHighestPriorityNetworkCapability());
                networkRequest.getApnTypeNetworkCapability());

        // Bypass all checks for emergency network request.
        if (networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_EIMS)) {
@@ -1091,7 +1087,7 @@ public class DataNetworkController extends Handler {


        if (!mDataSettingsManager.isDataEnabled(DataUtils.networkCapabilityToApnType(
                networkRequest.getHighestPriorityNetworkCapability()))) {
                networkRequest.getApnTypeNetworkCapability()))) {
            evaluation.addDataDisallowedReason(DataDisallowedReason.DATA_DISABLED);
        }

@@ -1110,7 +1106,7 @@ public class DataNetworkController extends Handler {
                evaluation.addDataAllowedReason(DataAllowedReason.UNMETERED_USAGE);
            } else if (transport == AccessNetworkConstants.TRANSPORT_TYPE_WWAN) {
                int apnType = DataUtils.networkCapabilityToApnType(
                        networkRequest.getHighestPriorityNetworkCapability());
                        networkRequest.getApnTypeNetworkCapability());
                Set<Integer> meteredApns = mServiceState.getDataRoaming()
                        ? mDataConfigManager.getMeteredApnTypesWhenRoaming()
                        : mDataConfigManager.getMeteredApnTypes();
@@ -1349,24 +1345,11 @@ public class DataNetworkController extends Handler {
     *
     * @param networkRequest Network request
     */
    // TODO: TelephonyNetworkRequest should be used after DcTracker and other legacy data stacks are
    //  removed.
    public void removeNetworkRequest(@NonNull NetworkRequest networkRequest) {
    public void removeNetworkRequest(@NonNull TelephonyNetworkRequest networkRequest) {
        sendMessage(obtainMessage(EVENT_REMOVE_NETWORK_REQUEST, networkRequest));
    }

    private void onRemoveNetworkRequest(@NonNull NetworkRequest request) {
        // TODO: TelephonyNetworkRequest should be used after DcTracker and other legacy data stacks
        //  are removed.
        // temp solution: find the original telephony network request.
        TelephonyNetworkRequest networkRequest = mAllNetworkRequestList.stream()
                .filter(nr -> nr.getNativeNetworkRequest().equals(request))
                .findFirst()
                .orElse(null);
        if (networkRequest == null) {
            return;
        }

    private void onRemoveNetworkRequest(@NonNull TelephonyNetworkRequest networkRequest) {
        if (!mAllNetworkRequestList.remove(networkRequest)) {
            loge("onRemoveNetworkRequest: Network request does not exist. " + networkRequest);
            return;
@@ -1624,7 +1607,7 @@ public class DataNetworkController extends Handler {
        }

        int transport = mAccessNetworksManager.getPreferredTransportByNetworkCapability(
                networkRequestList.get(0).getHighestPriorityNetworkCapability());
                networkRequestList.get(0).getApnTypeNetworkCapability());
        logl("Creating data network on "
                + AccessNetworkConstants.transportTypeToString(transport) + " with " + dataProfile
                + ", and attaching " + networkRequestList.size() + " network requests to it.");
@@ -1759,7 +1742,7 @@ public class DataNetworkController extends Handler {
            dataSetupRetryEntry.setState(DataRetryEntry.RETRY_STATE_CANCELLED);
            return;
        }
        int networkCapability = telephonyNetworkRequest.getHighestPriorityNetworkCapability();
        int networkCapability = telephonyNetworkRequest.getApnTypeNetworkCapability();
        int preferredTransport = mAccessNetworksManager.getPreferredTransportByNetworkCapability(
                networkCapability);
        if (preferredTransport != dataSetupRetryEntry.transport) {
+2 −2
Original line number Diff line number Diff line
@@ -859,7 +859,7 @@ public class DataRetryManager extends Handler {
            List<NetworkRequestList> groupedNetworkRequestLists =
                    DataUtils.getGroupedNetworkRequestList(requestList);
            for (NetworkRequestList networkRequestList : groupedNetworkRequestLists) {
                int capability = networkRequestList.get(0).getHighestPriorityNetworkCapability();
                int capability = networkRequestList.get(0).getApnTypeNetworkCapability();

                for (DataSetupRetryRule retryRule : mDataSetupRetryRuleList) {
                    if (retryRule.canBeMatched(capability, cause)) {
@@ -1035,7 +1035,7 @@ public class DataRetryManager extends Handler {
                // count towards the last succeeded data setup.
                if (entry.setupRetryType == DataSetupRetryEntry.RETRY_TYPE_NETWORK_REQUESTS
                        && entry.networkRequestList.get(0)
                        .getHighestPriorityNetworkCapability() == networkCapability
                        .getApnTypeNetworkCapability() == networkCapability
                        && entry.appliedDataRetryRule.equals(dataRetryRule)) {
                    if (entry.getState() == DataRetryEntry.RETRY_STATE_SUCCEEDED
                            || entry.getState() == DataRetryEntry.RETRY_STATE_CANCELLED) {
+2 −2
Original line number Diff line number Diff line
@@ -1414,7 +1414,7 @@ public class PhoneSwitcher extends Handler {
    }

    public synchronized boolean shouldApplyNetworkRequest(
            NetworkRequest networkRequest, int phoneId) {
            TelephonyNetworkRequest networkRequest, int phoneId) {
        if (!SubscriptionManager.isValidPhoneId(phoneId)) return false;

        // In any case, if phone state is inactive, don't apply the network request.
@@ -1429,7 +1429,7 @@ public class PhoneSwitcher extends Handler {
        return phoneId == phoneIdToHandle;
    }

    boolean isEmergencyNetworkRequest(NetworkRequest networkRequest) {
    boolean isEmergencyNetworkRequest(TelephonyNetworkRequest networkRequest) {
        return networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_EIMS);
    }

+39 −22
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import android.util.LocalLog;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.SubscriptionController;
import com.android.internal.telephony.dataconnection.ApnContext;
import com.android.internal.telephony.dataconnection.DataConnection;
@@ -81,7 +82,7 @@ public class TelephonyNetworkFactory extends NetworkFactory {

    // Key: network request. Value: the transport of DcTracker it applies to,
    // AccessNetworkConstants.TRANSPORT_TYPE_INVALID if not applied.
    private final Map<NetworkRequest, Integer> mNetworkRequests = new HashMap<>();
    private final Map<TelephonyNetworkRequest, Integer> mNetworkRequests = new HashMap<>();

    private final Map<Message, HandoverParams> mPendingHandovers = new HashMap<>();

@@ -220,10 +221,17 @@ public class TelephonyNetworkFactory extends NetworkFactory {
        }
    }

    private int getTransportTypeFromNetworkRequest(NetworkRequest networkRequest) {
        int apnType = ApnContext.getApnTypeFromNetworkRequest(networkRequest);
    private int getTransportTypeFromNetworkRequest(TelephonyNetworkRequest networkRequest) {
        if (PhoneFactory.getDefaultPhone().isUsingNewDataStack()) {
            return PhoneFactory.getDefaultPhone().getAccessNetworksManager()
                    .getPreferredTransportByNetworkCapability(
                            networkRequest.getApnTypeNetworkCapability());
        } else {
            int apnType = ApnContext.getApnTypeFromNetworkRequest(
                    networkRequest.getNativeNetworkRequest());
            return mTransportManager.getCurrentTransport(apnType);
        }
    }

    /**
     * Request network
@@ -234,29 +242,33 @@ public class TelephonyNetworkFactory extends NetworkFactory {
     * @param onHandoverCompleteMsg When request type is handover, this message will be sent when
     * handover is completed. For normal request, this should be null.
     */
    private void requestNetworkInternal(NetworkRequest networkRequest,
    private void requestNetworkInternal(TelephonyNetworkRequest networkRequest,
            @RequestNetworkType int requestType, int transport, Message onHandoverCompleteMsg) {
        NetworkRequestsStats.addNetworkRequest(networkRequest, mSubscriptionId);
        NetworkRequestsStats.addNetworkRequest(networkRequest.getNativeNetworkRequest(),
                mSubscriptionId);

        if (mPhone.isUsingNewDataStack()) {
            mPhone.getDataNetworkController().addNetworkRequest(networkRequest);
        } else {
            if (mPhone.getDcTracker(transport) != null) {
                mPhone.getDcTracker(transport).requestNetwork(networkRequest, requestType,
                mPhone.getDcTracker(transport).requestNetwork(
                        networkRequest.getNativeNetworkRequest(), requestType,
                        onHandoverCompleteMsg);
            }
        }
    }

    private void releaseNetworkInternal(NetworkRequest networkRequest,
    private void releaseNetworkInternal(TelephonyNetworkRequest networkRequest,
                                        @ReleaseNetworkType int releaseType,
                                        int transport) {
        NetworkRequestsStats.addNetworkRelease(networkRequest, mSubscriptionId);
        NetworkRequestsStats.addNetworkRelease(networkRequest.getNativeNetworkRequest(),
                mSubscriptionId);
        if (mPhone.isUsingNewDataStack()) {
            mPhone.getDataNetworkController().removeNetworkRequest(networkRequest);
        } else {
            if (mPhone.getDcTracker(transport) != null) {
                mPhone.getDcTracker(transport).releaseNetwork(networkRequest, releaseType);
                mPhone.getDcTracker(transport).releaseNetwork(
                        networkRequest.getNativeNetworkRequest(), releaseType);
            }
        }
    }
@@ -273,8 +285,8 @@ public class TelephonyNetworkFactory extends NetworkFactory {

    // apply or revoke requests if our active-ness changes
    private void onActivePhoneSwitch() {
        for (HashMap.Entry<NetworkRequest, Integer> entry : mNetworkRequests.entrySet()) {
            NetworkRequest networkRequest = entry.getKey();
        for (Map.Entry<TelephonyNetworkRequest, Integer> entry : mNetworkRequests.entrySet()) {
            TelephonyNetworkRequest networkRequest = entry.getKey();
            boolean applied = entry.getValue() != AccessNetworkConstants.TRANSPORT_TYPE_INVALID;

            boolean shouldApply = mPhoneSwitcher.shouldApplyNetworkRequest(
@@ -319,7 +331,8 @@ public class TelephonyNetworkFactory extends NetworkFactory {
    }

    private void onNeedNetworkFor(Message msg) {
        NetworkRequest networkRequest = (NetworkRequest) msg.obj;
        TelephonyNetworkRequest networkRequest =
                new TelephonyNetworkRequest((NetworkRequest) msg.obj, mPhone);
        boolean shouldApply = mPhoneSwitcher.shouldApplyNetworkRequest(
                networkRequest, mPhone.getPhoneId());

@@ -343,7 +356,8 @@ public class TelephonyNetworkFactory extends NetworkFactory {
    }

    private void onReleaseNetworkFor(Message msg) {
        NetworkRequest networkRequest = (NetworkRequest) msg.obj;
        TelephonyNetworkRequest networkRequest =
                new TelephonyNetworkRequest((NetworkRequest) msg.obj, mPhone);
        boolean applied = mNetworkRequests.get(networkRequest)
                != AccessNetworkConstants.TRANSPORT_TYPE_INVALID;

@@ -377,11 +391,12 @@ public class TelephonyNetworkFactory extends NetworkFactory {
        }

        boolean handoverPending = false;
        for (HashMap.Entry<NetworkRequest, Integer> entry : mNetworkRequests.entrySet()) {
            NetworkRequest networkRequest = entry.getKey();
        for (Map.Entry<TelephonyNetworkRequest, Integer> entry : mNetworkRequests.entrySet()) {
            TelephonyNetworkRequest networkRequest = entry.getKey();
            int currentTransport = entry.getValue();
            boolean applied = currentTransport != AccessNetworkConstants.TRANSPORT_TYPE_INVALID;
            if (ApnContext.getApnTypeFromNetworkRequest(networkRequest) == apnType
            if (ApnContext.getApnTypeFromNetworkRequest(
                    networkRequest.getNativeNetworkRequest()) == apnType
                    && applied
                    && currentTransport != targetTransport) {
                DcTracker dcTracker = mPhone.getDcTracker(currentTransport);
@@ -392,7 +407,8 @@ public class TelephonyNetworkFactory extends NetworkFactory {
                        Message onCompleteMsg = mInternalHandler.obtainMessage(
                                EVENT_DATA_HANDOVER_COMPLETED);
                        onCompleteMsg.getData().putParcelable(
                                DcTracker.DATA_COMPLETE_MSG_EXTRA_NETWORK_REQUEST, networkRequest);
                                DcTracker.DATA_COMPLETE_MSG_EXTRA_NETWORK_REQUEST,
                                networkRequest.getNativeNetworkRequest());
                        mPendingHandovers.put(onCompleteMsg, handoverParams);
                        requestNetworkInternal(networkRequest, DcTracker.REQUEST_TYPE_HANDOVER,
                                targetTransport, onCompleteMsg);
@@ -428,14 +444,15 @@ public class TelephonyNetworkFactory extends NetworkFactory {
        }
    }

    private void onDataHandoverSetupCompleted(NetworkRequest networkRequest, boolean success,
    private void onDataHandoverSetupCompleted(NetworkRequest request, boolean success,
                                              int targetTransport, boolean fallback,
                                              HandoverParams handoverParams) {
        log("onDataHandoverSetupCompleted: " + networkRequest + ", success=" + success
        log("onDataHandoverSetupCompleted: " + request + ", success=" + success
                + ", targetTransport="
                + AccessNetworkConstants.transportTypeToString(targetTransport)
                + ", fallback=" + fallback);

        TelephonyNetworkRequest networkRequest = new TelephonyNetworkRequest(request, mPhone);
        // At this point, handover setup has been completed on the target transport.
        // If it succeeded, or it failed without falling back to the original transport,
        // we should release the request from the original transport.
@@ -497,8 +514,8 @@ public class TelephonyNetworkFactory extends NetworkFactory {
        final IndentingPrintWriter pw = new IndentingPrintWriter(writer, "  ");
        pw.println("Network Requests:");
        pw.increaseIndent();
        for (HashMap.Entry<NetworkRequest, Integer> entry : mNetworkRequests.entrySet()) {
            NetworkRequest nr = entry.getKey();
        for (Map.Entry<TelephonyNetworkRequest, Integer> entry : mNetworkRequests.entrySet()) {
            TelephonyNetworkRequest nr = entry.getKey();
            int transport = entry.getValue();
            pw.println(nr + (transport != AccessNetworkConstants.TRANSPORT_TYPE_INVALID
                    ? (" applied on " + transport) : " not applied"));
Loading