/** * Replace oldAdn with newAdn in ADN-like record in EF * * <p>getAdnRecordsInEf must be called at least once before this function, otherwise an error will * be returned. Currently the email field if set in the ADN record is ignored. throws * SecurityException if no WRITE_CONTACTS permission * * @param efid must be one among EF_ADN, EF_FDN, and EF_SDN * @param oldTag adn tag to be replaced * @param oldPhoneNumber adn number to be replaced Set both oldTag and oldPhoneNubmer to "" means * to replace an empty record, aka, insert new record * @param newTag adn tag to be stored * @param newPhoneNumber adn number ot be stored Set both newTag and newPhoneNubmer to "" means to * replace the old record with empty one, aka, delete old record * @param pin2 required to update EF_FDN, otherwise must be null * @return true for success */ public boolean updateAdnRecordsInEfBySearch( int efid, String oldTag, String oldPhoneNumber, String newTag, String newPhoneNumber, String pin2) { if (phone.getContext().checkCallingOrSelfPermission(android.Manifest.permission.WRITE_CONTACTS) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("Requires android.permission.WRITE_CONTACTS permission"); } if (DBG) logd( "updateAdnRecordsInEfBySearch: efid=" + efid + " (" + oldTag + "," + oldPhoneNumber + ")" + "==>" + " (" + newTag + "," + newPhoneNumber + ")" + " pin2=" + pin2); efid = updateEfForIccType(efid); synchronized (mLock) { checkThread(); success = false; Message response = mBaseHandler.obtainMessage(EVENT_UPDATE_DONE); AdnRecord oldAdn = new AdnRecord(oldTag, oldPhoneNumber); AdnRecord newAdn = new AdnRecord(newTag, newPhoneNumber); adnCache.updateAdnBySearch(efid, oldAdn, newAdn, pin2, response); try { mLock.wait(); } catch (InterruptedException e) { logd("interrupted while trying to update by search"); } } return success; }
/** * Loads the AdnRecords in efid and returns them as a List of AdnRecords * * <p>throws SecurityException if no READ_CONTACTS permission * * @param efid the EF id of a ADN-like ICC * @return List of AdnRecord */ public List<AdnRecord> getAdnRecordsInEf(int efid) { if (phone.getContext().checkCallingOrSelfPermission(android.Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("Requires android.permission.READ_CONTACTS permission"); } efid = updateEfForIccType(efid); if (DBG) logd("getAdnRecordsInEF: efid=" + efid); synchronized (mLock) { checkThread(); Message response = mBaseHandler.obtainMessage(EVENT_LOAD_DONE); adnCache.requestLoadAllAdnLike(efid, adnCache.extensionEfForEf(efid), response); try { mLock.wait(); } catch (InterruptedException e) { logd("interrupted while trying to load from the SIM"); } } return records; }