aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/java/com')
-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