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

Commit f149ef74 authored by Junda Liu's avatar Junda Liu Committed by Android (Google) Code Review
Browse files

Merge "resolve merge conflicts of 4e0ad7bd to master"

parents 04d4dd51 277eee77
Loading
Loading
Loading
Loading
+59 −28
Original line number Original line Diff line number Diff line
@@ -312,6 +312,14 @@ public class DcTracker extends Handler {
                    log("WIFI_STATE_CHANGED_ACTION: enabled=" + enabled
                    log("WIFI_STATE_CHANGED_ACTION: enabled=" + enabled
                            + " mIsWifiConnected=" + mIsWifiConnected);
                            + " mIsWifiConnected=" + mIsWifiConnected);
                }
                }
            } else if (action.equals(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)) {
                CarrierConfigManager configMgr = (CarrierConfigManager)
                        mPhone.getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE);
                if (configMgr != null) {
                    PersistableBundle cfg = configMgr.getConfigForSubId(mPhone.getSubId());
                    if (cfg != null) mAllowUserEditTetherApn =
                            cfg.getBoolean(CarrierConfigManager.KEY_EDITABLE_TETHER_APN_BOOL);
                }
            } else {
            } else {
                if (DBG) log("onReceive: Unknown action=" + action);
                if (DBG) log("onReceive: Unknown action=" + action);
            }
            }
@@ -613,6 +621,22 @@ public class DcTracker extends Handler {
     *  undesired network load */
     *  undesired network load */
    private boolean mMeteredApnDisabled = false;
    private boolean mMeteredApnDisabled = false;


    /**
     * int to remember whether has setDataProfiles and with roaming or not.
     * 0: default, has never set data profile
     * 1: has set data profile with home protocol
     * 2: has set data profile with roaming protocol
     * This is not needed once RIL command is updated to support both home and roaming protocol.
     */
    private int mSetDataProfileStatus = 0;

    /**
     * Whether carrier allow user edited tether APN. Updated by carrier config
     * KEY_EDITABLE_TETHER_APN_BOOL
     * If true, APN with dun type from database will be used, see fetchDunApn for details.
     */
    private boolean mAllowUserEditTetherApn = false;

    /**
    /**
     * Handles changes to the APN db.
     * Handles changes to the APN db.
     */
     */
@@ -681,6 +705,7 @@ public class DcTracker extends Handler {
        filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
        filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
        filter.addAction(INTENT_DATA_STALL_ALARM);
        filter.addAction(INTENT_DATA_STALL_ALARM);
        filter.addAction(INTENT_PROVISIONING_APN_ALARM);
        filter.addAction(INTENT_PROVISIONING_APN_ALARM);
        filter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);


        // TODO - redundent with update call below?
        // TODO - redundent with update call below?
        mDataEnabledSettings.setUserDataEnabled(getDataEnabled());
        mDataEnabledSettings.setUserDataEnabled(getDataEnabled());
@@ -1821,50 +1846,56 @@ public class DcTracker extends Handler {
            return null;
            return null;
        }
        }
        int bearer = mPhone.getServiceState().getRilDataRadioTechnology();
        int bearer = mPhone.getServiceState().getRilDataRadioTechnology();
        ApnSetting retDunSetting = null;
        String apnData = Settings.Global.getString(mResolver, Settings.Global.TETHER_DUN_APN);
        List<ApnSetting> dunSettings = ApnSetting.arrayFromString(apnData);
        IccRecords r = mIccRecords.get();
        IccRecords r = mIccRecords.get();
        for (ApnSetting dunSetting : dunSettings) {
        String operator = (r != null) ? r.getOperatorNumeric() : "";
        String operator = (r != null) ? r.getOperatorNumeric() : "";
            if (!ServiceState.bitmaskHasTech(dunSetting.bearerBitmask, bearer)) continue;
        ArrayList<ApnSetting> dunCandidates = new ArrayList<ApnSetting>();
            if (dunSetting.numeric.equals(operator)) {
        ApnSetting retDunSetting = null;
                if (dunSetting.hasMvnoParams()) {

                    if (r != null && ApnSetting.mvnoMatches(r, dunSetting.mvnoType,
        // Places to look for tether APN in order: TETHER_DUN_APN setting, APN database if
                            dunSetting.mvnoMatchData)) {
        // carrier allows it, and config_tether_apndata resource.
                        if (VDBG) {
        String apnData = Settings.Global.getString(mResolver, Settings.Global.TETHER_DUN_APN);
                            log("fetchDunApn: global TETHER_DUN_APN dunSetting=" + dunSetting);
        if (!TextUtils.isEmpty(apnData)) {
            dunCandidates.addAll(ApnSetting.arrayFromString(apnData));
            if (VDBG) log("fetchDunApn: dunCandidates from Setting: " + dunCandidates);
        } else if (mAllowUserEditTetherApn) {
            for (ApnSetting apn : mAllApnSettings) {
                if (apn.canHandleType(PhoneConstants.APN_TYPE_DUN)) {
                    dunCandidates.add(apn);
                }
                }
                        return dunSetting;
            }
            }
                } else if (mMvnoMatched == false) {
            if (VDBG) log("fetchDunApn: dunCandidates from database: " + dunCandidates);
                    if (VDBG) log("fetchDunApn: global TETHER_DUN_APN dunSetting=" + dunSetting);
                    return dunSetting;
        }
        }
        // If TETHER_DUN_APN isn't set or
        // mAllowUserEditTetherApn is true but APN database doesn't have dun APN,
        // try the resource as last resort.
        if (dunCandidates.isEmpty()) {
            String[] apnArrayData = mPhone.getContext().getResources()
                .getStringArray(R.array.config_tether_apndata);
            for (String apnString : apnArrayData) {
                ApnSetting apn = ApnSetting.fromString(apnString);
                // apn may be null if apnString isn't valid or has error parsing
                if (apn != null) dunCandidates.add(apn);
            }
            }
            if (VDBG) log("fetchDunApn: dunCandidates from resource: " + dunCandidates);
        }
        }


        Context c = mPhone.getContext();
        for (ApnSetting dunSetting : dunCandidates) {
        String[] apnArrayData = c.getResources().getStringArray(R.array.config_tether_apndata);
        for (String apn : apnArrayData) {
            ApnSetting dunSetting = ApnSetting.fromString(apn);
            if (dunSetting != null) {
            if (!ServiceState.bitmaskHasTech(dunSetting.bearerBitmask, bearer)) continue;
            if (!ServiceState.bitmaskHasTech(dunSetting.bearerBitmask, bearer)) continue;
            if (dunSetting.numeric.equals(operator)) {
                if (dunSetting.hasMvnoParams()) {
                if (dunSetting.hasMvnoParams()) {
                    if (r != null && ApnSetting.mvnoMatches(r, dunSetting.mvnoType,
                    if (r != null && ApnSetting.mvnoMatches(r, dunSetting.mvnoType,
                            dunSetting.mvnoMatchData)) {
                            dunSetting.mvnoMatchData)) {
                        if (VDBG) {
                        retDunSetting = dunSetting;
                            log("fetchDunApn: config_tether_apndata mvno dunSetting=" + dunSetting);
                        break;
                        }
                        return dunSetting;
                    }
                    }
                } else if (mMvnoMatched == false) {
                } else if (mMvnoMatched == false) {
                    retDunSetting = dunSetting;
                    retDunSetting = dunSetting;
                    break;
                }
                }
            }
            }
        }
        }


        if (VDBG) log("fetchDunApn: config_tether_apndata dunSetting=" + retDunSetting);
        if (VDBG) log("fetchDunApn: dunSetting=" + retDunSetting);
        return retDunSetting;
        return retDunSetting;
    }
    }