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

Commit 0da44a9e authored by Jack Yu's avatar Jack Yu Committed by Gerrit Code Review
Browse files

Merge "Completely detach old data stack"

parents 39779ee0 d27e45d1
Loading
Loading
Loading
Loading
+22 −20
Original line number Diff line number Diff line
@@ -309,8 +309,10 @@ public class GsmCdmaPhone extends Phone {
        mAccessNetworksManager = mTelephonyComponentFactory
                .inject(AccessNetworksManager.class.getName())
                .makeAccessNetworksManager(this);
        if (!isUsingNewDataStack()) {
            mTransportManager = mTelephonyComponentFactory.inject(TransportManager.class.getName())
                    .makeTransportManager(this);
        }
        // SST/DSM depends on SSC, so SSC is instanced before SST/DSM
        mSignalStrengthController = mTelephonyComponentFactory.inject(
                SignalStrengthController.class.getName()).makeSignalStrengthController(this);
@@ -319,8 +321,10 @@ public class GsmCdmaPhone extends Phone {
        mEmergencyNumberTracker = mTelephonyComponentFactory
                .inject(EmergencyNumberTracker.class.getName()).makeEmergencyNumberTracker(
                        this, this.mCi);
        if (!isUsingNewDataStack()) {
            mDataEnabledSettings = mTelephonyComponentFactory
                    .inject(DataEnabledSettings.class.getName()).makeDataEnabledSettings(this);
        }
        mDeviceStateMonitor = mTelephonyComponentFactory.inject(DeviceStateMonitor.class.getName())
                .makeDeviceStateMonitor(this);

@@ -329,19 +333,19 @@ public class GsmCdmaPhone extends Phone {
        mDisplayInfoController = mTelephonyComponentFactory.inject(
                DisplayInfoController.class.getName()).makeDisplayInfoController(this);

        if (isUsingNewDataStack()) {
            mDataNetworkController = mTelephonyComponentFactory.inject(
                    DataNetworkController.class.getName())
                    .makeDataNetworkController(this, getLooper());
        } else {
            // DcTracker uses ServiceStateTracker and DisplayInfoController so needs to be created
            // after they are instantiated
        for (int transport : mTransportManager.getAvailableTransports()) {
            for (int transport : mAccessNetworksManager.getAvailableTransports()) {
                DcTracker dcTracker = mTelephonyComponentFactory.inject(DcTracker.class.getName())
                        .makeDcTracker(this, transport);
                mDcTrackers.put(transport, dcTracker);
            mTransportManager.registerDataThrottler(dcTracker.getDataThrottler());
                mAccessNetworksManager.registerDataThrottler(dcTracker.getDataThrottler());
            }

        if (isUsingNewDataStack()) {
            mDataNetworkController = mTelephonyComponentFactory.inject(
                    DataNetworkController.class.getName())
                    .makeDataNetworkController(this, getLooper());
        }

        mCarrierResolver = mTelephonyComponentFactory.inject(CarrierResolver.class.getName())
@@ -706,12 +710,6 @@ public class GsmCdmaPhone extends Phone {
        return mPendingMMIs;
    }

    private @NonNull DcTracker getActiveDcTrackerForApn(@NonNull String apnType) {
        int currentTransport = mTransportManager.getCurrentTransport(
                ApnSetting.getApnTypesBitmaskFromString(apnType));
        return getDcTracker(currentTransport);
    }

    @Override
    public boolean isDataSuspended() {
        return mCT.mState != PhoneConstants.State.IDLE && !mSST.isConcurrentVoiceAndDataAllowed();
@@ -737,7 +735,7 @@ public class GsmCdmaPhone extends Phone {

            ret = PhoneConstants.DataState.DISCONNECTED;
        } else { /* mSST.gprsState == ServiceState.STATE_IN_SERVICE */
            int currentTransport = mTransportManager.getCurrentTransport(
            int currentTransport = mAccessNetworksManager.getCurrentTransport(
                    ApnSetting.getApnTypesBitmaskFromString(apnType));
            if (getDcTracker(currentTransport) != null) {
                switch (getDcTracker(currentTransport).getState(apnType)) {
@@ -764,6 +762,10 @@ public class GsmCdmaPhone extends Phone {

    @Override
    public DataActivityState getDataActivityState() {
        if (isUsingNewDataStack()) {
            // TODO: Support it correctly.
            return DataActivityState.NONE;
        }
        DataActivityState ret = DataActivityState.NONE;

        if (mSST.getCurrentDataConnectionState() == ServiceState.STATE_IN_SERVICE
+20 −105
Original line number Diff line number Diff line
@@ -24,8 +24,6 @@ import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.net.LinkProperties;
import android.net.NetworkCapabilities;
import android.net.Uri;
import android.os.AsyncResult;
import android.os.Build;
@@ -51,6 +49,7 @@ import android.telephony.CellInfo;
import android.telephony.ClientRequestStats;
import android.telephony.ImsiEncryptionInfo;
import android.telephony.LinkCapacityEstimate;
import android.telephony.NetworkRegistrationInfo;
import android.telephony.PhoneStateListener;
import android.telephony.PhysicalChannelConfig;
import android.telephony.PreciseDataConnectionState;
@@ -114,7 +113,6 @@ import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -3576,31 +3574,6 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
        mRadioOffOrNotAvailableRegistrants.remove(h);
    }

    /**
     * Returns an array of string identifiers for the APN types serviced by the
     * currently active subscription.
     *
     * @return The string array of APN types. Return null if no active APN types.
     */
    @UnsupportedAppUsage
    @NonNull
    public String[] getActiveApnTypes() {
        if (mTransportManager == null || mDcTrackers == null)  {
            Rlog.e(LOG_TAG, "Invalid state for Transport/DcTrackers");
            return new String[0];
        }

        Set<String> activeApnTypes = new HashSet<String>();
        for (int transportType : mTransportManager.getAvailableTransports()) {
            DcTracker dct = getDcTracker(transportType);
            if (dct == null) continue; // TODO: should this ever happen?
            activeApnTypes.addAll(Arrays.asList(dct.getActiveApnTypes()));
        }

        return activeApnTypes.toArray(new String[activeApnTypes.size()]);
    }


    /**
     *  Location to an updatable file listing carrier provisioning urls.
     *  An example:
@@ -3697,6 +3670,15 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
     * @return true if there is a matching DUN APN.
     */
    public boolean hasMatchedTetherApnSetting() {
        if (isUsingNewDataStack()) {
            NetworkRegistrationInfo nrs = getServiceState().getNetworkRegistrationInfo(
                    NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
            if (nrs != null) {
                return getDataNetworkController().getDataProfileManager()
                        .isTetheringDataProfileExisting(nrs.getAccessNetworkTechnology());
            }
            return false;
        }
        if (getDcTracker(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) != null) {
            return getDcTracker(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)
                    .hasMatchedTetherApnSetting();
@@ -3704,50 +3686,6 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
        return false;
    }

    /**
     * Returns string for the active APN host.
     *  @return type as a string or null if none.
     */
    public String getActiveApnHost(String apnType) {
        if (mTransportManager != null) {
            int transportType = mTransportManager.getCurrentTransport(
                    ApnSetting.getApnTypesBitmaskFromString(apnType));
            if (getDcTracker(transportType) != null) {
                return getDcTracker(transportType).getActiveApnString(apnType);
            }
        }

        return null;
    }

    /**
     * Return the LinkProperties for the named apn or null if not available
     */
    public LinkProperties getLinkProperties(String apnType) {
        if (mTransportManager != null) {
            int transport = mTransportManager.getCurrentTransport(
                    ApnSetting.getApnTypesBitmaskFromString(apnType));
            if (getDcTracker(transport) != null) {
                return getDcTracker(transport).getLinkProperties(apnType);
            }
        }
        return null;
    }

    /**
     * Return the NetworkCapabilities
     */
    public NetworkCapabilities getNetworkCapabilities(String apnType) {
        if (mTransportManager != null) {
            int transportType = mTransportManager.getCurrentTransport(
                    ApnSetting.getApnTypesBitmaskFromString(apnType));
            if (getDcTracker(transportType) != null) {
                return getDcTracker(transportType).getNetworkCapabilities(apnType);
            }
        }
        return null;
    }

    /**
     * Report on whether data connectivity is allowed for given APN type.
     *
@@ -3767,8 +3705,8 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
     * @return True if data is allowed to be established
     */
    public boolean isDataAllowed(@ApnType int apnType, DataConnectionReasons reasons) {
        if (mTransportManager != null) {
            int transport = mTransportManager.getCurrentTransport(apnType);
        if (mAccessNetworksManager != null) {
            int transport = mAccessNetworksManager.getCurrentTransport(apnType);
            if (getDcTracker(transport) != null) {
                return getDcTracker(transport).isDataAllowed(reasons);
            }
@@ -3968,22 +3906,6 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
        return mUiccController.getUiccPort(mPhoneId);
    }

    /**
     * Get P-CSCF address from PCO after data connection is established or modified.
     * @param apnType the apnType, "ims" for IMS APN, "emergency" for EMERGENCY APN
     */
    public String[] getPcscfAddress(String apnType) {
        if (mTransportManager != null) {
            int transportType = mTransportManager.getCurrentTransport(
                    ApnSetting.getApnTypesBitmaskFromString(apnType));
            if (getDcTracker(transportType) != null) {
                return getDcTracker(transportType).getPcscfAddress(apnType);
            }
        }

        return null;
    }

    /**
     * Set IMS registration state
     */
@@ -4574,8 +4496,8 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
     * @return True if all data connections are disconnected.
     */
    public boolean areAllDataDisconnected() {
        if (mTransportManager != null) {
            for (int transport : mTransportManager.getAvailableTransports()) {
        if (mAccessNetworksManager != null) {
            for (int transport : mAccessNetworksManager.getAvailableTransports()) {
                if (getDcTracker(transport) != null
                        && !getDcTracker(transport).areAllDataDisconnected()) {
                    return false;
@@ -4587,8 +4509,8 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {

    public void registerForAllDataDisconnected(Handler h, int what) {
        mAllDataDisconnectedRegistrants.addUnique(h, what, null);
        if (mTransportManager != null) {
            for (int transport : mTransportManager.getAvailableTransports()) {
        if (mAccessNetworksManager != null) {
            for (int transport : mAccessNetworksManager.getAvailableTransports()) {
                if (getDcTracker(transport) != null
                        && !getDcTracker(transport).areAllDataDisconnected()) {
                    getDcTracker(transport).registerForAllDataDisconnected(
@@ -4956,7 +4878,6 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
        pw.println(" getPhoneName()=" + getPhoneName());
        pw.println(" getPhoneType()=" + getPhoneType());
        pw.println(" getVoiceMessageCount()=" + getVoiceMessageCount());
        pw.println(" getActiveApnTypes()=" + getActiveApnTypes());
        pw.println(" needsOtaServiceProvisioning=" + needsOtaServiceProvisioning());
        pw.println(" isInEmergencySmsMode=" + isInEmergencySmsMode());
        pw.println(" isEcmCanceledForEmergency=" + isEcmCanceledForEmergency());
@@ -4976,8 +4897,8 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
            pw.println("++++++++++++++++++++++++++++++++");
        }

        if (mTransportManager != null) {
            for (int transport : mTransportManager.getAvailableTransports()) {
        if (mAccessNetworksManager != null) {
            for (int transport : mAccessNetworksManager.getAvailableTransports()) {
                if (getDcTracker(transport) != null) {
                    getDcTracker(transport).dump(fd, pw, args);
                    pw.flush();
@@ -5096,15 +5017,9 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
            pw.println("++++++++++++++++++++++++++++++++");
        }

        if (isUsingNewDataStack()) {
        if (mAccessNetworksManager != null) {
            mAccessNetworksManager.dump(fd, pw, args);
        }
        } else {
            if (mTransportManager != null) {
                mTransportManager.dump(fd, pw, args);
            }
        }

        if (mCi != null && mCi instanceof RIL) {
            try {
+24 −24
Original line number Diff line number Diff line
@@ -92,10 +92,10 @@ import com.android.internal.telephony.cdma.EriInfo;
import com.android.internal.telephony.cdma.EriManager;
import com.android.internal.telephony.cdnr.CarrierDisplayNameData;
import com.android.internal.telephony.cdnr.CarrierDisplayNameResolver;
import com.android.internal.telephony.data.AccessNetworksManager;
import com.android.internal.telephony.data.DataNetwork;
import com.android.internal.telephony.data.DataNetworkController.DataNetworkControllerCallback;
import com.android.internal.telephony.dataconnection.DataConnection;
import com.android.internal.telephony.dataconnection.TransportManager;
import com.android.internal.telephony.metrics.ServiceStateStats;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppState;
@@ -610,7 +610,7 @@ public class ServiceStateTracker extends Handler {
    private String mRegistrationDeniedReason;
    private String mCurrentCarrier = null;

    private final TransportManager mTransportManager;
    private final AccessNetworksManager mAccessNetworksManager;
    private final SparseArray<NetworkRegistrationManager> mRegStateManagers = new SparseArray<>();

    /* Last known TAC/LAC */
@@ -658,11 +658,11 @@ public class ServiceStateTracker extends Handler {
                new android.os.HandlerExecutor(this), mOnSubscriptionsChangedListener);
        mRestrictedState = new RestrictedState();

        mTransportManager = mPhone.getTransportManager();
        mAccessNetworksManager = mPhone.getAccessNetworksManager();
        mOutOfServiceSS = new ServiceState();
        mOutOfServiceSS.setOutOfService(mTransportManager.isInLegacyMode(), false);
        mOutOfServiceSS.setOutOfService(mAccessNetworksManager.isInLegacyMode(), false);

        for (int transportType : mTransportManager.getAvailableTransports()) {
        for (int transportType : mAccessNetworksManager.getAvailableTransports()) {
            mRegStateManagers.append(transportType, new NetworkRegistrationManager(
                    transportType, phone));
            mRegStateManagers.get(transportType).registerForNetworkRegistrationInfoChanged(
@@ -744,7 +744,7 @@ public class ServiceStateTracker extends Handler {
        }

        // If we are previously in service, we need to notify that we are out of service now.
        for (int transport : mTransportManager.getAvailableTransports()) {
        for (int transport : mAccessNetworksManager.getAvailableTransports()) {
            if (mSS != null) {
                NetworkRegistrationInfo nrs = mSS.getNetworkRegistrationInfo(
                        NetworkRegistrationInfo.DOMAIN_PS, transport);
@@ -756,9 +756,9 @@ public class ServiceStateTracker extends Handler {
        }

        mSS = new ServiceState();
        mSS.setOutOfService(mTransportManager.isInLegacyMode(), false);
        mSS.setOutOfService(mAccessNetworksManager.isInLegacyMode(), false);
        mNewSS = new ServiceState();
        mNewSS.setOutOfService(mTransportManager.isInLegacyMode(), false);
        mNewSS.setOutOfService(mAccessNetworksManager.isInLegacyMode(), false);
        mLastCellInfoReqTime = 0;
        mLastCellInfoList = null;
        mStartedGprsRegCheck = false;
@@ -817,7 +817,7 @@ public class ServiceStateTracker extends Handler {

        // Tell everybody that the registration state and RAT have changed.
        notifyVoiceRegStateRilRadioTechnologyChanged();
        for (int transport : mTransportManager.getAvailableTransports()) {
        for (int transport : mAccessNetworksManager.getAvailableTransports()) {
            notifyDataRegStateRilRadioTechnologyChanged(transport);
        }
    }
@@ -2171,7 +2171,7 @@ public class ServiceStateTracker extends Handler {
                NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN);

        // Check if any APN is preferred on IWLAN.
        boolean isIwlanPreferred = mTransportManager.isAnyApnOnIwlan();
        boolean isIwlanPreferred = mAccessNetworksManager.isAnyApnOnIwlan();
        serviceState.setIwlanPreferred(isIwlanPreferred);
        if (wlanPsRegState != null
                && wlanPsRegState.getAccessNetworkTechnology()
@@ -3322,7 +3322,7 @@ public class ServiceStateTracker extends Handler {

        switch (mCi.getRadioState()) {
            case TelephonyManager.RADIO_POWER_UNAVAILABLE:
                mNewSS.setOutOfService(mTransportManager.isInLegacyMode(), false);
                mNewSS.setOutOfService(mAccessNetworksManager.isInLegacyMode(), false);
                mPhone.getSignalStrengthController().setSignalStrengthDefaultValues();
                mLastNitzData = null;
                mNitzState.handleNetworkUnavailable();
@@ -3330,7 +3330,7 @@ public class ServiceStateTracker extends Handler {
                break;

            case TelephonyManager.RADIO_POWER_OFF:
                mNewSS.setOutOfService(mTransportManager.isInLegacyMode(), true);
                mNewSS.setOutOfService(mAccessNetworksManager.isInLegacyMode(), true);
                mPhone.getSignalStrengthController().setSignalStrengthDefaultValues();
                mLastNitzData = null;
                mNitzState.handleNetworkUnavailable();
@@ -3453,13 +3453,13 @@ public class ServiceStateTracker extends Handler {
                        && mNewSS.getState() != ServiceState.STATE_POWER_OFF;

        SparseBooleanArray hasDataAttached = new SparseBooleanArray(
                mTransportManager.getAvailableTransports().length);
                mAccessNetworksManager.getAvailableTransports().length);
        SparseBooleanArray hasDataDetached = new SparseBooleanArray(
                mTransportManager.getAvailableTransports().length);
                mAccessNetworksManager.getAvailableTransports().length);
        SparseBooleanArray hasRilDataRadioTechnologyChanged = new SparseBooleanArray(
                mTransportManager.getAvailableTransports().length);
                mAccessNetworksManager.getAvailableTransports().length);
        SparseBooleanArray hasDataRegStateChanged = new SparseBooleanArray(
                mTransportManager.getAvailableTransports().length);
                mAccessNetworksManager.getAvailableTransports().length);
        boolean anyDataRegChanged = false;
        boolean anyDataRatChanged = false;
        boolean hasAlphaRawChanged =
@@ -3467,7 +3467,7 @@ public class ServiceStateTracker extends Handler {
                        || !TextUtils.equals(mSS.getOperatorAlphaShortRaw(),
                        mNewSS.getOperatorAlphaShortRaw());

        for (int transport : mTransportManager.getAvailableTransports()) {
        for (int transport : mAccessNetworksManager.getAvailableTransports()) {
            NetworkRegistrationInfo oldNrs = mSS.getNetworkRegistrationInfo(
                    NetworkRegistrationInfo.DOMAIN_PS, transport);
            NetworkRegistrationInfo newNrs = mNewSS.getNetworkRegistrationInfo(
@@ -3653,7 +3653,7 @@ public class ServiceStateTracker extends Handler {
        ServiceState oldMergedSS = new ServiceState(mPhone.getServiceState());
        mSS = new ServiceState(mNewSS);

        mNewSS.setOutOfService(mTransportManager.isInLegacyMode(), false);
        mNewSS.setOutOfService(mAccessNetworksManager.isInLegacyMode(), false);

        mCellIdentity = primaryCellIdentity;
        if (mSS.getState() == ServiceState.STATE_IN_SERVICE && primaryCellIdentity != null) {
@@ -3803,7 +3803,7 @@ public class ServiceStateTracker extends Handler {
            mPhone.getSignalStrengthController().notifySignalStrength();
        }

        for (int transport : mTransportManager.getAvailableTransports()) {
        for (int transport : mAccessNetworksManager.getAvailableTransports()) {
            if (hasRilDataRadioTechnologyChanged.get(transport)) {
                shouldLogRatChange = true;
                mPhone.getSignalStrengthController().notifySignalStrength();
@@ -4994,7 +4994,7 @@ public class ServiceStateTracker extends Handler {
                        || (dds != mPhone.getSubId()
                        && ProxyController.getInstance().areAllDataDisconnected(dds)))) {
                    // To minimize race conditions we do this after isDisconnected
                    for (int transport : mTransportManager.getAvailableTransports()) {
                    for (int transport : mAccessNetworksManager.getAvailableTransports()) {
                        if (mPhone.getDcTracker(transport) != null) {
                            mPhone.getDcTracker(transport).cleanUpAllConnections(
                                    Phone.REASON_RADIO_TURNED_OFF);
@@ -5011,7 +5011,7 @@ public class ServiceStateTracker extends Handler {
                        mPhone.mCT.mBackgroundCall.hangupIfAlive();
                        mPhone.mCT.mForegroundCall.hangupIfAlive();
                    }
                    for (int transport : mTransportManager.getAvailableTransports()) {
                    for (int transport : mAccessNetworksManager.getAvailableTransports()) {
                        if (mPhone.getDcTracker(transport) != null) {
                            mPhone.getDcTracker(transport).cleanUpAllConnections(
                                    Phone.REASON_RADIO_TURNED_OFF);
@@ -5577,7 +5577,7 @@ public class ServiceStateTracker extends Handler {
            }
            // operator info should be kept in SS
            String operator = mNewSS.getOperatorAlphaLong();
            mNewSS.setOutOfService(mTransportManager.isInLegacyMode(), true);
            mNewSS.setOutOfService(mAccessNetworksManager.isInLegacyMode(), true);
            if (resetIwlanRatVal) {
                mNewSS.setDataRegState(ServiceState.STATE_IN_SERVICE);
                NetworkRegistrationInfo nri = new NetworkRegistrationInfo.Builder()
@@ -5587,7 +5587,7 @@ public class ServiceStateTracker extends Handler {
                        .setRegistrationState(NetworkRegistrationInfo.REGISTRATION_STATE_HOME)
                        .build();
                mNewSS.addNetworkRegistrationInfo(nri);
                if (mTransportManager.isInLegacyMode()) {
                if (mAccessNetworksManager.isInLegacyMode()) {
                    // If in legacy mode, simulate the behavior that IWLAN registration info
                    // is reported through WWAN transport.
                    nri = new NetworkRegistrationInfo.Builder()
@@ -5615,7 +5615,7 @@ public class ServiceStateTracker extends Handler {
        // unfortunate limitation we have when the device operates in legacy mode. In AP-assisted
        // mode, the WWAN registration will correctly report the actual cellular registration info
        // when the device camps on IWLAN.
        if (mTransportManager.isInLegacyMode()) {
        if (mAccessNetworksManager.isInLegacyMode()) {
            NetworkRegistrationInfo wwanNri = mNewSS.getNetworkRegistrationInfo(
                    NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
            if (wwanNri != null && wwanNri.getAccessNetworkTechnology()
+15 −46

File changed.

Preview size limit exceeded, changes collapsed.

+1 −1
Original line number Diff line number Diff line
@@ -175,7 +175,7 @@ public class DataServiceManager extends Handler {
    private void revokePermissionsFromUnusedDataServices() {
        // Except the current data services from having their permissions removed.
        Set<String> dataServices = getAllDataServicePackageNames();
        for (int transportType : mPhone.getTransportManager().getAvailableTransports()) {
        for (int transportType : mPhone.getAccessNetworksManager().getAvailableTransports()) {
            dataServices.remove(getDataServicePackageName(transportType));
        }

Loading