Search in sources :

Example 16 with ContactSummary

use of com.vodafone360.people.datatypes.ContactSummary in project 360-Engine-for-Android by 360.

the class NowPlusContactsTest method isContactDetailInSummary.

/***
	 * Check if contact detail was added to ContactSummary. 
	 * If contact detail is a name check if it's name in formatted state
	 * is the same as contact summary formatted name. 
	 * @param cd ContactDetail
	 * @return boolean true if ContactDetail is in ContactSummaryTable
	 */
private boolean isContactDetailInSummary(ContactDetail cd) {
    //boolean result = true;
    ContactSummary cs = new ContactSummary();
    SQLiteDatabase db = mDatabaseHelper.getWritableDatabase();
    ServiceStatus status = ContactSummaryTable.fetchSummaryItem(cd.localContactID, cs, db);
    if (status != ServiceStatus.SUCCESS) {
        return false;
    } else if (ContactDetail.DetailKeys.VCARD_NAME == cd.key && !cd.getName().toString().equals(cs.formattedName)) {
        // if ContactDetail name is different then ContactSummary name
        return false;
    } else {
        return true;
    }
}
Also used : ContactSummary(com.vodafone360.people.datatypes.ContactSummary) SQLiteDatabase(android.database.sqlite.SQLiteDatabase) ServiceStatus(com.vodafone360.people.service.ServiceStatus)

Example 17 with ContactSummary

use of com.vodafone360.people.datatypes.ContactSummary 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)

Example 18 with ContactSummary

use of com.vodafone360.people.datatypes.ContactSummary in project 360-Engine-for-Android by 360.

the class DatabaseHelper method updateTimelineAndContactSummaryWithLegacyCode.

/**
     * Updates the Timeline and ContactSummary tables with a new contact. Note:
     * this method assumes that it being called within a transaction
     * 
     * @param contact the contact to take info from
     * @param writableDb the db to use to write the updates
     * @return true if successful, false otherwise
     */
private boolean updateTimelineAndContactSummaryWithLegacyCode(Contact contact, SQLiteDatabase writableDb) {
    if (!contact.details.isEmpty()) {
        final ServiceStatus status = ContactSummaryTable.addContact(contact, writableDb);
        if (ServiceStatus.SUCCESS != status) {
            return false;
        }
    }
    // update the summary with the new contact, pass "false" as Me Profile can't be a native contact
    String displayName = updateContactNameInSummary(writableDb, contact.localContactID, false);
    if (displayName == null) {
        return false;
    }
    for (int i = 0; i < contact.details.size(); i++) {
        final ContactDetail detail = contact.details.get(i);
        // updating timeline
        if (detail.key != ContactDetail.DetailKeys.VCARD_NAME) {
            detail.localContactID = contact.localContactID;
            detail.nativeContactId = contact.nativeContactId;
            updateTimelineNames(detail, displayName, contact.contactID, writableDb);
        }
    }
    return true;
}
Also used : ContactDetail(com.vodafone360.people.datatypes.ContactDetail) ServiceStatus(com.vodafone360.people.service.ServiceStatus)

Example 19 with ContactSummary

use of com.vodafone360.people.datatypes.ContactSummary in project 360-Engine-for-Android by 360.

the class DatabaseHelper method addNativeContact.

/**
     * Adds a native contact to the people database and makes sure that the
     * related tables are updated (Contact, ContactDetail, ContactSummary and
     * Activities).
     * 
     * @param contact the contact to add
     * @return true if successful, false otherwise
     */
public boolean addNativeContact(ContactChange[] contact) {
    if (contact == null || contact.length <= 0)
        return false;
    final SQLiteDatabase wdb = getWritableDatabase();
    try {
        wdb.beginTransaction();
        // add the contact in the Contacts table
        final ContentValues values = ContactsTable.getNativeContentValues(contact[0]);
        final long internalContactId = ContactsTable.addContact(values, wdb);
        if (internalContactId != -1) {
            // sets the newly created internal contact id to all the
            // ContactChange
            setInternalContactId(contact, internalContactId);
            // details
            if (!ContactDetailsTable.addNativeContactDetails(contact, wdb)) {
                return false;
            }
            // from this point, legacy code will be called...
            final Contact legacyContact = convertNativeContactChanges(contact);
            // ...update timeline and contact summary with legacy code...
            if (!updateTimelineAndContactSummaryWithLegacyCode(legacyContact, wdb)) {
                return false;
            }
        } else {
            return false;
        }
        wdb.setTransactionSuccessful();
        return true;
    } catch (Exception e) {
        LogUtils.logE("addNativeContact() - Error:" + e);
    } finally {
        if (wdb != null) {
            wdb.endTransaction();
        }
    }
    return false;
}
Also used : ContentValues(android.content.ContentValues) SQLiteDatabase(android.database.sqlite.SQLiteDatabase) SQLiteException(android.database.sqlite.SQLiteException) FileNotFoundException(java.io.FileNotFoundException) IOException(java.io.IOException) SQLException(android.database.SQLException) Contact(com.vodafone360.people.datatypes.Contact)

Example 20 with ContactSummary

use of com.vodafone360.people.datatypes.ContactSummary in project 360-Engine-for-Android by 360.

the class FetchNativeContactsTest method testRunWithOneNewContact.

@MediumTest
@Suppress
public // Breaks tests
void testRunWithOneNewContact() {
    final String fnName = "testRunWithOneNewContact";
    Log.i(LOG_TAG, "***** EXECUTING " + fnName + " *****");
    mTestStep = 1;
    startSubTest(fnName, "Checking people database is empty");
    Cursor peopleCursor = mDb.openContactSummaryCursor(null, null);
    assertEquals(0, peopleCursor.getCount());
    assertTrue(Settings.ENABLE_UPDATE_NATIVE_CONTACTS);
    startSubTest(fnName, "Checking native database is empty");
    Cursor nativeCursor = mCr.query(People.CONTENT_URI, new String[] { People._ID, People.NAME, People.NOTES }, null, null, null);
    assertEquals(0, nativeCursor.getCount());
    startSubTest(fnName, "Add one dummy native contact");
    ContentValues peopleValues = new ContentValues();
    peopleValues.put(Contacts.People.NAME, ADD_CONTACT_TEST_NAME);
    peopleValues.put(Contacts.People.NOTES, ADD_CONTACT_TEST_NOTE);
    Uri personUri1 = mCr.insert(Contacts.People.CONTENT_URI, peopleValues);
    assertTrue("Unable to insert contact into native people table", personUri1 != null);
    final long personId = ContentUris.parseId(personUri1);
    ContentValues phoneValues = new ContentValues();
    phoneValues.put(Contacts.Phones.PERSON_ID, personId);
    phoneValues.put(Contacts.Phones.NUMBER, ADD_PHONE_TEST1);
    phoneValues.put(Contacts.Phones.TYPE, ADD_PHONE_TYPE_TEST1);
    Uri phoneUri1 = mCr.insert(Contacts.Phones.CONTENT_URI, phoneValues);
    assertTrue("Unable to insert contact into native phone table 1", phoneUri1 != null);
    final long phoneId1 = (int) ContentUris.parseId(phoneUri1);
    phoneValues.put(Contacts.Phones.NUMBER, ADD_PHONE_TEST2);
    phoneValues.put(Contacts.Phones.TYPE, ADD_PHONE_TYPE_TEST2);
    phoneValues.put(Contacts.Phones.ISPRIMARY, 1);
    Uri phoneUri2 = mCr.insert(Contacts.Phones.CONTENT_URI, phoneValues);
    assertTrue("Unable to insert contact into native phone table 2", phoneUri2 != null);
    final long phoneId2 = ContentUris.parseId(phoneUri2);
    phoneValues.put(Contacts.Phones.NUMBER, ADD_PHONE_TEST3);
    phoneValues.put(Contacts.Phones.TYPE, ADD_PHONE_TYPE_TEST3);
    phoneValues.remove(Contacts.Phones.ISPRIMARY);
    Uri phoneUri3 = mCr.insert(Contacts.Phones.CONTENT_URI, phoneValues);
    assertTrue("Unable to insert contact into native phone table 3", phoneUri3 != null);
    final long phoneId3 = ContentUris.parseId(phoneUri3);
    ContentValues cmValues = new ContentValues();
    cmValues.put(Contacts.ContactMethods.PERSON_ID, personId);
    cmValues.put(Contacts.ContactMethods.DATA, ADD_CM_TEST1);
    cmValues.put(Contacts.ContactMethods.TYPE, ADD_CM_TYPE_TEST1);
    cmValues.put(Contacts.ContactMethods.KIND, ADD_CM_KIND_TEST1);
    Uri cmUri1 = mCr.insert(Contacts.ContactMethods.CONTENT_URI, cmValues);
    assertTrue("Unable to insert contact into native contact methods table 1", cmUri1 != null);
    final long cmId1 = ContentUris.parseId(cmUri1);
    cmValues.put(Contacts.ContactMethods.DATA, ADD_CM_TEST2);
    cmValues.put(Contacts.ContactMethods.TYPE, ADD_CM_TYPE_TEST2);
    cmValues.put(Contacts.ContactMethods.KIND, ADD_CM_KIND_TEST2);
    cmValues.put(Contacts.ContactMethods.ISPRIMARY, 1);
    Uri cmUri2 = mCr.insert(Contacts.ContactMethods.CONTENT_URI, cmValues);
    assertTrue("Unable to insert contact into native contact methods table 2", cmUri2 != null);
    final long cmId2 = ContentUris.parseId(cmUri2);
    ContentValues orgValues = new ContentValues();
    orgValues.put(Contacts.Organizations.PERSON_ID, personId);
    orgValues.put(Contacts.Organizations.COMPANY, ADD_ORG_COMPANY_TEST1);
    orgValues.put(Contacts.Organizations.TITLE, ADD_ORG_TITLE_TEST1);
    orgValues.put(Contacts.Organizations.TYPE, ADD_ORG_TYPE_TEST1);
    orgValues.put(Contacts.Organizations.LABEL, ADD_ORG_LABEL_TEST1);
    Uri orgUri = mCr.insert(Contacts.Organizations.CONTENT_URI, orgValues);
    assertTrue("Unable to insert contact into native organizations table 1", orgUri != null);
    final long orgId1 = ContentUris.parseId(orgUri);
    startSubTest(fnName, "Running processor");
    runProcessor();
    startSubTest(fnName, "Checking contact has been synced to people");
    peopleCursor.requery();
    assertEquals(1, peopleCursor.getCount());
    assertTrue(peopleCursor.moveToFirst());
    ContactSummary summary = ContactSummaryTable.getQueryData(peopleCursor);
    assertTrue(summary != null);
    Contact newContact = new Contact();
    ServiceStatus status = mDb.fetchContact(summary.localContactID, newContact);
    assertEquals(ServiceStatus.SUCCESS, status);
    boolean doneName = false;
    boolean doneNickname = false;
    boolean doneNote = false;
    boolean donePhone1 = false;
    boolean donePhone2 = false;
    boolean donePhone3 = false;
    boolean doneCm1 = false;
    boolean doneCm2 = false;
    boolean doneOrg1 = false;
    boolean doneTitle1 = false;
    assertTrue(newContact.synctophone);
    assertEquals(personId, newContact.nativeContactId.longValue());
    assertEquals(personId, summary.nativeContactId.longValue());
    for (ContactDetail detail : newContact.details) {
        assertEquals(personId, detail.nativeContactId.longValue());
        detail.syncNativeContactId = fetchSyncNativeId(detail.localDetailID);
        assertEquals("No sync marker, ID = " + detail.nativeDetailId + ", key = " + detail.key, Integer.valueOf(-1), detail.syncNativeContactId);
        Integer detailId = detail.nativeDetailId;
        assertTrue(detailId != null);
        switch(detail.key) {
            case VCARD_NAME:
                assertEquals(personId, detailId.longValue());
                assertEquals(ADD_CONTACT_TEST_NAME, detail.nativeVal1);
                VCardHelper.Name name = detail.getName();
                assertTrue(name != null);
                assertEquals(ADD_CONTACT_TEST_NAME, name.toString());
                doneName = true;
                break;
            case VCARD_NICKNAME:
                assertEquals(personId, detailId.longValue());
                assertEquals(ADD_CONTACT_TEST_NAME, detail.nativeVal1);
                assertEquals(ADD_CONTACT_TEST_NAME, detail.getValue());
                doneNickname = true;
                break;
            case VCARD_NOTE:
                assertEquals(personId, detailId.longValue());
                assertEquals(ADD_CONTACT_TEST_NOTE, detail.nativeVal1);
                assertEquals(ADD_CONTACT_TEST_NOTE, detail.getValue());
                doneNote = true;
                break;
            case VCARD_PHONE:
                if (detailId.longValue() == phoneId1) {
                    donePhone1 = true;
                    assertEquals(ADD_PHONE_TEST1, detail.nativeVal1);
                    assertEquals(ADD_PHONE_TEST1, detail.getValue());
                    assertEquals(ADD_PHONE_PEOPLE_TYPE_TEST1, detail.keyType);
                    assertEquals(Integer.valueOf(ContactDetail.ORDER_NORMAL), detail.order);
                } else if (detailId.longValue() == phoneId2) {
                    donePhone2 = true;
                    assertEquals(ADD_PHONE_TEST2, detail.nativeVal1);
                    assertEquals(ADD_PHONE_TEST2, detail.getValue());
                    assertEquals(ADD_PHONE_PEOPLE_TYPE_TEST2, detail.keyType);
                    assertEquals(Integer.valueOf(ContactDetail.ORDER_PREFERRED), detail.order);
                } else if (detailId.longValue() == phoneId3) {
                    donePhone3 = true;
                    assertEquals(ADD_PHONE_TEST3, detail.nativeVal1);
                    assertEquals(ADD_PHONE_TEST3, detail.getValue());
                    assertEquals(ADD_PHONE_PEOPLE_TYPE_TEST3, detail.keyType);
                    assertEquals(Integer.valueOf(ContactDetail.ORDER_NORMAL), detail.order);
                } else {
                    fail("Unknown phone number in people contact: ID:" + detailId + " does not match " + phoneId1 + "," + phoneId2 + "," + phoneId3);
                }
                break;
            case VCARD_EMAIL:
                assertTrue(detailId != null);
                if (detailId.longValue() == cmId1) {
                    doneCm1 = true;
                    assertEquals(ADD_CM_TEST1, detail.nativeVal1);
                    assertEquals(String.valueOf(ADD_CM_TYPE_TEST1), detail.nativeVal2);
                    assertEquals(String.valueOf(ADD_CM_KIND_TEST1), detail.nativeVal3);
                    assertEquals(ADD_CM_TEST1, detail.getValue());
                    assertEquals(ADD_CM_PEOPLE_TYPE_TEST1, detail.keyType);
                } else {
                    fail("Unknown email in people contact");
                }
                break;
            case VCARD_ADDRESS:
                assertTrue(detailId != null);
                if (detailId.longValue() == cmId2) {
                    doneCm2 = true;
                    assertEquals(ADD_CM_TEST2, detail.nativeVal1);
                    assertEquals(String.valueOf(ADD_CM_TYPE_TEST2), detail.nativeVal2);
                    assertEquals(String.valueOf(ADD_CM_KIND_TEST2), detail.nativeVal3);
                    VCardHelper.PostalAddress address = detail.getPostalAddress();
                    assertTrue(address != null);
                    assertEquals(ADD_CM_TEST2_ADDRESS1, address.addressLine1);
                    assertEquals(ADD_CM_TEST2_ADDRESS2, address.addressLine2);
                    assertEquals(ADD_CM_TEST2_ADDRESS_CITY, address.city);
                    assertEquals(ADD_CM_TEST2_ADDRESS_COUNTY, address.county);
                    assertEquals(ADD_CM_TEST2_ADDRESS_POSTCODE, address.postCode);
                    assertEquals(ADD_CM_TEST2_ADDRESS_COUNTRY, address.country);
                    assertEquals(ADD_CM_PEOPLE_TYPE_TEST2, detail.keyType);
                } else {
                    fail("Unknown address in people contact");
                }
                break;
            case VCARD_ORG:
                assertTrue(detailId != null);
                if (detailId.longValue() == orgId1) {
                    doneOrg1 = true;
                    assertEquals(ADD_ORG_COMPANY_TEST1, detail.nativeVal1);
                    assertEquals(String.valueOf(ADD_ORG_TYPE_TEST1), detail.nativeVal3);
                    VCardHelper.Organisation org = detail.getOrg();
                    assertTrue(org != null);
                    assertEquals(0, org.unitNames.size());
                    assertEquals(ADD_ORG_COMPANY_TEST1, org.name);
                    assertEquals(ADD_ORG_PEOPLE_TYPE_TEST1, detail.keyType);
                } else {
                    fail("Unknown organisation in people contact");
                }
                break;
            case VCARD_TITLE:
                assertTrue(detailId != null);
                if (detailId.longValue() == orgId1) {
                    doneTitle1 = true;
                    assertEquals(ADD_ORG_TITLE_TEST1, detail.nativeVal1);
                    assertEquals(ADD_ORG_TITLE_TEST1, detail.getValue());
                } else {
                    fail("Unknown title in people contact");
                }
                break;
            default:
                fail("Unexpected detail in people contact: " + detail.key);
        }
    }
    assertTrue("Name was missing", doneName);
    assertTrue("Nickname was missing", doneNickname);
    assertTrue("Note was missing", doneNote);
    assertTrue("Phone1 was missing", donePhone1);
    assertTrue("Phone2 was missing", donePhone2);
    assertTrue("Phone3 was missing", donePhone3);
    assertTrue("Email was missing", doneCm1);
    assertTrue("Address was missing", doneCm2);
    assertTrue("Organisation was missing", doneOrg1);
    assertTrue("Title was missing", doneTitle1);
    nativeCursor.close();
    peopleCursor.close();
    Log.i(LOG_TAG, "*************************************************************************");
    Log.i(LOG_TAG, fnName + " has completed successfully");
    Log.i(LOG_TAG, "*************************************************************************");
    Log.i(LOG_TAG, "");
}
Also used : ContentValues(android.content.ContentValues) ContactSummary(com.vodafone360.people.datatypes.ContactSummary) Cursor(android.database.Cursor) Uri(android.net.Uri) Contact(com.vodafone360.people.datatypes.Contact) ContactDetail(com.vodafone360.people.datatypes.ContactDetail) ServiceStatus(com.vodafone360.people.service.ServiceStatus) VCardHelper(com.vodafone360.people.datatypes.VCardHelper) Suppress(android.test.suitebuilder.annotation.Suppress) MediumTest(android.test.suitebuilder.annotation.MediumTest)

Aggregations

ContactSummary (com.vodafone360.people.datatypes.ContactSummary)18 ServiceStatus (com.vodafone360.people.service.ServiceStatus)18 Contact (com.vodafone360.people.datatypes.Contact)15 ContactDetail (com.vodafone360.people.datatypes.ContactDetail)9 Cursor (android.database.Cursor)8 Suppress (android.test.suitebuilder.annotation.Suppress)8 ContentValues (android.content.ContentValues)7 MediumTest (android.test.suitebuilder.annotation.MediumTest)6 Uri (android.net.Uri)5 VCardHelper (com.vodafone360.people.datatypes.VCardHelper)4 SmallTest (android.test.suitebuilder.annotation.SmallTest)3 SQLException (android.database.SQLException)2 SQLiteDatabase (android.database.sqlite.SQLiteDatabase)2 LargeTest (android.test.suitebuilder.annotation.LargeTest)2 User (com.vodafone360.people.engine.presence.User)2 Hashtable (java.util.Hashtable)2 SQLiteException (android.database.sqlite.SQLiteException)1 SQLiteStatement (android.database.sqlite.SQLiteStatement)1 ActivityContact (com.vodafone360.people.datatypes.ActivityContact)1 ActivityItem (com.vodafone360.people.datatypes.ActivityItem)1