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

Commit 029f080f authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Replaced TelephonyNetworkFactory with TelephonyNetworkProvider" into main

parents 35ca185b c32111d1
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -181,4 +181,14 @@ flag {
  bug:"353723350"
}

# OWNER=jackyu TARGET=25Q1
flag {
  name: "support_network_provider"
  namespace: "telephony"
  description: "Deprecate network factory and adapt the new network provider model from connectivity service"
  bug: "343370895"
  metadata {
    purpose: PURPOSE_BUGFIX
  }
}
+34 −7
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ import com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager;
import com.android.internal.telephony.data.CellularNetworkValidator;
import com.android.internal.telephony.data.PhoneSwitcher;
import com.android.internal.telephony.data.TelephonyNetworkFactory;
import com.android.internal.telephony.data.TelephonyNetworkProvider;
import com.android.internal.telephony.euicc.EuiccCardController;
import com.android.internal.telephony.euicc.EuiccController;
import com.android.internal.telephony.flags.FeatureFlags;
@@ -101,6 +102,7 @@ public class PhoneFactory {
    static private SimultaneousCallingTracker sSimultaneousCallingTracker;
    static private PhoneSwitcher sPhoneSwitcher;
    static private TelephonyNetworkFactory[] sTelephonyNetworkFactories;
    private static TelephonyNetworkProvider sTelephonyNetworkProvider;
    static private NotificationChannelController sNotificationChannelController;
    static private CellularNetworkValidator sCellularNetworkValidator;

@@ -285,6 +287,11 @@ public class PhoneFactory {

                sNotificationChannelController = new NotificationChannelController(context);

                if (featureFlags.supportNetworkProvider()) {
                    // Create the TelephonyNetworkProvider instance, which is a singleton.
                    sTelephonyNetworkProvider = new TelephonyNetworkProvider(Looper.myLooper(),
                            context, featureFlags);
                } else {
                    for (int i = 0; i < numPhones; i++) {
                        sTelephonyNetworkFactories[i] = new TelephonyNetworkFactory(
                                Looper.myLooper(), sPhones[i], featureFlags);
@@ -292,6 +299,7 @@ public class PhoneFactory {
                }
            }
        }
    }

    /**
     * Upon single SIM to dual SIM switch or vice versa, we dynamically allocate or de-allocate
@@ -312,7 +320,10 @@ public class PhoneFactory {

            sPhones = copyOf(sPhones, activeModemCount);
            sCommandsInterfaces = copyOf(sCommandsInterfaces, activeModemCount);

            if (!sFeatureFlags.supportNetworkProvider()) {
                sTelephonyNetworkFactories = copyOf(sTelephonyNetworkFactories, activeModemCount);
            }

            int cdmaSubscription = CdmaSubscriptionSourceManager.getDefault(context);
            for (int i = prevActiveModemCount; i < activeModemCount; i++) {
@@ -324,11 +335,14 @@ public class PhoneFactory {
                        PackageManager.FEATURE_TELEPHONY_IMS)) {
                    sPhones[i].createImsPhone();
                }

                if (!sFeatureFlags.supportNetworkProvider()) {
                    sTelephonyNetworkFactories[i] = new TelephonyNetworkFactory(
                            Looper.myLooper(), sPhones[i], sFeatureFlags);
                }
            }
        }
    }

    private static Phone createPhone(Context context, int phoneId) {
        int phoneType = TelephonyManager.getPhoneType(RILConstants.PREFERRED_NETWORK_MODE);
@@ -393,6 +407,10 @@ public class PhoneFactory {
        }
    }

    public static TelephonyNetworkProvider getNetworkProvider() {
        return sTelephonyNetworkProvider;
    }

    /**
     * Get the network factory associated with a given phone ID.
     * @param phoneId the phone id
@@ -579,13 +597,22 @@ public class PhoneFactory {
            pw.flush();
            pw.println("++++++++++++++++++++++++++++++++");

            if (!sFeatureFlags.supportNetworkProvider()) {
                sTelephonyNetworkFactories[i].dump(fd, pw, args);
            }

            pw.flush();
            pw.decreaseIndent();
            pw.println("++++++++++++++++++++++++++++++++");
        }

        pw.increaseIndent();
        if (sFeatureFlags.supportNetworkProvider()) {
            sTelephonyNetworkProvider.dump(fd, pw, args);
        }
        pw.decreaseIndent();
        pw.println("++++++++++++++++++++++++++++++++");

        pw.println("UiccController:");
        pw.increaseIndent();
        try {
+1 −1
Original line number Diff line number Diff line
@@ -466,7 +466,7 @@ public class RadioConfig extends Handler {
        RILRequest rr = obtainRequest(RIL_REQUEST_SET_PREFERRED_DATA_MODEM,
                result, mDefaultWorkSource);
        if (DBG) {
            logd(rr.serialString() + "> " + RILUtils.requestToString(rr.mRequest));
            logd(rr.serialString() + "> " + RILUtils.requestToString(rr.mRequest) + " " + modemId);
        }
        try {
            proxy.setPreferredDataModem(rr.mSerial, modemId);
+80 −11
Original line number Diff line number Diff line
@@ -100,6 +100,7 @@ import com.android.internal.telephony.data.DataRetryManager.DataHandoverRetryEnt
import com.android.internal.telephony.data.DataRetryManager.DataRetryEntry;
import com.android.internal.telephony.data.DataSettingsManager.DataSettingsManagerCallback;
import com.android.internal.telephony.data.LinkBandwidthEstimator.LinkBandwidthEstimatorCallback;
import com.android.internal.telephony.data.PhoneSwitcher.PhoneSwitcherCallback;
import com.android.internal.telephony.data.TelephonyNetworkAgent.TelephonyNetworkAgentCallback;
import com.android.internal.telephony.flags.FeatureFlags;
import com.android.internal.telephony.metrics.DataCallSessionStats;
@@ -271,6 +272,9 @@ public class DataNetwork extends StateMachine {
    /** Event for response to data network validation request. */
    private static final int EVENT_DATA_NETWORK_VALIDATION_RESPONSE = 29;

    /** Event for preferred data subscription changed. */
    private static final int EVENT_PREFERRED_DATA_SUBSCRIPTION_CHANGED = 30;

    /** Invalid context id. */
    private static final int INVALID_CID = -1;

@@ -591,6 +595,10 @@ public class DataNetwork extends StateMachine {
    @NonNull
    private final DataNetworkController mDataNetworkController;

    /** Phone switcher which is responsible to determine which phone to route network request. */
    @NonNull
    private final PhoneSwitcher mPhoneSwitcher;

    /** Data network controller callback. */
    @NonNull
    private final DataNetworkController.DataNetworkControllerCallback
@@ -676,6 +684,13 @@ public class DataNetwork extends StateMachine {
    /** Whether the current data network is congested. */
    private boolean mCongested = false;

    /**
     * Whether the current data network is on preferred data modem.
     *
     * @see PhoneSwitcher#getPreferredDataPhoneId()
     */
    private boolean mOnPreferredDataPhone;

    /** The network requests associated with this data network */
    @NonNull
    private final NetworkRequestList mAttachedNetworkRequestList =
@@ -814,6 +829,12 @@ public class DataNetwork extends StateMachine {
    @Nullable
    private PreciseDataConnectionState mPreciseDataConnectionState;

    /**
     * Callback to listen event from {@link PhoneSwitcher}.
     */
    @NonNull
    private PhoneSwitcherCallback mPhoneSwitcherCallback;

    /**
     * The network bandwidth.
     */
@@ -1027,6 +1048,8 @@ public class DataNetwork extends StateMachine {
        mAccessNetworksManager = phone.getAccessNetworksManager();
        mVcnManager = mPhone.getContext().getSystemService(VcnManager.class);
        mDataNetworkController = phone.getDataNetworkController();
        mPhoneSwitcher = PhoneSwitcher.getInstance();
        mOnPreferredDataPhone = phone.getPhoneId() == mPhoneSwitcher.getPreferredDataPhoneId();
        mDataNetworkControllerCallback = new DataNetworkController.DataNetworkControllerCallback(
                getHandler()::post) {
            @Override
@@ -1156,14 +1179,25 @@ public class DataNetwork extends StateMachine {
            configBuilder.setNat64DetectionEnabled(false);
        }

        NetworkProvider provider;
        if (mFlags.supportNetworkProvider()) {
            provider = PhoneFactory.getNetworkProvider();
        } else {
            final NetworkFactory factory = PhoneFactory.getNetworkFactory(
                    mPhone.getPhoneId());
        final NetworkProvider provider = (null == factory) ? null : factory.getProvider();
            provider = (null == factory) ? null : factory.getProvider();
        }

        mNetworkScore = new NetworkScore.Builder()
        NetworkScore.Builder builder = new NetworkScore.Builder()
                .setKeepConnectedReason(isHandoverInProgress()
                        ? NetworkScore.KEEP_CONNECTED_FOR_HANDOVER
                        : NetworkScore.KEEP_CONNECTED_NONE).build();
                        : NetworkScore.KEEP_CONNECTED_NONE);
        if (mFlags.supportNetworkProvider()) {
            builder.setTransportPrimary(mOnPreferredDataPhone);
        }
        mNetworkScore = builder.build();
        logl("mNetworkScore: isPrimary=" + mNetworkScore.isTransportPrimary()
                + ", keepConnectedReason=" + mNetworkScore.getKeepConnectedReason());

        return new TelephonyNetworkAgent(mPhone, getHandler().getLooper(), this,
                mNetworkScore, configBuilder.build(), provider,
@@ -1225,6 +1259,16 @@ public class DataNetwork extends StateMachine {
            mDataNetworkController.getDataSettingsManager()
                    .registerCallback(mDataSettingsManagerCallback);

            if (mFlags.supportNetworkProvider()) {
                mPhoneSwitcherCallback = new PhoneSwitcherCallback(Runnable::run) {
                    @Override
                    public void onPreferredDataPhoneIdChanged(int phoneId) {
                        sendMessage(EVENT_PREFERRED_DATA_SUBSCRIPTION_CHANGED, phoneId, 0);
                    }
                };
                mPhoneSwitcher.registerCallback(mPhoneSwitcherCallback);
            }

            mPhone.getDisplayInfoController().registerForTelephonyDisplayInfoChanged(
                    getHandler(), EVENT_DISPLAY_INFO_CHANGED, null);
            mPhone.getServiceStateTracker().registerForServiceStateChanged(getHandler(),
@@ -1318,6 +1362,9 @@ public class DataNetwork extends StateMachine {
            mPhone.getServiceStateTracker().unregisterForServiceStateChanged(getHandler());
            mPhone.getDisplayInfoController().unregisterForTelephonyDisplayInfoChanged(
                    getHandler());
            if (mFlags.supportNetworkProvider()) {
                mPhoneSwitcher.unregisterCallback(mPhoneSwitcherCallback);
            }
            mDataNetworkController.getDataSettingsManager()
                    .unregisterCallback(mDataSettingsManagerCallback);
            mRil.unregisterForPcoData(getHandler());
@@ -1351,13 +1398,13 @@ public class DataNetwork extends StateMachine {
                }
                case EVENT_ATTACH_NETWORK_REQUEST: {
                    onAttachNetworkRequests((NetworkRequestList) msg.obj);
                    updateNetworkScore(isHandoverInProgress());
                    updateNetworkScore();
                    break;
                }
                case EVENT_DETACH_NETWORK_REQUEST: {
                    onDetachNetworkRequest((TelephonyNetworkRequest) msg.obj,
                            msg.arg1 != 0 /* shouldRetry */);
                    updateNetworkScore(isHandoverInProgress());
                    updateNetworkScore();
                    break;
                }
                case EVENT_DETACH_ALL_NETWORK_REQUESTS: {
@@ -1428,6 +1475,12 @@ public class DataNetwork extends StateMachine {
                    // handle the resultCode in response for the request.
                    handleDataNetworkValidationRequestResultCode(msg.arg1 /* resultCode */);
                    break;
                case EVENT_PREFERRED_DATA_SUBSCRIPTION_CHANGED:
                    mOnPreferredDataPhone = mPhone.getPhoneId() == msg.arg1;
                    logl("Preferred data phone id changed to " + msg.arg1
                            + ", mOnPreferredDataPhone=" + mOnPreferredDataPhone);
                    updateNetworkScore();
                    break;
                default:
                    loge("Unhandled event " + eventToString(msg.what));
                    break;
@@ -3314,6 +3367,12 @@ public class DataNetwork extends StateMachine {
        return mLinkStatus;
    }

    /**
     * Update the network score and report to connectivity service if necessary.
     */
    private void updateNetworkScore() {
        updateNetworkScore(isHandoverInProgress());
    }

    /**
     * Update the network score and report to connectivity service if necessary.
@@ -3323,10 +3382,18 @@ public class DataNetwork extends StateMachine {
    private void updateNetworkScore(boolean keepConnectedForHandover) {
        int connectedReason = keepConnectedForHandover
                ? NetworkScore.KEEP_CONNECTED_FOR_HANDOVER : NetworkScore.KEEP_CONNECTED_NONE;
        if (mNetworkScore.getKeepConnectedReason() != connectedReason) {
            mNetworkScore = new NetworkScore.Builder()
                    .setKeepConnectedReason(connectedReason).build();
        if (mNetworkScore.getKeepConnectedReason() != connectedReason
                || (mFlags.supportNetworkProvider()
                && mNetworkScore.isTransportPrimary() != mOnPreferredDataPhone)) {
            NetworkScore.Builder builder = new NetworkScore.Builder()
                    .setKeepConnectedReason(connectedReason);
            if (mFlags.supportNetworkProvider()) {
                builder.setTransportPrimary(mOnPreferredDataPhone);
            }
            mNetworkScore = builder.build();
            mNetworkAgent.sendNetworkScore(mNetworkScore);
            logl("updateNetworkScore: isPrimary=" + mNetworkScore.isTransportPrimary()
                    + ", keepConnectedForHandover=" + keepConnectedForHandover);
        }
    }

@@ -4055,12 +4122,14 @@ public class DataNetwork extends StateMachine {
        pw.println("Tag: " + name());
        pw.increaseIndent();
        pw.println("mSubId=" + mSubId);
        pw.println("mOnPreferredDataPhone=" + mOnPreferredDataPhone);
        pw.println("mTransport=" + AccessNetworkConstants.transportTypeToString(mTransport));
        pw.println("mLastKnownDataNetworkType=" + TelephonyManager
                .getNetworkTypeName(mLastKnownDataNetworkType));
        pw.println("WWAN cid=" + mCid.get(AccessNetworkConstants.TRANSPORT_TYPE_WWAN));
        pw.println("WLAN cid=" + mCid.get(AccessNetworkConstants.TRANSPORT_TYPE_WLAN));
        pw.println("mNetworkScore=" + mNetworkScore);
        pw.println("keepConnectedReason=" + mNetworkScore.getKeepConnectedReason());
        pw.println("mDataAllowedReason=" + mDataAllowedReason);
        pw.println("mPduSessionId=" + mPduSessionId);
        pw.println("mDataProfile=" + mDataProfile);
+25 −1
Original line number Diff line number Diff line
@@ -2516,6 +2516,30 @@ public class DataNetworkController extends Handler {
    }

    private void onRemoveNetworkRequest(@NonNull TelephonyNetworkRequest request) {
        if (mFeatureFlags.supportNetworkProvider()) {
            if (!mAllNetworkRequestList.remove(request)) {
                loge("onRemoveNetworkRequest: Network request does not exist. " + request);
                return;
            }

            if (request.hasCapability(NetworkCapabilities.NET_CAPABILITY_IMS)) {
                mImsThrottleCounter.addOccurrence();
                mLastReleasedImsRequestCapabilities = request.getCapabilities();
                mLastImsOperationIsRelease = true;
            }

            if (request.getAttachedNetwork() != null) {
                request.getAttachedNetwork().detachNetworkRequest(
                        request, false /* shouldRetry */);
            }

            request.setState(TelephonyNetworkRequest.REQUEST_STATE_UNSATISFIED);
            request.setEvaluation(null);

            log("onRemoveNetworkRequest: Removed " + request);
            return;
        }

        // The request generated from telephony network factory does not contain the information
        // the original request has, for example, attached data network. We need to find the
        // original one.
Loading