blob: de0dd51a285861e0050db802ba95d33005b95aa9 [file] [log] [blame]
package org.sflphone.loaders;
import java.util.ArrayList;
import org.sflphone.model.CallContact;
import android.content.AsyncTaskLoader;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.SipAddress;
import android.provider.ContactsContract.Contacts;
public class ContactsLoader extends AsyncTaskLoader<Bundle> {
// private static final String TAG = ContactsLoader.class.getSimpleName();
// These are the Contacts rows that we will retrieve.
static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] { Contacts._ID, Contacts.DISPLAY_NAME, Contacts.PHOTO_ID, Contacts.LOOKUP_KEY, Contacts.STARRED };
static final String[] CONTACTS_PHONES_PROJECTION = new String[] { Phone.NUMBER, Phone.TYPE };
static final String[] CONTACTS_SIP_PROJECTION = new String[] { SipAddress.SIP_ADDRESS, SipAddress.TYPE };
String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND (" + Contacts.HAS_PHONE_NUMBER + "=1) AND (" + Contacts.DISPLAY_NAME + " != '' ))";
Uri baseUri;
public ContactsLoader(Context context, Uri u) {
super(context);
baseUri = u;
}
@Override
public Bundle loadInBackground() {
ArrayList<CallContact> contacts = new ArrayList<CallContact>();
ArrayList<CallContact> starred = new ArrayList<CallContact>();
Cursor result = getContext().getContentResolver().query(baseUri, CONTACTS_SUMMARY_PROJECTION, select, null,
Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
int iID = result.getColumnIndex(Contacts._ID);
int iName = result.getColumnIndex(Contacts.DISPLAY_NAME);
int iPhoto = result.getColumnIndex(Contacts.PHOTO_ID);
int iStarred = result.getColumnIndex(Contacts.STARRED);
CallContact.ContactBuilder builder = CallContact.ContactBuilder.getInstance();
while (result.moveToNext()) {
builder.startNewContact(result.getLong(iID), result.getString(iName), result.getLong(iPhoto));
// Cursor cPhones = getContext().getContentResolver().query(Phone.CONTENT_URI, CONTACTS_PHONES_PROJECTION,
// Phone.CONTACT_ID + " =" + result.getLong(iID), null, null);
// while (cPhones.moveToNext()) {
// builder.addPhoneNumber(cPhones.getString(cPhones.getColumnIndex(Phone.NUMBER)), cPhones.getInt(cPhones.getColumnIndex(Phone.TYPE)));
//// Log.i(TAG,"Phone:"+cPhones.getString(cPhones.getColumnIndex(Phone.NUMBER)));
// }
// cPhones.close();
//
// Cursor cSip = getContext().getContentResolver().query(Phone.CONTENT_URI, CONTACTS_SIP_PROJECTION,
// Phone.CONTACT_ID + "=" + result.getLong(iID), null, null);
//
// while (cSip.moveToNext()) {
// builder.addSipNumber(cSip.getString(cSip.getColumnIndex(SipAddress.SIP_ADDRESS)), cSip.getInt(cSip.getColumnIndex(SipAddress.TYPE)));
//// Log.i(TAG,"Phone:"+cSip.getString(cSip.getColumnIndex(SipAddress.SIP_ADDRESS)));
// }
// cSip.close();
contacts.add(builder.build());
if (result.getInt(iStarred) == 1) {
starred.add(builder.build());
}
}
result.close();
Bundle toReturn = new Bundle();
toReturn.putParcelableArrayList("Contacts", contacts);
toReturn.putParcelableArrayList("Starred", starred);
return toReturn;
}
}