summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWink Saville <wink@google.com>2011-06-03 09:06:28 -0700
committerWink Saville <wink@google.com>2011-06-03 09:06:28 -0700
commitdb09b5db60fa05ba65662faa86422b9ec69493a1 (patch)
tree13cd54a478e54b3b5eb1c84ba46c8b9665341d57
parent2e543dc188c3c2e8f8a785e403c95b7e22fa6262 (diff)
downloadframeworks_base-db09b5db60fa05ba65662faa86422b9ec69493a1.zip
frameworks_base-db09b5db60fa05ba65662faa86422b9ec69493a1.tar.gz
frameworks_base-db09b5db60fa05ba65662faa86422b9ec69493a1.tar.bz2
Refactor ServiceStateTracker handling of radio technology.
Also add a little more debugging. Change-Id: I832872c876b290a3e83a79068059a21894472a1d
-rw-r--r--telephony/java/android/telephony/ServiceState.java123
-rw-r--r--telephony/java/com/android/internal/telephony/ServiceStateTracker.java6
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java60
-rwxr-xr-xtelephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java36
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java67
5 files changed, 113 insertions, 179 deletions
diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java
index 2aa6d1d..fce7cdc 100644
--- a/telephony/java/android/telephony/ServiceState.java
+++ b/telephony/java/android/telephony/ServiceState.java
@@ -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
diff --git a/telephony/java/com/android/internal/telephony/ServiceStateTracker.java b/telephony/java/com/android/internal/telephony/ServiceStateTracker.java
index 695805c..01b807d 100644
--- a/telephony/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -54,6 +54,12 @@ public abstract class ServiceStateTracker extends Handler {
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
* value to true and don't bother polling any more.
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java
index 067139e..7bc7ca2 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java
@@ -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) {
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
index 54bc58a..ead6bca 100755
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
@@ -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) {
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
index dce9a17..a7631cd 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
@@ -85,12 +85,6 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
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);
}
/**