diff options
Diffstat (limited to 'src/java/com')
3 files changed, 21 insertions, 4 deletions
diff --git a/src/java/com/android/internal/telephony/IccPhoneBookInterfaceManager.java b/src/java/com/android/internal/telephony/IccPhoneBookInterfaceManager.java index b495e6100..085c4e282 100644 --- a/src/java/com/android/internal/telephony/IccPhoneBookInterfaceManager.java +++ b/src/java/com/android/internal/telephony/IccPhoneBookInterfaceManager.java @@ -51,6 +51,7 @@ public abstract class IccPhoneBookInterfaceManager { protected final Object mLock = new Object(); protected int mRecordSize[]; protected boolean mSuccess; + private boolean mForceAdnUsage = false; protected List<AdnRecord> mRecords; @@ -139,6 +140,7 @@ public abstract class IccPhoneBookInterfaceManager { if (mRecords != null) { mRecords.clear(); } + mForceAdnUsage = false; } public void updateIccRecords(IccRecords iccRecords) { @@ -328,13 +330,13 @@ public abstract class IccPhoneBookInterfaceManager { "Requires android.permission.READ_CONTACTS permission"); } - efid = updateEfForIccType(efid); - if (DBG) logd("getAdnRecordsInEF: efid=" + efid); - synchronized(mLock) { checkThread(); AtomicBoolean status = new AtomicBoolean(false); Message response = mBaseHandler.obtainMessage(EVENT_LOAD_DONE, status); + efid = updateEfForIccType(efid); + if (DBG) logd("getAdnRecordsInEF: efid=" + efid); + if (mAdnCache != null) { mAdnCache.requestLoadAllAdnLike(efid, mAdnCache.extensionEfForEf(efid), null, response); @@ -342,6 +344,11 @@ public abstract class IccPhoneBookInterfaceManager { } else { loge("Failure while trying to load from SIM due to uninitialised adncache"); } + if (mRecords == null && efid == IccConstants.EF_PBR && !mAdnCache.isPbrPresent()) { + logd("getAdnRecordsInEF: Load from EF_ADN as pbr is not present"); + mForceAdnUsage = true; + return getAdnRecordsInEf(IccConstants.EF_ADN); + } } return mRecords; } @@ -383,7 +390,7 @@ public abstract class IccPhoneBookInterfaceManager { private int updateEfForIccType(int efid) { // Check if we are trying to read ADN records - if (efid == IccConstants.EF_ADN) { + if (efid == IccConstants.EF_ADN && !mForceAdnUsage) { if (mPhone.getCurrentUiccAppType() == AppType.APPTYPE_USIM || mPhone.getCurrentUiccAppType() == AppType.APPTYPE_CSIM) { return IccConstants.EF_PBR; diff --git a/src/java/com/android/internal/telephony/gsm/UsimPhoneBookManager.java b/src/java/com/android/internal/telephony/gsm/UsimPhoneBookManager.java index b18fdfde0..444ac2d4a 100644 --- a/src/java/com/android/internal/telephony/gsm/UsimPhoneBookManager.java +++ b/src/java/com/android/internal/telephony/gsm/UsimPhoneBookManager.java @@ -149,6 +149,10 @@ public class UsimPhoneBookManager extends Handler implements IccConstants { mRefreshCache = false; } + public boolean isPbrFilePresent() { + return mIsPbrPresent; + } + public ArrayList<AdnRecord> loadEfFilesFromUsim() { synchronized (mLock) { if (!mPhoneBookRecords.isEmpty()) { @@ -953,6 +957,8 @@ public class UsimPhoneBookManager extends Handler implements IccConstants { ar = (AsyncResult) msg.obj; if (ar.exception == null) { createPbrFile((ArrayList<byte[]>) ar.result); + } else { + mIsPbrPresent = false; } synchronized (mLock) { mLock.notify(); diff --git a/src/java/com/android/internal/telephony/uicc/AdnRecordCache.java b/src/java/com/android/internal/telephony/uicc/AdnRecordCache.java index f9c221bef..862368f85 100644 --- a/src/java/com/android/internal/telephony/uicc/AdnRecordCache.java +++ b/src/java/com/android/internal/telephony/uicc/AdnRecordCache.java @@ -355,6 +355,10 @@ public final class AdnRecordCache extends Handler implements IccConstants { useLocalPb ? mUsimLocalPhoneBookManager : mUsimGlobalPhoneBookManager; } + public boolean isPbrPresent() { + return (mUsimGlobalPhoneBookManager.isPbrFilePresent() || + mUsimLocalPhoneBookManager.isPbrFilePresent()); + } /** * Responds with exception (in response) if efid is not a known ADN-like |
