am 1ea549e8: Merge "CDMALTE: Get roaming status based on SID/NID" into honeycomb-LTE
* commit '1ea549e8990d2d73ccd9e92db1e7312423ee423e': CDMALTE: Get roaming status based on SID/NID
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user