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

Commit 4daa604e authored by Jack Yu's avatar Jack Yu Committed by Android (Google) Code Review
Browse files

Merge "Revert "Removed old data stack""

parents a0b7575e 8376dfbf
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -182,6 +182,11 @@ public class GsmCdmaCallTracker extends CallTracker {
            mCi.unregisterForCallWaitingInfo(this);
            // Prior to phone switch to GSM, if CDMA has any emergency call
            // data will be in disabled state, after switching to GSM enable data.
            if (mIsInEmergencyCall) {
                if (!mPhone.isUsingNewDataStack()) {
                    mPhone.getDataEnabledSettings().setInternalDataEnabled(true);
                }
            }
        } else {
            mConnections = new GsmCdmaConnection[MAX_CONNECTIONS_CDMA];
            mPendingCallInEcm = false;
@@ -395,6 +400,9 @@ public class GsmCdmaCallTracker extends CallTracker {
    //CDMA
    public void setIsInEmergencyCall() {
        mIsInEmergencyCall = true;
        if (!mPhone.isUsingNewDataStack()) {
            mPhone.getDataEnabledSettings().setInternalDataEnabled(false);
        }
        mPhone.notifyEmergencyCallRegistrants(true);
        mPhone.sendEmergencyCallStateChange(true);
    }
@@ -1751,6 +1759,9 @@ public class GsmCdmaCallTracker extends CallTracker {
            }
            if (!inEcm) {
                // Re-initiate data connection
                if (!mPhone.isUsingNewDataStack()) {
                    mPhone.getDataEnabledSettings().setInternalDataEnabled(true);
                }
                mPhone.notifyEmergencyCallRegistrants(false);
            }
            mPhone.sendEmergencyCallStateChange(false);
+186 −13
Original line number Diff line number Diff line
@@ -67,6 +67,7 @@ import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
import android.telecom.VideoProfile;
import android.telephony.AccessNetworkConstants;
import android.telephony.Annotation.DataActivityType;
import android.telephony.Annotation.RadioPowerState;
import android.telephony.BarringInfo;
@@ -84,6 +85,7 @@ import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.telephony.UiccAccessRule;
import android.telephony.UssdResponse;
import android.telephony.data.ApnSetting;
import android.text.TextUtils;
import android.util.Log;
import android.util.Pair;
@@ -95,6 +97,9 @@ import com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager;
import com.android.internal.telephony.data.AccessNetworksManager;
import com.android.internal.telephony.data.DataNetworkController;
import com.android.internal.telephony.data.LinkBandwidthEstimator;
import com.android.internal.telephony.dataconnection.DataEnabledSettings;
import com.android.internal.telephony.dataconnection.DcTracker;
import com.android.internal.telephony.dataconnection.TransportManager;
import com.android.internal.telephony.emergency.EmergencyNumberTracker;
import com.android.internal.telephony.gsm.GsmMmiCode;
import com.android.internal.telephony.gsm.SsData;
@@ -272,6 +277,8 @@ public class GsmCdmaPhone extends Phone {
    private CarrierKeyDownloadManager mCDM;
    private CarrierInfoManager mCIM;

    private final SettingsObserver mSettingsObserver;

    private final ImsManagerFactory mImsManagerFactory;
    private final CarrierPrivilegesTracker mCarrierPrivilegesTracker;

@@ -316,6 +323,10 @@ public class GsmCdmaPhone extends Phone {
        mAccessNetworksManager = mTelephonyComponentFactory
                .inject(AccessNetworksManager.class.getName())
                .makeAccessNetworksManager(this, getLooper());
        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);
@@ -324,6 +335,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);

@@ -332,9 +347,20 @@ 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 : mAccessNetworksManager.getAvailableTransports()) {
                DcTracker dcTracker = mTelephonyComponentFactory.inject(DcTracker.class.getName())
                        .makeDcTracker(this, transport);
                mDcTrackers.put(transport, dcTracker);
                mAccessNetworksManager.registerDataThrottler(dcTracker.getDataThrottler());
            }
        }

        mCarrierResolver = mTelephonyComponentFactory.inject(CarrierResolver.class.getName())
                .makeCarrierResolver(this);
@@ -347,6 +373,15 @@ public class GsmCdmaPhone extends Phone {
        mSST.registerForNetworkAttached(this, EVENT_REGISTERED_TO_NETWORK, null);
        mSST.registerForVoiceRegStateOrRatChanged(this, EVENT_VRS_OR_RAT_CHANGED, null);

        // TODO: Remove SettingsObserver and provisioning events when DataEnabledSettings is removed
        mSettingsObserver = new SettingsObserver(context, this);
        mSettingsObserver.observe(
                Settings.Global.getUriFor(Settings.Global.DEVICE_PROVISIONED),
                EVENT_DEVICE_PROVISIONED_CHANGE);
        mSettingsObserver.observe(
                Settings.Global.getUriFor(Settings.Global.DEVICE_PROVISIONING_MOBILE_DATA_ENABLED),
                EVENT_DEVICE_PROVISIONING_DATA_SETTING_CHANGE);

        SubscriptionController.getInstance().registerForUiccAppsEnabled(this,
                EVENT_UICC_APPS_ENABLEMENT_SETTING_CHANGED, null, false);

@@ -655,6 +690,11 @@ public class GsmCdmaPhone extends Phone {
        return mCT;
    }

    @Override
    public TransportManager getTransportManager() {
        return mTransportManager;
    }

    @Override
    public AccessNetworksManager getAccessNetworksManager() {
        return mAccessNetworksManager;
@@ -706,10 +746,85 @@ public class GsmCdmaPhone extends Phone {
        return mCT.mState != PhoneConstants.State.IDLE && !mSST.isConcurrentVoiceAndDataAllowed();
    }

    @Override
    public PhoneConstants.DataState getDataConnectionState(String apnType) {
        PhoneConstants.DataState ret = PhoneConstants.DataState.DISCONNECTED;

        if (mSST == null) {
            // Radio Technology Change is ongoing, dispose() and removeReferences() have
            // already been called

            ret = PhoneConstants.DataState.DISCONNECTED;
        } else if (mSST.getCurrentDataConnectionState() != ServiceState.STATE_IN_SERVICE
                && (isPhoneTypeCdma() || isPhoneTypeCdmaLte() ||
                (isPhoneTypeGsm() && !apnType.equals(ApnSetting.TYPE_EMERGENCY_STRING)))) {
            // If we're out of service, open TCP sockets may still work
            // but no data will flow

            // Emergency APN is available even in Out Of Service
            // Pass the actual State of EPDN

            ret = PhoneConstants.DataState.DISCONNECTED;
        } else { /* mSST.gprsState == ServiceState.STATE_IN_SERVICE */
            int currentTransport = mAccessNetworksManager.getCurrentTransport(
                    ApnSetting.getApnTypesBitmaskFromString(apnType));
            if (getDcTracker(currentTransport) != null) {
                switch (getDcTracker(currentTransport).getState(apnType)) {
                    case CONNECTED:
                    case DISCONNECTING:
                        if (isDataSuspended()) {
                            ret = PhoneConstants.DataState.SUSPENDED;
                        } else {
                            ret = PhoneConstants.DataState.CONNECTED;
                        }
                        break;
                    case CONNECTING:
                        ret = PhoneConstants.DataState.CONNECTING;
                        break;
                    default:
                        ret = PhoneConstants.DataState.DISCONNECTED;
                }
            }
        }

        logd("getDataConnectionState apnType=" + apnType + " ret=" + ret);
        return ret;
    }

    @Override
    public @DataActivityType int getDataActivityState() {
        if (isUsingNewDataStack()) {
            return getDataNetworkController().getDataActivity();
        }
        int ret = TelephonyManager.DATA_ACTIVITY_NONE;

        if (mSST.getCurrentDataConnectionState() == ServiceState.STATE_IN_SERVICE
                && getDcTracker(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) != null) {
            switch (getDcTracker(AccessNetworkConstants.TRANSPORT_TYPE_WWAN).getActivity()) {
                case DATAIN:
                    ret = TelephonyManager.DATA_ACTIVITY_IN;
                break;

                case DATAOUT:
                    ret = TelephonyManager.DATA_ACTIVITY_OUT;
                break;

                case DATAINANDOUT:
                    ret = TelephonyManager.DATA_ACTIVITY_INOUT;
                break;

                case DORMANT:
                    ret = TelephonyManager.DATA_ACTIVITY_DORMANT;
                break;

                default:
                    ret = TelephonyManager.DATA_ACTIVITY_NONE;
                break;
            }
        }

        return ret;
    }

    /**
     * Notify any interested party of a Phone state change
@@ -2853,12 +2968,25 @@ public class GsmCdmaPhone extends Phone {

    @Override
    public boolean getDataRoamingEnabled() {
        if (isUsingNewDataStack()) {
            return getDataSettingsManager().isDataRoamingEnabled();
        }
        if (getDcTracker(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) != null) {
            return getDcTracker(AccessNetworkConstants.TRANSPORT_TYPE_WWAN).getDataRoamingEnabled();
        }
        return false;
    }

    @Override
    public void setDataRoamingEnabled(boolean enable) {
        if (isUsingNewDataStack()) {
            getDataSettingsManager().setDataRoamingEnabled(enable);
            return;
        }
        if (getDcTracker(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) != null) {
            getDcTracker(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)
                    .setDataRoamingEnabledByUser(enable);
        }
    }

    @Override
@@ -2903,13 +3031,22 @@ public class GsmCdmaPhone extends Phone {
    }

    /**
     * Whether data is enabled by user.
     * Whether data is enabled by user. Unlike isDataEnabled, this only
     * checks user setting stored in {@link android.provider.Settings.Global#MOBILE_DATA}
     * if not provisioning, or isProvisioningDataEnabled if provisioning.
     */
    @Override
    public boolean isUserDataEnabled() {
        if (isUsingNewDataStack()) {
            return getDataSettingsManager().isDataEnabledForReason(
                    TelephonyManager.DATA_ENABLED_REASON_USER);
        }
        if (mDataEnabledSettings.isProvisioning()) {
            return mDataEnabledSettings.isProvisioningDataEnabled();
        } else {
            return mDataEnabledSettings.isUserDataEnabled();
        }
    }

    /**
     * Removes the given MMI from the pending list and notifies
@@ -3443,9 +3580,24 @@ public class GsmCdmaPhone extends Phone {
            case EVENT_SET_CARRIER_DATA_ENABLED:
                ar = (AsyncResult) msg.obj;
                boolean enabled = (boolean) ar.result;
                if (isUsingNewDataStack()) {
                    getDataSettingsManager().setDataEnabled(
                            TelephonyManager.DATA_ENABLED_REASON_CARRIER, enabled,
                            mContext.getOpPackageName());
                    return;
                }
                mDataEnabledSettings.setDataEnabled(TelephonyManager.DATA_ENABLED_REASON_CARRIER,
                        enabled);
                break;
            case EVENT_DEVICE_PROVISIONED_CHANGE:
                if (!isUsingNewDataStack()) {
                    mDataEnabledSettings.updateProvisionedChanged();
                }
                break;
            case EVENT_DEVICE_PROVISIONING_DATA_SETTING_CHANGE:
                if (!isUsingNewDataStack()) {
                    mDataEnabledSettings.updateProvisioningDataEnabled();
                }
                break;
            case EVENT_GET_AVAILABLE_NETWORKS_DONE:
                ar = (AsyncResult) msg.obj;
@@ -3940,6 +4092,10 @@ public class GsmCdmaPhone extends Phone {

            // send an Intent
            sendEmergencyCallbackModeChange();
            // Re-initiate data connection
            if (!isUsingNewDataStack()) {
                mDataEnabledSettings.setInternalDataEnabled(true);
            }
            notifyEmergencyCallRegistrants(false);
        }
        mIsTestingEmergencyCallbackMode = false;
@@ -4895,8 +5051,25 @@ public class GsmCdmaPhone extends Phone {
     * @return Currently bound data service package names.
     */
    public @NonNull List<String> getDataServicePackages() {
        if (isUsingNewDataStack()) {
            return getDataNetworkController().getDataServicePackages();
        }
        List<String> packages = new ArrayList<>();
        int[] transports = new int[]{AccessNetworkConstants.TRANSPORT_TYPE_WWAN,
                AccessNetworkConstants.TRANSPORT_TYPE_WLAN};

        for (int transport : transports) {
            DcTracker dct = getDcTracker(transport);
            if (dct != null) {
                String pkg = dct.getDataServiceManager().getDataServicePackageName();
                if (!TextUtils.isEmpty(pkg)) {
                    packages.add(pkg);
                }
            }
        }

        return packages;
    }

    private void updateBroadcastEmergencyCallStateChangesAfterCarrierConfigChanged(
            PersistableBundle config) {
+19 −8
Original line number Diff line number Diff line
@@ -850,9 +850,14 @@ public class MultiSimSettingController extends Handler {
                    && phone.isUserDataEnabled()
                    && !areSubscriptionsInSameGroup(defaultDataSub, phone.getSubId())) {
                log("setting data to false on " + phone.getSubId());
                if (phone.isUsingNewDataStack()) {
                    phone.getDataSettingsManager().setDataEnabled(
                            TelephonyManager.DATA_ENABLED_REASON_USER, false,
                            mContext.getOpPackageName());
                } else {
                    phone.getDataEnabledSettings().setDataEnabled(
                            TelephonyManager.DATA_ENABLED_REASON_USER, false);
                }
            }
        }
    }
@@ -888,9 +893,13 @@ public class MultiSimSettingController extends Handler {
                // If enable is true and it's not opportunistic subscription, we don't enable it,
                // as there can't be two
                if (phone != null) {
                    if (phone.isUsingNewDataStack()) {
                        phone.getDataSettingsManager().setDataEnabled(
                                TelephonyManager.DATA_ENABLED_REASON_USER, enable,
                                mContext.getOpPackageName());
                    } else {
                        phone.getDataEnabledSettings().setUserDataEnabled(enable, false);
                    }
                }
            } else {
                // For inactive subscription, directly write into global settings.
@@ -1065,9 +1074,11 @@ public class MultiSimSettingController extends Handler {
        // existing phone instance.
        Phone[] phones = PhoneFactory.getPhones();
        for (int i = mCallbacksCount; i < phones.length; i++) {
            if (phones[i].isUsingNewDataStack()) {
                phones[i].getDataSettingsManager().registerCallback(
                        new DataSettingsControllerCallback(phones[i], this::post));
            }
        }
        mCallbacksCount = phones.length;
    }

+68 −40

File changed.

Preview size limit exceeded, changes collapsed.

+147 −6

File changed.

Preview size limit exceeded, changes collapsed.

Loading