am 7cdd26ce: Merge "Enables writing to USIM phonebook (fixes issue 8976)."

Merge commit '7cdd26ce30e61a108e4def932b96aca9f031e5d2' into gingerbread-plus-aosp

* commit '7cdd26ce30e61a108e4def932b96aca9f031e5d2':
  Enables writing to USIM phonebook (fixes issue 8976).
This commit is contained in:
Jean-Baptiste Queru
2010-07-23 17:48:11 -07:00
committed by Android Git Automerger
3 changed files with 45 additions and 2 deletions

View File

@ -186,7 +186,12 @@ public final class AdnRecordCache extends Handler implements IccConstants {
}
ArrayList<AdnRecord> oldAdnList;
oldAdnList = getRecordsIfLoaded(efid);
if (efid == EF_PBR) {
oldAdnList = mUsimPhoneBookManager.loadEfFilesFromUsim();
} else {
oldAdnList = getRecordsIfLoaded(efid);
}
if (oldAdnList == null) {
sendErrorResponse(response, "Adn list not exist for EF:" + efid);
@ -208,6 +213,17 @@ public final class AdnRecordCache extends Handler implements IccConstants {
return;
}
if (efid == EF_PBR) {
AdnRecord foundAdn = oldAdnList.get(index-1);
efid = foundAdn.efid;
extensionEF = foundAdn.extRecord;
index = foundAdn.recordNumber;
newAdn.efid = efid;
newAdn.extRecord = extensionEF;
newAdn.recordNumber = index;
}
Message pendingResponse = userWriteResponse.get(efid);
if (pendingResponse != null) {
@ -331,6 +347,7 @@ public final class AdnRecordCache extends Handler implements IccConstants {
if (ar.exception == null) {
adnLikeFiles.get(efid).set(index - 1, adn);
mUsimPhoneBookManager.invalidateCache();
}
Message response = userWriteResponse.get(efid);

View File

@ -144,6 +144,9 @@ public abstract class IccPhoneBookInterfaceManager extends IIccPhoneBook.Stub {
if (DBG) logd("updateAdnRecordsInEfBySearch: efid=" + efid +
" ("+ oldTag + "," + oldPhoneNumber + ")"+ "==>" +
" ("+ newTag + "," + newPhoneNumber + ")"+ " pin2=" + pin2);
efid = updateEfForIccType(efid);
synchronized(mLock) {
checkThread();
success = false;

View File

@ -53,6 +53,7 @@ public class UsimPhoneBookManager extends Handler implements IccConstants {
private ArrayList<byte[]> mIapFileRecord;
private ArrayList<byte[]> mEmailFileRecord;
private Map<Integer, ArrayList<String>> mEmailsForAdnRec;
private boolean mRefreshCache = false;
private static final int EVENT_PBR_LOAD_DONE = 1;
private static final int EVENT_USIM_ADN_LOAD_DONE = 2;
@ -91,11 +92,19 @@ public class UsimPhoneBookManager extends Handler implements IccConstants {
mEmailFileRecord = null;
mPbrFile = null;
mIsPbrPresent = true;
mRefreshCache = false;
}
public ArrayList<AdnRecord> loadEfFilesFromUsim() {
synchronized (mLock) {
if (!mPhoneBookRecords.isEmpty()) return mPhoneBookRecords;
if (!mPhoneBookRecords.isEmpty()) {
if (mRefreshCache) {
mRefreshCache = false;
refreshCache();
}
return mPhoneBookRecords;
}
if (!mIsPbrPresent) return null;
// Check if the PBR file is present in the cache, if not read it
@ -116,6 +125,20 @@ public class UsimPhoneBookManager extends Handler implements IccConstants {
return mPhoneBookRecords;
}
private void refreshCache() {
if (mPbrFile == null) return;
mPhoneBookRecords.clear();
int numRecs = mPbrFile.mFileIds.size();
for (int i = 0; i < numRecs; i++) {
readAdnFileAndWait(i);
}
}
public void invalidateCache() {
mRefreshCache = true;
}
private void readPbrFileAndWait() {
mPhone.getIccFileHandler().loadEFLinearFixedAll(EF_PBR, obtainMessage(EVENT_PBR_LOAD_DONE));
try {