package cri.sanity.util; import java.util.Map; import java.util.TreeMap; import android.database.Cursor; import android.provider.ContactsContract.Data; import android.provider.ContactsContract.Groups; import android.provider.ContactsContract.CommonDataKinds.GroupMembership; import cri.sanity.A; public final class Contacts { public static final int GRP_ID = 0; public static final int GRP_TITLE = 1; public static final int GRP_SID = 2; public static final int GRP_ACC = 3; //--- public api public static final Map<String,String> groups() { Map<String,String> map = new TreeMap<String,String>(); Cursor c = A.resolver().query(Groups.CONTENT_URI, new String[]{ Groups._ID, Groups.TITLE }, null, null, null); if(c.moveToFirst()) { final int colId = c.getColumnIndex(Groups._ID); final int colTitle = c.getColumnIndex(Groups.TITLE); do { final String id = c.getString(colId); if(id == null) continue; map.put(id, adjustTitle(c.getString(colTitle))); } while(c.moveToNext()); } c.close(); return map; } public static final String[][] fullGroups() { Cursor c = A.resolver().query(Groups.CONTENT_URI, new String[]{ Groups._ID, Groups.TITLE, Groups.SYSTEM_ID, Groups.ACCOUNT_NAME }, null, null, null ); String[][] res = new String[c.getCount()][]; if(c.moveToFirst()) { final int colId = c.getColumnIndex(Groups._ID); final int colTitle = c.getColumnIndex(Groups.TITLE); final int colSid = c.getColumnIndex(Groups.SYSTEM_ID); final int colAcc = c.getColumnIndex(Groups.ACCOUNT_NAME); int i = -1; do { final String id = c.getString(colId ); if(id == null) continue; res[++i] = new String[]{ id, adjustTitle(c.getString(colTitle)), c.getString(colSid), adjustAcc(c.getString(colAcc)) }; } while(c.moveToNext()); } c.close(); return res; } public static final String[] groups(String idContact) { Cursor c = A.resolver().query(Data.CONTENT_URI, new String[]{ GroupMembership.GROUP_ROW_ID }, "contact_id="+idContact+" AND mimetype='vnd.android.cursor.item/group_membership'", null, null ); String[] groups = new String[c.getCount()]; if(c.moveToFirst()) { final int col = c.getColumnIndex(GroupMembership.GROUP_ROW_ID); int i = -1; do { groups[++i] = c.getString(col); } while(c.moveToNext()); } c.close(); return groups; } //--- private apiù private static String adjustTitle(String title) { if(title == null) return ""; final int p = title.indexOf(':'); return p>0? title.substring(p+1).trim() : title; } private static String adjustAcc(String acc) { return acc==null || acc.indexOf('@')<0 ? "" : acc; } }