summaryrefslogtreecommitdiffstats
path: root/telephony
diff options
context:
space:
mode:
authorRobert Greenwalt <robdroid@android.com>2011-06-10 15:21:22 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2011-06-10 15:21:22 -0700
commit8b7eede0bc4e11e6f8ddeffa2b349c29c5e47b7e (patch)
tree8029242241de4c0da181ec8986ae13cfdec52f88 /telephony
parentb0e81da4b85b0a6a0c354616e3ff23ea2e666c34 (diff)
parent75612e9c3f92364ba1f0a7fce46f1df11b0a14ca (diff)
downloadframeworks_base-8b7eede0bc4e11e6f8ddeffa2b349c29c5e47b7e.zip
frameworks_base-8b7eede0bc4e11e6f8ddeffa2b349c29c5e47b7e.tar.gz
frameworks_base-8b7eede0bc4e11e6f8ddeffa2b349c29c5e47b7e.tar.bz2
am 75612e9c: am 1ea549e8: Merge "CDMALTE: Get roaming status based on SID/NID" into honeycomb-LTE
* commit '75612e9c3f92364ba1f0a7fce46f1df11b0a14ca': CDMALTE: Get roaming status based on SID/NID
Diffstat (limited to 'telephony')
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java35
-rwxr-xr-xtelephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java6
2 files changed, 36 insertions, 5 deletions
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java
index 318cf37..abd87b8 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java
@@ -125,8 +125,6 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
}
}
- // Not sure if this is needed in CDMALTE phone.
- // mDataRoaming = regCodeIsRoaming(regState);
mLteSS.setRadioTechnology(type);
mLteSS.setState(regCodeToServiceState(regState));
} else {
@@ -212,6 +210,12 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
if (DBG) log("pollStateDone: oldSS=[" + ss + "] newSS=[" + newSS + "]");
+ if (cm.getSimState().isSIMReady()) {
+ // If CSIM is used, check roaming status according to SID/NID
+ // on EFcdmahome record.
+ newSS.setRoaming(!isInHomeSidNid(newSS.getSystemId(), newSS.getNetworkId()));
+ }
+
boolean hasRegistered = ss.getState() != ServiceState.STATE_IN_SERVICE
&& newSS.getState() == ServiceState.STATE_IN_SERVICE;
@@ -464,6 +468,33 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
return provisioningState;
}
+ /**
+ * Check whether the specified SID and NID pair appears in the HOME SID/NID list
+ * read from NV or SIM.
+ *
+ * @return true if provided sid/nid pair belongs to operator's home network.
+ */
+ private boolean isInHomeSidNid(int sid, int nid) {
+ // if SID/NID is not available, do not declare roaming.
+ if (isSidsAllZeros()) return true;
+
+ // length of SID/NID shold be same
+ if (mHomeSystemId.length != mHomeNetworkId.length) return true;
+
+ if (sid == 0) return true;
+
+ for (int i = 0; i < mHomeSystemId.length; i++) {
+ // Use SID only if NID is a reserved value.
+ // SID 0 and NID 0 and 65535 are reserved. (C.0005 2.6.5.2)
+ if ((mHomeSystemId[i] == sid) &&
+ ((mHomeNetworkId[i] == 0) || (mHomeNetworkId[i] == 65535) ||
+ (nid == 0) || (nid == 65535) || (mHomeNetworkId[i] == nid))) {
+ return true;
+ }
+ }
+ return false;
+ }
+
@Override
protected void log(String s) {
Log.d(LOG_TAG, "[CdmaLteSST] " + s);
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
index 5ebdd22..e41985e 100755
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
@@ -130,8 +130,8 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
private String curPlmn = null;
protected String mMdn;
- private int mHomeSystemId[] = null;
- private int mHomeNetworkId[] = null;
+ protected int mHomeSystemId[] = null;
+ protected int mHomeNetworkId[] = null;
protected String mMin;
protected String mPrlVersion;
protected boolean mIsMinInfoReady = false;
@@ -1481,7 +1481,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
}
}
- private boolean isSidsAllZeros() {
+ protected boolean isSidsAllZeros() {
if (mHomeSystemId != null) {
for (int i=0; i < mHomeSystemId.length; i++) {
if (mHomeSystemId[i] != 0) {