From 3fc9055c7f3bc25948f17bc29582abae72fe7de1 Mon Sep 17 00:00:00 2001 From: Kazuhiro Ondo Date: Fri, 3 Jun 2011 22:30:20 -0500 Subject: [PATCH] CDMALTE: Get roaming status based on SID/NID Change-Id: Iec70f2036c1c698331696ff9869bfb057604c637 --- .../telephony/cdma/CdmaLteServiceStateTracker.java | 35 ++++++++++++++++++++-- .../telephony/cdma/CdmaServiceStateTracker.java | 6 ++-- 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 318cf3728f54..abd87b89b5ec 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 5ebdd22e3c7e..e41985ea3978 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) { -- 2.11.0