aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorUmashankar Godachi <umasha@codeaurora.org>2015-10-08 21:16:27 +0530
committerSteve Kondik <steve@cyngn.com>2016-07-02 10:55:01 -0700
commit3139447fe6d7b569563b34c0f4a28188e5560a6d (patch)
tree2dd8f78f6e0c746f70bf33b33dcc805a720ff9fc /src
parent07d7e4536b6f1a15ee6263bfd656bb4afdcf2a18 (diff)
downloadandroid_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')
-rw-r--r--src/java/com/android/internal/telephony/IccPhoneBookInterfaceManager.java15
-rw-r--r--src/java/com/android/internal/telephony/gsm/UsimPhoneBookManager.java6
-rw-r--r--src/java/com/android/internal/telephony/uicc/AdnRecordCache.java4
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