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

Commit 01eac9c2 authored by Jack Yu's avatar Jack Yu Committed by Automerger Merge Worker
Browse files

Replaced NetworkRequest with TelephonyNetworkRequest am: 5975b8bf

Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/2020880

Change-Id: I81b6d2e67363fcaefac5ea7c998f6531d474a8e1
parents 8ca01fdc 5975b8bf
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