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

Commit 64886481 authored by Shareef Ali's avatar Shareef Ali Committed by Dan Pasanen
Browse files

Telephony: DcTracker: Fix CDMA APN Data issues.

Fix CDMA data issue when it can't find an APN match. This fixes cases
CDMA NV or RIUM/SIM doesn't have the information to pass on.
It assumes GSM like mode on CDMA. So fix that and pass on to CDMA
stubbed apn found in android 4.2.

Change-Id: Ib4467dd955eb71cbc5781db965d34357b7d4d2d9
parent a687ce11
Loading
Loading
Loading
Loading
+31 −7
Original line number Diff line number Diff line
@@ -757,6 +757,7 @@ public class DcTracker extends DcTrackerBase {
    }

    private boolean trySetupData(ApnContext apnContext) {
        boolean retValue = false;
        if (DBG) {
            log("trySetupData for type:" + apnContext.getDataProfileType() +
                    " due to " + apnContext.getReason() + " apnContext=" + apnContext);
@@ -809,14 +810,16 @@ public class DcTracker extends DcTrackerBase {
            }
            int radioTech = mPhone.getServiceState().getRilDataRadioTechnology();
            if (apnContext.getState() == DctConstants.State.IDLE) {

                ArrayList<DataProfile> waitingDps =
                        buildWaitingApns(apnContext.getDataProfileType(), radioTech);
                if (waitingDps.isEmpty()) {
                    notifyOffApnsOfAvailability(apnContext.getReason());
                    retValue = setupData(apnContext, radioTech);
                    if(!retValue) {
                        notifyNoData(DcFailCause.MISSING_UNKNOWN_APN, apnContext);
                    }
                    notifyOffApnsOfAvailability(apnContext.getReason());
                    if (DBG) log("trySetupData: X No APN found retValue=false");
                    return false;
                    return retValue;
                } else {
                    apnContext.setWaitingDataProfiles(waitingDps);
                    if (DBG) {
@@ -830,7 +833,7 @@ public class DcTracker extends DcTrackerBase {
                log("trySetupData: call setupData, waitingApns : "
                        + apnListToString(apnContext.getWaitingApns()));
            }
            boolean retValue = setupData(apnContext, radioTech);
            retValue = setupData(apnContext, radioTech);
            notifyOffApnsOfAvailability(apnContext.getReason());

            if (DBG) log("trySetupData: X retValue=" + retValue);
@@ -1185,9 +1188,30 @@ public class DcTracker extends DcTrackerBase {
        int profileId = getApnProfileID(apnContext.getDataProfileType());
        apnSetting = apnContext.getNextWaitingApn();
        if (apnSetting == null) {
            if(PhoneConstants.PHONE_TYPE_CDMA==mPhone.getPhoneType()) {
                String[] mDunApnTypes = { PhoneConstants.APN_TYPE_DUN };
                final int mDefaultApnId = DctConstants.APN_DEFAULT_ID;
                final String[] mDefaultApnTypes = {
                    PhoneConstants.APN_TYPE_DEFAULT,
                    PhoneConstants.APN_TYPE_MMS,
                    PhoneConstants.APN_TYPE_HIPRI };
                String[] types;
                int apnId;
                if (mRequestedApnType.equals(PhoneConstants.APN_TYPE_DUN)) {
                    types = mDunApnTypes;
                    apnId = DctConstants.APN_DUN_ID;
                } else {
                    types = mDefaultApnTypes;
                    apnId = mDefaultApnId;
                }
                apnSetting = new ApnSetting(apnId, "", "", "", "", "", "", "", "", "",
                                            "", 0, types, "IP", "IP", true, 0);
                if (DBG) log("setupData: CDMA detected and apnSetting == null, use stubbed CDMA APN setting= " + apnSetting);
            } else {
                if (DBG) log("setupData: return for no apn found!");
                return false;
            }
        }

        dcac = checkForCompatibleConnectedApnContext(apnContext);
        if (dcac != null) {