VCardEntryCommitterpublic class VCardEntryCommitter extends Object implements VCardEntryHandler
{@link VCardEntryHandler} implementation which commits the entry to ContentResolver.
Note:
Each vCard may contain big photo images encoded by BASE64,
If we store all vCard entries in memory, OutOfMemoryError may be thrown.
Thus, this class push each VCard entry into ContentResolver immediately.
|
Fields Summary |
---|
public static String | LOG_TAG | private final android.content.ContentResolver | mContentResolver | private long | mTimeToCommit | private int | mCounter | private ArrayList | mOperationList | private final ArrayList | mCreatedUris |
Methods Summary |
---|
public java.util.ArrayList | getCreatedUris()Returns the list of created Uris. This list should not be modified by the caller as it is
not a clone.
return mCreatedUris;
| public void | onEnd()
if (mOperationList != null) {
mCreatedUris.add(pushIntoContentResolver(mOperationList));
}
if (VCardConfig.showPerformanceLog()) {
Log.d(LOG_TAG, String.format("time to commit entries: %d ms", mTimeToCommit));
}
| public void | onEntryCreated(VCardEntry vcardEntry)
final long start = System.currentTimeMillis();
mOperationList = vcardEntry.constructInsertOperations(mContentResolver, mOperationList);
mCounter++;
if (mCounter >= 20) {
mCreatedUris.add(pushIntoContentResolver(mOperationList));
mCounter = 0;
mOperationList = null;
}
mTimeToCommit += System.currentTimeMillis() - start;
| public void | onStart()
| private android.net.Uri | pushIntoContentResolver(java.util.ArrayList operationList)
try {
final ContentProviderResult[] results = mContentResolver.applyBatch(
ContactsContract.AUTHORITY, operationList);
// the first result is always the raw_contact. return it's uri so
// that it can be found later. do null checking for badly behaving
// ContentResolvers
return ((results == null || results.length == 0 || results[0] == null)
? null : results[0].uri);
} catch (RemoteException e) {
Log.e(LOG_TAG, String.format("%s: %s", e.toString(), e.getMessage()));
return null;
} catch (OperationApplicationException e) {
Log.e(LOG_TAG, String.format("%s: %s", e.toString(), e.getMessage()));
return null;
}
|
|