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);
}
/**
* 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
public String toString() {
String radioTechnology = new String("Error in radioTechnology");
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;
}
String radioTechnology = radioTechnologyToString(mRadioTechnology);
return (mState + " " + (mRoaming ? "roaming" : "home")
+ " " + mOperatorAlphaLong

View File

@@ -53,6 +53,12 @@ public abstract class ServiceStateTracker extends Handler {
protected int[] pollingContext;
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
* 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.AsyncResult;
import android.os.Message;
import android.os.SystemProperties;
import android.util.Log;
import android.util.EventLog;
@@ -72,6 +73,7 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
handlePollStateResult(msg.what, ar);
break;
case EVENT_SIM_READY:
if (DBG) log("handleMessage EVENT_SIM_READY");
isSubscriptionFromRuim = false;
cm.getCDMASubscription( obtainMessage(EVENT_POLL_STATE_CDMA_SUBSCRIPTION));
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
protected void pollStateDone() {
// determine data NetworkType from both LET and CDMA SS
@@ -282,13 +251,20 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
(newNetworkType <= ServiceState.RADIO_TECHNOLOGY_EVDO_A));
if (DBG) {
log("pollStateDone: hasRegistered = "
+ hasRegistered + " hasCdmaDataConnectionAttached = "
+ hasCdmaDataConnectionAttached + " hasCdmaDataConnectionChanged = "
+ hasCdmaDataConnectionChanged + " hasNetworkTypeChanged = "
+ hasNetworkTypeChanged + " has4gHandoff = " + has4gHandoff
+ " hasMultiApnSupport = " + hasMultiApnSupport + " hasLostMultiApnSupport = "
+ hasLostMultiApnSupport);
log("pollStateDone:"
+ " hasRegistered=" + hasRegistered
+ " hasDeegistered=" + hasDeregistered
+ " hasCdmaDataConnectionAttached=" + hasCdmaDataConnectionAttached
+ " hasCdmaDataConnectionDetached=" + hasCdmaDataConnectionDetached
+ " hasCdmaDataConnectionChanged=" + hasCdmaDataConnectionChanged
+ " hasNetworkTypeChanged = " + hasNetworkTypeChanged
+ " hasChanged=" + hasChanged
+ " hasRoamingOn=" + hasRoamingOn
+ " hasRoamingOff=" + hasRoamingOff
+ " hasLocationChanged=" + hasLocationChanged
+ " has4gHandoff = " + has4gHandoff
+ " hasMultiApnSupport=" + hasMultiApnSupport
+ " hasLostMultiApnSupport=" + hasLostMultiApnSupport);
}
// Add an event log when connection state changes
if (ss.getState() != newSS.getState()
@@ -316,7 +292,7 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
&& (phone.mDataConnectionTracker instanceof GsmDataConnectionTracker)) {
if (DBG)log("GsmDataConnectionTracker disposed");
phone.mDataConnectionTracker.dispose();
phone.mDataConnectionTracker = new CdmaDataConnectionTracker((CDMAPhone)phone);
phone.mDataConnectionTracker = new CdmaDataConnectionTracker(phone);
}
CdmaCellLocation tcl = cellLoc;
@@ -330,7 +306,7 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
if (hasNetworkTypeChanged) {
phone.setSystemProperty(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE,
networkTypeToString(networkType));
ServiceState.radioTechnologyToString(networkType));
}
if (hasRegistered) {

View File

@@ -253,6 +253,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
switch (msg.what) {
case EVENT_RADIO_AVAILABLE:
if (DBG) log("handleMessage: EVENT_RADIO_AVAILABLE");
break;
case EVENT_RUIM_READY:
@@ -266,7 +267,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
}
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.
pollState();
@@ -280,6 +281,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
// For Non-RUIM phones, the subscription information is stored in
// Non Volatile. Here when Non-Volatile is ready, we can poll the CDMA
// subscription info.
if (DBG) log("handleMessage: EVENT_NV_READY, Send Request getCDMASubscription.");
cm.getCDMASubscription( obtainMessage(EVENT_POLL_STATE_CDMA_SUBSCRIPTION));
pollState();
// 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) {
TimeZone zone = null;
// If the offset is (0, false) and the time zone property
@@ -998,7 +970,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
if (hasNetworkTypeChanged) {
phone.setSystemProperty(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE,
networkTypeToString(networkType));
ServiceState.radioTechnologyToString(networkType));
}
if (hasRegistered) {

View File

@@ -84,12 +84,6 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
private int mReasonDataDenied = -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
* handlePollStateResult to store CREG roaming result.
@@ -629,7 +623,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
}
newGPRSState = regCodeToServiceState(regState);
mDataRoaming = regCodeIsRoaming(regState);
newNetworkType = type;
mNewRadioTechnology = type;
newSS.setRadioTechnology(type);
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() {
if (DBG) {
log("Poll ServiceState done: " +
@@ -789,8 +752,8 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
" mNewMaxDataCalls=" + mNewMaxDataCalls +
" oldReasonDataDenied=" + mReasonDataDenied +
" mNewReasonDataDenied=" + mNewReasonDataDenied +
" oldType=" + networkTypeToString(networkType) +
" newType=" + networkTypeToString(newNetworkType));
" oldType=" + ServiceState.radioTechnologyToString(mRadioTechnology) +
" newType=" + ServiceState.radioTechnologyToString(mNewRadioTechnology));
}
boolean hasRegistered =
@@ -809,7 +772,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
gprsState == ServiceState.STATE_IN_SERVICE
&& newGPRSState != ServiceState.STATE_IN_SERVICE;
boolean hasNetworkTypeChanged = networkType != newNetworkType;
boolean hasRadioTechnologyChanged = mRadioTechnology != mNewRadioTechnology;
boolean hasChanged = !newSS.equals(ss);
@@ -839,30 +802,32 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
// Add an event log when network type switched
// TODO: we may add filtering to reduce the event logged,
// i.e. check preferred network setting, only switch to 2G, etc
if (hasNetworkTypeChanged) {
if (hasRadioTechnologyChanged) {
int cid = -1;
GsmCellLocation loc = ((GsmCellLocation)phone.getCellLocation());
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) {
log("RAT switched " + networkTypeToString(networkType) + " -> "
+ networkTypeToString(newNetworkType) + " at cell " + cid);
log("RAT switched " + ServiceState.radioTechnologyToString(mRadioTechnology) +
" -> " + ServiceState.radioTechnologyToString(mNewRadioTechnology) +
" at cell " + cid);
}
}
gprsState = newGPRSState;
mReasonDataDenied = mNewReasonDataDenied;
mMaxDataCalls = mNewMaxDataCalls;
networkType = newNetworkType;
mRadioTechnology = mNewRadioTechnology;
// 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
if (hasNetworkTypeChanged) {
if (hasRadioTechnologyChanged) {
phone.setSystemProperty(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE,
networkTypeToString(networkType));
ServiceState.radioTechnologyToString(mRadioTechnology));
}
if (hasRegistered) {
@@ -950,7 +915,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
mDetachedRegistrants.notifyRegistrants();
}
if (hasNetworkTypeChanged) {
if (hasRadioTechnologyChanged) {
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.
*/
public boolean isConcurrentVoiceAndDataAllowed() {
return (networkType >= ServiceState.RADIO_TECHNOLOGY_UMTS);
return (mRadioTechnology >= ServiceState.RADIO_TECHNOLOGY_UMTS);
}
/**