Search in sources :

Example 6 with TimelineNativeTypes

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;
}
Also used : ContentValues(android.content.ContentValues) ActivityContact(com.vodafone360.people.datatypes.ActivityContact) ContactSummary(com.vodafone360.people.datatypes.ContactSummary) SQLiteStatement(android.database.sqlite.SQLiteStatement) SQLException(android.database.SQLException) ActivityItem(com.vodafone360.people.datatypes.ActivityItem)

Aggregations

Cursor (android.database.Cursor)5 SQLiteDatabase (android.database.sqlite.SQLiteDatabase)5 TimelineSummaryItem (com.vodafone360.people.database.tables.ActivitiesTable.TimelineSummaryItem)5 ArrayList (java.util.ArrayList)4 Suppress (android.test.suitebuilder.annotation.Suppress)3 TimelineNativeTypes (com.vodafone360.people.database.tables.ActivitiesTable.TimelineNativeTypes)2 ActivityItem (com.vodafone360.people.datatypes.ActivityItem)2 ContentValues (android.content.ContentValues)1 SQLException (android.database.SQLException)1 SQLiteStatement (android.database.sqlite.SQLiteStatement)1 ActivityContact (com.vodafone360.people.datatypes.ActivityContact)1 ContactSummary (com.vodafone360.people.datatypes.ContactSummary)1