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;
}
}
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;
}
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;
}
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;
}
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, "");
}
Aggregations