Merge "Refactor ServiceStateTracker handling of radio technology." into honeycomb-LTE

This commit is contained in:
Wink Saville
2011-06-03 10:16:11 -07:00
committed by Android (Google) Code Review
5 changed files with 113 additions and 179 deletions

View File

@@ -387,62 +387,77 @@ public class ServiceState implements Parcelable {
&& mIsEmergencyOnly == s.mIsEmergencyOnly); && mIsEmergencyOnly == s.mIsEmergencyOnly);
} }
/**
* Convert radio technology to String
*
* @param radioTechnology
* @return String representation of the RAT
*
* @hide
*/
public static String radioTechnologyToString(int rt) {
String rtString;
switch(rt) {
case 0:
rtString = "Unknown";
break;
case 1:
rtString = "GPRS";
break;
case 2:
rtString = "EDGE";
break;
case 3:
rtString = "UMTS";
break;
case 4:
rtString = "CDMA-IS95A";
break;
case 5:
rtString = "CDMA-IS95B";
break;
case 6:
rtString = "1xRTT";
break;
case 7:
rtString = "EvDo-rev.0";
break;
case 8:
rtString = "EvDo-rev.A";
break;
case 9:
rtString = "HSDPA";
break;
case 10:
rtString = "HSUPA";
break;
case 11:
rtString = "HSPA";
break;
case 12:
rtString = "EvDo-rev.B";
break;
case 13:
rtString = "eHRPD";
break;
case 14:
rtString = "LTE";
break;
case 15:
rtString = "HSPAP";
break;
default:
rtString = "Unexpected";
Log.w(LOG_TAG, "Unexpected radioTechnology=" + rt);
break;
}
return rtString + ":" + rt;
}
@Override @Override
public String toString() { public String toString() {
String radioTechnology = new String("Error in radioTechnology"); String radioTechnology = radioTechnologyToString(mRadioTechnology);
switch(this.mRadioTechnology) {
case 0:
radioTechnology = "Unknown";
break;
case 1:
radioTechnology = "GPRS";
break;
case 2:
radioTechnology = "EDGE";
break;
case 3:
radioTechnology = "UMTS";
break;
case 4:
radioTechnology = "IS95A";
break;
case 5:
radioTechnology = "IS95B";
break;
case 6:
radioTechnology = "1xRTT";
break;
case 7:
radioTechnology = "EvDo rev. 0";
break;
case 8:
radioTechnology = "EvDo rev. A";
break;
case 9:
radioTechnology = "HSDPA";
break;
case 10:
radioTechnology = "HSUPA";
break;
case 11:
radioTechnology = "HSPA";
break;
case 12:
radioTechnology = "EvDo rev. B";
break;
case 13:
radioTechnology = "eHRPD";
break;
case 14:
radioTechnology = "LTE";
break;
case 15:
radioTechnology = "HSPAP";
break;
default:
Log.w(LOG_TAG, "mRadioTechnology variable out of range.");
break;
}
return (mState + " " + (mRoaming ? "roaming" : "home") return (mState + " " + (mRoaming ? "roaming" : "home")
+ " " + mOperatorAlphaLong + " " + mOperatorAlphaLong

View File

@@ -53,6 +53,12 @@ public abstract class ServiceStateTracker extends Handler {
protected int[] pollingContext; protected int[] pollingContext;
protected boolean mDesiredPowerState; protected boolean mDesiredPowerState;
/**
* Values correspond to ServiceState.RADIO_TECHNOLOGY_ definitions.
*/
protected int mRadioTechnology = 0;
protected int mNewRadioTechnology = 0;
/** /**
* By default, strength polling is enabled. However, if we're * By default, strength polling is enabled. However, if we're
* getting unsolicited signal strength updates from the radio, set * getting unsolicited signal strength updates from the radio, set

View File

@@ -32,6 +32,7 @@ import android.os.Registrant;
import android.os.RegistrantList; import android.os.RegistrantList;
import android.os.AsyncResult; import android.os.AsyncResult;
import android.os.Message; import android.os.Message;
import android.os.SystemProperties;
import android.util.Log; import android.util.Log;
import android.util.EventLog; import android.util.EventLog;
@@ -72,6 +73,7 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
handlePollStateResult(msg.what, ar); handlePollStateResult(msg.what, ar);
break; break;
case EVENT_SIM_READY: case EVENT_SIM_READY:
if (DBG) log("handleMessage EVENT_SIM_READY");
isSubscriptionFromRuim = false; isSubscriptionFromRuim = false;
cm.getCDMASubscription( obtainMessage(EVENT_POLL_STATE_CDMA_SUBSCRIPTION)); cm.getCDMASubscription( obtainMessage(EVENT_POLL_STATE_CDMA_SUBSCRIPTION));
pollState(); pollState();
@@ -186,39 +188,6 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
} }
} }
protected static String networkTypeToString(int type) {
String ret = "unknown";
switch (type) {
case ServiceState.RADIO_TECHNOLOGY_IS95A:
case ServiceState.RADIO_TECHNOLOGY_IS95B:
ret = "CDMA";
break;
case ServiceState.RADIO_TECHNOLOGY_1xRTT:
ret = "CDMA - 1xRTT";
break;
case ServiceState.RADIO_TECHNOLOGY_EVDO_0:
ret = "CDMA - EvDo rev. 0";
break;
case ServiceState.RADIO_TECHNOLOGY_EVDO_A:
ret = "CDMA - EvDo rev. A";
break;
case ServiceState.RADIO_TECHNOLOGY_EVDO_B:
ret = "CDMA - EvDo rev. B";
break;
case ServiceState.RADIO_TECHNOLOGY_LTE:
ret = "LTE";
break;
case ServiceState.RADIO_TECHNOLOGY_EHRPD:
ret = "CDMA - eHRPD";
break;
default:
sloge("networkTypeToString: Wrong network, can not return a string.");
break;
}
return ret;
}
@Override @Override
protected void pollStateDone() { protected void pollStateDone() {
// determine data NetworkType from both LET and CDMA SS // determine data NetworkType from both LET and CDMA SS
@@ -282,13 +251,20 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
(newNetworkType <= ServiceState.RADIO_TECHNOLOGY_EVDO_A)); (newNetworkType <= ServiceState.RADIO_TECHNOLOGY_EVDO_A));
if (DBG) { if (DBG) {
log("pollStateDone: hasRegistered = " log("pollStateDone:"
+ hasRegistered + " hasCdmaDataConnectionAttached = " + " hasRegistered=" + hasRegistered
+ hasCdmaDataConnectionAttached + " hasCdmaDataConnectionChanged = " + " hasDeegistered=" + hasDeregistered
+ hasCdmaDataConnectionChanged + " hasNetworkTypeChanged = " + " hasCdmaDataConnectionAttached=" + hasCdmaDataConnectionAttached
+ hasNetworkTypeChanged + " has4gHandoff = " + has4gHandoff + " hasCdmaDataConnectionDetached=" + hasCdmaDataConnectionDetached
+ " hasMultiApnSupport = " + hasMultiApnSupport + " hasLostMultiApnSupport = " + " hasCdmaDataConnectionChanged=" + hasCdmaDataConnectionChanged
+ hasLostMultiApnSupport); + " hasNetworkTypeChanged = " + hasNetworkTypeChanged
+ " hasChanged=" + hasChanged
+ " hasRoamingOn=" + hasRoamingOn
+ " hasRoamingOff=" + hasRoamingOff
+ " hasLocationChanged=" + hasLocationChanged
+ " has4gHandoff = " + has4gHandoff
+ " hasMultiApnSupport=" + hasMultiApnSupport
+ " hasLostMultiApnSupport=" + hasLostMultiApnSupport);
} }
// Add an event log when connection state changes // Add an event log when connection state changes
if (ss.getState() != newSS.getState() if (ss.getState() != newSS.getState()
@@ -316,7 +292,7 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
&& (phone.mDataConnectionTracker instanceof GsmDataConnectionTracker)) { && (phone.mDataConnectionTracker instanceof GsmDataConnectionTracker)) {
if (DBG)log("GsmDataConnectionTracker disposed"); if (DBG)log("GsmDataConnectionTracker disposed");
phone.mDataConnectionTracker.dispose(); phone.mDataConnectionTracker.dispose();
phone.mDataConnectionTracker = new CdmaDataConnectionTracker((CDMAPhone)phone); phone.mDataConnectionTracker = new CdmaDataConnectionTracker(phone);
} }
CdmaCellLocation tcl = cellLoc; CdmaCellLocation tcl = cellLoc;
@@ -330,7 +306,7 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
if (hasNetworkTypeChanged) { if (hasNetworkTypeChanged) {
phone.setSystemProperty(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE, phone.setSystemProperty(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE,
networkTypeToString(networkType)); ServiceState.radioTechnologyToString(networkType));
} }
if (hasRegistered) { if (hasRegistered) {

View File

@@ -253,6 +253,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
switch (msg.what) { switch (msg.what) {
case EVENT_RADIO_AVAILABLE: case EVENT_RADIO_AVAILABLE:
if (DBG) log("handleMessage: EVENT_RADIO_AVAILABLE");
break; break;
case EVENT_RUIM_READY: case EVENT_RUIM_READY:
@@ -266,7 +267,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
} }
cm.getCDMASubscription(obtainMessage(EVENT_POLL_STATE_CDMA_SUBSCRIPTION)); cm.getCDMASubscription(obtainMessage(EVENT_POLL_STATE_CDMA_SUBSCRIPTION));
if (DBG) log("Receive EVENT_RUIM_READY and Send Request getCDMASubscription."); if (DBG) log("handleMessage: EVENT_RUIM_READY, Send Request getCDMASubscription.");
// Restore the previous network selection. // Restore the previous network selection.
pollState(); pollState();
@@ -280,6 +281,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
// For Non-RUIM phones, the subscription information is stored in // For Non-RUIM phones, the subscription information is stored in
// Non Volatile. Here when Non-Volatile is ready, we can poll the CDMA // Non Volatile. Here when Non-Volatile is ready, we can poll the CDMA
// subscription info. // subscription info.
if (DBG) log("handleMessage: EVENT_NV_READY, Send Request getCDMASubscription.");
cm.getCDMASubscription( obtainMessage(EVENT_POLL_STATE_CDMA_SUBSCRIPTION)); cm.getCDMASubscription( obtainMessage(EVENT_POLL_STATE_CDMA_SUBSCRIPTION));
pollState(); pollState();
// Signal strength polling stops when radio is off. // Signal strength polling stops when radio is off.
@@ -871,36 +873,6 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
} }
} }
protected static String networkTypeToString(int type) {
String ret = "unknown";
switch (type) {
case ServiceState.RADIO_TECHNOLOGY_IS95A:
case ServiceState.RADIO_TECHNOLOGY_IS95B:
ret = "CDMA";
break;
case ServiceState.RADIO_TECHNOLOGY_1xRTT:
ret = "CDMA - 1xRTT";
break;
case ServiceState.RADIO_TECHNOLOGY_EVDO_0:
ret = "CDMA - EvDo rev. 0";
break;
case ServiceState.RADIO_TECHNOLOGY_EVDO_A:
ret = "CDMA - EvDo rev. A";
break;
case ServiceState.RADIO_TECHNOLOGY_EVDO_B:
ret = "CDMA - EvDo rev. B";
break;
default:
if (DBG) {
slog("Wrong network. Can not return a string.");
}
break;
}
return ret;
}
protected void fixTimeZone(String isoCountryCode) { protected void fixTimeZone(String isoCountryCode) {
TimeZone zone = null; TimeZone zone = null;
// If the offset is (0, false) and the time zone property // If the offset is (0, false) and the time zone property
@@ -998,7 +970,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
if (hasNetworkTypeChanged) { if (hasNetworkTypeChanged) {
phone.setSystemProperty(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE, phone.setSystemProperty(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE,
networkTypeToString(networkType)); ServiceState.radioTechnologyToString(networkType));
} }
if (hasRegistered) { if (hasRegistered) {

View File

@@ -84,12 +84,6 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
private int mReasonDataDenied = -1; private int mReasonDataDenied = -1;
private int mNewReasonDataDenied = -1; private int mNewReasonDataDenied = -1;
/**
* Values correspond to ServiceState.RADIO_TECHNOLOGY_ definitions.
*/
private int networkType = 0;
private int newNetworkType = 0;
/** /**
* GSM roaming status solely based on TS 27.007 7.2 CREG. Only used by * GSM roaming status solely based on TS 27.007 7.2 CREG. Only used by
* handlePollStateResult to store CREG roaming result. * handlePollStateResult to store CREG roaming result.
@@ -629,7 +623,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
} }
newGPRSState = regCodeToServiceState(regState); newGPRSState = regCodeToServiceState(regState);
mDataRoaming = regCodeIsRoaming(regState); mDataRoaming = regCodeIsRoaming(regState);
newNetworkType = type; mNewRadioTechnology = type;
newSS.setRadioTechnology(type); newSS.setRadioTechnology(type);
break; break;
@@ -749,37 +743,6 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
} }
} }
private static String networkTypeToString(int type) {
//Network Type from GPRS_REGISTRATION_STATE
String ret = "unknown";
switch (type) {
case ServiceState.RADIO_TECHNOLOGY_GPRS:
ret = "GPRS";
break;
case ServiceState.RADIO_TECHNOLOGY_EDGE:
ret = "EDGE";
break;
case ServiceState.RADIO_TECHNOLOGY_UMTS:
ret = "UMTS";
break;
case ServiceState.RADIO_TECHNOLOGY_HSDPA:
ret = "HSDPA";
break;
case ServiceState.RADIO_TECHNOLOGY_HSUPA:
ret = "HSUPA";
break;
case ServiceState.RADIO_TECHNOLOGY_HSPA:
ret = "HSPA";
break;
default:
sloge("Wrong network type: " + Integer.toString(type));
break;
}
return ret;
}
private void pollStateDone() { private void pollStateDone() {
if (DBG) { if (DBG) {
log("Poll ServiceState done: " + log("Poll ServiceState done: " +
@@ -789,8 +752,8 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
" mNewMaxDataCalls=" + mNewMaxDataCalls + " mNewMaxDataCalls=" + mNewMaxDataCalls +
" oldReasonDataDenied=" + mReasonDataDenied + " oldReasonDataDenied=" + mReasonDataDenied +
" mNewReasonDataDenied=" + mNewReasonDataDenied + " mNewReasonDataDenied=" + mNewReasonDataDenied +
" oldType=" + networkTypeToString(networkType) + " oldType=" + ServiceState.radioTechnologyToString(mRadioTechnology) +
" newType=" + networkTypeToString(newNetworkType)); " newType=" + ServiceState.radioTechnologyToString(mNewRadioTechnology));
} }
boolean hasRegistered = boolean hasRegistered =
@@ -809,7 +772,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
gprsState == ServiceState.STATE_IN_SERVICE gprsState == ServiceState.STATE_IN_SERVICE
&& newGPRSState != ServiceState.STATE_IN_SERVICE; && newGPRSState != ServiceState.STATE_IN_SERVICE;
boolean hasNetworkTypeChanged = networkType != newNetworkType; boolean hasRadioTechnologyChanged = mRadioTechnology != mNewRadioTechnology;
boolean hasChanged = !newSS.equals(ss); boolean hasChanged = !newSS.equals(ss);
@@ -839,30 +802,32 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
// Add an event log when network type switched // Add an event log when network type switched
// TODO: we may add filtering to reduce the event logged, // TODO: we may add filtering to reduce the event logged,
// i.e. check preferred network setting, only switch to 2G, etc // i.e. check preferred network setting, only switch to 2G, etc
if (hasNetworkTypeChanged) { if (hasRadioTechnologyChanged) {
int cid = -1; int cid = -1;
GsmCellLocation loc = ((GsmCellLocation)phone.getCellLocation()); GsmCellLocation loc = ((GsmCellLocation)phone.getCellLocation());
if (loc != null) cid = loc.getCid(); if (loc != null) cid = loc.getCid();
EventLog.writeEvent(EventLogTags.GSM_RAT_SWITCHED, cid, networkType, newNetworkType); EventLog.writeEvent(EventLogTags.GSM_RAT_SWITCHED, cid, mRadioTechnology,
mNewRadioTechnology);
if (DBG) { if (DBG) {
log("RAT switched " + networkTypeToString(networkType) + " -> " log("RAT switched " + ServiceState.radioTechnologyToString(mRadioTechnology) +
+ networkTypeToString(newNetworkType) + " at cell " + cid); " -> " + ServiceState.radioTechnologyToString(mNewRadioTechnology) +
" at cell " + cid);
} }
} }
gprsState = newGPRSState; gprsState = newGPRSState;
mReasonDataDenied = mNewReasonDataDenied; mReasonDataDenied = mNewReasonDataDenied;
mMaxDataCalls = mNewMaxDataCalls; mMaxDataCalls = mNewMaxDataCalls;
networkType = newNetworkType; mRadioTechnology = mNewRadioTechnology;
// this new state has been applied - forget it until we get a new new state // this new state has been applied - forget it until we get a new new state
newNetworkType = 0; mNewRadioTechnology = 0;
newSS.setStateOutOfService(); // clean slate for next time newSS.setStateOutOfService(); // clean slate for next time
if (hasNetworkTypeChanged) { if (hasRadioTechnologyChanged) {
phone.setSystemProperty(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE, phone.setSystemProperty(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE,
networkTypeToString(networkType)); ServiceState.radioTechnologyToString(mRadioTechnology));
} }
if (hasRegistered) { if (hasRegistered) {
@@ -950,7 +915,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
mDetachedRegistrants.notifyRegistrants(); mDetachedRegistrants.notifyRegistrants();
} }
if (hasNetworkTypeChanged) { if (hasRadioTechnologyChanged) {
phone.notifyDataConnection(Phone.REASON_NW_TYPE_CHANGED, Phone.APN_TYPE_ALL); phone.notifyDataConnection(Phone.REASON_NW_TYPE_CHANGED, Phone.APN_TYPE_ALL);
} }
@@ -1286,7 +1251,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
* that could support voice and data simultaneously. * that could support voice and data simultaneously.
*/ */
public boolean isConcurrentVoiceAndDataAllowed() { public boolean isConcurrentVoiceAndDataAllowed() {
return (networkType >= ServiceState.RADIO_TECHNOLOGY_UMTS); return (mRadioTechnology >= ServiceState.RADIO_TECHNOLOGY_UMTS);
} }
/** /**