Merge "Refactor ServiceStateTracker handling of radio technology." into honeycomb-LTE
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user