diff options
| author | Umashankar Godachi <umasha@codeaurora.org> | 2015-10-08 21:16:27 +0530 |
|---|---|---|
| committer | Steve Kondik <steve@cyngn.com> | 2016-07-02 10:55:01 -0700 |
| commit | 3139447fe6d7b569563b34c0f4a28188e5560a6d (patch) | |
| tree | 2dd8f78f6e0c746f70bf33b33dcc805a720ff9fc /src | |
| parent | 07d7e4536b6f1a15ee6263bfd656bb4afdcf2a18 (diff) | |
| download | android_frameworks_opt_telephony-3139447fe6d7b569563b34c0f4a28188e5560a6d.tar.gz android_frameworks_opt_telephony-3139447fe6d7b569563b34c0f4a28188e5560a6d.tar.bz2 android_frameworks_opt_telephony-3139447fe6d7b569563b34c0f4a28188e5560a6d.zip | |
FR29338: Read SIM Contacts from EF-ADN if EF-PBR read failed.
Currently on a USIM UICC card, contacts are read from EF-PBR.
If EF-PBR file is absent or the read failed, no contacts displayed.
This requirement will add the support for reading SIM contacts from
EF-ADN, if EF-PBR read failed.
Fix: In IccPhoneBookInterfaceManager, while loading the records check
for EF-PBR present. If EF-PBR is absent, treat the card as 2g and
reload the records from EF-ADN.
Add code to check if EF-PBR is present in UsimPhoneBookManager.
Change-Id: I55ef0541789cd5958da26cd18b070a46d75d78b0
Diffstat (limited to 'src')
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 |
