contacts coding help

satya - Wednesday, November 03, 2010 1:53:10 PM

account manager api

account manager api

satya - Wednesday, November 03, 2010 1:56:21 PM

account api

account api

satya - Wednesday, November 03, 2010 3:02:41 PM

read accounts


public void testAccounts()
{
    AccountManager am = AccountManager.get(this.mContext); 
    Account[] accounts = am.getAccounts();
    for(Account ac: accounts)
    {
        String acname=ac.name;
        String actype = ac.type;
        this.mReportTo.reportBack(tag,acname + ":" + actype);
    }
}

satya - Wednesday, November 03, 2010 3:03:13 PM

You need thsi permission


<uses-permission android:name="android.permission.GET_ACCOUNTS"/>

satya - Wednesday, November 03, 2010 3:03:59 PM

contactscontract api

contactscontract api

satya - Wednesday, November 03, 2010 3:06:21 PM

contact uri: Reading a set of contacts

contact uri

satya - Wednesday, November 03, 2010 3:34:37 PM

Here is how to print all the columns from a URI


private void printCursorColumnNames(Cursor c)
{
    int count = c.getColumnCount();
    StringBuffer cnamesBuffer = new StringBuffer();
    for (int i=0;i<count;i++)
    {
        String cname = c.getColumnName(i);
        cnamesBuffer.append(cname).append(';');
    }
    this.mReportTo.reportBack(tag,cnamesBuffer.toString());
}
private Cursor getContacts()
{
    // Run query
    Uri uri = ContactsContract.Contacts.CONTENT_URI;
    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME 
                         + " COLLATE LOCALIZED ASC";
    Activity a = (Activity)this.mContext;
    return a.managedQuery(uri, null, null, null, sortOrder);
}

Notice how the projection is passed as null. Subsequently we go after the column count and column names based on index. Useful for debugging.

satya - Wednesday, November 03, 2010 5:07:39 PM

Here are all the fields from the cotnact URI above


times_contacted;
contact_status;
custom_ringtone;
has_phone_number;
phonetic_name;
phonetic_name_style;
contact_status_label;
lookup;
contact_status_icon;
last_time_contacted;
display_name;
sort_key_alt;
in_visible_group;
_id;
starred;
sort_key;
display_name_alt;
contact_presence;
display_name_source;
contact_status_res_package;
contact_status_ts;
photo_id;
send_to_voicemail;

satya - Wednesday, November 03, 2010 9:23:49 PM

Source code of viewcontactactivity

Source code of viewcontactactivity

Hoping to find the answer to how contacts are aggregated

satya - Wednesday, November 03, 2010 9:49:36 PM

Looks like that was the old version. Here is the 2.0 source code

Looks like that was the old version. Here is the 2.0 source code

satya - Wednesday, November 03, 2010 10:58:00 PM

Here is the source code for the contacts provider

Here is the source code for the contacts provider

satya - Monday, November 08, 2010 11:39:21 AM

How to read an android aggregated contact

How to read an android aggregated contact

Search for: How to read an android aggregated contact

satya - Monday, November 08, 2010 11:39:58 AM

How can I construct an android contact lookup uri

How can I construct an android contact lookup uri

Search for: How can I construct an android contact lookup uri

satya - Monday, November 08, 2010 11:41:30 AM

How can I read various raw contact ids based on an aggregated contact

How can I read various raw contact ids based on an aggregated contact

Search for: How can I read various raw contact ids based on an aggregated contact

satya - Monday, November 08, 2010 11:42:13 AM

How does the contacts application fire off the lookup uri

How does the contacts application fire off the lookup uri

Search for: How does the contacts application fire off the lookup uri

satya - Monday, November 08, 2010 11:43:07 AM

Does the contacts application read the raw contacts for displaying an aggregated contact

Does the contacts application read the raw contacts for displaying an aggregated contact

Search for: Does the contacts application read the raw contacts for displaying an aggregated contact

satya - Monday, November 08, 2010 11:49:49 AM

Read up on contact lookup uri

Read up on contact lookup uri

satya - Tuesday, November 09, 2010 10:52:02 AM

Here is the structure of the contact uri


Contact name: 
C3-first C3-last

lookup url:
content://com.android.contacts/contacts/lookup
/2582r3-302982363C4E5052302982422C5052

The last part of this url is the lookup key for that contact

satya - Tuesday, November 09, 2010 10:53:38 AM

Getting a lookup key from the cursor


private String getLookupKey(Cursor cc)
{
 int lookupkeyIndex = 
    cc.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY);
 return cc.getString(lookupkeyIndex);
}

satya - Tuesday, November 09, 2010 10:55:33 AM

Constructing a lookup uri to lookup an aggregated contact


private String getLookupUri(String lookupkey)
{
    String luri = 
       ContactsContract.Contacts.CONTENT_LOOKUP_URI + "/" + lookupkey;
    return luri;
}

satya - Tuesday, November 09, 2010 11:26:35 AM

The lookup uri cursor seem to be identical to the list of contacts cursor


times_contacted;
contact_status;
custom_ringtone;
has_phone_number;
phonetic_name;
phonetic_name_style;
contact_status_label;
lookup;
contact_status_icon;
last_time_contacted;
display_name;
sort_key_alt;
in_visible_group;
_id;
starred;
sort_key;
display_name_alt;
contact_presence;
display_name_source;
contact_status_res_package;
contact_status_ts;
photo_id;
send_to_voicemail;

satya - Tuesday, November 09, 2010 2:00:01 PM

managedquery arguments


uri
projection
selection
selectionargs
sortorder

satya - Tuesday, November 09, 2010 3:15:26 PM

Column names from a raw contact uri


times_contacted;
 phonetic_name;
 phonetic_name_style;
 contact_id;version;
 last_time_contacted;
 aggregation_mode;
 _id;
 name_verified;
 display_name_source;
 dirty;
 send_to_voicemail;
 account_type;
 custom_ringtone;
 sync4;sync3;sync2;sync1;
 deleted;
 account_name;
 display_name;
 sort_key_alt;
 starred;
 sort_key;
 display_name_alt;
 sourceid;

satya - Wednesday, November 10, 2010 10:03:35 AM

Example of an aggregated contact


public class AggregatedContact 
{
    public String id;
    public String lookupUri;
    public String lookupKey;
    public String displayName;
    
    public void fillinFrom(Cursor c)
    {
        id = Utils.getColumnValue(c,"_ID");
        lookupKey = Utils.getColumnValue(c,ContactsContract.Contacts.LOOKUP_KEY);
        lookupUri = ContactsContract.Contacts.CONTENT_LOOKUP_URI + "/" + lookupKey;
        displayName = Utils.getColumnValue(c,ContactsContract.Contacts.DISPLAY_NAME);
    }
}

satya - Wednesday, November 10, 2010 10:04:49 AM

Example of a raw contact


public class RawContact 
{
    public String rawContactId;
    public String aggregatedContactId;
    public String accountName;
    public String accountType;
    public String displayName;
    
    public void fillinFrom(Cursor c)
    {
        rawContactId = Utils.getColumnValue(c,"_ID");
        accountName = Utils.getColumnValue(c,ContactsContract.RawContacts.ACCOUNT_NAME);
        accountType = Utils.getColumnValue(c,ContactsContract.RawContacts.ACCOUNT_TYPE);
        aggregatedContactId = Utils.getColumnValue(c,ContactsContract.RawContacts.CONTACT_ID);
        displayName = Utils.getColumnValue(c,"display_name");
    }
    public String toString()
    {
        return displayName
            + "/" + accountName + ":" + accountType
            + "/" + rawContactId
            + "/" + aggregatedContactId;
    }
}

satya - Wednesday, November 10, 2010 10:23:39 AM

So here is one important cursor: RawContactEntity


data_version;
contact_id;
version;
data12;data11;data10;
mimetype;
res_package;
_id;
data15;data14;data13;
name_verified;
is_restricted;
is_super_primary;
data_sync1;dirty;data_sync3;data_sync2;
data_sync4;account_type;data1;sync4;sync3;
data4;sync2;data5;sync1;
data2;data3;data8;data9;
deleted;
group_sourceid;
data6;data7;
account_name;
data_id;
starred;
sourceid;
is_primary;