Loading src/java/com/android/internal/telephony/dataconnection/DcTracker.java +59 −28 Original line number Original line Diff line number Diff line Loading @@ -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); } } Loading Loading @@ -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. */ */ Loading Loading @@ -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()); Loading Loading @@ -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; } } Loading Loading
src/java/com/android/internal/telephony/dataconnection/DcTracker.java +59 −28 Original line number Original line Diff line number Diff line Loading @@ -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); } } Loading Loading @@ -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. */ */ Loading Loading @@ -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()); Loading Loading @@ -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; } } Loading