use of com.vodafone360.people.database.tables.ActivitiesTable.TimelineNativeTypes in project 360-Engine-for-Android by 360.
the class ActivitiesTable method addActivities.
/**
* Adds a list of activities to table. The activities added will be grouped
* in the database, based on local contact Id, name or contact address (see
* {@link #removeContactGroup(Long, String, Long, int,
* TimelineNativeTypes[], SQLiteDatabase)}
* for more information on how the grouping works.
*
* @param actList The list of activities
* @param writableDb Writable SQLite database
* @return SUCCESS or a suitable error code
*/
public static ServiceStatus addActivities(final List<ActivityItem> actList, final SQLiteDatabase writableDb, final Context context) {
DatabaseHelper.trace(true, "DatabaseHelper.addActivities()");
SQLiteStatement statement = ContactsTable.fetchLocalFromServerIdStatement(writableDb);
boolean isMeProfileChanged = false;
Long meProfileId = StateTable.fetchMeProfileId(writableDb);
for (ActivityItem activity : actList) {
try {
writableDb.beginTransaction();
if (activity.contactList != null) {
int clistSize = activity.contactList.size();
for (int i = 0; i < clistSize; i++) {
final ActivityContact activityContact = activity.contactList.get(i);
activityContact.mLocalContactId = ContactsTable.fetchLocalFromServerId(activityContact.mContactId, statement);
// Check if me profile status has been modified.
boolean isMeProfile = meProfileId != null && meProfileId.equals(activityContact.mLocalContactId);
// ORing to ensure that the value remains true once set
isMeProfileChanged |= isMeProfile;
if (activityContact.mLocalContactId == null) {
// This is the same on the web but we could use the provided name instead.
continue;
} else {
// Find a more up-to-date name as the names in the Activities are the ones
// from submit time. If they changed in the meantime, this is not reflected
// so we fetch the names from the ContactSummary table.
final ContactSummary contactSummary = new ContactSummary();
if (ContactSummaryTable.fetchSummaryItem(activityContact.mLocalContactId, contactSummary, writableDb) == ServiceStatus.SUCCESS) {
// Me Profile can have empty name
if ((isMeProfile && contactSummary.formattedName != null) || !TextUtils.isEmpty(contactSummary.formattedName)) {
activityContact.mName = contactSummary.formattedName;
}
}
}
int latestStatusVal = removeContactGroup(activityContact.mLocalContactId, activityContact.mName, activity.time, activity.activityFlags, null, writableDb);
ContentValues cv = fillUpdateData(activity, i);
cv.put(Field.LATEST_CONTACT_STATUS.toString(), latestStatusVal);
activity.localActivityId = writableDb.insertOrThrow(TABLE_NAME, null, cv);
}
} else {
activity.localActivityId = writableDb.insertOrThrow(TABLE_NAME, null, fillUpdateData(activity, null));
}
if ((activity.localActivityId != null) && (activity.localActivityId < 0)) {
LogUtils.logE("ActivitiesTable.addActivities() " + "Unable to add activity");
return ServiceStatus.ERROR_DATABASE_CORRUPT;
}
writableDb.setTransactionSuccessful();
} catch (SQLException e) {
LogUtils.logE("ActivitiesTable.addActivities() " + "Unable to add activity", e);
return ServiceStatus.ERROR_DATABASE_CORRUPT;
} finally {
writableDb.endTransaction();
}
}
if (statement != null) {
statement.close();
statement = null;
}
// Update widget if me profile status has been modified.
if (isMeProfileChanged) {
WidgetUtils.kickWidgetUpdateNow(context);
}
return ServiceStatus.SUCCESS;
}
Aggregations