Loading src/java/com/android/internal/telephony/ServiceStateTracker.java +40 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.content.Context; import android.content.IntentFilter; import android.content.SharedPreferences; import android.os.AsyncResult; import android.os.BaseBundle; import android.os.Handler; import android.os.Message; import android.os.Registrant; Loading @@ -28,6 +29,7 @@ import android.os.RegistrantList; import android.os.SystemClock; import android.os.SystemProperties; import android.preference.PreferenceManager; import android.telephony.CarrierConfigManager; import android.telephony.CellInfo; import android.telephony.Rlog; import android.telephony.ServiceState; Loading @@ -45,6 +47,7 @@ import android.content.Context; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.Arrays; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; Loading Loading @@ -1086,4 +1089,41 @@ public abstract class ServiceStateTracker extends Handler { } } } /** * Check if the network identifier has membership in the set of * network identifiers stored in the carrier config bundle. * * @param b a carrier config bundle object * @param network The network identifier to check network existence in bundle * @param key The key to index into the bundle presenting a string array of * networks to check membership * * @return true if network has membership in bundle networks, false otherwise * @see CarrierConfigManager */ private boolean isInNetwork(BaseBundle b, String network, String key) { String[] networks = b.getStringArray(key); if (networks != null && Arrays.asList(networks).contains(network)) { return true; } return false; } protected boolean isRoamingInGsmNetwork(BaseBundle b, String network) { return isInNetwork(b, network, CarrierConfigManager.KEY_GSM_ROAMING_NETWORKS_STRING_ARRAY); } protected boolean isNonRoamingInGsmNetwork(BaseBundle b, String network) { return isInNetwork(b, network, CarrierConfigManager.KEY_GSM_NONROAMING_NETWORKS_STRING_ARRAY); } protected boolean isRoamingInCdmaNetwork(BaseBundle b, String network) { return isInNetwork(b, network, CarrierConfigManager.KEY_CDMA_ROAMING_NETWORKS_STRING_ARRAY); } protected boolean isNonRoamingInCdmaNetwork(BaseBundle b, String network) { return isInNetwork(b, network, CarrierConfigManager.KEY_CDMA_NONROAMING_NETWORKS_STRING_ARRAY); } } src/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java +1 −14 Original line number Diff line number Diff line Loading @@ -310,20 +310,7 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker { protected void pollStateDone() { log("pollStateDone: lte 1 ss=[" + mSS + "] newSS=[" + mNewSS + "]"); if (mPhone.isMccMncMarkedAsNonRoaming(mNewSS.getOperatorNumeric()) || mPhone.isSidMarkedAsNonRoaming(mNewSS.getSystemId())) { log("pollStateDone: override - marked as non-roaming."); mNewSS.setVoiceRoaming(false); mNewSS.setDataRoaming(false); mNewSS.setCdmaEriIconIndex(EriInfo.ROAMING_INDICATOR_OFF); } else if (mPhone.isMccMncMarkedAsRoaming(mNewSS.getOperatorNumeric()) || mPhone.isSidMarkedAsRoaming(mNewSS.getSystemId())) { log("pollStateDone: override - marked as roaming."); mNewSS.setVoiceRoaming(true); mNewSS.setDataRoaming(true); mNewSS.setCdmaEriIconIndex(EriInfo.ROAMING_INDICATOR_ON); mNewSS.setCdmaEriIconMode(EriInfo.ROAMING_ICON_MODE_NORMAL); } updateRoamingState(); if (Build.IS_DEBUGGABLE && SystemProperties.getBoolean(PROP_FORCE_ROAMING, false)) { mNewSS.setVoiceRoaming(true); Loading src/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java +46 −2 Original line number Diff line number Diff line Loading @@ -25,9 +25,12 @@ import android.os.AsyncResult; import android.os.Build; import android.os.Handler; import android.os.Message; import android.os.PersistableBundle; import android.os.PowerManager; import android.os.Registrant; import android.os.RegistrantList; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; import android.os.SystemProperties; import android.os.UserHandle; Loading @@ -49,6 +52,7 @@ import com.android.internal.telephony.CommandException; import com.android.internal.telephony.CommandsInterface; import com.android.internal.telephony.CommandsInterface.RadioState; import com.android.internal.telephony.EventLogTags; import com.android.internal.telephony.ICarrierConfigLoader; import com.android.internal.telephony.MccTable; import com.android.internal.telephony.Phone; import com.android.internal.telephony.PhoneConstants; Loading Loading @@ -1104,9 +1108,42 @@ public class CdmaServiceStateTracker extends ServiceStateTracker { } } protected void pollStateDone() { if (DBG) log("pollStateDone: cdma oldSS=[" + mSS + "] newSS=[" + mNewSS + "]"); /** * Query the carrier configuration to determine if there are any network overrides * for roaming or not roaming for the current service state. */ protected void updateRoamingState() { ICarrierConfigLoader configLoader = (ICarrierConfigLoader) ServiceManager.getService(Context.CARRIER_CONFIG_SERVICE); if (configLoader != null) { try { PersistableBundle b = configLoader.getConfigForSubId(mPhone.getSubId()); String systemId = Integer.toString(mNewSS.getSystemId()); if (isNonRoamingInGsmNetwork(b, mNewSS.getOperatorNumeric()) || isNonRoamingInCdmaNetwork(b, systemId)) { log("updateRoamingState: carrier config override set non-roaming:" + mNewSS.getOperatorNumeric() + ", " + systemId); mNewSS.setVoiceRoaming(false); mNewSS.setDataRoaming(false); mNewSS.setCdmaEriIconIndex(EriInfo.ROAMING_INDICATOR_OFF); } else if (isRoamingInGsmNetwork(b, mNewSS.getOperatorNumeric()) || isRoamingInCdmaNetwork(b, systemId)) { log("updateRoamingState: carrier config override set roaming:" + mNewSS.getOperatorNumeric() + ", " + systemId); mNewSS.setVoiceRoaming(true); mNewSS.setDataRoaming(true); mNewSS.setCdmaEriIconIndex(EriInfo.ROAMING_INDICATOR_ON); mNewSS.setCdmaEriIconMode(EriInfo.ROAMING_ICON_MODE_NORMAL); } } catch (RemoteException e) { loge("updateRoamingState: unable to access carrier config service"); } } else { log("updateRoamingState: no carrier config service available"); } /* NOTE(Deprecated) This roaming override uses a hidden API and is deprecated */ if (mPhone.isMccMncMarkedAsNonRoaming(mNewSS.getOperatorNumeric()) || mPhone.isSidMarkedAsNonRoaming(mNewSS.getSystemId())) { log("pollStateDone: override - marked as non-roaming."); Loading @@ -1121,11 +1158,18 @@ public class CdmaServiceStateTracker extends ServiceStateTracker { mNewSS.setCdmaEriIconIndex(EriInfo.ROAMING_INDICATOR_ON); mNewSS.setCdmaEriIconMode(EriInfo.ROAMING_ICON_MODE_NORMAL); } /* End Deprecated */ if (Build.IS_DEBUGGABLE && SystemProperties.getBoolean(PROP_FORCE_ROAMING, false)) { mNewSS.setVoiceRoaming(true); mNewSS.setDataRoaming(true); } } protected void pollStateDone() { if (DBG) log("pollStateDone: cdma oldSS=[" + mSS + "] newSS=[" + mNewSS + "]"); updateRoamingState(); useDataRegStateForDataOnlyDevices(); Loading src/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java +61 −25 Original line number Diff line number Diff line Loading @@ -31,7 +31,10 @@ import android.os.AsyncResult; import android.os.Build; import android.os.Handler; import android.os.Message; import android.os.PersistableBundle; import android.os.PowerManager; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; import android.os.SystemProperties; import android.os.UserHandle; Loading @@ -57,6 +60,7 @@ import android.util.TimeUtils; import com.android.internal.telephony.CommandException; import com.android.internal.telephony.CommandsInterface; import com.android.internal.telephony.EventLogTags; import com.android.internal.telephony.ICarrierConfigLoader; import com.android.internal.telephony.MccTable; import com.android.internal.telephony.ProxyController; import com.android.internal.telephony.Phone; Loading Loading @@ -840,6 +844,17 @@ final class GsmServiceStateTracker extends ServiceStateTracker { mPollingContext[0]--; if (mPollingContext[0] == 0) { updateRoamingState(); mNewSS.setEmergencyOnly(mEmergencyOnly); pollStateDone(); } } /** * Query the carrier configuration to determine if there any network overrides * for roaming or not roaming for the current service state. */ protected void updateRoamingState() { /** * Since the roaming state of gsm service (from +CREG) and * data service (from +CGREG) could be different, the new SS Loading @@ -859,17 +874,38 @@ final class GsmServiceStateTracker extends ServiceStateTracker { roaming = false; } ICarrierConfigLoader configLoader = (ICarrierConfigLoader) ServiceManager.getService(Context.CARRIER_CONFIG_SERVICE); if (configLoader != null) { try { PersistableBundle b = configLoader.getConfigForSubId(mPhone.getSubId()); if (isNonRoamingInGsmNetwork(b, mNewSS.getOperatorNumeric())) { log("updateRoamingState: carrier config override set non roaming:" + mNewSS.getOperatorNumeric()); roaming = false; } else if (isRoamingInGsmNetwork(b, mNewSS.getOperatorNumeric())) { log("updateRoamingState: carrier config override set roaming:" + mNewSS.getOperatorNumeric()); roaming = true; } } catch (RemoteException e) { loge("updateRoamingState: unable to access carrier config service"); } } else { log("updateRoamingState: no carrier config service available"); } /* NOTE(Deprecated) This roaming override uses a hidden API and is deprecated */ if (mPhone.isMccMncMarkedAsNonRoaming(mNewSS.getOperatorNumeric())) { roaming = false; } else if (mPhone.isMccMncMarkedAsRoaming(mNewSS.getOperatorNumeric())) { roaming = true; } /* End Deprecated */ mNewSS.setVoiceRoaming(roaming); mNewSS.setDataRoaming(roaming); mNewSS.setEmergencyOnly(mEmergencyOnly); pollStateDone(); } } /** Loading Loading
src/java/com/android/internal/telephony/ServiceStateTracker.java +40 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.content.Context; import android.content.IntentFilter; import android.content.SharedPreferences; import android.os.AsyncResult; import android.os.BaseBundle; import android.os.Handler; import android.os.Message; import android.os.Registrant; Loading @@ -28,6 +29,7 @@ import android.os.RegistrantList; import android.os.SystemClock; import android.os.SystemProperties; import android.preference.PreferenceManager; import android.telephony.CarrierConfigManager; import android.telephony.CellInfo; import android.telephony.Rlog; import android.telephony.ServiceState; Loading @@ -45,6 +47,7 @@ import android.content.Context; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.Arrays; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; Loading Loading @@ -1086,4 +1089,41 @@ public abstract class ServiceStateTracker extends Handler { } } } /** * Check if the network identifier has membership in the set of * network identifiers stored in the carrier config bundle. * * @param b a carrier config bundle object * @param network The network identifier to check network existence in bundle * @param key The key to index into the bundle presenting a string array of * networks to check membership * * @return true if network has membership in bundle networks, false otherwise * @see CarrierConfigManager */ private boolean isInNetwork(BaseBundle b, String network, String key) { String[] networks = b.getStringArray(key); if (networks != null && Arrays.asList(networks).contains(network)) { return true; } return false; } protected boolean isRoamingInGsmNetwork(BaseBundle b, String network) { return isInNetwork(b, network, CarrierConfigManager.KEY_GSM_ROAMING_NETWORKS_STRING_ARRAY); } protected boolean isNonRoamingInGsmNetwork(BaseBundle b, String network) { return isInNetwork(b, network, CarrierConfigManager.KEY_GSM_NONROAMING_NETWORKS_STRING_ARRAY); } protected boolean isRoamingInCdmaNetwork(BaseBundle b, String network) { return isInNetwork(b, network, CarrierConfigManager.KEY_CDMA_ROAMING_NETWORKS_STRING_ARRAY); } protected boolean isNonRoamingInCdmaNetwork(BaseBundle b, String network) { return isInNetwork(b, network, CarrierConfigManager.KEY_CDMA_NONROAMING_NETWORKS_STRING_ARRAY); } }
src/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java +1 −14 Original line number Diff line number Diff line Loading @@ -310,20 +310,7 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker { protected void pollStateDone() { log("pollStateDone: lte 1 ss=[" + mSS + "] newSS=[" + mNewSS + "]"); if (mPhone.isMccMncMarkedAsNonRoaming(mNewSS.getOperatorNumeric()) || mPhone.isSidMarkedAsNonRoaming(mNewSS.getSystemId())) { log("pollStateDone: override - marked as non-roaming."); mNewSS.setVoiceRoaming(false); mNewSS.setDataRoaming(false); mNewSS.setCdmaEriIconIndex(EriInfo.ROAMING_INDICATOR_OFF); } else if (mPhone.isMccMncMarkedAsRoaming(mNewSS.getOperatorNumeric()) || mPhone.isSidMarkedAsRoaming(mNewSS.getSystemId())) { log("pollStateDone: override - marked as roaming."); mNewSS.setVoiceRoaming(true); mNewSS.setDataRoaming(true); mNewSS.setCdmaEriIconIndex(EriInfo.ROAMING_INDICATOR_ON); mNewSS.setCdmaEriIconMode(EriInfo.ROAMING_ICON_MODE_NORMAL); } updateRoamingState(); if (Build.IS_DEBUGGABLE && SystemProperties.getBoolean(PROP_FORCE_ROAMING, false)) { mNewSS.setVoiceRoaming(true); Loading
src/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java +46 −2 Original line number Diff line number Diff line Loading @@ -25,9 +25,12 @@ import android.os.AsyncResult; import android.os.Build; import android.os.Handler; import android.os.Message; import android.os.PersistableBundle; import android.os.PowerManager; import android.os.Registrant; import android.os.RegistrantList; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; import android.os.SystemProperties; import android.os.UserHandle; Loading @@ -49,6 +52,7 @@ import com.android.internal.telephony.CommandException; import com.android.internal.telephony.CommandsInterface; import com.android.internal.telephony.CommandsInterface.RadioState; import com.android.internal.telephony.EventLogTags; import com.android.internal.telephony.ICarrierConfigLoader; import com.android.internal.telephony.MccTable; import com.android.internal.telephony.Phone; import com.android.internal.telephony.PhoneConstants; Loading Loading @@ -1104,9 +1108,42 @@ public class CdmaServiceStateTracker extends ServiceStateTracker { } } protected void pollStateDone() { if (DBG) log("pollStateDone: cdma oldSS=[" + mSS + "] newSS=[" + mNewSS + "]"); /** * Query the carrier configuration to determine if there are any network overrides * for roaming or not roaming for the current service state. */ protected void updateRoamingState() { ICarrierConfigLoader configLoader = (ICarrierConfigLoader) ServiceManager.getService(Context.CARRIER_CONFIG_SERVICE); if (configLoader != null) { try { PersistableBundle b = configLoader.getConfigForSubId(mPhone.getSubId()); String systemId = Integer.toString(mNewSS.getSystemId()); if (isNonRoamingInGsmNetwork(b, mNewSS.getOperatorNumeric()) || isNonRoamingInCdmaNetwork(b, systemId)) { log("updateRoamingState: carrier config override set non-roaming:" + mNewSS.getOperatorNumeric() + ", " + systemId); mNewSS.setVoiceRoaming(false); mNewSS.setDataRoaming(false); mNewSS.setCdmaEriIconIndex(EriInfo.ROAMING_INDICATOR_OFF); } else if (isRoamingInGsmNetwork(b, mNewSS.getOperatorNumeric()) || isRoamingInCdmaNetwork(b, systemId)) { log("updateRoamingState: carrier config override set roaming:" + mNewSS.getOperatorNumeric() + ", " + systemId); mNewSS.setVoiceRoaming(true); mNewSS.setDataRoaming(true); mNewSS.setCdmaEriIconIndex(EriInfo.ROAMING_INDICATOR_ON); mNewSS.setCdmaEriIconMode(EriInfo.ROAMING_ICON_MODE_NORMAL); } } catch (RemoteException e) { loge("updateRoamingState: unable to access carrier config service"); } } else { log("updateRoamingState: no carrier config service available"); } /* NOTE(Deprecated) This roaming override uses a hidden API and is deprecated */ if (mPhone.isMccMncMarkedAsNonRoaming(mNewSS.getOperatorNumeric()) || mPhone.isSidMarkedAsNonRoaming(mNewSS.getSystemId())) { log("pollStateDone: override - marked as non-roaming."); Loading @@ -1121,11 +1158,18 @@ public class CdmaServiceStateTracker extends ServiceStateTracker { mNewSS.setCdmaEriIconIndex(EriInfo.ROAMING_INDICATOR_ON); mNewSS.setCdmaEriIconMode(EriInfo.ROAMING_ICON_MODE_NORMAL); } /* End Deprecated */ if (Build.IS_DEBUGGABLE && SystemProperties.getBoolean(PROP_FORCE_ROAMING, false)) { mNewSS.setVoiceRoaming(true); mNewSS.setDataRoaming(true); } } protected void pollStateDone() { if (DBG) log("pollStateDone: cdma oldSS=[" + mSS + "] newSS=[" + mNewSS + "]"); updateRoamingState(); useDataRegStateForDataOnlyDevices(); Loading
src/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java +61 −25 Original line number Diff line number Diff line Loading @@ -31,7 +31,10 @@ import android.os.AsyncResult; import android.os.Build; import android.os.Handler; import android.os.Message; import android.os.PersistableBundle; import android.os.PowerManager; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; import android.os.SystemProperties; import android.os.UserHandle; Loading @@ -57,6 +60,7 @@ import android.util.TimeUtils; import com.android.internal.telephony.CommandException; import com.android.internal.telephony.CommandsInterface; import com.android.internal.telephony.EventLogTags; import com.android.internal.telephony.ICarrierConfigLoader; import com.android.internal.telephony.MccTable; import com.android.internal.telephony.ProxyController; import com.android.internal.telephony.Phone; Loading Loading @@ -840,6 +844,17 @@ final class GsmServiceStateTracker extends ServiceStateTracker { mPollingContext[0]--; if (mPollingContext[0] == 0) { updateRoamingState(); mNewSS.setEmergencyOnly(mEmergencyOnly); pollStateDone(); } } /** * Query the carrier configuration to determine if there any network overrides * for roaming or not roaming for the current service state. */ protected void updateRoamingState() { /** * Since the roaming state of gsm service (from +CREG) and * data service (from +CGREG) could be different, the new SS Loading @@ -859,17 +874,38 @@ final class GsmServiceStateTracker extends ServiceStateTracker { roaming = false; } ICarrierConfigLoader configLoader = (ICarrierConfigLoader) ServiceManager.getService(Context.CARRIER_CONFIG_SERVICE); if (configLoader != null) { try { PersistableBundle b = configLoader.getConfigForSubId(mPhone.getSubId()); if (isNonRoamingInGsmNetwork(b, mNewSS.getOperatorNumeric())) { log("updateRoamingState: carrier config override set non roaming:" + mNewSS.getOperatorNumeric()); roaming = false; } else if (isRoamingInGsmNetwork(b, mNewSS.getOperatorNumeric())) { log("updateRoamingState: carrier config override set roaming:" + mNewSS.getOperatorNumeric()); roaming = true; } } catch (RemoteException e) { loge("updateRoamingState: unable to access carrier config service"); } } else { log("updateRoamingState: no carrier config service available"); } /* NOTE(Deprecated) This roaming override uses a hidden API and is deprecated */ if (mPhone.isMccMncMarkedAsNonRoaming(mNewSS.getOperatorNumeric())) { roaming = false; } else if (mPhone.isMccMncMarkedAsRoaming(mNewSS.getOperatorNumeric())) { roaming = true; } /* End Deprecated */ mNewSS.setVoiceRoaming(roaming); mNewSS.setDataRoaming(roaming); mNewSS.setEmergencyOnly(mEmergencyOnly); pollStateDone(); } } /** Loading