Skip to content Skip to sidebar Skip to footer

Filter Contacts Except Groups Of Account Type

I need to build a contact picker which list all phone's contact except an account type of contact. I did follow this way : Example the account type I want to remove from the list i

Solution 1:

I resolved by myself. I did flow this way :

public  Cursor getContactGroupIDs(String acountType, Context context){

    StringsortOrder= ContactsQuery.COLUMN_NAME + " COLLATE LOCALIZED ASC";

    Cursorcursor= context.getContentResolver().query(ContactsQuery.CONTENT_URI, 
            ContactsQuery.PROJECTION, ContactsQuery.SELECTION , null, sortOrder);

    return cursor;
}

privatebooleanisAccountType(Context context, String accountType, long id){
    Cursorcursor= context.getContentResolver().query(RawContactsQuery.CONTENT_URI, 
            RawContactsQuery.PROJECTION, RawContactsQuery.SELECTION , newString[]{id + "", accountType}, null);
    booleanresult= cursor.getCount() > 0;
    cursor.close();
    return result;
}

public List<PickerContactRow> getContactExceptGroup(Context context, String accountType){
    List<PickerContactRow> result = newArrayList<PickerContactRow>();

    Cursorcursor=this.getContactGroupIDs(accountType, context);
    EmailValidatorvalidator=newEmailValidator();

    intindexOfContactId= cursor.getColumnIndex(ContactsQuery.COLUMN_CONTACT_ID);
    intindexOfName= cursor.getColumnIndex(ContactsQuery.COLUMN_NAME);
    finalintcolumnGroup= cursor.getColumnIndex(ContactsQuery.DELETED);

    while (cursor.moveToNext()) {
        longid= cursor.getLong(indexOfContactId);
        if (!isAccountType(context, accountType, id)) 
        {
            //seen.add(contactID);PickerContactRowcontactRow=newPickerContactRow();
            contactRow.setId(id);
            contactRow.setName(cursor.getString(indexOfName));

            Log.v(TAG, "row : " + contactRow
                    + " value : " + cursor.getString(columnGroup));



            result.add(contactRow);
        }
    }
    cursor.close();
    return result;
}


finalpublicstaticclassContactsQuery {

    privateContactsQuery() {

    }

    publicstaticfinalStringCOLUMN_NAME= Contacts.DISPLAY_NAME;
    publicstaticfinalStringCOLUMN_ID= Contacts._ID;
    publicstaticfinalStringDELETED= Contacts.HAS_PHONE_NUMBER;
    publicstaticfinalStringCOLUMN_CONTACT_ID=  Contacts._ID;
    publicstaticfinalUriCONTENT_URI= Contacts.CONTENT_URI;
    publicstaticfinalStringSELECTION= COLUMN_NAME + " NOTNULL"
            + ") AND (" + COLUMN_NAME + " !=''"
             + ") AND (" + Contacts.HAS_PHONE_NUMBER + " =1";


    publicstaticfinal String[] PROJECTION =
            newString[] {COLUMN_NAME, COLUMN_CONTACT_ID, DELETED};

}


finalpublicstaticclassRawContactsQuery {

    privateRawContactsQuery() {

    }

    publicstaticfinalStringACCOUNT_TYPE= RawContacts.ACCOUNT_TYPE;
    publicstaticfinalStringCOLUMN_CONTACT_ID= RawContacts.CONTACT_ID;
    publicstaticfinalUriCONTENT_URI= RawContacts.CONTENT_URI;
    publicstaticfinalStringSELECTION= COLUMN_CONTACT_ID + "=?) AND (" + ACCOUNT_TYPE + " =?";

    publicstaticfinal String[] PROJECTION =
            newString[] {COLUMN_CONTACT_ID};

}

I see it quite slow, but I couldn't find out other approach.

Post a Comment for "Filter Contacts Except Groups Of Account Type"